Resultados preliminares

Población de estudio

Información sociodemográfica

Characteristic N = 2351
Total de personas 3.68 (1.62)
Agua para consumo
    Agua potable (o de red publica) 183 (78%)
    Cisterna de agua 40 (17%)
    Botellas (agua tratada) 5 (2.1%)
    Pileta Publica 3 (1.3%)
    Otro 3 (1.3%)
    Pozo (natural) 1 (0.4%)
Desague en el hogar
    Silo 133 (57%)
    Red pública de desagüe (Desagüe con tuberas) 101 (43%)
    Letrina 1 (0.4%)
Inseguridad alimentaria moderada-grave 158 (71%)
    Unknown 11
Localidad
    Espinarences 80 (34%)
    San Juan El Alto 58 (25%)
    Juan Velazco Alvarado 44 (19%)
    Nuevo Arequipa 36 (15%)
    Apurimeños 17 (7.2%)
1 Mean (SD); n (%)

Información del participante

Characteristic N = 3491
Edad 38 (16)
    Unknown 1
Sexo
    Femenino 220 (63%)
    Masculino 129 (37%)
Nivel Educativo
    Secundaria completa 101 (29%)
    Primaria incompleta 78 (22%)
    secundaria incompleta 64 (18%)
    Primaria completa 40 (11%)
    Estudio Técnico completa 28 (8.0%)
    Analfabeto 17 (4.9%)
    Estudio Técnico incompleto 14 (4.0%)
    Universidad incompleta 4 (1.1%)
    Universidad completa 3 (0.9%)
Ocupación
    Agricultura 129 (37%)
    Ama de casa 76 (22%)
    Estudiante 31 (8.9%)
    Comerciante/Vendedor 23 (6.6%)
    Otro 23 (6.6%)
    Obrero u operarios (construcción, maquinaria, carpintero) 22 (6.3%)
    Chofer 15 (4.3%)
    Ganadería 8 (2.3%)
    Desempleado 7 (2.0%)
    Administrador/Empresario 4 (1.1%)
    Jubilado 4 (1.1%)
    Profesional de educación 3 (0.9%)
    Trabaja y estudia 2 (0.6%)
    No aplica 2 (0.6%)
Estabilidad laboral
    Busca el trabajo día a día 95 (42%)
    Es temporal o por temporada 76 (33%)
    Es estable, tengo un trabajo permanente 57 (25%)
    Unknown 121
Seguro de salud
    SIS 244 (70%)
    No tengo ningún seguro 52 (15%)
    ESSALUD 38 (11%)
    No recuerda / no sabe 14 (4.0%)
    No quiso responder 1 (0.3%)
Primer idioma aprendido
    Quechua 205 (59%)
    Castellano 81 (23%)
    Castellano y quechua paralelamente 47 (13%)
    Aymara 10 (2.9%)
    Castellano y aymara paralelamente 6 (1.7%)
Idioma hablado actualmente
    Castellano y quechua: Ambos por igual 190 (54%)
    Sólo en castellano 141 (40%)
    Sólo en quechua 7 (2.0%)
    Mayormente en quechua 5 (1.4%)
    Castellano y aymara: Ambos por igual 5 (1.4%)
    Otros 1 (0.3%)
1 Mean (SD); n (%)

Push Factor y migración

Pull Factor y migración

Tenencia de animales

Dificultades luego de la migración

Agua para consumo

Desague

Centros educativos

Electricidad

Transporte

Programas Sociales

Delincuencia

Discriminación de los vecinos

Diarreas

Salud

Trato del personal de salud (PS)

Desplazamiento forzado

Desplazamiento forzado

Razones del desplazamiento forzado

Percepción de cambios en el CLIMA (antes de migrar)

Clima

Temperatura

Lluvias

Eventos Extremos

Patrones dietarios y migración

Antes de Migrar

Luego de la Migración

Percepción del estado nutricional

LS0tDQp0aXRsZTogIkVzdHVkaW8gTWlncmFudGVzIFBlZHJlZ2FsIg0KYXV0aG9yOiAiRXF1aXBvIEVuY3Vlc3RhcyAtIE9uZSBIZWFsdGggLSBTZWRlIEFSUSINCmRhdGU6ICIyMDI0LTEyLTE5Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogdW5pdGVkDQotLS0NCg0KIyAqKlJlc3VsdGFkb3MgcHJlbGltaW5hcmVzKioNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0NCg0KIyBMaW1waWFyIGVsIGVudG9ybm8sIGV4Y2VwdG8gYWxndW5hcyB2YXJpYWJsZXMgZXNwZWPDrWZpY2FzIHNpIGxhcyBodWJpZXJhDQpybShsaXN0ID0gc2V0ZGlmZihscygpLCBjKCkpKQ0KDQojIENhcmdhciBsaWJyZXLDrWFzIG5lY2VzYXJpYXMNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkoZ3QpICAgICAgICAgICMgUGFyYSBsYSBjcmVhY2nDs24gZGUgdGFibGFzDQpsaWJyYXJ5KGd0c3VtbWFyeSkgICAjIFBhcmEgbGEgY3JlYWNpw7NuIGRlIHRhYmxhcw0KbGlicmFyeShjaVRvb2xzKSAgICAgIyBHZW5lcmFjacOzbiBkZSBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YQ0KbGlicmFyeShzYW5kd2ljaCkgICAgIyBGdW5jacOzbiBkZSBtZWpvcmEgZW4gbGEgZXN0aW1hY2nDs24gZGUgcmVncmVzacOzbiANCmxpYnJhcnkoSG1pc2MpDQpsaWJyYXJ5KGZsZXh0YWJsZSkgICAjIEdlbmVyYXIgYXJjaGl2b3MgZGUgbGFzIHRhYmxhcw0KbGlicmFyeShmb3JjYXRzKSAgICAgIyBPcmRlbmFyIGNhdGVnb3LDrWFzIGRlIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KDQojIExpbXBpYXIgbGEgY29uc29sYQ0KY2F0KCJcMDE0IikNCg0KIyBSdXRhIGRlbCBhcmNoaXZvLCBjb21wdXRhZG9yYSBNaWd1ZWwNCiNmaWxlX3BhdGggPC0gIkM6L1VzZXJzL2FydHVyXzR5dWNmdG0vQm94L1Byb3llY3RvIGNsw61uaWNvIFBlZHJlZ2FsL01pZ3JhY2nDs24vZGF0YS9iYXNlIG1vZGlmaWNhZGEvQmFzZSBkZSBkYXRvcyBsaW1waWEgZW5jdWVzdGFzL2RhdGFfZW5jdWVzdGFzLlJEUyINCg0KIyAjICMgIyBSdXRhIGRlbCBhcmNoaXZvLCBjb21wdXRhZG9yYSBKb3JnZQ0KICAgZmlsZV9wYXRoIDwtICJDOi9Vc2Vycy9qb3JnZS9Cb3gvUFJPWSBFY2hpbm9jb2Njb3Npcy9QZWRyZWdhbCAtICBNaWdyYW50cy9Qcm95ZWN0byBjbMOtbmljbyBQZWRyZWdhbC9NaWdyYWNpw7NuL2RhdGEvYmFzZSBtb2RpZmljYWRhL0Jhc2UgZGUgZGF0b3MgbGltcGlhIGVuY3Vlc3Rhcy9kYXRhX2VuY3Vlc3Rhcy5SRFMiDQoNCg0KDQoNCiMgVmVyaWZpY2FyIHNpIGVsIGFyY2hpdm8gZXhpc3RlIGFudGVzIGRlIGltcG9ydGFybG8NCmlmIChmaWxlLmV4aXN0cyhmaWxlX3BhdGgpKSB7DQogIGRhdGFfZW5jdWVzdGFzIDwtIGltcG9ydChmaWxlX3BhdGgpDQp9IGVsc2Ugew0KICBzdG9wKHBhc3RlKCLCoUFyY2hpdm8gbm8gZW5jb250cmFkbyEiLCBmaWxlX3BhdGgpKQ0KfQ0KDQpgYGANCg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KI3RhYmxlKGRhdGFfZW5jdWVzdGFzJHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCkNCg0KZGF0YV9ob2dhciA8LSBkYXRhX2VuY3Vlc3RhcyAlPiUNCiAgc2VsZWN0KHJlY29yZF9pZDpob2dhcl9jb21wbGV0ZSwgcmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50LmZhY3Rvcjpob2dhcl9jb21wbGV0ZS5mYWN0b3IpICU+JQ0KICBmaWx0ZXIocmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50ID09ICJpbmZvcm1hY2lvbl9ob2dhciIpDQoNCmRhdGFfYWR1bHRvIDwtIGRhdGFfZW5jdWVzdGFzICU+JQ0KICBzZWxlY3QocmVjb3JkX2lkLCByZWRjYXBfcmVwZWF0X2luc3RydW1lbnQsIGFkdWx0b19pbmRpdmlkdWFsX3RpbWVzdGFtcDpkZXBhX3Zpdl9fXzY2LCBkZXBhX2FkZDpkZXBhX19fMjUsIG9jdXBhX21pZ3JhOmFkdWx0b19pbmRpdmlkdWFsX2NvbXBsZXRlLCBzZXhvX3BhcnRpY2lwYW50ZS5mYWN0b3I6ZGVwYV92aXZfX182Ni5mYWN0b3IsIG9jdXBhX21pZ3JhLmZhY3RvcjphZHVsdG9faW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IpICU+JQ0KICBmaWx0ZXIocmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50ID09ICJhZHVsdG9faW5kaXZpZHVhbCIpDQoNCmRhdGFfbWVub3IgPC0gZGF0YV9lbmN1ZXN0YXMgJT4lDQogIHNlbGVjdChyZWNvcmRfaWQsIHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCwgbWVub3JfaW5kaXZpZHVhbF90aW1lc3RhbXA6ZGVwYV92aXZfbV9fXzY2LCBkZXBhX2FkZF9tOmRlcGFfbV9fXzI1LCBvY3VwYV9taWdyYV9tOm1lbm9yX2luZGl2aWR1YWxfY29tcGxldGUsIHNleG9fcGFydGljaXBhbnRlX20uZmFjdG9yOmRlcGFfdml2X21fX182Ni5mYWN0b3IsIG9jdXBhX21pZ3JhX20uZmFjdG9yOm1lbm9yX2luZGl2aWR1YWxfY29tcGxldGUuZmFjdG9yKSAlPiUNCiAgZmlsdGVyKHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCA9PSAibWVub3JfaW5kaXZpZHVhbCIpDQoNCiMgRWxpbWluYW5kbyBjYXJhY3RlciAiX20iIGRlIGxhcyB2YXJpYWJsZXMgZGUgZGF0YV9tZW5vciBwYXJhIHF1ZSBzZWFuIHBhcnRlY2lkb3MgYSB2YXJpYWJsZXMgZGUgZGF0YV9hZHVsdG8NCmNvbG5hbWVzKGRhdGFfbWVub3IpIDwtIGdzdWIoIl9tIiwgIiIsIGNvbG5hbWVzKGRhdGFfbWVub3IpKQ0KDQojZ2xpbXBzZShzZWxlY3QoZGF0YV9tZW5vciwgY29udGFpbnMoIm9jdXBhaWciKSkpDQojZ2xpbXBzZShzZWxlY3QoZGF0YV9tZW5vciwgY29udGFpbnMoImdyYV9wb3QiKSkpDQoNCiMgQ29ycmlnaWVuZG8gY2FyYWN0ZXJlcyBkZSB2YXJpYWJsZXMgcGFyYSBxdWUgZXN0ZSBsaXN0byBwYXJhIHVuaXIgZGF0YV9hZHVsdG8geSBkYXRhX21lbm9yDQpjb2xuYW1lcyhkYXRhX21lbm9yKSA8LSBnc3ViKCJvY3VwYWlncmEiLCAib2N1cGFfbWlncmEiLCBjb2xuYW1lcyhkYXRhX21lbm9yKSkNCmNvbG5hbWVzKGRhdGFfbWVub3IpIDwtIGdzdWIoIm1pZ3JhX3BvdGl2byIsICJtaWdyYV9wX21vdGl2byIsIGNvbG5hbWVzKGRhdGFfbWVub3IpKQ0KDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBpbmRpdmlkdWFsX3RpbWVzdGFtcCA9IG1lbm9yX2luZGl2aWR1YWxfdGltZXN0YW1wKQ0KZGF0YV9hZHVsdG8gPC0gcmVuYW1lKGRhdGFfYWR1bHRvLCBpbmRpdmlkdWFsX3RpbWVzdGFtcCA9IGFkdWx0b19pbmRpdmlkdWFsX3RpbWVzdGFtcCkNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGRhdGVfYSA9IGRhdGUpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBvY3VwYV9taWdyYV9tb2RlID0gb2N1cGFfbWlncmFvZGUpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBjYW1iX21lbmVzID0gY2FtYmVuZXMpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBjYW1iX21lbmVzLmZhY3RvciA9IGNhbWJlbmVzLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGNvbWVudF9hID0gY29tZW50KQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgcF9pbmRpdmlkdWFsX2NvbXBsZXRlID0gbWVub3JfaW5kaXZpZHVhbF9jb21wbGV0ZSkNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIHBfaW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IgPSBtZW5vcl9pbmRpdmlkdWFsX2NvbXBsZXRlLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIG9jdXBhY2lvbl9tb2RlID0gb2N1cGFjaW9ub2RlKQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgb2N1cGFjaW9uX21vZGUuZmFjdG9yID0gb2N1cGFjaW9ub2RlLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIG9jdXBhX21pZ3JhX21vZGUuZmFjdG9yID0gb2N1cGFfbWlncmFvZGUuZmFjdG9yKQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgaG9tZV9jb21wX2FuaW1fYW50ZXNfdGlwbyA9IGhvbWVfd29ya19hbmltX2FfdGlwbykNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGhvbWVfY29tcF9hbmltX2FudGVzX3RpcG8uZmFjdG9yID0gaG9tZV93b3JrX2FuaW1fYV90aXBvLmZhY3RvcikNCmRhdGFfYWR1bHRvIDwtIHJlbmFtZShkYXRhX2FkdWx0bywgcF9pbmRpdmlkdWFsX2NvbXBsZXRlID0gYWR1bHRvX2luZGl2aWR1YWxfY29tcGxldGUpDQpkYXRhX2FkdWx0byA8LSByZW5hbWUoZGF0YV9hZHVsdG8sIHBfaW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IgPSBhZHVsdG9faW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IpDQpkYXRhX2FkdWx0byRkYXRlX2EgPC0gYXMuY2hhcmFjdGVyKGRhdGFfYWR1bHRvJGRhdGVfYSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjQikgVW5pZW5kbyBkYXRhIGRlIGFkdWx0byB5IG1lbm9yLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCg0KIyBIb21lZ2VuaXphbmRvIGxhYmVsZW9zIGRlIGxhcyB2YXJpYWJsZXMgZGUgYW1iYXMgYmFzZXMgZGUgZGF0b3MNCmRhdGFfYWR1bHRvIDwtIGRhdGFfYWR1bHRvICU+JSAgbXV0YXRlKGFjcm9zcyh3aGVyZSh+IGluaGVyaXRzKC4sICJsYWJlbGxlZCIpKSwgYXMuY2hhcmFjdGVyKSkgIyBDb252ZXJ0aXIgY29sdW1uYXMgbGFiZWxsZWQgZW4gZGF0YV9hZHVsdG8NCmRhdGFfbWVub3IgPC0gZGF0YV9tZW5vciAlPiUgIG11dGF0ZShhY3Jvc3Mod2hlcmUofiBpbmhlcml0cyguLCAibGFiZWxsZWQiKSksIGFzLmNoYXJhY3RlcikpICMgQ29udmVydGlyIGNvbHVtbmFzIGxhYmVsbGVkIGVuIGRhdGFfbWVub3INCg0KIyBVbmllbmRvIGRhdGENCmRhdGFfaW5kaXZpZHVhbCA8LSBiaW5kX3Jvd3MoZGF0YV9hZHVsdG8sIGRhdGFfbWVub3IpDQpybShkYXRhX2FkdWx0bywgZGF0YV9tZW5vcikNCg0KDQoNCiMgQ29tcHJvYmFuZG8gc2kgaGF5IHZhcmlhYmxlcyBxdWUgbm8gaGFuIGFwcGVuZWFkbyBiaWVuDQojY29sdW1uYXNfYWR1bHRvIDwtIGNvbG5hbWVzKGRhdGFfYWR1bHRvKQ0KI2NvbHVtbmFzX2luZGl2aWR1YWwgPC0gY29sbmFtZXMoZGF0YV9pbmRpdmlkdWFsKQ0KI2FkaWNpb25hbGVzX2luZGl2aWR1YWwgPC0gc2V0ZGlmZihjb2x1bW5hc19pbmRpdmlkdWFsLCBjb2x1bW5hc19hZHVsdG8pDQojYWRpY2lvbmFsZXNfYWR1bHRvIDwtIHNldGRpZmYoY29sdW1uYXNfYWR1bHRvLCBjb2x1bW5hc19pbmRpdmlkdWFsKQ0KI2NhdCgiVmFyaWFibGVzIGFkaWNpb25hbGVzIGVuIGRhdGFfaW5kaXZpZHVhbDpcbiIpDQojcHJpbnQoYWRpY2lvbmFsZXNfaW5kaXZpZHVhbCkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjQykgVW5pZW5kbyBkYXRhIGhvZ2FyIGUgaW5kaXZpZHVhbC0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQpkYXRhX2luZGl2aWR1YWxfaG9nYXIgPC0gZGF0YV9pbmRpdmlkdWFsICU+JQ0KICBsZWZ0X2pvaW4oZGF0YV9ob2dhciwgYnkgPSAicmVjb3JkX2lkIikNCg0Kcm0oZGF0YV9pbmRpdmlkdWFsKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNEKSBBZGl0aW9uYWwgZGF0YSBjbGVhbmluZy0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQojIyMNCiMgSW5mb3JtYWNpw7NuIGRlIGxvY2FsaWRhZGVzDQoNCiNkYXRhX2hvZ2FyICU+JQ0KIyAgZmlsdGVyKGxvY2FsaWRhZC5mYWN0b3I9PSAiT3RybyAoRXNwZWNpZmljYXIpIikgJT4lIA0KIyAgc2VsZWN0KHJlY29yZF9pZCwgbG9jYWxpZGFkLCBsb2NhbGlkYWQuZmFjdG9yICkgDQoNCiNkYXRhX2hvZ2FyICU+JQ0KIyAgZmlsdGVyKGxvY2FsaWRhZD09IDgpICU+JSANCiMgIHNlbGVjdChsb2NhbGlkYWQsIGxvY2FsaWRhZC5mYWN0b3IgKSAlPiUgIHNhbXBsZV9uKDgpDQoNCg0KIyBSZWFzaWduYXIgbG9zIHZhbG9yZXMgZGUgbG9jYWxpZGFkLmZhY3RvciBkb25kZSBsb2NhbGlkYWQgPT0gOA0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUobG9jYWxpZGFkLmZhY3RvciA9IGlmZWxzZShsb2NhbGlkYWQgPT0gOCAmIGxvY2FsaWRhZC5mYWN0b3IgPT0gIk90cm8gKEVzcGVjaWZpY2FyKSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXB1cmltZcOxb3MiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGxvY2FsaWRhZC5mYWN0b3IpKSkgJT4lDQogIG11dGF0ZShsb2NhbGlkYWQuZmFjdG9yID0gZmFjdG9yKGxvY2FsaWRhZC5mYWN0b3IpKQ0KDQoNCg0KIyBFbGltaW5hciBsb3MgdmFsb3JlcyBlc3BlY8OtZmljb3MgZGUgcmVjb3JkX2lkIGVuIHVuIHNvbG8gcGFzbw0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIXJlY29yZF9pZCAlaW4lIGMoMjEsIDM0LCAxMDMsIDEwOSwgMTExLCAxMTgsIDE0OSwgMTU0LCAxNTUsIDE1NiwgMTU4LCAxNjAsIDE3NywgMTkxLCAyMzQsIDIzNSwgMjQwKSkNCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gDQojIE1pZWJyb3MgZGVsIGhvZ2FyDQoNCg0KDQpkYXRhX2hvZ2FyIDwtIGRhdGFfaG9nYXIgJT4lDQogIG11dGF0ZSgNCiAgICBtZW5vcl9lZGFkX2ggPSBjYXNlX3doZW4oDQogICAgICAjIENvbmRpY2nDs24gMTogSGF5IG1lbm9yZXMgZGUgZWRhZCBlbiBlbCBob2dhciBzaSBtZW5vcl81X2FsbCBvIGVfNl8xOCA+PSAxDQogICAgICAoIWlzLm5hKG1lbm9yXzVfYWxsKSAmIG1lbm9yXzVfYWxsID49IDEpIHwgKCFpcy5uYShlXzZfMTgpICYgZV82XzE4ID49IDEpIH4gMCwNCiAgICAgICMgQ29uZGljacOzbiAyOiBObyBoYXkgbWVub3JlcyBzaSBwZXJzb25hc19ob2dhciA+PSAxIHkgYW1iYXMgdmFyaWFibGVzIHNvbiBOQQ0KICAgICAgcGVyc29uYXNfaG9nYXIgPj0gMSAmIGlzLm5hKG1lbm9yXzVfYWxsKSAmIGlzLm5hKGVfNl8xOCkgfiAxLA0KICAgICAgIyBDb25kaWNpw7NuIDM6IE5vIGhheSBtZW5vcmVzIHNpIG1heW9yXzE4X2FsbCA+PSAxDQogICAgICAhaXMubmEobWF5b3JfMThfYWxsKSAmIG1heW9yXzE4X2FsbCA+PSAxIH4gMSwNCiAgICAgICMgQ29uZGljacOzbiBQcmVkZXRlcm1pbmFkYTogQXNpZ25hciBOQQ0KICAgICAgVFJVRSB+IE5BX3JlYWxfDQogICAgKQ0KICApDQoNCg0KIyBWZXJpZmljYXIgbGEgZGlzdHJpYnVjacOzbiBkZSBtZW5vcl9lZGFkX2gNCiN0YWJsZShkYXRhX2hvZ2FyJG1lbm9yX2VkYWRfaCwgdXNlTkEgPSAiYWx3YXlzIikNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KIyBJbnNlZ3VyaWRhZCBBbGltZW50YXJpYQ0KDQoNCiNnbGltcHNlKHNlbGVjdChkYXRhX2hvZ2FyLCBjb250YWlucygiaW5zZV9tIikpKQ0KDQoNCiMgRmlsdHJhciBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzDQp2YXJpYWJsZXNfaW50ZXJlcyA8LSBjKCJpbnNlX3ByZW9fYWxpIiwgImluc2Vfc2luX2FsaSIsICJpbnNlX25vX3NhbHUiLA0KICAgICAgICAgICAgICAgICAgICAgICAiaW5zZV9wb2NhX3ZhcmllIiwgImluc2VfZm9vZF9kZWpvIiwgImluc2VfZm9vZF9tZW5vcyIsDQogICAgICAgICAgICAgICAgICAgICAgICJpbnNlX2hhbV9ub19mb29kIiwgImluc2Vfb25lX2Zvb2QiLCAiaW5zZV9tX25vX3NhbHUiLCAiaW5zZV9tX3BvY2FfdmFyaWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAiaW5zZV9tX2Zvb2RfZGVqbyIsICJpbnNlX21fZm9vZF9tZW5vcyIsICJpbnNlX21fZm9vZF9kaXNtaSIsICJpbnNlX21faGFtX25vX2Zvb2QiLCAiaW5zZV9tX29uZV9mb29kIiApDQoNCg0KIyBQYXNvIDE6IENvbnZlcnRpciB2YWxvcmVzIGRpc3RpbnRvcyBkZSAxIHkgMiBlbiBOQQ0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUoYWNyb3NzKGFsbF9vZih2YXJpYWJsZXNfaW50ZXJlcyksIH4gaWZlbHNlKC4gJWluJSBjKDEsIDIsIE5BKSwgLiwgTkEpKSkNCg0KDQojdGFibGUoZGF0YV9ob2dhciRpbnNlX3ByZW9fYWxpKQ0KI3RhYmxlKGRhdGFfaG9nYXIkaW5zZV9tX29uZV9mb29kKQ0KDQoNCg0KIyBUcmFuc2Zvcm1hciB2YWxvcmVzIGRlIDEgYSAwIHkgdmFsb3JlcyBkZSAyIGEgMSBlbiBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzDQpkYXRhX2hvZ2FyIDwtIGRhdGFfaG9nYXIgJT4lDQogIG11dGF0ZShhY3Jvc3MoYWxsX29mKHZhcmlhYmxlc19pbnRlcmVzKSwgfiBjYXNlX3doZW4oDQogICAgLiA9PSAxIH4gMCwgICMgU2kgZWwgdmFsb3IgZXMgMSwgY2FtYmlhciBhIDANCiAgICAuID09IDIgfiAxLCAgIyBTaSBlbCB2YWxvciBlcyAyLCBjYW1iaWFyIGEgMQ0KICAgIFRSVUUgfiAuICAgICAjIE1hbnRlbmVyIGxvcyB2YWxvcmVzIHF1ZSBubyBzZWFuIDEgbmkgMiAoY29tbyBOQSkNCiAgKSkpDQoNCg0KDQojIFBhc28gMjogQ3JlYXIgbGEgdmFyaWFibGUgImluc2VfdmVyIg0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUoaW5zZV92ZXIgPSBpZmVsc2Uocm93U3Vtcyhpcy5uYShhY3Jvc3MoYWxsX29mKHZhcmlhYmxlc19pbnRlcmVzKSkpKSA9PSAwLCAxLCAwKSkNCiN0YWJsZShkYXRhX2hvZ2FyJGluc2VfdmVyLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQojIFBhc28gMzogQ29udGFyIGVsIHRvdGFsIGRlIE5BIGVuIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMNCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgbXV0YXRlKGluc2VfdmVyX25hID0gcm93U3Vtcyhpcy5uYShhY3Jvc3MoYWxsX29mKHZhcmlhYmxlc19pbnRlcmVzKSkpKSkNCiN0YWJsZShkYXRhX2hvZ2FyJGluc2VfdmVyX25hLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQoNCiMgUGFzbyA0OiBDcmVhciBsYSB2YXJpYWJsZSAiZm9vZF9pbnNlY3VyaXR5X3Njb3JlIg0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUoZm9vZF9pbnNlY3VyaXR5X3Njb3JlID0gcm93U3VtcyhhY3Jvc3MoYWxsX29mKHZhcmlhYmxlc19pbnRlcmVzKSksIG5hLnJtID0gVFJVRSkpDQoNCg0KDQoNCg0KIyBQYXNvIDU6IENyZWFyIGxhIHZhcmlhYmxlIGZvb2RfaW5zZWN1cml0eSBjb25zaWRlcmFuZG8gY29tcGxldGl0dWQgZGUgcmVzcHVlc3Rhcw0KDQoNCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgbXV0YXRlKGZvb2RfaW5zZWN1cml0eSA9IGNhc2Vfd2hlbigNCiAgICAjIEhvZ2FyZXMgY29uIG1lbm9yZXM6IFJlc3B1ZXN0YXMgY29tcGxldGFzICgxNSB2YXJpYWJsZXMpIHkgc2NvcmUgPj0gNg0KICAgIG1lbm9yX2VkYWRfaCA9PSAwICYgaW5zZV92ZXJfbmEgPT0gMCAmIGZvb2RfaW5zZWN1cml0eV9zY29yZSA+PSA2IH4gMSwNCiAgICBtZW5vcl9lZGFkX2ggPT0gMCAmIGluc2VfdmVyX25hID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPCA2IH4gMCwNCiAgICAjIEhvZ2FyZXMgc2luIG1lbm9yZXM6IFJlc3B1ZXN0YXMgY29tcGxldGFzICg4IHZhcmlhYmxlcykgeSBzY29yZSA+PSA0DQogICAgbWVub3JfZWRhZF9oID09IDEgJiByb3dTdW1zKGlzLm5hKGFjcm9zcyh2YXJpYWJsZXNfaW50ZXJlc1sxOjhdKSkpID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPj0gNCB+IDEsDQogICAgbWVub3JfZWRhZF9oID09IDEgJiByb3dTdW1zKGlzLm5hKGFjcm9zcyh2YXJpYWJsZXNfaW50ZXJlc1sxOjhdKSkpID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPCA0IH4gMCwNCiAgICAjIFNpIGxhcyByZXNwdWVzdGFzIG5vIGVzdMOhbiBjb21wbGV0YXMsIGFzaWduYXIgTkENCiAgICBUUlVFIH4gTkFfcmVhbF8NCiAgKSkNCg0KIyBEaXN0cmlidWNpw7NuIGRlIGZvb2RfaW5zZWN1cml0eQ0KI3RhYmxlKGRhdGFfaG9nYXIkZm9vZF9pbnNlY3VyaXR5LCB1c2VOQSA9ICJhbHdheXMiKQ0KDQoNCmBgYA0KDQoNCiMgIFBvYmxhY2nDs24gZGUgZXN0dWRpbw0KDQojIyMgSW5mb3JtYWNpw7NuIHNvY2lvZGVtb2dyw6FmaWNhDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNBKSBUYWJsYSAxOiBJbmZvcm1hY2nDs24gc29jaW9kZW1vZ3LDoWZpY2EgLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCg0KIyBJbmZvcm1hY2nDs24gZGVsIGhvZ2FyDQoNCiMgLSBUb3RhbCBwZXJzb25hcyBwb3IgaG9nYXINCiMgLSBIb2dhcmVzIGNvbiBtZW5vcmVzIGRlIDUgYcOxb3MNCiMgLSBIb2dhcmVzIGNvbiBtZW5vcmVzIGRlIDE4IGHDsW9zDQojIC0gQWd1YSBwYXJhIGJlYmVyIGRlIGRvbmRlIG9idGllbmUNCiMgLSBEZXNhZ3VlDQojIC0gSW5zZWd1cmlkYWQgYWxpbWVudGFyaWEgbW9kZXJhZGEtZ3JhdmUNCiMgLSBMb2NhbGlkYWRlcw0KDQoNCmRhdGFfdGFibGVfMSAgPC0gZGF0YV9ob2dhciAlPiUgIHNlbGVjdChwZXJzb25hc19ob2dhciwgaG9tZV93YXRlci5mYWN0b3IsIGhvbWVfZGVzYWd1ZV90aXBvLmZhY3RvciwgZm9vZF9pbnNlY3VyaXR5LCBsb2NhbGlkYWQuZmFjdG9yKQ0KI2dsaW1wc2UoZGF0YV9ob2dhcikNCiNnbGltcHNlKGRhdGFfdGFibGVfMSkNCg0KI3N0cihkYXRhX3RhYmxlXzEkcGVyc29uYXNfaG9nYXIpDQpkYXRhX3RhYmxlXzEkcGVyc29uYXNfaG9nYXIgPC0gYXMubnVtZXJpYyhkYXRhX3RhYmxlXzEkcGVyc29uYXNfaG9nYXIpDQpkYXRhX3RhYmxlXzEkcGVyc29uYXNfaG9nYXIgPC0gYXMubnVtZXJpYyhkYXRhX3RhYmxlXzEkcGVyc29uYXNfaG9nYXIpDQojZ2xpbXBzZShkYXRhX3RhYmxlXzEpDQoNCg0KZGF0YV90YWJsZV8xIDwtIGRhdGFfdGFibGVfMSAlPiUNCiAgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5mYWN0b3IpLCB+IGZjdF9kcm9wKGZjdF9pbmZyZXEoLikpKSkNCg0KDQp0YWJsYV8xIDwtIA0KICBkYXRhX3RhYmxlXzEgJT4lDQogIHRibF9zdW1tYXJ5KA0KICAgIGxhYmVsID0gbGlzdCgNCiAgICAgIHBlcnNvbmFzX2hvZ2FyIH4gIlRvdGFsIGRlIHBlcnNvbmFzIiwNCiAgICAgIGhvbWVfd2F0ZXIuZmFjdG9yIH4gIkFndWEgcGFyYSBjb25zdW1vIiwNCiAgICAgIGhvbWVfZGVzYWd1ZV90aXBvLmZhY3RvciB+ICJEZXNhZ3VlIGVuIGVsIGhvZ2FyIiwNCiAgICAgIGZvb2RfaW5zZWN1cml0eSAgfiAiSW5zZWd1cmlkYWQgYWxpbWVudGFyaWEgbW9kZXJhZGEtZ3JhdmUiLA0KICAgICAgbG9jYWxpZGFkLmZhY3RvciB+ICJMb2NhbGlkYWQiDQogICAgKSwNCiAgICB0eXBlID0gYyhwZXJzb25hc19ob2dhcikgfiAiY29udGludW91cyIsDQogICAgc3RhdGlzdGljID0gYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIg0KICApICU+JSANCiAgYm9sZF9sYWJlbHMoKSAlPiUgDQogIGl0YWxpY2l6ZV9sZXZlbHMoKQ0KDQp0YWJsYV8xDQoNCnJtKGRhdGFfdGFibGVfMSwgdGFibGFfMSkNCg0KYGBgDQoNCg0KIyMjIEluZm9ybWFjacOzbiBkZWwgcGFydGljaXBhbnRlDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KDQojIEluZm9ybWFjacOzbiBpbmRpdmlkdWFsDQoNCiMgLSBTZXhvDQojIC0gRWRhZCAtIHByb21lZGlvDQojIC0gRWRhZCAtIGdydXBvcyBkZSBlZGFkDQojIC0gTml2ZWwgZWR1Y2F0aXZvDQojIC0gT2N1cGFjacOzbg0KIyAtIEVzdGFiaWxpZGFkIGxhYm9yYWwNCiMgLSBUaXBvIGRlIHNlZ3Vybw0KIyAtIElkaW9tYSBhcHJlbmRpZG8gZW4gbGEgaW5mYWNpYQ0KIyAtIElkaW9tYSBoYWJsYWRvIGFjdHVhbG1lbnRlDQojIC0gUHJvY2VkZW5jaWEgLyBSZWdpw7NuIGRlIG5hY2ltaWVudG8NCiMgLSBQZXJjZXBjacOzbiBkZSBwZXNvIGNvcnBvcmFsIGFudGVzIGRlIG1pZ3Jhcg0KIyAtIFBlcmNlcGNpw7NuIGRlIHBlc28gY29ycG9yYWwgbHVlZ28gZGUgbWlncmFyDQoNCg0KDQojZ2xpbXBzZShkYXRhX2luZGl2aWR1YWxfaG9nYXIpDQpkYXRhX2luZGl2aWR1YWxfaG9nYXIkZWRhZF9wYXJ0aWNpcGFudGUgPC0gYXMubnVtZXJpYyhkYXRhX2luZGl2aWR1YWxfaG9nYXIkZWRhZF9wYXJ0aWNpcGFudGUpDQoNCiNnbGltcHNlKHNlbGVjdChkYXRhX2luZGl2aWR1YWxfaG9nYXIsIGNvbnRhaW5zKCJzZXgiKSkpDQoNCg0KZGF0YV90YWJsZV8yICA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lICBzZWxlY3QoZWRhZF9wYXJ0aWNpcGFudGUsIHNleG9fcGFydGljaXBhbnRlLmZhY3Rvciwgbml2ZWxfZWR1Y2F0aXZvLmZhY3Rvciwgb2N1cGFjaW9uLmZhY3Rvciwgb2N1cGFjaW9uX2VzdGFiLmZhY3Rvciwgc2VndXJvLmZhY3RvciwgIHBfY19wcmltZXJfaWRpb21hLmZhY3RvciAsIHBfY19jYXNhX2lkaW9tYS5mYWN0b3IgKQ0KI2dsaW1wc2UoZGF0YV90YWJsZV8yKQ0KDQoNCmRhdGFfdGFibGVfMiA8LSBkYXRhX3RhYmxlXzIgJT4lDQogIG11dGF0ZShhY3Jvc3Mod2hlcmUoaXMuZmFjdG9yKSwgfiBmY3RfZHJvcChmY3RfaW5mcmVxKC4pKSkpDQoNCg0KDQp0YWJsYV8yIDwtIA0KICBkYXRhX3RhYmxlXzIgJT4lDQogIHRibF9zdW1tYXJ5KA0KICAgIGxhYmVsID0gbGlzdCgNCiAgICAgIGVkYWRfcGFydGljaXBhbnRlIH4gIkVkYWQiLA0KICAgICAgc2V4b19wYXJ0aWNpcGFudGUuZmFjdG9yIH4gIlNleG8iLA0KICAgICAgbml2ZWxfZWR1Y2F0aXZvLmZhY3RvciB+ICJOaXZlbCBFZHVjYXRpdm8iLA0KICAgICAgb2N1cGFjaW9uLmZhY3RvciB+ICJPY3VwYWNpw7NuIiwNCiAgICAgIHNlZ3Vyby5mYWN0b3IgfiAiU2VndXJvIGRlIHNhbHVkIiwNCiAgICAgIHBfY19wcmltZXJfaWRpb21hLmZhY3RvciB+ICJQcmltZXIgaWRpb21hIGFwcmVuZGlkbyIsDQogICAgICBwX2NfY2FzYV9pZGlvbWEuZmFjdG9yIH4gIklkaW9tYSBoYWJsYWRvIGFjdHVhbG1lbnRlIiwNCiAgICAgIG9jdXBhY2lvbl9lc3RhYi5mYWN0b3IgfiAiRXN0YWJpbGlkYWQgbGFib3JhbCINCiAgICApLA0KICAgIHR5cGUgPSBjKGVkYWRfcGFydGljaXBhbnRlKSB+ICJjb250aW51b3VzIiwNCiAgICBzdGF0aXN0aWMgPSBhbGxfY29udGludW91cygpIH4gInttZWFufSAoe3NkfSkiDQogICkgJT4lIA0KICBib2xkX2xhYmVscygpICU+JSANCiAgaXRhbGljaXplX2xldmVscygpDQoNCnRhYmxhXzINCg0KYGBgDQoNCg0KIyMjIFB1c2ggRmFjdG9yIHkgbWlncmFjacOzbg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNGKSBSYXpvbmVzIHBvciBsYXMgcXVlIHNhbGllcm9uIGRlIHN1IGx1Z2FyIGRlIG9yaWdlbiAtLS0tDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0NCiMgUHJpbmNpcGFsZXMgcmF6b25lcyBwb3IgbGFzIHF1ZSBzYWxpZXJvbiBkZSBzdSBsdWdhciBkZSBvcmlnZW4NCm1pZ3JhX21vdGl2b19vcmlnZW4gPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoIm91dF9yYXpfbGVhdmVfb3JpX19fIikpDQoNCm5hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pW25hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pID09ICJvdXRfcmF6X2xlYXZlX29yaV9fXzEiXSA8LSAiRWR1Y2FjacOzbiINCm5hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pW25hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pID09ICJvdXRfcmF6X2xlYXZlX29yaV9fXzIiXSA8LSAiVHJhYmFqby1FY29ub23DrWEiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX18zIl0gPC0gIlNvY2lvY3VsdHVyYWxlcyINCm5hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pW25hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pID09ICJvdXRfcmF6X2xlYXZlX29yaV9fXzQiXSA8LSAiU2FsdWQiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX182NiJdIDwtICJPdHJvcyINCm5hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pW25hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pID09ICJvdXRfcmF6X2xlYXZlX29yaV9fXzk4Il0gPC0gIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCm5hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pW25hbWVzKG1pZ3JhX21vdGl2b19vcmlnZW4pID09ICJvdXRfcmF6X2xlYXZlX29yaV9fXzk5Il0gPC0gIk5vIHF1aXNvIHJlc3BvbmRlciINCg0KbWlncmFfbW90aXZvX29yaWdlbiA8LSBtaWdyYV9tb3Rpdm9fb3JpZ2VuICU+JQ0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgfiBzdW0oLiA9PSAxLCBuYS5ybSA9IFRSVUUpKSkgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJvcGNpb24iLCB2YWx1ZXNfdG8gPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBmaWx0ZXIoZnJlY3VlbmNpYSA+PSAxKSAlPiUgICMgRmlsdHJhciBzb2xvIG9wY2lvbmVzIGNvbiBmcmVjdWVuY2lhID49IDENCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gMzQ5ICogMTAwKSAgIyBVc2FyIDM0OSBjb21vIG4gdG90YWwNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KbWlncmFfb3JpZ2VuIDwtIGdncGxvdChtaWdyYV9tb3Rpdm9fb3JpZ2VuLCBhZXMoeCA9IGZjdF9yZW9yZGVyKG9wY2lvbiwgZnJlY3VlbmNpYSksIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gb3BjaW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDMuNSkgKyANCiAgbGFicyh0aXRsZSA9ICJSYXpvbmVzIHBvciBsYXMgcXVlIHNhbGllcm9uIGRlIHN1IGx1Z2FyIGRlIG9yaWdlbiIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiRnJlY3VlbmNpYSIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCAgIyBPY3VsdGEgbGEgbGV5ZW5kYQ0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgICMgQ2VudHJhIHkgZXN0aWxpemEgZWwgdMOtdHVsbw0KDQoNCm1pZ3JhX29yaWdlbg0KDQoNCmBgYA0KDQojIyMgUHVsbCBGYWN0b3IgeSBtaWdyYWNpw7NuDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjRykgUmF6b25lcyBwb3IgbGFzIGN1w6FsZXMgbGxlZ8OzIGFsIFBlZHJlZ2FsIC0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0NCiMgUHJpbmNpcGFsZXMgcmF6b25lcyBwb3IgbGFzIHF1ZSBsbGVnYXJvbiBhbCBwZWRyZWdhbA0KbWlncmFfbW90aXZvX3BlZHJlIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJtaWdyYV9wX21vdGl2b19wZWRyZV9fXyIpKQ0KDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fMSJdIDwtICJFZHVjYWNpw7NuIg0KbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKVtuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpID09ICJtaWdyYV9wX21vdGl2b19wZWRyZV9fXzIiXSA8LSAiVHJhYmFqby1FY29ub23DrWEiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fMyJdIDwtICJTb2Npb2N1bHR1cmFsZXMiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fNCJdIDwtICJTYWx1ZCINCm5hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSlbbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKSA9PSAibWlncmFfcF9tb3Rpdm9fcGVkcmVfX182NiJdIDwtICJPdHJvcyINCm5hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSlbbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKSA9PSAibWlncmFfcF9tb3Rpdm9fcGVkcmVfX185OCJdIDwtICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fOTkiXSA8LSAiTm8gcXVpc28gcmVzcG9uZGVyIg0KDQptaWdyYV9tb3Rpdm9fcGVkcmUgPC0gbWlncmFfbW90aXZvX3BlZHJlICU+JQ0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgfiBzdW0oLiA9PSAxLCBuYS5ybSA9IFRSVUUpKSkgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJvcGNpb24iLCB2YWx1ZXNfdG8gPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBmaWx0ZXIoZnJlY3VlbmNpYSA+PSAxKSAlPiUgICMgRmlsdHJhciBzb2xvIG9wY2lvbmVzIGNvbiBmcmVjdWVuY2lhID49IDENCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gMzQ5ICogMTAwKSAgIyBVc2FyIDM0OSBjb21vIG4gdG90YWwNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KbWlncmFfcGVkcmUgPC0gZ2dwbG90KG1pZ3JhX21vdGl2b19wZWRyZSwgYWVzKHggPSBmY3RfcmVvcmRlcihvcGNpb24sIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IG9wY2lvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAzLjUpICsgDQogIGxhYnModGl0bGUgPSAiUmF6b25lcyBwb3IgbGFzIHF1ZSBsbGVnYXJvbiBhbCBwZWRyZWdhbCIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiRnJlY3VlbmNpYSIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCAgIyBPY3VsdGEgbGEgbGV5ZW5kYQ0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgICMgQ2VudHJhIHkgZXN0aWxpemEgZWwgdMOtdHVsbw0KbWlncmFfcGVkcmUNCg0KDQpgYGANCg0KIyBUZW5lbmNpYSBkZSBhbmltYWxlcw0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQojI0gpIFRlbmVuY2lhIHkgY29udGFjdG8gY29uIGxvcyBhbmltYWxlcyBhbnRlcyBkZSBsYSBtaWdyYWNpw7NuIC0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIFBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gZWwgRVZFTlRPUyBFWFRSRU1PUw0KdGVuZW5jaWFfYW5pbWFsZXNfYW50ZXMgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGhvbWVfY3JpYV9hbmltX2FudGVzX3AuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGhvbWVfY3JpYV9hbmltX2FudGVzX3AuZmFjdG9yICVpbiUgYygiTm8gcmVjdWVyZGEgLyBubyBzYWJlIikpKSAlPiUNCiAgY291bnQoaG9tZV9jcmlhX2FuaW1fYW50ZXNfcC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyANCnRlbmVuY2lhX2FuaW1hbGVzIDwtIGdncGxvdCh0ZW5lbmNpYV9hbmltYWxlc19hbnRlcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBob21lX2NyaWFfYW5pbV9hbnRlc19wLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNyksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/QW50ZXMgZGUgbGEgTUlHUkFDScOTTj8iKQ0KdGVuZW5jaWFfYW5pbWFsZXMNCg0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIFRlbmVuY2lhIGRlIGFuaW1hbGVzIGFjdHVhbGlkYXMNCnRlbmVuY2lhX2FuaW1hbGVzX2FjdCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGhvbWVfY3JpYV9hbmltLmZhY3RvcikpICU+JQ0KICBjb3VudChob21lX2NyaWFfYW5pbS5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyANCnRlbmVuY2lhX2FuaW1hbGVzX2FjdHUgPC0gZ2dwbG90KHRlbmVuY2lhX2FuaW1hbGVzX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBob21lX2NyaWFfYW5pbS5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjcpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0Rlc3B1w6lzIGRlIGxhIE1JR1JBQ0nDk04/IikNCnRlbmVuY2lhX2FuaW1hbGVzX2FjdHUNCg0KDQpgYGANCg0KDQojICBEaWZpY3VsdGFkZXMgbHVlZ28gZGUgbGEgbWlncmFjacOzbg0KDQojIyMgQWd1YSBwYXJhIGNvbnN1bW8NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQojI0IpIERpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBtaWdyYWNpw7NuIC0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIEFjY2VzbyBhIGFndWEgcGFyYSBjb25zdW1vDQoNCiMjIERpZmljdWx0YWQgZGVsIGFndWEgYW50ZXMNCmRpZl9hZ3VhX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfd2F0X2FsdGVyLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3dhdF9hbHRlci5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUgc2luIGxhIGV0aXF1ZXRhICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQphZ3VhX3BhcyA8LSBnZ3Bsb3QoZGlmX2FndWFfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfd2F0X2FsdGVyLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQoNCmFndWFfcGFzDQoNCg0KYGBgDQoNCg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGVsIGFndWEgYWN0dWFsaWRhZA0KZGlmX2FndWFfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl93YXRfYWN0dWFsLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3dhdF9hY3R1YWwuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQphZ3VhX2FjdCA8LSBnZ3Bsb3QoZGlmX2FndWFfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfd2F0X2FjdHVhbC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgQUNUVUFMPyIpDQphZ3VhX2FjdA0KDQpgYGANCg0KDQojIyMgRGVzYWd1ZSANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZWwgZGVzYWd1ZSBhbnRlcw0KZGlmX2Rlc2FndWVfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3dhdF9wdWJfYWx0ZXIuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCmRlc2FndWVfcGFzIDwtIGdncGxvdChkaWZfZGVzYWd1ZV9wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQoNCmRlc2FndWVfcGFzDQoNCmBgYA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGVsIGRlc2FndWUgYWN0dWFsDQpkaWZfZGVzYWd1ZV9hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3dhdF9wdWJfYWN0dWFsLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3dhdF9wdWJfYWN0dWFsLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvDQpkZXNhZ3VlX2FjdCA8LSBnZ3Bsb3QoZGlmX2Rlc2FndWVfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfd2F0X3B1Yl9hY3R1YWwuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKQ0KDQpkZXNhZ3VlX2FjdA0KDQpgYGANCg0KDQojIyMgQ2VudHJvcyBlZHVjYXRpdm9zDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgY29sZWdpbyBhbnRlcw0KY29sZWdpb19wYXMgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3NjaG9vbF9hbHRlci5mYWN0b3IpKSAlPiUNCiAgZmlsdGVyKCEoZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yICVpbiUgYygiTm8gdXNhYmEgZXN0ZSBzZXJ2aWNpbyIsICJObyBhcGxpY2EiLCAiTm8gc2FiZSAvIE5vIHJlY3VlcmRhIikpKSAlPiUNCiAgY291bnQoZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIHNpbiBsYSBldGlxdWV0YSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KY29sZWdpb19wYXNlZCA8LSBnZ3Bsb3QoY29sZWdpb19wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZGVzIGx1ZWdvIGRlIGxhIE1JR1JBQ0nDk04/IikNCmNvbGVnaW9fcGFzZWQNCg0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIGNvbGVnaW8gYWN0dWFsaWRhZA0KY29sZWdpb19hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3NjaG9vbF9hY3R1YWwuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfc2Nob29sX2FjdHVhbC5mYWN0b3IgJWluJSBjKCJObyB1c28gZXN0ZSBzZXJ2aWNpbyIsICJObyBhcGxpY2EiKSkpICU+JQ0KICBjb3VudChkaWZmX3NjaG9vbF9hY3R1YWwuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIHNpbiBsYSBldGlxdWV0YSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KY29sZWdpb19hY3R1IDwtIGdncGxvdChjb2xlZ2lvX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX3NjaG9vbF9hY3R1YWwuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKQ0KY29sZWdpb19hY3R1DQoNCg0KYGBgDQoNCg0KDQojIyMgRWxlY3RyaWNpZGFkDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgZWxlY3RyaWNpZGFkIGFudGVzDQplbGVjdHJpY2lkYWRfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9lbGVjdHJfYWx0ZXIuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciAlaW4lIGMoIk5vIHNhYmUgLyBObyByZWN1ZXJkYSIpKSkgJT4lDQoNCiAgY291bnQoZGlmZl9lbGVjdHJfYWx0ZXIuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIHNpbiBsYSBldGlxdWV0YSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KZWxlY3RyaWNpZGFkX3Bhc2VkIDwtIGdncGxvdChlbGVjdHJpY2lkYWRfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZGVzIGx1ZWdvIGRlIGxhIE1JR1JBQ0nDk04/IikgDQplbGVjdHJpY2lkYWRfcGFzZWQNCg0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIGVsZWN0cmljaWRhZCBhY3R1YWxpZGFkDQplbGVjdHJpY2lkYWRfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9lbGVjdHJfYWN0dWFsLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX2VsZWN0cl9hY3R1YWwuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllDQplbGVjdHJpY2lkYWRfYWN0dSA8LSBnZ3Bsb3QoZWxlY3RyaWNpZGFkX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2VsZWN0cl9hY3R1YWwuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKSANCmVsZWN0cmljaWRhZF9hY3R1DQpgYGANCg0KDQojIyMgVHJhbnNwb3J0ZQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHRyYW5zcG9ydGUgYW50ZXMNCnRyYW5zcG9ydGVfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl90cmFuc3BfYWx0ZXIuZmFjdG9yKSkgJT4lDQogIGNvdW50KGRpZmZfdHJhbnNwX2FsdGVyLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZSBzaW4gbGEgZXRpcXVldGEgIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCnRyYW5zcG9ydGVfcGFzZWQgPC0gZ2dwbG90KHRyYW5zcG9ydGVfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfdHJhbnNwX2FsdGVyLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZGVzIGx1ZWdvIGRlIGxhIE1JR1JBQ0nDk04/IikNCnRyYW5zcG9ydGVfcGFzZWQNCg0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHRyYW5zcG9ydGUgYWN0dWFsaWRhZA0KdHJhbnNwb3J0ZV9hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3RyYW5zcF9hY3R1YWwuZmFjdG9yKSkgJT4lDQogIGNvdW50KGRpZmZfdHJhbnNwX2FjdHVhbC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUNCnRyYW5zcG9ydGVfYWN0dSA8LSBnZ3Bsb3QodHJhbnNwb3J0ZV9hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl90cmFuc3BfYWN0dWFsLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikNCnRyYW5zcG9ydGVfYWN0dQ0KYGBgDQoNCg0KIyMjIFByb2dyYW1hcyBTb2NpYWxlcw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHByb2dyYW1hcyBzb2NpYWxlcyBhbnRlcw0KcHJvZ3JhbV9zb2NpYWxfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IpKSAlPiUNCiAgZmlsdGVyKCEoZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IgJWluJSBjKCJObyB1c2FiYSBlc3RlIHNlcnZpY2lvIiwgIk5vIGFwbGljYSAvIG5vIGVyYSBlbGVnaWJsZSIsICJObyBzYWJlIC8gTm8gcmVjdWVyZGEiKSkpICU+JQ0KICBjb3VudChkaWZmX3Byb2dfc29jaWFsLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUgY29uIGxvcyBkYXRvcyBmaWx0cmFkb3MNCnByb2dyYW1fc29jaWFsX3Bhc2VkIDwtIGdncGxvdChwcm9ncmFtX3NvY2lhbF9wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQoNCnByb2dyYW1fc29jaWFsX3Bhc2VkDQoNCmBgYA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgcHJvZ3JnYW1hcyBzb2NpYWxlcyBhY3R1YWxpZGFkDQpwcm9ncmFtX3NvY2lhbF9hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3Byb2dfc29jaWFsX2FjdC5mYWN0b3IpKSAlPiUNCiAgZmlsdGVyKCEoZGlmZl9wcm9nX3NvY2lhbF9hY3QuZmFjdG9yICVpbiUgYygiTm8gdXNvIGVzdGUgc2VydmljaW8iLCAiTm8gYXBsaWNhLCBubyBlcyBlbGVnaWJsZSIsICJObyBzYWJlIC8gTm8gcmVjdWVyZGEiKSkpICU+JQ0KICBjb3VudChkaWZmX3Byb2dfc29jaWFsX2FjdC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllDQpwcm9ncmFtX3NvY2lhbF9hY3R1IDwtIGdncGxvdChwcm9ncmFtX3NvY2lhbF9hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9wcm9nX3NvY2lhbF9hY3QuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKQ0KcHJvZ3JhbV9zb2NpYWxfYWN0dQ0KDQpgYGANCg0KDQojIyMgRGVsaW5jdWVuY2lhDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgcHJvZ3JhbWFzIHNvY2lhbGVzIGFudGVzDQpkZWxpbmN1ZW5jaWFfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9kZWxpbmMuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfZGVsaW5jLmZhY3RvciAlaW4lIGMoIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSIpKSkgJT4lDQoNCiAgY291bnQoZGlmZl9kZWxpbmMuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIHNpbiBsYSBldGlxdWV0YSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KZGVsaW5jdWVuY2lhX3Bhc2VkIDwtIGdncGxvdChkZWxpbmN1ZW5jaWFfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZGVsaW5jLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZGVzIGx1ZWdvIGRlIGxhIE1JR1JBQ0nDk04/IikgDQpkZWxpbmN1ZW5jaWFfcGFzZWQNCg0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHByb2dyZ2FtYXMgc29jaWFsZXMgYWN0dWFsaWRhZA0KZGVsaW5jdWVuY2lhX2FjdCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZGVsaW5jX2FjdC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl9kZWxpbmNfYWN0LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KZGVsaW5jdWVuY2lhX2FjdHUgPC0gZ2dwbG90KGRlbGluY3VlbmNpYV9hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9kZWxpbmNfYWN0LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikgDQpkZWxpbmN1ZW5jaWFfYWN0dQ0KDQpgYGANCg0KDQojIyMgRGlzY3JpbWluYWNpw7NuIGRlIGxvcyB2ZWNpbm9zDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgRGlzY3JpbWluYWNpw7NuIGFudGVzDQpkaXNjcmltaW5hY2lvbl92ZWNpbm9zX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yICVpbiUgYygiTm8gcmVjdWVyZGEgLyBubyBzYWJlIikpKSAlPiUNCg0KICBjb3VudChkaWZmX2Rpc2NyaV92ZWNpbm9zLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19wYXNlZCA8LSBnZ3Bsb3QoZGlzY3JpbWluYWNpb25fdmVjaW5vc19wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9kaXNjcmlfdmVjaW5vcy5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQpkaXNjcmltaW5hY2lvbl92ZWNpbm9zX3Bhc2VkDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBEaXNjcmltaW5hY2nDs24gYWN0dWFsaWRhZA0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX2Rpc2NyaV92ZWNpbm9zX2FjdC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl9kaXNjcmlfdmVjaW5vc19hY3QuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllDQpkaXNjcmltaW5hY2lvbl92ZWNpbm9zX2FjdHUgPC0gZ2dwbG90KGRpc2NyaW1pbmFjaW9uX3ZlY2lub3NfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZGlzY3JpX3ZlY2lub3NfYWN0LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuOCksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikgDQpkaXNjcmltaW5hY2lvbl92ZWNpbm9zX2FjdHUNCg0KYGBgDQoNCg0KIyMjIERpYXJyZWFzIA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0NCiMgRGlhcnJlYXMNCg0KIyMgRGlmaWN1bHRhZCBkZSBsYSBkaWFycmVhIGFudGVzDQpkaWZfZGlhcnJlYV9wYXMgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX2VuZmVfY29uX2gyMC5mYWN0b3IpKSAlPiUNCiAgZmlsdGVyKCEoZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yICVpbiUgYygiTm8gcmVjdWVyZGEgLyBubyBzYWJlIikpKSAlPiUNCg0KICBjb3VudChkaWZmX2VuZmVfY29uX2gyMC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KZGlhcnJlYV9wYXMgPC0gZ2dwbG90KGRpZl9kaWFycmVhX3BhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2VuZmVfY29uX2gyMC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKQ0KDQpkaWFycmVhX3Bhcw0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIGxhIGRpYXJyZWEgYWN0dWFsaWRhZA0KZGlmX2RpYXJyZWFfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9lbmZlX2Nvbl9oMjBfYWN0LmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX2VuZmVfY29uX2gyMF9hY3QuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQpkaWFycmVhX2FjdCA8LSBnZ3Bsb3QoZGlmX2RpYXJyZWFfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZW5mZV9jb25faDIwX2FjdC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgQUNUVUFMPyIpDQoNCmRpYXJyZWFfYWN0DQoNCmBgYA0KDQoNCg0KDQojIyMgU2FsdWQNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGNvbiBsYSBzYWx1ZCBhbnRlcw0Kc2FsdWRfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9hdGVuX3NhbHVkLmZhY3RvcikpICU+JQ0KICAgIGZpbHRlcighKGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IgJWluJSBjKCJObyByZWN1ZXJkYSAvIG5vIHNhYmUiKSkpICU+JQ0KDQogIGNvdW50KGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUNCnNhbHVkX3Bhc2VkIDwtIGdncGxvdChzYWx1ZF9wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9hdGVuX3NhbHVkLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpIA0Kc2FsdWRfcGFzZWQNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBTYWx1ZCBhY3R1YWxpZGFkDQpzYWx1ZF9hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX2F0ZW5fc2FsdWRfYWN0LmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX2F0ZW5fc2FsdWRfYWN0LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0Kc2FsdWRfYWN0dSA8LSBnZ3Bsb3Qoc2FsdWRfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfYXRlbl9zYWx1ZF9hY3QuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKSANCnNhbHVkX2FjdHUNCg0KYGBgDQoNCg0KIyMjIFRyYXRvIGRlbCBwZXJzb25hbCBkZSBzYWx1ZCAoUFMpDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmZXJlbnRlIHRyYXRvIGNvbiBsb3MgcHJvZmVzaW9uYWxlcyBkZSBsYSBzYWx1ZA0KZGlmX3RyYXRvX3NhbHVkIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IpKSAlPiUNCiAgZmlsdGVyKCEoZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IgJWluJSBjKCJObyByZWN1ZXJkYSAvIG5vIHNhYmUiKSkpICU+JQ0KICBjb3VudChkaWZmX3NfdHJhdG9fZGlmLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KZGlmX3RyYXRvIDwtIGdncGxvdChkaWZfdHJhdG9fc2FsdWQsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0EgcGVyY2liaWRvIHF1ZSBlbCBQUyBsZSB0cmF0YSBkaWZlcmVudGU/IikgIA0KZGlmX3RyYXRvDQoNCmBgYA0KDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyBSYXpvbmVzIGRlIGRpZmVyZW50ZSB0cmF0bw0KdHJhdG8gPC0gZGF0YV9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXyIpKQ0KDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzEiXSA8LSAiSWRpb21hIG8gYWNlbnRvIg0KbmFtZXModHJhdG8pW25hbWVzKHRyYXRvKSA9PSAiZGlmZl9zX3Jhel90cmF0b19kaWZfX18yIl0gPC0gIkN1bHR1cmEiDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzMiXSA8LSAiIFJhemEvIHByb2NlZGVuY2lhIMOpdG5pY2EiDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzQiXSA8LSAiQ29sb3IgZGUgcGllbCINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fNSJdIDwtICJSZWxpZ2nDs24iDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzYiXSA8LSAiU2VndXJvIG3DqWRpY28iDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzciXSA8LSAiUG9yIGhhYmVyIHZlbmlkbyBkZSBvdHJvIGx1Z2FyIg0KbmFtZXModHJhdG8pW25hbWVzKHRyYXRvKSA9PSAiZGlmZl9zX3Jhel90cmF0b19kaWZfX182NiJdIDwtICJPdHJhIHJhesOzbiINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fOTgiXSA8LSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlICINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fOTkiXSA8LSAiTm8gcXVpc28gcmVzcG9uZGVyIg0KDQp0cmF0byA8LSB0cmF0byAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIH4gc3VtKC4gPT0gMSwgbmEucm0gPSBUUlVFKSkpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAib3BjaW9uIiwgdmFsdWVzX3RvID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgZmlsdGVyKGZyZWN1ZW5jaWEgPj0gMSkgJT4lICAjIEZpbHRyYXIgc29sbyBvcGNpb25lcyBjb24gZnJlY3VlbmNpYSA+PSAxDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIDM0OSAqIDEwMCkgICMgVXNhciAzNDkgY29tbyBuIHRvdGFsDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCmRpZl90cmF0b19wcm9mX3NhbHVkIDwtIGdncGxvdCh0cmF0bywgYWVzKHggPSBmY3RfcmVvcmRlcihvcGNpb24sIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IG9wY2lvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAzLjUpICsgDQogIGxhYnModGl0bGUgPSAiUmF6b25lcyBkZWwgdHJhdG8gZGlmZXJlbnRlIHBvciBwYXJ0ZSBkZWwgUFMiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCmRpZl90cmF0b19wcm9mX3NhbHVkDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCiMgIERlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KIyMjIERlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGVzcGxhemFtaWVudG8gZm9yemFkbw0KZGVzcF9mb3J6YWRvIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkZXNwX2FsZ19mb3J6LmZhY3RvcikpICU+JQ0KICBjb3VudChkZXNwX2FsZ19mb3J6LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KZGVzcGxfZm9yemFkbyA8LSBnZ3Bsb3QoZGVzcF9mb3J6YWRvLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRlc3BfYWxnX2ZvcnouZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9Vc3RlZCBmdWUgb2JsaWdhZG8gYSBkZWphciBzdSBsdWdhciBkZSBvcmlnZW4/IikNCg0KZGVzcGxfZm9yemFkbw0Kcm0oZGVzcF9mb3J6YWRvLCBkZXNwbF9mb3J6YWRvKQ0KDQpgYGANCg0KIyMjIFJhem9uZXMgZGVsIGRlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMgTW90aXZvIGRlbCBkZXNwbGF6YW1pZW50byBmb3J6YWRvDQpyYXpvbmVzX2Rlc3BfZm9yeiA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGVzcF9tb3Rpdl9mb3J6LmZhY3RvcikpICU+JQ0KICBjb3VudChkZXNwX21vdGl2X2ZvcnouZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCg0KIyBSZW5vbWJyYXIgbGEgc2VndW5kYSBhbHRlcm5hdGl2YSBkZWwgZmFjdG9yDQpyYXpvbmVzX2Rlc3BfZm9yeiRkZXNwX21vdGl2X2ZvcnouZmFjdG9yIDwtIGZjdF9yZWNvZGUoDQogIHJhem9uZXNfZGVzcF9mb3J6JGRlc3BfbW90aXZfZm9yei5mYWN0b3IsDQogICJEZXNhc3RyZXMgTmF0dXJhbGVzIiA9ICJEZXNhc3RyZXMgbmF0dXJhbGVzOiBpbnVuZGFjaW9uZXMsIHNlcXXDrWFzLCB0ZXJyZW1vdG9zLCBlcnVwY2lvbmVzIHZvbGPDoW5pY2FzLCBodWF5Y29zLCBpbmNlbmRpb3MgZm9yZXN0YWxlcywgZXRjLiIsDQoiRXZpdGFyIHRlcnJvcmlzbW8sIGNvbmZsaWN0byBhcm1hZG8sIGV0Yy4iID0gIlBhcmEgZXZpdGFyIHRlcnJvcmlzbW8sIGNvbmZsaWN0byBhcm1hZG8sIHZpb2xlbmNpYSBwb2zDrXRpY2EsIHZpb2xhY2nDs24gZGUgZGVyZWNob3MgaHVtYW5vcy4iKQ0KDQojIA0KIyBDcmVhciBlbCBncsOhZmljbw0KcmF6X2Rlc3BfZnJvcnphZG8gPC0gZ2dwbG90KHJhem9uZXNfZGVzcF9mb3J6LCBhZXMoeCA9IGZjdF9yZW9yZGVyKGRlc3BfbW90aXZfZm9yei5mYWN0b3IsIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRlc3BfbW90aXZfZm9yei5mYWN0b3IpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIlByaW5jaXBhbGVzIHJhem9uZXMiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCg0KcmF6X2Rlc3BfZnJvcnphZG8NCg0Kcm0ocmF6b25lc19kZXNwX2ZvcnosIHJhel9kZXNwX2Zyb3J6YWRvKQ0KDQpgYGANCg0KIyAgUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBDTElNQSAoYW50ZXMgZGUgbWlncmFyKQ0KDQojIyMgQ2xpbWENCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIFBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gZWwgQ0xJTUENCnBlcmNwX2NsaW1hIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShwZXJjZXBfY2xpbV9hbnRlX3Zpdi5mYWN0b3IpKSAlPiUNCiAgY291bnQocGVyY2VwX2NsaW1fYW50ZV92aXYuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQpjbGltYSA8LSBnZ3Bsb3QocGVyY3BfY2xpbWEsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gcGVyY2VwX2NsaW1fYW50ZV92aXYuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBjbGltYSIpDQoNCmNsaW1hDQpybShwZXJjcF9jbGltYSwgY2xpbWEpDQoNCmBgYA0KDQojIyMgVGVtcGVyYXR1cmENCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCnBlcmNwX3RlbXBlcmF0dXJhIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYSh0ZW1wX2NhbWJfYW50ZV92aXZpby5mYWN0b3IpKSAlPiUNCiAgY291bnQodGVtcF9jYW1iX2FudGVfdml2aW8uZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQp0ZW1wZXJhdHVyYSA8LSBnZ3Bsb3QocGVyY3BfdGVtcGVyYXR1cmEsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gdGVtcF9jYW1iX2FudGVfdml2aW8uZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBsYSBUZW1wZXJhdHVyYSIpDQoNCnRlbXBlcmF0dXJhDQpybShwZXJjcF90ZW1wZXJhdHVyYSwgdGVtcGVyYXR1cmEpDQoNCmBgYA0KDQojIyMgTGx1dmlhcw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KIyBQZXJjZXBjacOzbiBkZSBjYW1iaW9zIGVuIGVsIExMVVZJQVMNCnBlcmNwX2xsdXZpYXMgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHRlbV9hbnRlX2NhbWJfbGx1di5mYWN0b3IpKSAlPiUNCiAgY291bnQodGVtX2FudGVfY2FtYl9sbHV2LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KbGx1dmlhcyA8LSBnZ3Bsb3QocGVyY3BfbGx1dmlhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSB0ZW1fYW50ZV9jYW1iX2xsdXYuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBsYXMgTGx1dmlhcyIpDQpsbHV2aWFzDQpybShwZXJjcF9sbHV2aWFzLCBsbHV2aWFzKQ0KDQpgYGANCg0KIyMjIEV2ZW50b3MgRXh0cmVtb3MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCiMgUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBFVkVOVE9TIEVYVFJFTU9TDQpwZXJjcF9ldmVudF9leHRyZW1lIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShldmVudF9leHRfYW50ZV9wcm92LmZhY3RvcikpICU+JQ0KICBjb3VudChldmVudF9leHRfYW50ZV9wcm92LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KZXZlbnRvc19leHRyZW1vcyA8LSBnZ3Bsb3QocGVyY3BfZXZlbnRfZXh0cmVtZSwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBldmVudF9leHRfYW50ZV9wcm92LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIlBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gRXZlbnRvcyBFeHRyZW1vcyIpDQoNCmV2ZW50b3NfZXh0cmVtb3MNCnJtKHBlcmNwX2V2ZW50X2V4dHJlbWUsIGV2ZW50b3NfZXh0cmVtb3MpDQoNCg0KYGBgDQoNCiMgIFBhdHJvbmVzIGRpZXRhcmlvcyB5IG1pZ3JhY2nDs24NCg0KIyMjIEFudGVzIGRlIE1pZ3Jhcg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLQ0KIyBBbnRlcyBkZSBtaWdyYXIgIGRvbmRlIGNvbnN1bWlhcyBzdXMgYWxpbWVudG9zDQpjb25zdW1lX2FudF9hbGltZW50b3MgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoImRvbmRlX2NvbnN1X2FudGVzX19fIikpDQoNCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX18xIl0gPC0gIkVuIGNhc2EiDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fMiJdIDwtICJFbiByZXN0YXVyYW50ZSINCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX18zIl0gPC0gIkVuIGxhIGNhbGxlIg0KbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9hbnRlc19fXzQiXSA8LSAiRW4gZWwgdHJhYmFqbyINCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX181Il0gPC0gIkVuIGVsIGNvbWVkb3IgcG9wdXBsYXIiDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fNjYiXSA8LSAiT3RybyBtw6l0b2RvIg0KbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9hbnRlc19fXzk4Il0gPC0gIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX185OSJdIDwtICJObyBxdWlzbyByZXNwb25kZXIiDQoNCg0KY29uc3VtZV9hbnRfYWxpbWVudG9zIDwtIGNvbnN1bWVfYW50X2FsaW1lbnRvcyAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIH4gc3VtKC4gPT0gMSwgbmEucm0gPSBUUlVFKSkpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAib3BjaW9uIiwgdmFsdWVzX3RvID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgZmlsdGVyKGZyZWN1ZW5jaWEgPj0gMSkgJT4lICAjIEZpbHRyYXIgc29sbyBvcGNpb25lcyBjb24gZnJlY3VlbmNpYSA+PSAxDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIDM0OSAqIDEwMCkgICMgVXNhciAzNDkgY29tbyBuIHRvdGFsDQoNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KYWxpbWVudG9zX2FudGVzIDwtIGdncGxvdChjb25zdW1lX2FudF9hbGltZW50b3MsIGFlcyh4ID0gZmN0X3Jlb3JkZXIob3BjaW9uLCBmcmVjdWVuY2lhKSwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBvcGNpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIsK/RMOzbmRlIGNvbnN1bWlhIHN1cyBhbGltZW50b3M/IiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJGcmVjdWVuY2lhIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsICAjIE9jdWx0YSBsYSBsZXllbmRhDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSAgIyBDZW50cmEgeSBlc3RpbGl6YSBlbCB0w610dWxvDQoNCmFsaW1lbnRvc19hbnRlcw0KDQoNCg0KYGBgDQoNCiMjIyBMdWVnbyBkZSBsYSBNaWdyYWNpw7NuDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCiMgQWN0dWFsbWVudGUgZG9uZGUgY29uc3VtZSBzdXMgYWxpbWVudG9zDQpjb25zdW1lX2FjdF9hbGltZW50b3MgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoImRvbmRlX2NvbnN1X19fIikpDQoNCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX18xIl0gPC0gIkVuIGNhc2EiDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fMiJdIDwtICJFbiByZXN0YXVyYW50ZSINCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX18zIl0gPC0gIkVuIGxhIGNhbGxlIg0KbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9fXzQiXSA8LSAiRW4gZWwgdHJhYmFqbyINCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX181Il0gPC0gIkVuIGVsIGNvbWVkb3IgcG9wdXBsYXIiDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fNjYiXSA8LSAiT3RybyBtw6l0b2RvIg0KbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9fXzk4Il0gPC0gIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX185OSJdIDwtICJObyBxdWlzbyByZXNwb25kZXIiDQoNCmNvbnN1bWVfYWN0X2FsaW1lbnRvcyA8LSBjb25zdW1lX2FjdF9hbGltZW50b3MgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCB+IHN1bSguID09IDEsIG5hLnJtID0gVFJVRSkpKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gIm9wY2lvbiIsIHZhbHVlc190byA9ICJmcmVjdWVuY2lhIikgJT4lDQogIGZpbHRlcihmcmVjdWVuY2lhID49IDEpICU+JSAgIyBGaWx0cmFyIHNvbG8gb3BjaW9uZXMgY29uIGZyZWN1ZW5jaWEgPj0gMQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyAzNDkgKiAxMDApICAjIFVzYXIgMzQ5IGNvbW8gbiB0b3RhbA0KDQojIENyZWFyIGVsIGdyw6FmaWNvDQphbGltZW50b3NfYWN0dWFsIDwtIGdncGxvdChjb25zdW1lX2FjdF9hbGltZW50b3MsIGFlcyh4ID0gZmN0X3Jlb3JkZXIob3BjaW9uLCBmcmVjdWVuY2lhKSwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBvcGNpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIsK/QWN0dWFsbWVudGUgZMOzbmRlIGNvbnN1bWUgc3VzIGFsaW1lbnRvcz8iLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCg0KYWxpbWVudG9zX2FjdHVhbA0KDQpgYGANCg0KDQojIFBlcmNlcGNpw7NuIGRlbCBlc3RhZG8gbnV0cmljaW9uYWwNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KICMgQ3JlYXIgbGEgbnVldmEgdmFyaWFibGUgaW1jX2FudGVzDQogZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZShpbWNfYW50ZXMgPSBjYXNlX3doZW4oDQogICAgIHBlc29fYW50ZXMgPj0gMSAmIHBlc29fYW50ZXMgPD0gNSB+ICJQZXNvIG5vcm1hbCBvIGJham8gcGVzbyIsDQogICAgIHBlc29fYW50ZXMgPj0gNiAmIHBlc29fYW50ZXMgPD0gOSB+ICJTb2JyZXBlc28gdSBvYmVzaWRhZCIsDQogICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkgIyBNYW5lamEgY2Fzb3MgZnVlcmEgZGUgbG9zIHJhbmdvcyBlc3BlY2lmaWNhZG9zDQoNCiANCiAjIENyZWFyIGxhIG51ZXZhIHZhcmlhYmxlIGltY19kZXNwdWVzDQogZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZShpbWNfZGVzcHVlcyA9IGNhc2Vfd2hlbigNCiAgICAgcGVzb19haG9yYSA+PSAxICYgcGVzb19haG9yYSA8PSA1IH4gIlBlc28gbm9ybWFsIG8gYmFqbyBwZXNvIiwNCiAgICAgcGVzb19haG9yYSA+PSA2ICYgcGVzb19haG9yYSA8PSA5IH4gIlNvYnJlcGVzbyB1IG9iZXNpZGFkIiwNCiAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pKSAjIE1hbmVqYSBjYXNvcyBmdWVyYSBkZSBsb3MgcmFuZ29zIGVzcGVjaWZpY2Fkb3MNCg0KDQogIyBSZXN1bWlyIGxvcyB0b3RhbGVzIHBhcmEgaW1jX2FudGVzLg0KIHJlc3VtZW5faW1jX2FudGVzIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIGZpbHRlcighaXMubmEoaW1jX2FudGVzKSkgJT4lICAjIEV4Y2x1aXIgdmFsb3JlcyBOQSBlbiBpbWNfYW50ZXMNCiAgIGdyb3VwX2J5KGltY19hbnRlcykgJT4lICAjIEFncnVwYXIgcG9yIGltY19hbnRlcw0KICAgc3VtbWFyaXNlKGNvbnRlbyA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lICAjIENhbGN1bGFyIGVsIGNvbnRlbyB0b3RhbA0KICAgbXV0YXRlKHBvcmNlbnRhamUgPSBjb250ZW8gLyBzdW0oY29udGVvKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZSB0b3RhbA0KIA0KICMgUmVzdW1pciBsb3MgdG90YWxlcyBwYXJhIGltY19kZXNwdWVzDQogcmVzdW1lbl9pbWNfZGVzcHVlcyA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBmaWx0ZXIoIWlzLm5hKGltY19kZXNwdWVzKSkgJT4lICAjIEV4Y2x1aXIgdmFsb3JlcyBOQSBlbiBpbWNfZGVzcHVlcw0KICAgZ3JvdXBfYnkoaW1jX2Rlc3B1ZXMpICU+JSAgIyBBZ3J1cGFyIHBvciBpbWNfZGVzcHVlcw0KICAgc3VtbWFyaXNlKGNvbnRlbyA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lICAjIENhbGN1bGFyIGVsIGNvbnRlbyB0b3RhbA0KICAgbXV0YXRlKHBvcmNlbnRhamUgPSBjb250ZW8gLyBzdW0oY29udGVvKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZSB0b3RhbA0KIA0KICMgQ29tYmluYXIgbG9zIGRhdG9zDQogcmVzdW1lbl9pbWNfYW50ZXMgPC0gcmVzdW1lbl9pbWNfYW50ZXMgJT4lIG11dGF0ZSh0aXBvID0gIkFudGVzIGRlIG1pZ3JhciIpDQogcmVzdW1lbl9pbWNfZGVzcHVlcyA8LSByZXN1bWVuX2ltY19kZXNwdWVzICU+JSBtdXRhdGUodGlwbyA9ICJFbiBsYSBhY3R1YWxpZGFkIikNCiANCiByZXN1bWVuX2ltY190b3RhbCA8LSBiaW5kX3Jvd3MocmVzdW1lbl9pbWNfYW50ZXMsIHJlc3VtZW5faW1jX2Rlc3B1ZXMpDQogDQogIyBHcsOhZmljbyBjb21iaW5hZG8gY29uIGZhY2V0YXMNCiBpbWNfdG90YWwgPC0gZ2dwbG90KHJlc3VtZW5faW1jX3RvdGFsLCBhZXMoeCA9IGZhY3RvcihpZmVsc2UodGlwbyA9PSAiQW50ZXMgZGUgbWlncmFyIiwgaW1jX2FudGVzLCBpbWNfZGVzcHVlcyksIGxldmVscyA9IHVuaXF1ZShjKGltY19hbnRlcywgaW1jX2Rlc3B1ZXMpKSksIHkgPSBwb3JjZW50YWplLCBmaWxsID0gZmFjdG9yKGlmZWxzZSh0aXBvID09ICJBbnRlcyBkZSBtaWdyYXIiLCBpbWNfYW50ZXMsIGltY19kZXNwdWVzKSkpKSArDQogICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjUpICsgICMgQW5jaG8gZGUgbGFzIGJhcnJhcyBhanVzdGFkbw0KICAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChjb250ZW8sICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksICAjIEV0aXF1ZXRhcyBhanVzdGFkYXMNCiAgICAgICAgICAgICB2anVzdCA9IC0wLjUsIHNpemUgPSAzKSArICAjIEFqdXN0ZSBkZSBwb3NpY2nDs24geSB0YW1hw7FvIGRlbCB0ZXh0bw0KICAgZmFjZXRfd3JhcCh+IHRpcG8sIHNjYWxlcyA9ICJmcmVlIikgKyAgIyBDcmVhciBmYWNldGFzIHBhcmEgYW50ZXMgeSBkZXNwdcOpcw0KICAgbGFicyh0aXRsZSA9ICJQZXJjZXBjacOzbiBkZSBjYW1iaW8gZGUgcGVzbyBhbnRlcyB5IGx1ZWdvIGRlIGxhIE1pZ3JhY2nDs24iLA0KICAgICAgICB4ID0gTlVMTCwgICMgUXVpdGEgZWwgbm9tYnJlIGFsIGVqZSB4DQogICAgICAgIHkgPSBOVUxMLCAgIyBRdWl0YSBlbCBub21icmUgYWwgZWplIHkNCiAgICAgICAgZmlsbCA9ICJJTUMiKSArICAjIFTDrXR1bG8gZGUgbGEgbGV5ZW5kYQ0KICAgdGhlbWVfbWluaW1hbCgpICsNCiAgIHRoZW1lKA0KICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgICMgQ2VudHJhIGVsIHTDrXR1bG8gZGVsIGdyw6FmaWNvDQogICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwgICMgQXNlZ3VyYSBxdWUgZWwgdMOtdHVsbyBkZSBsYSBsZXllbmRhIGVzdMOpIGVuIGJsYW5jbw0KICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkgICMgUXVpdGEgbGFzIGV0aXF1ZXRhcyBkZWwgZWplIHgNCg0KIA0KICMgTW9zdHJhciBlbCBncsOhZmljbw0KIGltY190b3RhbA0KDQoNCmBgYA0K