Resultados preliminares–4

Lugar de Procedencia de los Migrantes

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%)
Estado de migración del hogar
    a.Hogar con algún migrante tardio 178 (77%)
    b.Hogar con algún migrante intermedio 33 (14%)
    c.Hogar con algún migrante reciente 21 (9.1%)
    Unknown 3
1 Mean (SD); n (%)

Información sociodemográfica por estado de migración

Characteristic Overall
N = 232
1
a.Hogar con algún migrante tardio
N = 178
1
b.Hogar con algún migrante intermedio
N = 33
1
c.Hogar con algún migrante reciente
N = 21
1
p-value2
Total de personas 3.68 (1.63) 3.75 (1.66) 3.48 (1.72) 3.38 (1.16) 0.4
Agua para consumo



0.2
    Agua potable (o de red publica) 180 (78%) 143 (80%) 21 (64%) 16 (76%)
    Cisterna de agua 40 (17%) 27 (15%) 9 (27%) 4 (19%)
    Botellas (agua tratada) 5 (2.2%) 4 (2.2%) 1 (3.0%) 0 (0%)
    Pileta Publica 3 (1.3%) 2 (1.1%) 0 (0%) 1 (4.8%)
    Otro 3 (1.3%) 1 (0.6%) 2 (6.1%) 0 (0%)
    Pozo (natural) 1 (0.4%) 1 (0.6%) 0 (0%) 0 (0%)
Desague en el hogar



0.3
    Silo 132 (57%) 102 (57%) 19 (58%) 11 (52%)
    Red pública de desagüe (Desagüe con tuberas) 99 (43%) 76 (43%) 13 (39%) 10 (48%)
    Letrina 1 (0.4%) 0 (0%) 1 (3.0%) 0 (0%)
Inseguridad alimentaria moderada-grave 156 (71%) 118 (70%) 26 (81%) 12 (60%) 0.2
Localidad




    Espinarences 80 (34%) 63 (35%) 11 (33%) 6 (29%)
    San Juan El Alto 57 (25%) 41 (23%) 8 (24%) 8 (38%)
    Juan Velazco Alvarado 43 (19%) 36 (20%) 4 (12%) 3 (14%)
    Nuevo Arequipa 36 (16%) 23 (13%) 9 (27%) 4 (19%)
    Apurimeños 16 (6.9%) 15 (8.4%) 1 (3.0%) 0 (0%)
1 Mean (SD); n (%)
2 Kruskal-Wallis rank sum test; Fisher’s exact test; Pearson’s Chi-squared test

Información general del participante

Characteristic N = 3491
Edad 38 (16)
    Unknown 1
Sexo
    Femenino 220 (63%)
    Masculino 129 (37%)
Nivel Educativo
    Analfabeto 17 (4.9%)
    Primaria 118 (34%)
    Secundaria 165 (47%)
    Técnico Superior 42 (12%)
    Universidad 7 (2.0%)
Ocupación
    Agricultura y Ganadería 138 (40%)
    Ama de casa 77 (22%)
    Chofer 15 (4.3%)
    Comerciante/Vendedor 25 (7.2%)
    Estudiante 32 (9.2%)
    No aplica 3 (0.9%)
    Obrero u operarios (construcción, maquinaria, carpintero) 27 (7.7%)
    Otro 32 (9.2%)
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%)
Estado de migración del participante
    a.Migrante tardio 243 (70%)
    b.Migrante intermedio 52 (15%)
    c.Migrante reciente 52 (15%)
    Unknown 2
1 Mean (SD); n (%)

Información del participante por estado de migración

Characteristic Overall
N = 347
1
a.Migrante tardio
N = 243
1
b.Migrante intermedio
N = 52
1
c.Migrante reciente
N = 52
1
p-value2
Edad 37 (28, 49) 39 (30, 50) 34 (28, 44) 26 (17, 35) <0.001
Sexo



0.3
    Femenino 219.0 (63.1%) 152.0 (62.6%) 30.0 (57.7%) 37.0 (71.2%)
    Masculino 128.0 (36.9%) 91.0 (37.4%) 22.0 (42.3%) 15.0 (28.8%)
Nivel Educativo



0.8
    Analfabeto 17.0 (4.9%) 14.0 (5.8%) 1.0 (1.9%) 2.0 (3.8%)
    Primaria 118.0 (34.0%) 87.0 (35.8%) 14.0 (26.9%) 17.0 (32.7%)
    Secundaria 164.0 (47.3%) 111.0 (45.7%) 29.0 (55.8%) 24.0 (46.2%)
    Técnico Superior 41.0 (11.8%) 27.0 (11.1%) 7.0 (13.5%) 7.0 (13.5%)
    Universidad 7.0 (2.0%) 4.0 (1.6%) 1.0 (1.9%) 2.0 (3.8%)
Ocupación




    Agricultura y Ganadería 138.0 (39.8%) 99.0 (40.7%) 19.0 (36.5%) 20.0 (38.5%)
    Ama de casa 77.0 (22.2%) 56.0 (23.0%) 12.0 (23.1%) 9.0 (17.3%)
    Chofer 15.0 (4.3%) 12.0 (4.9%) 2.0 (3.8%) 1.0 (1.9%)
    Comerciante/Vendedor 25.0 (7.2%) 17.0 (7.0%) 4.0 (7.7%) 4.0 (7.7%)
    Estudiante 31.0 (8.9%) 12.0 (4.9%) 7.0 (13.5%) 12.0 (23.1%)
    No aplica 3.0 (0.9%) 1.0 (0.4%) 0.0 (0.0%) 2.0 (3.8%)
    Obrero u operarios (construcción, maquinaria, carpintero) 27.0 (7.8%) 23.0 (9.5%) 4.0 (7.7%) 0.0 (0.0%)
    Otro 31.0 (8.9%) 23.0 (9.5%) 4.0 (7.7%) 4.0 (7.7%)
Estabilidad laboral



0.8
    Busca el trabajo día a día 95.0 (41.9%) 67.0 (40.1%) 15.0 (46.9%) 13.0 (46.4%)
    Es temporal o por temporada 75.0 (33.0%) 56.0 (33.5%) 9.0 (28.1%) 10.0 (35.7%)
    Es estable, tengo un trabajo permanente 57.0 (25.1%) 44.0 (26.3%) 8.0 (25.0%) 5.0 (17.9%)
Seguro de salud



0.3
    SIS 243.0 (70.0%) 166.0 (68.3%) 34.0 (65.4%) 43.0 (82.7%)
    No tengo ningún seguro 52.0 (15.0%) 39.0 (16.0%) 9.0 (17.3%) 4.0 (7.7%)
    ESSALUD 37.0 (10.7%) 24.0 (9.9%) 8.0 (15.4%) 5.0 (9.6%)
    No recuerda / no sabe 14.0 (4.0%) 13.0 (5.3%) 1.0 (1.9%) 0.0 (0.0%)
    No quiso responder 1.0 (0.3%) 1.0 (0.4%) 0.0 (0.0%) 0.0 (0.0%)
Primer idioma aprendido



0.059
    Quechua 205.0 (59.1%) 154.0 (63.4%) 28.0 (53.8%) 23.0 (44.2%)
    Castellano 79.0 (22.8%) 46.0 (18.9%) 15.0 (28.8%) 18.0 (34.6%)
    Castellano y quechua paralelamente 47.0 (13.5%) 35.0 (14.4%) 6.0 (11.5%) 6.0 (11.5%)
    Aymara 10.0 (2.9%) 5.0 (2.1%) 2.0 (3.8%) 3.0 (5.8%)
    Castellano y aymara paralelamente 6.0 (1.7%) 3.0 (1.2%) 1.0 (1.9%) 2.0 (3.8%)
Idioma hablado actualmente



0.013
    Castellano y quechua: Ambos por igual 190.0 (54.8%) 138.0 (56.8%) 24.0 (46.2%) 28.0 (53.8%)
    Sólo en castellano 139.0 (40.1%) 98.0 (40.3%) 22.0 (42.3%) 19.0 (36.5%)
    Sólo en quechua 7.0 (2.0%) 4.0 (1.6%) 1.0 (1.9%) 2.0 (3.8%)
    Mayormente en quechua 5.0 (1.4%) 3.0 (1.2%) 1.0 (1.9%) 1.0 (1.9%)
    Castellano y aymara: Ambos por igual 5.0 (1.4%) 0.0 (0.0%) 3.0 (5.8%) 2.0 (3.8%)
    Otros 1.0 (0.3%) 0.0 (0.0%) 1.0 (1.9%) 0.0 (0.0%)
1 Median (Q1, Q3); n (%)
2 Kruskal-Wallis rank sum test; Pearson’s Chi-squared test; Fisher’s exact test

Dificultades al momento de la migración por género

Características
Dificultades al momento de la migración por género
p-value2
Femenino
N = 220
1
Masculino
N = 129
1
Agua para consumo

0.7
    No fue una dificultad 40 (21%) 20 (18%)
    Fue una dificultad Ligera 8 (4.3%) 3 (2.8%)
    Fue una dificultad Intermedia 25 (13%) 12 (11%)
    Fue una gran dificultad 114 (61%) 74 (68%)
Agua para otros usos

0.3
    No fue una dificultad 55 (29%) 25 (23%)
    Fue una dificultad Ligera 8 (4.3%) 3 (2.8%)
    Fue una dificultad Intermedia 22 (12%) 20 (18%)
    Fue una gran dificultad 102 (55%) 61 (56%)
Desagüe del hogar

0.4
    No fue una dificultad 40 (21%) 19 (17%)
    Fue una dificultad Ligera 10 (5.3%) 5 (4.6%)
    Fue una dificultad Intermedia 33 (18%) 14 (13%)
    Fue una gran dificultad 104 (56%) 71 (65%)
Centros educativos

0.9
    No fue una dificultad 71 (38%) 42 (39%)
    Fue una dificultad Ligera 9 (4.8%) 6 (5.5%)
    Fue una dificultad Intermedia 15 (8.1%) 10 (9.2%)
    Fue una gran dificultad 76 (41%) 43 (39%)
    No usaba este servicio 9 (4.8%) 3 (2.8%)
    No aplica 5 (2.7%) 5 (4.6%)
    No sabe / No recuerda 1 (0.5%) 0 (0%)
Electricidad en el hogar

0.4
    No fue una dificultad 72 (39%) 38 (35%)
    Fue una dificultad Ligera 13 (7.0%) 4 (3.7%)
    Fue una dificultad Intermedia 15 (8.0%) 15 (14%)
    Fue una gran dificultad 86 (46%) 52 (48%)
    No sabe / No recuerda 1 (0.5%) 0 (0%)
Transporte público

0.6
    No fue una dificultad 56 (30%) 27 (25%)
    Fue una dificultad Ligera 12 (6.4%) 8 (7.3%)
    Fue una dificultad Intermedia 20 (11%) 16 (15%)
    Fue una gran dificultad 99 (53%) 58 (53%)
Programas sociales

0.5
    No fue una dificultad 82 (44%) 50 (46%)
    Fue una dificultad Ligera 9 (4.8%) 11 (10%)
    Fue una dificultad Intermedia 4 (2.1%) 3 (2.8%)
    Fue una gran dificultad 58 (31%) 29 (27%)
    No usaba este servicio 31 (17%) 16 (15%)
    No aplica / no era elegible 2 (1.1%) 0 (0%)
    No sabe / No recuerda 1 (0.5%) 0 (0%)
Delincuencia

0.9
    No fue un Problema 118 (63%) 70 (64%)
    Fue un Problema Ligero 14 (7.5%) 7 (6.4%)
    Fue un Problema Intermedio 13 (7.0%) 10 (9.2%)
    Fue un Gran Problema 41 (22%) 22 (20%)
    No recuerda / no sabe 1 (0.5%) 0 (0%)
Discriminación de vecinos

0.9
    No fue un Problema 135 (72%) 76 (70%)
    Fue un Problema Ligero 10 (5.3%) 5 (4.6%)
    Fue un Problema Intermedio 19 (10%) 13 (12%)
    Fue un Gran Problema 22 (12%) 15 (14%)
    No recuerda / no sabe 1 (0.5%) 0 (0%)
Atención en salud

>0.9
    No tuvimos dificultades. 60 (32%) 31 (28%)
    Fue una dificultad ligera 12 (6.4%) 7 (6.4%)
    Fue una dificultad intermedia 25 (13%) 17 (16%)
    Fue una gran dificultad 84 (45%) 52 (48%)
    No use este servicio 5 (2.7%) 2 (1.8%)
    No recuerda / no sabe 1 (0.5%) 0 (0%)
Enfermedades como diarreas

0.9
    No fue un Problema 64 (34%) 38 (35%)
    Fue un Problema Ligero 21 (11%) 14 (13%)
    Fue un Problema Intermedio 33 (18%) 22 (20%)
    Fue un Gran Problema 68 (36%) 34 (31%)
    No recuerda / no sabe 1 (0.5%) 1 (0.9%)
1 n (%)
2 Pearson’s Chi-squared test

Dificultades al momento de la migración según procedencia

Características Arequipa
N = 25
1
Cusco
N = 173
1
Puno
N = 95
1
p-value2
Agua para consumo


0.10
    No fue una dificultad 2 (9.1%) 34 (24%) 14 (16%)
    Fue una dificultad Ligera 2 (9.1%) 5 (3.5%) 0 (0%)
    Fue una dificultad Intermedia 2 (9.1%) 19 (13%) 10 (12%)
    Fue una gran dificultad 16 (73%) 85 (59%) 61 (72%)
Agua para otros usos


0.12
    No fue una dificultad 6 (27%) 41 (29%) 15 (18%)
    Fue una dificultad Ligera 0 (0%) 8 (5.6%) 1 (1.2%)
    Fue una dificultad Intermedia 2 (9.1%) 18 (13%) 19 (22%)
    Fue una gran dificultad 14 (64%) 76 (53%) 50 (59%)
Desagüe del hogar


0.6
    No fue una dificultad 3 (14%) 29 (20%) 15 (18%)
    Fue una dificultad Ligera 0 (0%) 9 (6.3%) 4 (4.7%)
    Fue una dificultad Intermedia 1 (4.5%) 21 (15%) 13 (15%)
    Fue una gran dificultad 18 (82%) 84 (59%) 53 (62%)
Centros educativos



    No fue una dificultad 11 (50%) 66 (46%) 23 (27%)
    Fue una dificultad Ligera 2 (9.1%) 8 (5.6%) 0 (0%)
    Fue una dificultad Intermedia 1 (4.5%) 10 (7.0%) 9 (11%)
    Fue una gran dificultad 7 (32%) 50 (35%) 44 (52%)
    No usaba este servicio 0 (0%) 5 (3.5%) 4 (4.7%)
    No aplica 1 (4.5%) 3 (2.1%) 4 (4.7%)
    No sabe / No recuerda 0 (0%) 0 (0%) 1 (1.2%)
Electricidad en el hogar


0.7
    No fue una dificultad 5 (23%) 57 (40%) 30 (35%)
    Fue una dificultad Ligera 2 (9.1%) 9 (6.3%) 5 (5.9%)
    Fue una dificultad Intermedia 2 (9.1%) 14 (9.8%) 7 (8.2%)
    Fue una gran dificultad 13 (59%) 63 (44%) 42 (49%)
    No sabe / No recuerda 0 (0%) 0 (0%) 1 (1.2%)
Transporte público


0.5
    No fue una dificultad 4 (18%) 49 (34%) 20 (24%)
    Fue una dificultad Ligera 1 (4.5%) 9 (6.3%) 5 (5.9%)
    Fue una dificultad Intermedia 2 (9.1%) 17 (12%) 10 (12%)
    Fue una gran dificultad 15 (68%) 68 (48%) 50 (59%)
Programas sociales



    No fue una dificultad 12 (55%) 72 (50%) 35 (41%)
    Fue una dificultad Ligera 0 (0%) 15 (10%) 1 (1.2%)
    Fue una dificultad Intermedia 0 (0%) 3 (2.1%) 3 (3.5%)
    Fue una gran dificultad 7 (32%) 32 (22%) 28 (33%)
    No usaba este servicio 3 (14%) 19 (13%) 18 (21%)
    No aplica / no era elegible 0 (0%) 1 (0.7%) 0 (0%)
    No sabe / No recuerda 0 (0%) 1 (0.7%) 0 (0%)
Delincuencia


0.12
    No fue un Problema 13 (59%) 98 (69%) 46 (54%)
    Fue un Problema Ligero 1 (4.5%) 11 (7.7%) 7 (8.2%)
    Fue un Problema Intermedio 3 (14%) 5 (3.5%) 11 (13%)
    Fue un Gran Problema 5 (23%) 28 (20%) 21 (25%)
    No recuerda / no sabe 0 (0%) 1 (0.7%) 0 (0%)
Discriminación de vecinos


0.019
    No fue un Problema 19 (86%) 94 (66%) 66 (78%)
    Fue un Problema Ligero 2 (9.1%) 9 (6.3%) 1 (1.2%)
    Fue un Problema Intermedio 0 (0%) 21 (15%) 4 (4.7%)
    Fue un Gran Problema 1 (4.5%) 18 (13%) 14 (16%)
    No recuerda / no sabe 0 (0%) 1 (0.7%) 0 (0%)
Atención en salud



    No tuvimos dificultades. 7 (32%) 47 (33%) 23 (27%)
    Fue una dificultad ligera 0 (0%) 11 (7.7%) 6 (7.1%)
    Fue una dificultad intermedia 2 (9.1%) 26 (18%) 5 (5.9%)
    Fue una gran dificultad 12 (55%) 57 (40%) 46 (54%)
    No use este servicio 0 (0%) 2 (1.4%) 5 (5.9%)
    No recuerda / no sabe 1 (4.5%) 0 (0%) 0 (0%)
Enfermedades como diarreas


0.4
    No fue un Problema 4 (18%) 48 (34%) 38 (45%)
    Fue un Problema Ligero 2 (9.1%) 19 (13%) 10 (12%)
    Fue un Problema Intermedio 6 (27%) 26 (18%) 13 (15%)
    Fue un Gran Problema 10 (45%) 48 (34%) 24 (28%)
    No recuerda / no sabe 0 (0%) 2 (1.4%) 0 (0%)
1 n (%)
2 Fisher’s exact test

Dificultades al momento de la migración según procedencia

Características Apurímac
N = 25
1
Arequipa
N = 25
1
Cusco
N = 173
1
Puno
N = 95
1
p-value
Agua para consumo




    No fue una dificultad 5 (26%) 2 (9.1%) 34 (24%) 14 (16%)
    Fue una dificultad Ligera 2 (11%) 2 (9.1%) 5 (3.5%) 0 (0%)
    Fue una dificultad Intermedia 2 (11%) 2 (9.1%) 19 (13%) 10 (12%)
    Fue una gran dificultad 10 (53%) 16 (73%) 85 (59%) 61 (72%)
Agua para otros usos




    No fue una dificultad 10 (53%) 6 (27%) 41 (29%) 15 (18%)
    Fue una dificultad Ligera 0 (0%) 0 (0%) 8 (5.6%) 1 (1.2%)
    Fue una dificultad Intermedia 0 (0%) 2 (9.1%) 18 (13%) 19 (22%)
    Fue una gran dificultad 9 (47%) 14 (64%) 76 (53%) 50 (59%)
Desagüe del hogar




    No fue una dificultad 7 (37%) 3 (14%) 29 (20%) 15 (18%)
    Fue una dificultad Ligera 0 (0%) 0 (0%) 9 (6.3%) 4 (4.7%)
    Fue una dificultad Intermedia 4 (21%) 1 (4.5%) 21 (15%) 13 (15%)
    Fue una gran dificultad 8 (42%) 18 (82%) 84 (59%) 53 (62%)
Centros educativos




    No fue una dificultad 7 (37%) 11 (50%) 66 (46%) 23 (27%)
    Fue una dificultad Ligera 3 (16%) 2 (9.1%) 8 (5.6%) 0 (0%)
    Fue una dificultad Intermedia 1 (5.3%) 1 (4.5%) 10 (7.0%) 9 (11%)
    Fue una gran dificultad 6 (32%) 7 (32%) 50 (35%) 44 (52%)
    No usaba este servicio 2 (11%) 0 (0%) 5 (3.5%) 4 (4.7%)
    No aplica 0 (0%) 1 (4.5%) 3 (2.1%) 4 (4.7%)
    No sabe / No recuerda 0 (0%) 0 (0%) 0 (0%) 1 (1.2%)
Electricidad en el hogar




    No fue una dificultad 8 (42%) 5 (23%) 57 (40%) 30 (35%)
    Fue una dificultad Ligera 0 (0%) 2 (9.1%) 9 (6.3%) 5 (5.9%)
    Fue una dificultad Intermedia 4 (21%) 2 (9.1%) 14 (9.8%) 7 (8.2%)
    Fue una gran dificultad 7 (37%) 13 (59%) 63 (44%) 42 (49%)
    No sabe / No recuerda 0 (0%) 0 (0%) 0 (0%) 1 (1.2%)
Transporte público




    No fue una dificultad 7 (37%) 4 (18%) 49 (34%) 20 (24%)
    Fue una dificultad Ligera 0 (0%) 1 (4.5%) 9 (6.3%) 5 (5.9%)
    Fue una dificultad Intermedia 5 (26%) 2 (9.1%) 17 (12%) 10 (12%)
    Fue una gran dificultad 7 (37%) 15 (68%) 68 (48%) 50 (59%)
Programas sociales




    No fue una dificultad 5 (26%) 12 (55%) 72 (50%) 35 (41%)
    Fue una dificultad Ligera 2 (11%) 0 (0%) 15 (10%) 1 (1.2%)
    Fue una dificultad Intermedia 0 (0%) 0 (0%) 3 (2.1%) 3 (3.5%)
    Fue una gran dificultad 9 (47%) 7 (32%) 32 (22%) 28 (33%)
    No usaba este servicio 3 (16%) 3 (14%) 19 (13%) 18 (21%)
    No aplica / no era elegible 0 (0%) 0 (0%) 1 (0.7%) 0 (0%)
    No sabe / No recuerda 0 (0%) 0 (0%) 1 (0.7%) 0 (0%)
Delincuencia




    No fue un Problema 15 (79%) 13 (59%) 98 (69%) 46 (54%)
    Fue un Problema Ligero 0 (0%) 1 (4.5%) 11 (7.7%) 7 (8.2%)
    Fue un Problema Intermedio 2 (11%) 3 (14%) 5 (3.5%) 11 (13%)
    Fue un Gran Problema 2 (11%) 5 (23%) 28 (20%) 21 (25%)
    No recuerda / no sabe 0 (0%) 0 (0%) 1 (0.7%) 0 (0%)
Discriminación de vecinos




    No fue un Problema 13 (68%) 19 (86%) 94 (66%) 66 (78%)
    Fue un Problema Ligero 0 (0%) 2 (9.1%) 9 (6.3%) 1 (1.2%)
    Fue un Problema Intermedio 4 (21%) 0 (0%) 21 (15%) 4 (4.7%)
    Fue un Gran Problema 2 (11%) 1 (4.5%) 18 (13%) 14 (16%)
    No recuerda / no sabe 0 (0%) 0 (0%) 1 (0.7%) 0 (0%)
Atención en salud




    No tuvimos dificultades. 7 (37%) 7 (32%) 47 (33%) 23 (27%)
    Fue una dificultad ligera 1 (5.3%) 0 (0%) 11 (7.7%) 6 (7.1%)
    Fue una dificultad intermedia 6 (32%) 2 (9.1%) 26 (18%) 5 (5.9%)
    Fue una gran dificultad 5 (26%) 12 (55%) 57 (40%) 46 (54%)
    No use este servicio 0 (0%) 0 (0%) 2 (1.4%) 5 (5.9%)
    No recuerda / no sabe 0 (0%) 1 (4.5%) 0 (0%) 0 (0%)
Enfermedades como diarreas




    No fue un Problema 5 (26%) 4 (18%) 48 (34%) 38 (45%)
    Fue un Problema Ligero 0 (0%) 2 (9.1%) 19 (13%) 10 (12%)
    Fue un Problema Intermedio 4 (21%) 6 (27%) 26 (18%) 13 (15%)
    Fue un Gran Problema 10 (53%) 10 (45%) 48 (34%) 24 (28%)
    No recuerda / no sabe 0 (0%) 0 (0%) 2 (1.4%) 0 (0%)
1 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

Cambios en el Clima

Temperatura

Lluvias

Eventos Extremos

Patrones dietarios y migración

Antes de Migrar

Luego de la Migración

Percepción del estado nutricional

LS0tDQp0aXRsZTogIkVzdHVkaW8gTWlncmFudGVzIFBlZHJlZ2FsIg0KYXV0aG9yOiAiRXF1aXBvIEVuY3Vlc3RhcyAtIE9uZSBIZWFsdGggLSBTZWRlIEFSUSINCmRhdGU6ICIyMDI1LTAxLTE3Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogdW5pdGVkDQotLS0NCg0KIyAqKlJlc3VsdGFkb3MgcHJlbGltaW5hcmVzLS00KioNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgcmVzdWx0cz0naGlkZScpDQoNCiMgTGltcGlhciBlbCBlbnRvcm5vLCBleGNlcHRvIGFsZ3VuYXMgdmFyaWFibGVzIGVzcGVjw61maWNhcyBzaSBsYXMgaHViaWVyYQ0Kcm0obGlzdCA9IHNldGRpZmYobHMoKSwgYygpKSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJybmF0dXJhbGVhcnRoaGlyZXMiLCByZXBvcyA9ICJodHRwczovL3JvcGVuc2NpLnItdW5pdmVyc2UuZGV2IikNCiMgQ2FyZ2FyIGxpYnJlcsOtYXMgbmVjZXNhcmlhcw0KDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkoZ3QpICAgICAgICAgICMgUGFyYSBsYSBjcmVhY2nDs24gZGUgdGFibGFzDQpsaWJyYXJ5KGd0c3VtbWFyeSkgICAjIFBhcmEgbGEgY3JlYWNpw7NuIGRlIHRhYmxhcw0KbGlicmFyeShjaVRvb2xzKSAgICAgIyBHZW5lcmFjacOzbiBkZSBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YQ0KbGlicmFyeShzYW5kd2ljaCkgICAgIyBGdW5jacOzbiBkZSBtZWpvcmEgZW4gbGEgZXN0aW1hY2nDs24gZGUgcmVncmVzacOzbiANCmxpYnJhcnkoSG1pc2MpDQpsaWJyYXJ5KGZsZXh0YWJsZSkgICAjIEdlbmVyYXIgYXJjaGl2b3MgZGUgbGFzIHRhYmxhcw0KbGlicmFyeShmb3JjYXRzKSAgICAgIyBPcmRlbmFyIGNhdGVnb3LDrWFzIGRlIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShzcCkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHN0KQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KGdnc3BhdGlhbCkNCmxpYnJhcnkoZ2duZXdzY2FsZSkNCmxpYnJhcnkoY293cGxvdCkNCmxpYnJhcnkocGFjbWFuKQ0KbGlicmFyeShncmlkKQ0KbGlicmFyeShybmF0dXJhbGVhcnRoKQ0KbGlicmFyeShybmF0dXJhbGVhcnRoZGF0YSkNCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGhpcmVzKQ0KbGlicmFyeShkcGx5cikNCg0KIyBMaW1waWFyIGxhIGNvbnNvbGENCmNhdCgiXDAxNCIpDQoNCiMgUnV0YSBkZWwgYXJjaGl2bywgY29tcHV0YWRvcmEgSmhvbmENCiMgZmlsZV9wYXRoIDwtICJDOi9Vc2Vycy9DYXlldGFuby9Cb3gvTWlncmFjacOzbi9kYXRhL2Jhc2UgbW9kaWZpY2FkYS9CYXNlIGRlIGRhdG9zIGxpbXBpYSBlbmN1ZXN0YXMvZGF0YV9lbmN1ZXN0YXMuUkRTIg0KDQojIFJ1dGEgZGVsIGFyY2hpdm8sIGNvbXB1dGFkb3JhIE1pZ3VlbA0KZmlsZV9wYXRoIDwtICJDOi9Vc2Vycy9hcnR1cl80eXVjZnRtL0JveC9Qcm95ZWN0byBjbMOtbmljbyBQZWRyZWdhbC9NaWdyYWNpw7NuL2RhdGEvYmFzZSBtb2RpZmljYWRhL0Jhc2UgZGUgZGF0b3MgbGltcGlhIGVuY3Vlc3Rhcy9kYXRhX2VuY3Vlc3Rhcy5SRFMiDQoNCg0KDQojICMgIyAjICMgUnV0YSBkZWwgYXJjaGl2bywgY29tcHV0YWRvcmEgSm9yZ2UNCiMgICAgZmlsZV9wYXRoIDwtICJDOi9Vc2Vycy9qb3JnZS9Cb3gvUFJPWSBFY2hpbm9jb2Njb3Npcy9QZWRyZWdhbCAtICBNaWdyYW50cy9Qcm95ZWN0byBjbMOtbmljbyBQZWRyZWdhbC9NaWdyYWNpw7NuL2RhdGEvYmFzZSBtb2RpZmljYWRhL0Jhc2UgZGUgZGF0b3MgbGltcGlhIGVuY3Vlc3Rhcy9kYXRhX2VuY3Vlc3Rhcy5SRFMiDQoNCg0KDQoNCiMgVmVyaWZpY2FyIHNpIGVsIGFyY2hpdm8gZXhpc3RlIGFudGVzIGRlIGltcG9ydGFybG8NCmlmIChmaWxlLmV4aXN0cyhmaWxlX3BhdGgpKSB7DQogIGRhdGFfZW5jdWVzdGFzIDwtIGltcG9ydChmaWxlX3BhdGgpDQp9IGVsc2Ugew0KICBzdG9wKHBhc3RlKCLCoUFyY2hpdm8gbm8gZW5jb250cmFkbyEiLCBmaWxlX3BhdGgpKQ0KfQ0KDQpgYGANCg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KI3RhYmxlKGRhdGFfZW5jdWVzdGFzJHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCkNCg0KZGF0YV9ob2dhciA8LSBkYXRhX2VuY3Vlc3RhcyAlPiUNCiAgc2VsZWN0KHJlY29yZF9pZDpob2dhcl9jb21wbGV0ZSwgcmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50LmZhY3Rvcjpob2dhcl9jb21wbGV0ZS5mYWN0b3IpICU+JQ0KICBmaWx0ZXIocmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50ID09ICJpbmZvcm1hY2lvbl9ob2dhciIpDQoNCmRhdGFfYWR1bHRvIDwtIGRhdGFfZW5jdWVzdGFzICU+JQ0KICBzZWxlY3QocmVjb3JkX2lkLCByZWRjYXBfcmVwZWF0X2luc3RydW1lbnQsIGFkdWx0b19pbmRpdmlkdWFsX3RpbWVzdGFtcDpkZXBhX3Zpdl9fXzY2LCBkZXBhX2FkZDpkZXBhX19fMjUsIG9jdXBhX21pZ3JhOmFkdWx0b19pbmRpdmlkdWFsX2NvbXBsZXRlLCBzZXhvX3BhcnRpY2lwYW50ZS5mYWN0b3I6ZGVwYV92aXZfX182Ni5mYWN0b3IsIG9jdXBhX21pZ3JhLmZhY3RvcjphZHVsdG9faW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IpICU+JQ0KICBmaWx0ZXIocmVkY2FwX3JlcGVhdF9pbnN0cnVtZW50ID09ICJhZHVsdG9faW5kaXZpZHVhbCIpDQoNCmRhdGFfbWVub3IgPC0gZGF0YV9lbmN1ZXN0YXMgJT4lDQogIHNlbGVjdChyZWNvcmRfaWQsIHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCwgbWVub3JfaW5kaXZpZHVhbF90aW1lc3RhbXA6ZGVwYV92aXZfbV9fXzY2LCBkZXBhX2FkZF9tOmRlcGFfbV9fXzI1LCBvY3VwYV9taWdyYV9tOm1lbm9yX2luZGl2aWR1YWxfY29tcGxldGUsIHNleG9fcGFydGljaXBhbnRlX20uZmFjdG9yOmRlcGFfdml2X21fX182Ni5mYWN0b3IsIG9jdXBhX21pZ3JhX20uZmFjdG9yOm1lbm9yX2luZGl2aWR1YWxfY29tcGxldGUuZmFjdG9yKSAlPiUNCiAgZmlsdGVyKHJlZGNhcF9yZXBlYXRfaW5zdHJ1bWVudCA9PSAibWVub3JfaW5kaXZpZHVhbCIpDQoNCiMgRWxpbWluYW5kbyBjYXJhY3RlciAiX20iIGRlIGxhcyB2YXJpYWJsZXMgZGUgZGF0YV9tZW5vciBwYXJhIHF1ZSBzZWFuIHBhcnRlY2lkb3MgYSB2YXJpYWJsZXMgZGUgZGF0YV9hZHVsdG8NCmNvbG5hbWVzKGRhdGFfbWVub3IpIDwtIGdzdWIoIl9tIiwgIiIsIGNvbG5hbWVzKGRhdGFfbWVub3IpKQ0KDQojZ2xpbXBzZShzZWxlY3QoZGF0YV9tZW5vciwgY29udGFpbnMoIm9jdXBhaWciKSkpDQojZ2xpbXBzZShzZWxlY3QoZGF0YV9tZW5vciwgY29udGFpbnMoImdyYV9wb3QiKSkpDQoNCiMgQ29ycmlnaWVuZG8gY2FyYWN0ZXJlcyBkZSB2YXJpYWJsZXMgcGFyYSBxdWUgZXN0ZSBsaXN0byBwYXJhIHVuaXIgZGF0YV9hZHVsdG8geSBkYXRhX21lbm9yDQpjb2xuYW1lcyhkYXRhX21lbm9yKSA8LSBnc3ViKCJvY3VwYWlncmEiLCAib2N1cGFfbWlncmEiLCBjb2xuYW1lcyhkYXRhX21lbm9yKSkNCmNvbG5hbWVzKGRhdGFfbWVub3IpIDwtIGdzdWIoIm1pZ3JhX3BvdGl2byIsICJtaWdyYV9wX21vdGl2byIsIGNvbG5hbWVzKGRhdGFfbWVub3IpKQ0KDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBpbmRpdmlkdWFsX3RpbWVzdGFtcCA9IG1lbm9yX2luZGl2aWR1YWxfdGltZXN0YW1wKQ0KZGF0YV9hZHVsdG8gPC0gcmVuYW1lKGRhdGFfYWR1bHRvLCBpbmRpdmlkdWFsX3RpbWVzdGFtcCA9IGFkdWx0b19pbmRpdmlkdWFsX3RpbWVzdGFtcCkNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGRhdGVfYSA9IGRhdGUpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBvY3VwYV9taWdyYV9tb2RlID0gb2N1cGFfbWlncmFvZGUpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBjYW1iX21lbmVzID0gY2FtYmVuZXMpDQpkYXRhX21lbm9yIDwtIHJlbmFtZShkYXRhX21lbm9yLCBjYW1iX21lbmVzLmZhY3RvciA9IGNhbWJlbmVzLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGNvbWVudF9hID0gY29tZW50KQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgcF9pbmRpdmlkdWFsX2NvbXBsZXRlID0gbWVub3JfaW5kaXZpZHVhbF9jb21wbGV0ZSkNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIHBfaW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IgPSBtZW5vcl9pbmRpdmlkdWFsX2NvbXBsZXRlLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIG9jdXBhY2lvbl9tb2RlID0gb2N1cGFjaW9ub2RlKQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgb2N1cGFjaW9uX21vZGUuZmFjdG9yID0gb2N1cGFjaW9ub2RlLmZhY3RvcikNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIG9jdXBhX21pZ3JhX21vZGUuZmFjdG9yID0gb2N1cGFfbWlncmFvZGUuZmFjdG9yKQ0KZGF0YV9tZW5vciA8LSByZW5hbWUoZGF0YV9tZW5vciwgaG9tZV9jb21wX2FuaW1fYW50ZXNfdGlwbyA9IGhvbWVfd29ya19hbmltX2FfdGlwbykNCmRhdGFfbWVub3IgPC0gcmVuYW1lKGRhdGFfbWVub3IsIGhvbWVfY29tcF9hbmltX2FudGVzX3RpcG8uZmFjdG9yID0gaG9tZV93b3JrX2FuaW1fYV90aXBvLmZhY3RvcikNCmRhdGFfYWR1bHRvIDwtIHJlbmFtZShkYXRhX2FkdWx0bywgcF9pbmRpdmlkdWFsX2NvbXBsZXRlID0gYWR1bHRvX2luZGl2aWR1YWxfY29tcGxldGUpDQpkYXRhX2FkdWx0byA8LSByZW5hbWUoZGF0YV9hZHVsdG8sIHBfaW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IgPSBhZHVsdG9faW5kaXZpZHVhbF9jb21wbGV0ZS5mYWN0b3IpDQpkYXRhX2FkdWx0byRkYXRlX2EgPC0gYXMuY2hhcmFjdGVyKGRhdGFfYWR1bHRvJGRhdGVfYSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjQikgVW5pZW5kbyBkYXRhIGRlIGFkdWx0byB5IG1lbm9yLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCg0KIyBIb21lZ2VuaXphbmRvIGxhYmVsZW9zIGRlIGxhcyB2YXJpYWJsZXMgZGUgYW1iYXMgYmFzZXMgZGUgZGF0b3MNCmRhdGFfYWR1bHRvIDwtIGRhdGFfYWR1bHRvICU+JSAgbXV0YXRlKGFjcm9zcyh3aGVyZSh+IGluaGVyaXRzKC4sICJsYWJlbGxlZCIpKSwgYXMuY2hhcmFjdGVyKSkgIyBDb252ZXJ0aXIgY29sdW1uYXMgbGFiZWxsZWQgZW4gZGF0YV9hZHVsdG8NCmRhdGFfbWVub3IgPC0gZGF0YV9tZW5vciAlPiUgIG11dGF0ZShhY3Jvc3Mod2hlcmUofiBpbmhlcml0cyguLCAibGFiZWxsZWQiKSksIGFzLmNoYXJhY3RlcikpICMgQ29udmVydGlyIGNvbHVtbmFzIGxhYmVsbGVkIGVuIGRhdGFfbWVub3INCg0KIyBVbmllbmRvIGRhdGENCmRhdGFfaW5kaXZpZHVhbCA8LSBiaW5kX3Jvd3MoZGF0YV9hZHVsdG8sIGRhdGFfbWVub3IpDQpybShkYXRhX2FkdWx0bywgZGF0YV9tZW5vcikNCg0KDQoNCiMgQ29tcHJvYmFuZG8gc2kgaGF5IHZhcmlhYmxlcyBxdWUgbm8gaGFuIGFwcGVuZWFkbyBiaWVuDQojY29sdW1uYXNfYWR1bHRvIDwtIGNvbG5hbWVzKGRhdGFfYWR1bHRvKQ0KI2NvbHVtbmFzX2luZGl2aWR1YWwgPC0gY29sbmFtZXMoZGF0YV9pbmRpdmlkdWFsKQ0KI2FkaWNpb25hbGVzX2luZGl2aWR1YWwgPC0gc2V0ZGlmZihjb2x1bW5hc19pbmRpdmlkdWFsLCBjb2x1bW5hc19hZHVsdG8pDQojYWRpY2lvbmFsZXNfYWR1bHRvIDwtIHNldGRpZmYoY29sdW1uYXNfYWR1bHRvLCBjb2x1bW5hc19pbmRpdmlkdWFsKQ0KI2NhdCgiVmFyaWFibGVzIGFkaWNpb25hbGVzIGVuIGRhdGFfaW5kaXZpZHVhbDpcbiIpDQojcHJpbnQoYWRpY2lvbmFsZXNfaW5kaXZpZHVhbCkNCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQojI0MpIENvcnJlY2Npb25lcyBJbmRpdmlkdWFsIC8gRGF0YSBIb2dhciAgLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCiMgICAjIyMNCiMgRGF0YSBJbmRpdmlkdWFsIChBZHVsdG9zIC8gTmnDsW9zKQ0KDQoNCiN0YWJsZShkYXRhX2luZGl2aWR1YWwkbWlncmFfcF95ZWFyX2xsZWdvLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQojIENsYXNpZmljYW5kbyBhIGxvcyBtaWdyYW50ZXMgaW5kaXZpZHVhbGVzIA0KZGF0YV9pbmRpdmlkdWFsIDwtIGRhdGFfaW5kaXZpZHVhbCAlPiUNCiAgbXV0YXRlKGNsYXNpZmljYWNpb25faW5kaXZpZHVhbCA9IGNhc2Vfd2hlbigNCiAgICBtaWdyYV9wX3llYXJfbGxlZ28gPj0gMjAyMSAmIG1pZ3JhX3BfeWVhcl9sbGVnbyA8PSAyMDI0IH4gImMuTWlncmFudGUgcmVjaWVudGUiLA0KICAgIG1pZ3JhX3BfeWVhcl9sbGVnbyA+PSAyMDE3ICYgbWlncmFfcF95ZWFyX2xsZWdvIDw9IDIwMjAgfiAiYi5NaWdyYW50ZSBpbnRlcm1lZGlvIiwNCiAgICBtaWdyYV9wX3llYXJfbGxlZ28gPD0gMjAxNiB+ICJhLk1pZ3JhbnRlIHRhcmRpbyIsDQogICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8gIyBQYXJhIHZhbG9yZXMgbm8gZXNwZWNpZmljYWRvcywgc2kgZXhpc3RpZXJhbg0KICApKSAlPiUgDQogIGdyb3VwX2J5KHJlY29yZF9pZCkgJT4lDQogIG11dGF0ZShjbGFzaWZpY2FjaW9uX2hvZ2FyID0gY2FzZV93aGVuKA0KICAgIGFueShtaWdyYV9wX3llYXJfbGxlZ28gPD0gMjAxNikgfiAiYS5Ib2dhciBjb24gYWxnw7puIG1pZ3JhbnRlIHRhcmRpbyIsDQogICAgYW55KG1pZ3JhX3BfeWVhcl9sbGVnbyA+PSAyMDE3ICYgbWlncmFfcF95ZWFyX2xsZWdvIDw9IDIwMjApIH4gImIuSG9nYXIgY29uIGFsZ8O6biBtaWdyYW50ZSBpbnRlcm1lZGlvIiwNCiAgICBhbnkobWlncmFfcF95ZWFyX2xsZWdvID49IDIwMjEgJiBtaWdyYV9wX3llYXJfbGxlZ28gPD0gMjAyNCkgfiAiYy5Ib2dhciBjb24gYWxnw7puIG1pZ3JhbnRlIHJlY2llbnRlIiwNCiAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXw0KICApKSAlPiUNCiAgdW5ncm91cCgpDQoNCiN0YWJsZShkYXRhX2luZGl2aWR1YWwkY2xhc2lmaWNhY2lvbl9pbmRpdmlkdWFsKQ0KDQojZGF0YV9pbmRpdmlkdWFsICU+JQ0KIyAgc2VsZWN0KHJlY29yZF9pZCwgYV9uYW1lLCBtaWdyYV9wX3llYXJfbGxlZ28sIGNsYXNpZmljYWNpb25faW5kaXZpZHVhbCwgY2xhc2lmaWNhY2lvbl9ob2dhcikgJT4lIHNhbXBsZV9uKDIwKQ0KDQojZGF0YV9pbmRpdmlkdWFsICU+JQ0KIyAgZmlsdGVyKGJldHdlZW4ocmVjb3JkX2lkLCAxMjAsIDEzMCkpICU+JQ0KIyAgYXJyYW5nZShyZWNvcmRfaWQpICU+JSANCiMgIHNlbGVjdChyZWNvcmRfaWQsIGFfbmFtZSwgbWlncmFfcF95ZWFyX2xsZWdvLCBjbGFzaWZpY2FjaW9uX2luZGl2aWR1YWwsIGNsYXNpZmljYWNpb25faG9nYXIpDQoNCg0KZGF0YV9pbmRpdmlkdWFsX2NsYXNzID0gZGF0YV9pbmRpdmlkdWFsICU+JSANCiAgc2VsZWN0KHJlY29yZF9pZCwgY2xhc2lmaWNhY2lvbl9ob2dhcikNCg0KDQojICAgIyMjDQojIyBEYXRhIEhvZ2FyDQoNCg0KIyBSZWFzaWduYXIgbG9zIHZhbG9yZXMgZGUgbG9jYWxpZGFkLmZhY3RvciBkb25kZSBsb2NhbGlkYWQgPT0gOA0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUobG9jYWxpZGFkLmZhY3RvciA9IGlmZWxzZShsb2NhbGlkYWQgPT0gOCAmIGxvY2FsaWRhZC5mYWN0b3IgPT0gIk90cm8gKEVzcGVjaWZpY2FyKSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXB1cmltZcOxb3MiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGxvY2FsaWRhZC5mYWN0b3IpKSkgJT4lDQogIG11dGF0ZShsb2NhbGlkYWQuZmFjdG9yID0gZmFjdG9yKGxvY2FsaWRhZC5mYWN0b3IpKQ0KDQoNCiMgRWxpbWluYXIgbG9zIHZhbG9yZXMgZXNwZWPDrWZpY29zIGRlIHJlY29yZF9pZCBlbiB1biBzb2xvIHBhc28NCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFyZWNvcmRfaWQgJWluJSBjKDIxLCAzNCwgMTAzLCAxMDksIDExMSwgMTE4LCAxNDksIDE1NCwgMTU1LCAxNTYsIDE1OCwgMTYwLCAxNzcsIDE5MSwgMjM0LCAyMzUsIDI0MCkpDQoNCg0KDQojIE1pZWJyb3MgZGVsIGhvZ2FyDQoNCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgbXV0YXRlKA0KICAgIG1lbm9yX2VkYWRfaCA9IGNhc2Vfd2hlbigNCiAgICAgICMgQ29uZGljacOzbiAxOiBIYXkgbWVub3JlcyBkZSBlZGFkIGVuIGVsIGhvZ2FyIHNpIG1lbm9yXzVfYWxsIG8gZV82XzE4ID49IDENCiAgICAgICghaXMubmEobWVub3JfNV9hbGwpICYgbWVub3JfNV9hbGwgPj0gMSkgfCAoIWlzLm5hKGVfNl8xOCkgJiBlXzZfMTggPj0gMSkgfiAwLA0KICAgICAgIyBDb25kaWNpw7NuIDI6IE5vIGhheSBtZW5vcmVzIHNpIHBlcnNvbmFzX2hvZ2FyID49IDEgeSBhbWJhcyB2YXJpYWJsZXMgc29uIE5BDQogICAgICBwZXJzb25hc19ob2dhciA+PSAxICYgaXMubmEobWVub3JfNV9hbGwpICYgaXMubmEoZV82XzE4KSB+IDEsDQogICAgICAjIENvbmRpY2nDs24gMzogTm8gaGF5IG1lbm9yZXMgc2kgbWF5b3JfMThfYWxsID49IDENCiAgICAgICFpcy5uYShtYXlvcl8xOF9hbGwpICYgbWF5b3JfMThfYWxsID49IDEgfiAxLA0KICAgICAgIyBDb25kaWNpw7NuIFByZWRldGVybWluYWRhOiBBc2lnbmFyIE5BDQogICAgICBUUlVFIH4gTkFfcmVhbF8NCiAgICApDQogICkNCg0KDQojIFZlcmlmaWNhciBsYSBkaXN0cmlidWNpw7NuIGRlIG1lbm9yX2VkYWRfaA0KI3RhYmxlKGRhdGFfaG9nYXIkbWVub3JfZWRhZF9oLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQojIEluc2VndXJpZGFkIEFsaW1lbnRhcmlhDQoNCg0KI2dsaW1wc2Uoc2VsZWN0KGRhdGFfaG9nYXIsIGNvbnRhaW5zKCJpbnNlX20iKSkpDQoNCg0KIyBGaWx0cmFyIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMNCnZhcmlhYmxlc19pbnRlcmVzIDwtIGMoImluc2VfcHJlb19hbGkiLCAiaW5zZV9zaW5fYWxpIiwgImluc2Vfbm9fc2FsdSIsDQogICAgICAgICAgICAgICAgICAgICAgICJpbnNlX3BvY2FfdmFyaWUiLCAiaW5zZV9mb29kX2Rlam8iLCAiaW5zZV9mb29kX21lbm9zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgImluc2VfaGFtX25vX2Zvb2QiLCAiaW5zZV9vbmVfZm9vZCIsICJpbnNlX21fbm9fc2FsdSIsICJpbnNlX21fcG9jYV92YXJpZSIsDQogICAgICAgICAgICAgICAgICAgICAgICJpbnNlX21fZm9vZF9kZWpvIiwgImluc2VfbV9mb29kX21lbm9zIiwgImluc2VfbV9mb29kX2Rpc21pIiwgImluc2VfbV9oYW1fbm9fZm9vZCIsICJpbnNlX21fb25lX2Zvb2QiICkNCg0KDQojIFBhc28gMTogQ29udmVydGlyIHZhbG9yZXMgZGlzdGludG9zIGRlIDEgeSAyIGVuIE5BDQpkYXRhX2hvZ2FyIDwtIGRhdGFfaG9nYXIgJT4lDQogIG11dGF0ZShhY3Jvc3MoYWxsX29mKHZhcmlhYmxlc19pbnRlcmVzKSwgfiBpZmVsc2UoLiAlaW4lIGMoMSwgMiwgTkEpLCAuLCBOQSkpKQ0KDQoNCiN0YWJsZShkYXRhX2hvZ2FyJGluc2VfcHJlb19hbGkpDQojdGFibGUoZGF0YV9ob2dhciRpbnNlX21fb25lX2Zvb2QpDQoNCg0KDQojIFRyYW5zZm9ybWFyIHZhbG9yZXMgZGUgMSBhIDAgeSB2YWxvcmVzIGRlIDIgYSAxIGVuIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMNCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgbXV0YXRlKGFjcm9zcyhhbGxfb2YodmFyaWFibGVzX2ludGVyZXMpLCB+IGNhc2Vfd2hlbigNCiAgICAuID09IDEgfiAwLCAgIyBTaSBlbCB2YWxvciBlcyAxLCBjYW1iaWFyIGEgMA0KICAgIC4gPT0gMiB+IDEsICAjIFNpIGVsIHZhbG9yIGVzIDIsIGNhbWJpYXIgYSAxDQogICAgVFJVRSB+IC4gICAgICMgTWFudGVuZXIgbG9zIHZhbG9yZXMgcXVlIG5vIHNlYW4gMSBuaSAyIChjb21vIE5BKQ0KICApKSkNCg0KDQoNCiMgUGFzbyAyOiBDcmVhciBsYSB2YXJpYWJsZSAiaW5zZV92ZXIiDQpkYXRhX2hvZ2FyIDwtIGRhdGFfaG9nYXIgJT4lDQogIG11dGF0ZShpbnNlX3ZlciA9IGlmZWxzZShyb3dTdW1zKGlzLm5hKGFjcm9zcyhhbGxfb2YodmFyaWFibGVzX2ludGVyZXMpKSkpID09IDAsIDEsIDApKQ0KI3RhYmxlKGRhdGFfaG9nYXIkaW5zZV92ZXIsIHVzZU5BID0gImFsd2F5cyIpDQoNCiMgUGFzbyAzOiBDb250YXIgZWwgdG90YWwgZGUgTkEgZW4gbGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcw0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBtdXRhdGUoaW5zZV92ZXJfbmEgPSByb3dTdW1zKGlzLm5hKGFjcm9zcyhhbGxfb2YodmFyaWFibGVzX2ludGVyZXMpKSkpKQ0KI3RhYmxlKGRhdGFfaG9nYXIkaW5zZV92ZXJfbmEsIHVzZU5BID0gImFsd2F5cyIpDQoNCg0KIyBQYXNvIDQ6IENyZWFyIGxhIHZhcmlhYmxlICJmb29kX2luc2VjdXJpdHlfc2NvcmUiDQpkYXRhX2hvZ2FyIDwtIGRhdGFfaG9nYXIgJT4lDQogIG11dGF0ZShmb29kX2luc2VjdXJpdHlfc2NvcmUgPSByb3dTdW1zKGFjcm9zcyhhbGxfb2YodmFyaWFibGVzX2ludGVyZXMpKSwgbmEucm0gPSBUUlVFKSkNCg0KDQoNCg0KDQojIFBhc28gNTogQ3JlYXIgbGEgdmFyaWFibGUgZm9vZF9pbnNlY3VyaXR5IGNvbnNpZGVyYW5kbyBjb21wbGV0aXR1ZCBkZSByZXNwdWVzdGFzDQoNCmRhdGFfaG9nYXIgPC0gZGF0YV9ob2dhciAlPiUNCiAgbXV0YXRlKGZvb2RfaW5zZWN1cml0eSA9IGNhc2Vfd2hlbigNCiAgICAjIEhvZ2FyZXMgY29uIG1lbm9yZXM6IFJlc3B1ZXN0YXMgY29tcGxldGFzICgxNSB2YXJpYWJsZXMpIHkgc2NvcmUgPj0gNg0KICAgIG1lbm9yX2VkYWRfaCA9PSAwICYgaW5zZV92ZXJfbmEgPT0gMCAmIGZvb2RfaW5zZWN1cml0eV9zY29yZSA+PSA2IH4gMSwNCiAgICBtZW5vcl9lZGFkX2ggPT0gMCAmIGluc2VfdmVyX25hID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPCA2IH4gMCwNCiAgICAjIEhvZ2FyZXMgc2luIG1lbm9yZXM6IFJlc3B1ZXN0YXMgY29tcGxldGFzICg4IHZhcmlhYmxlcykgeSBzY29yZSA+PSA0DQogICAgbWVub3JfZWRhZF9oID09IDEgJiByb3dTdW1zKGlzLm5hKGFjcm9zcyh2YXJpYWJsZXNfaW50ZXJlc1sxOjhdKSkpID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPj0gNCB+IDEsDQogICAgbWVub3JfZWRhZF9oID09IDEgJiByb3dTdW1zKGlzLm5hKGFjcm9zcyh2YXJpYWJsZXNfaW50ZXJlc1sxOjhdKSkpID09IDAgJiBmb29kX2luc2VjdXJpdHlfc2NvcmUgPCA0IH4gMCwNCiAgICAjIFNpIGxhcyByZXNwdWVzdGFzIG5vIGVzdMOhbiBjb21wbGV0YXMsIGFzaWduYXIgTkENCiAgICBUUlVFIH4gTkFfcmVhbF8NCiAgKSkNCg0KIyBEaXN0cmlidWNpw7NuIGRlIGZvb2RfaW5zZWN1cml0eQ0KI3RhYmxlKGRhdGFfaG9nYXIkZm9vZF9pbnNlY3VyaXR5LCB1c2VOQSA9ICJhbHdheXMiKQ0KDQoNCg0KZGF0YV9pbmRpdmlkdWFsX2NsYXNzX3VuaXF1ZSA8LSBkYXRhX2luZGl2aWR1YWxfY2xhc3MgJT4lDQogIGRpc3RpbmN0KHJlY29yZF9pZCwgY2xhc2lmaWNhY2lvbl9ob2dhcikNCg0KZGF0YV9ob2dhciA8LSBkYXRhX2hvZ2FyICU+JQ0KICBsZWZ0X2pvaW4oZGF0YV9pbmRpdmlkdWFsX2NsYXNzX3VuaXF1ZSwgYnkgPSAicmVjb3JkX2lkIikNCg0KZGF0YV9ob2dhciA8LSByZW5hbWUoZGF0YV9ob2dhciwgY2xhc2lmaWNhY2lvbl9ob2dhcl9lID0gY2xhc2lmaWNhY2lvbl9ob2dhcikNCg0Kcm0gKGRhdGFfaW5kaXZpZHVhbF9jbGFzcywgZGF0YV9pbmRpdmlkdWFsX2NsYXNzX3VuaXF1ZSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNEKSBVbmllbmRvIGRhdGEgaG9nYXIgZSBpbmRpdmlkdWFsLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCmRhdGFfaW5kaXZpZHVhbF9ob2dhciA8LSBkYXRhX2luZGl2aWR1YWwgJT4lDQogIGxlZnRfam9pbihkYXRhX2hvZ2FyLCBieSA9ICJyZWNvcmRfaWQiKQ0KDQpybShkYXRhX2luZGl2aWR1YWwpDQoNCg0KDQpgYGANCg0KIyBMdWdhciBkZSBQcm9jZWRlbmNpYSBkZSBsb3MgTWlncmFudGVzDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCB3YXJuaW5nID0gRkFMU0V9DQpkYXRhX2VuY3Vlc3RhcyA8LSBkYXRhX2VuY3Vlc3RhcyAlPiUNCiAgbXV0YXRlKHByb3ZpbmNpYSA9IHBhc3RlKA0KICAgICMgUHJvdmluY2lhcyBkZSBQdW5vDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzEgPT0gMSwgIlB1bm8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfcHVuX19fMiA9PSAxLCAiQXrDoW5nYXJvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzMgPT0gMSwgIkNhcmFiYXlhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzQgPT0gMSwgIkNodWN1aXRvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzUgPT0gMSwgIkVsIENvbGxhbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9wdW5fX182ID09IDEsICJIdWFuY2FuZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9wdW5fX183ID09IDEsICJMYW1wYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9wdW5fX184ID09IDEsICJNZWxnYXIiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfcHVuX19fOSA9PSAxLCAiTW9obyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9wdW5fX18xMCA9PSAxLCAiU2FuIEFudG9uaW8gZGUgUHV0aW5hIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzExID09IDEsICJTYW4gUm9tw6FuIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX3B1bl9fXzEyID09IDEsICJTYW5kaWEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfcHVuX19fMTMgPT0gMSwgIll1bmd1eW8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIFByb3ZpbmNpYXMgZGUgQ3VzY28NCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fMSA9PSAxLCAiQ3VzY28iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fMiA9PSAxLCAiQWNvbWF5byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9jdXNfX18zID09IDEsICJBbnRhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2N1c19fXzQgPT0gMSwgIkNhbGNhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2N1c19fXzUgPT0gMSwgIkNhbmFzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2N1c19fXzYgPT0gMSwgIkNhbmNoaXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fNyA9PSAxLCAiQ2h1bWJpdmlsY2FzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2N1c19fXzggPT0gMSwgIkVzcGluYXIiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fOSA9PSAxLCAiTGEgY29udmVuY2nDs24iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fMTAgPT0gMSwgIlBhcnVybyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9jdXNfX18xMSA9PSAxLCAiUGF1Y2FydGFtYm8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fMTIgPT0gMSwgIlF1aXNwaWNhbmNoaXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfY3VzX19fMTMgPT0gMSwgIlVydWJhbWJhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgIyBQcm92aW5jaWFzIGRlIEFwdXJpbWFjDQogICAgaWZfZWxzZShjX3Byb3ZpX2FwdV9fXzEgPT0gMSwgIkFiYW5jYXkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfYXB1X19fMiA9PSAxLCAiQW5kYWh1YXlsYXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfYXB1X19fMyA9PSAxLCAiQW50YWJhbWJhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2FwdV9fXzQgPT0gMSwgIkF5bWFyYWVzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShjX3Byb3ZpX2FwdV9fXzUgPT0gMSwgIkNvdGFiYW1iYXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKGNfcHJvdmlfYXB1X19fNiA9PSAxLCAiQ2hpbmNoZXJvcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UoY19wcm92aV9hcHVfX183ID09IDEsICJHcmF1IiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgIyAxKSBQcm92aW5jaWFzIGRlbCBBbWF6b25hcw0KICAgIGlmX2Vsc2UocHJvdmlfYW1hX19fMSA9PSAxLCAiQ2hhY2hhcG95YXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FtYV9fXzIgPT0gMSwgIkJhZ3VhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hbWFfX18zID09IDEsICJCb25nYXJhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hbWFfX180ID09IDEsICJDb25kb3JjYW5xdWkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FtYV9fXzUgPT0gMSwgIkx1eWEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FtYV9fXzYgPT0gMSwgIlJvZHJpZ3VleiBkZSBNZW5kb3phIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hbWFfX183ID09IDEsICJVdGN1YmFtYmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDIpIFByb3ZpbmNpYXMgZGUgQW5jYXNoDQogICAgaWZfZWxzZShwcm92aV9hc2hfX18xID09IDEsICJIdWFyYXoiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzIgPT0gMSwgIkFpamEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzMgPT0gMSwgIkFudG9uaW8gUmF5bW9uZGkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzQgPT0gMSwgIkFzdW5jacOzbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXNoX19fNSA9PSAxLCAiQm9sb2duZXNpIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX182ID09IDEsICJDYXJodWF6IiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX183ID09IDEsICJDYXJsb3MgRi4gRml0emNhcnJhbGQiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzggPT0gMSwgIkNhc21hIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX185ID09IDEsICJDb3JvbmdvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX18xMCA9PSAxLCAiSHVhcmkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzExID09IDEsICJIdWFybWV5IiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX18xMiA9PSAxLCAiSHVheWxhcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXNoX19fMTMgPT0gMSwgIk1hcmlzY2FsIEx1enVyaWFnYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXNoX19fMTQgPT0gMSwgIk9jcm9zIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hc2hfX18xNSA9PSAxLCAiUGFsbGFzY2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzE2ID09IDEsICJQb21hYmFtYmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzE3ID09IDEsICJSZWN1YXkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FzaF9fXzE4ID09IDEsICJTYW50YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXNoX19fMTkgPT0gMSwgIlNpaHVhcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXNoX19fMjAgPT0gMSwgIll1bmdheSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgNCkgUHJvdmluY2lhcyBkZSBBcmVxdWlwYQ0KICAgIGlmX2Vsc2UocHJvdmlfYXJlX19fMSA9PSAxLCAiQXJlcXVpcGEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FyZV9fXzIgPT0gMSwgIkNhbWFuYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXJlX19fMyA9PSAxLCAiQ2FyYXZlbGkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FyZV9fXzQgPT0gMSwgIkNhc3RpbGxhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9hcmVfX181ID09IDEsICJDYXlsbG9tYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXJlX19fNiA9PSAxLCAiQ29uZGVzdXlvcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXJlX19fNyA9PSAxLCAiSXNsYXkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2FyZV9fXzggPT0gMSwgIkxhIFVuacOzbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgNSkgUHJvdmluY2lhcyBkZSBBeWFjdWNobw0KICAgIGlmX2Vsc2UocHJvdmlfYXlhX19fMSA9PSAxLCAiSHVhbWFuZ2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2F5YV9fXzIgPT0gMSwgIkNhbmdhbGxvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9heWFfX18zID09IDEsICJIdWFuY2EgU2FuY29zIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9heWFfX180ID09IDEsICJIdWFudGEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2F5YV9fXzUgPT0gMSwgIkxhIE1hciIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXlhX19fNiA9PSAxLCAiTHVjYW5hcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXlhX19fNyA9PSAxLCAiUGFyaW5hY29jaGFzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9heWFfX184ID09IDEsICJQYXVjYXIgRGVsIFNhcmEgU2FyYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXlhX19fOSA9PSAxLCAiU3VjcmUiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2F5YV9fXzEwID09IDEsICJWaWN0b3IgRmFqYXJkbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfYXlhX19fMTEgPT0gMSwgIlZpbGNhcyBIdWFtYW4iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDYpIFByb3ZpbmNpYXMgZGUgQ2FqYW1hcmNhDQogICAgaWZfZWxzZShwcm92aV9jYWpfX18xID09IDEsICJDYWphbWFyY2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2Nhal9fXzIgPT0gMSwgIkNhamFiYW1iYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfY2FqX19fMyA9PSAxLCAiQ2VsZW5kw61uIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX180ID09IDEsICJDaG90YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfY2FqX19fNSA9PSAxLCAiQ29udHVtYXphIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX182ID09IDEsICJDdXRlcnZvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX183ID09IDEsICJIdWFsZ2F5b2MiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2Nhal9fXzggPT0gMSwgIkphw6luIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX185ID09IDEsICJTYW4gSWduYWNpbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfY2FqX19fMTAgPT0gMSwgIlNhbiBNYXJjb3MiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2Nhal9fXzExID09IDEsICJTYW4gTWlndWVsIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX18xMiA9PSAxLCAiU2FuIFBhYmxvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9jYWpfX18xMyA9PSAxLCAiU2FudGEgQ3J1eiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgNykgUHJvdmluY2lhcyBkZSBDYWxsYW8NCiAgICBpZl9lbHNlKHByb3ZpX2NhbGxhb19fXzEgPT0gMSwgIkNhbGxhbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgOSkgUHJvdmluY2lhcyBkZSBIdWFuY2F2ZWxpY2ENCiAgICBpZl9lbHNlKHByb3ZpX2h1YW5jX19fMSA9PSAxLCAiSHVhbmNhdmVsaWNhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFuY19fXzIgPT0gMSwgIkFjb2JhbWJhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFuY19fXzMgPT0gMSwgIkFuZ2FyYWVzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFuY19fXzQgPT0gMSwgIkNhc3Ryb3ZpcnJleW5hIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFuY19fXzUgPT0gMSwgIkNodXJjYW1wYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaHVhbmNfX182ID09IDEsICJIdWF5dGFyYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaHVhbmNfX183ID09IDEsICJUYXlhY2FqYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMTApIFByb3ZpbmNpYXMgZGUgSHXDoW51Y28NCiAgICBpZl9lbHNlKHByb3ZpX2h1YW51Y29fX18xID09IDEsICJIdWFudWNvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFudWNvX19fMiA9PSAxLCAiQW1ibyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaHVhbnVjb19fXzMgPT0gMSwgIkRvcyBEZSBNYXlvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFudWNvX19fNCA9PSAxLCAiSHVhY2F5YmFtYmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2h1YW51Y29fX181ID09IDEsICJIdWFtYWxpZXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2h1YW51Y29fX182ID09IDEsICJMZW9uY2lvIFByYWRvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFudWNvX19fNyA9PSAxLCAiTWFyYcOxb24iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2h1YW51Y29fX184ID09IDEsICJQYWNoaXRlYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaHVhbnVjb19fXzkgPT0gMSwgIlB1ZXJ0byBJbmNhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9odWFudWNvX19fMTAgPT0gMSwgIkxhdXJpY29jaGEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2h1YW51Y29fX18xMSA9PSAxLCAiWWFyb3dpbGNhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgIyAxMSkgUHJvdmluY2lhcyBkZSBJY2ENCiAgICBpZl9lbHNlKHByb3ZpX2ljYV9fXzEgPT0gMSwgIkljYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaWNhX19fMiA9PSAxLCAiQ2hpbmNoYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfaWNhX19fMyA9PSAxLCAiTmF6Y2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2ljYV9fXzQgPT0gMSwgIlBhbHBhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9pY2FfX181ID09IDEsICJQaXNjbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMTIpIFByb3ZpbmNpYXMgZGUgSnVuw61uDQogICAgaWZfZWxzZShwcm92aV9qdW5fX18xID09IDEsICJIdWFuY2F5byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfanVuX19fMiA9PSAxLCAiQ29uY2VwY2lvbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfanVuX19fMyA9PSAxLCAiQ2hhbmNoYW1heW8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2p1bl9fXzQgPT0gMSwgIkphdWphIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9qdW5fX181ID09IDEsICJKdW5pbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfanVuX19fNiA9PSAxLCAiU2F0aXBvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9qdW5fX183ID09IDEsICJUYXJtYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfanVuX19fOCA9PSAxLCAiWWF1bGkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2p1bl9fXzkgPT0gMSwgIkNodXBhY2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDEzKSBQcm92aW5jaWFzIGRlIExhIExpYmVydGFkDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzEgPT0gMSwgIlRydWppbGxvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzIgPT0gMSwgIkFzY29wZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFsaWJfX18zID09IDEsICJCb2xpdmFyIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzQgPT0gMSwgIkNoZXBlbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFsaWJfX181ID09IDEsICJKdWxjYW4iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xhbGliX19fNiA9PSAxLCAiT3R1emNvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzcgPT0gMSwgIlBhY2FzbWF5byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFsaWJfX184ID09IDEsICJQYXRheiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFsaWJfX185ID09IDEsICJTYW5jaGV6IENhcnJpb24iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xhbGliX19fMTAgPT0gMSwgIlNhbnRpYWdvIERlIENodWNvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzExID09IDEsICJHcmFuIENoaW11IiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sYWxpYl9fXzEyID09IDEsICJWaXJ1IiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgIyAxNCkgUHJvdmluY2lhcyBkZSBMYW1iYXllcXVlDQogICAgaWZfZWxzZShwcm92aV9sYW1fX18xID09IDEsICJDaGljbGF5byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFtX19fMiA9PSAxLCAiRmVycmXDsWFmZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGFtX19fMyA9PSAxLCAiTGFtYmF5ZXF1ZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMTUpIFByb3ZpbmNpYXMgZGUgTGltYQ0KICAgIGlmX2Vsc2UocHJvdmlfbGltYV9fXzEgPT0gMSwgIkxpbWEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xpbWFfX18yID09IDEsICJCYXJyYW5jYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGltYV9fXzMgPT0gMSwgIkNhamF0YW1ibyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGltYV9fXzQgPT0gMSwgIkNhbnRhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9saW1hX19fNSA9PSAxLCAiQ2HDsWV0ZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGltYV9fXzYgPT0gMSwgIkh1YXJhbCIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbGltYV9fXzcgPT0gMSwgIkh1YXJvY2hpcmkiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xpbWFfX184ID09IDEsICJIdWF1cmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xpbWFfX185ID09IDEsICJPeW9uIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9saW1hX19fMTAgPT0gMSwgIllhdXlvcyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMTYpIFByb3ZpbmNpYXMgZGUgTG9yZXRvDQogICAgaWZfZWxzZShwcm92aV9sb3JfX18xID09IDEsICJNYXluYXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xvcl9fXzIgPT0gMSwgIkFsdG8gQW1hem9uYXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX2xvcl9fXzMgPT0gMSwgIkxvcmV0byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbG9yX19fNCA9PSAxLCAiTWFyaXNjYWwgUmFtw7NuIENhc3RpbGxhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sb3JfX181ID09IDEsICJSZXF1ZW5hIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sb3JfX182ID09IDEsICJVY2F5YWxpIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sb3JfX183ID09IDEsICJEYXRlbSBEZWwgTWFyYcOxw7NuIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9sb3JfX184ID09IDEsICJQdXR1bWF5byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMTcpIFByb3ZpbmNpYXMgZGUgTWFkcmUgZGUgRGlvcw0KICAgIGlmX2Vsc2UocHJvdmlfbWFkaW9zX19fMSA9PSAxLCAiVGFtYm9wYXRhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9tYWRpb3NfX18yID09IDEsICJNYW51IiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9tYWRpb3NfX18zID09IDEsICJUYWh1YW1hbnUiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDE4KSBQcm92aW5jaWFzIGRlIE1vcXVlZ3VhDQogICAgaWZfZWxzZShwcm92aV9tb3FfX18xID09IDEsICJNYXJpc2NhbCBOaWV0byIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfbW9xX19fMiA9PSAxLCAiR2VuZXJhbCBTYW5jaGV6IENlcnJvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9tb3FfX18zID09IDEsICJJbG8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDE5KSBQcm92aW5jaWFzIGRlIFBhc2NvDQogICAgaWZfZWxzZShwcm92aV9wYXNjX19fMSA9PSAxLCAiUGFzY28iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3Bhc2NfX18yID09IDEsICJEYW5pZWwgQWxjaWRlcyBDYXJyacOzbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfcGFzY19fXzMgPT0gMSwgIk94YXBhbXBhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgIyAyMCkgUHJvdmluY2lhcyBkZSBQaXVyYQ0KICAgIGlmX2Vsc2UocHJvdmlfcGl1X19fMSA9PSAxLCAiUGl1cmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3BpdV9fXzIgPT0gMSwgIkF5YWJhY2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3BpdV9fXzMgPT0gMSwgIkh1YW5jYWJhbWJhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9waXVfX180ID09IDEsICJNb3Jyb3BvbiIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfcGl1X19fNSA9PSAxLCAiUGFpdGEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3BpdV9fXzYgPT0gMSwgIlN1bGxhbmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3BpdV9fXzcgPT0gMSwgIlRhbGFyYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfcGl1X19fOCA9PSAxLCAiU2VjaHVyYSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMjIpIFByb3ZpbmNpYXMgZGUgU2FuIE1hcnRpbg0KICAgIGlmX2Vsc2UocHJvdmlfc21fX18xID09IDEsICJNb3lvYmFtYmEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fMiA9PSAxLCAiQmVsbGF2aXN0YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfc21fX18zID09IDEsICJFbCBEb3JhZG8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fNCA9PSAxLCAiSHVhbGxhZ2EiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fNSA9PSAxLCAiTGFtYXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fNiA9PSAxLCAiTWFyaXNjYWwgQ8OhY2VyZXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fNyA9PSAxLCAiUGljb3RhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9zbV9fXzggPT0gMSwgIlJpb2phIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV9zbV9fXzkgPT0gMSwgIlNhbiBNYXJ0aW4iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3NtX19fMTAgPT0gMSwgIlRvY2FjaGUiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICANCiAgICAjIDIzKSBQcm92aW5jaWFzIGRlIFRhY25hDQogICAgaWZfZWxzZShwcm92aV90YWNuYV9fXzEgPT0gMSwgIlRhY25hIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV90YWNuYV9fXzIgPT0gMSwgIkNhbmRhcmF2ZSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfdGFjbmFfX18zID09IDEsICJKb3JnZSBCYXNhZHJlIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV90YWNuYV9fXzQgPT0gMSwgIlRhcmF0YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIA0KICAgICMgMjQpIFByb3ZpbmNpYXMgZGUgVHVtYmVzDQogICAgaWZfZWxzZShwcm92aV90dW1iX19fMSA9PSAxLCAiVHVtYmVzIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV90dW1iX19fMiA9PSAxLCAiQ29udHJhbG1pcmFudGUgVmlsbGFyIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV90dW1iX19fMyA9PSAxLCAiWmFydW1pbGxhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgDQogICAgDQogICAgIyAyNSkgUHJvdmluY2lhcyBkZSBVY2F5YWxpDQogICAgaWZfZWxzZShwcm92aV91Y2F5X19fMSA9PSAxLCAiQ29yb25lbCBQb3J0aWxsbyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgIGlmX2Vsc2UocHJvdmlfdWNheV9fXzIgPT0gMSwgIkF0YWxheWEiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBpZl9lbHNlKHByb3ZpX3VjYXlfX18zID09IDEsICJQYWRyZSBBYmFkIiwgTkFfY2hhcmFjdGVyXyksDQogICAgaWZfZWxzZShwcm92aV91Y2F5X19fNCA9PSAxLCAiUHVydXMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICBzZXAgPSAiLCAiDQogICkpICU+JQ0KICBtdXRhdGUocHJvdmluY2lhID0gc3RyX3JlbW92ZV9hbGwocHJvdmluY2lhLCAiTkEoLCApP3wsIE5BIikpICAjIExpbXBpYXIgTkFzIHkgY29tYXMNCg0KIyBTZXBhcmFyIGxhcyBwcm92aW5jaWFzIGVuIG3Dumx0aXBsZXMgZmlsYXMNCmNvbnRlb19wcm92aW5jaWFzIDwtIGRhdGFfZW5jdWVzdGFzICU+JQ0KICAjIFNlcGFyYXIgbGEgY29sdW1uYSBgcHJvdmluY2lhYCBlbiBtw7psdGlwbGVzIGZpbGFzIHVzYW5kbyBgc2VwYXJhdGVfcm93cygpYA0KICBzZXBhcmF0ZV9yb3dzKHByb3ZpbmNpYSwgc2VwID0gIixcXHMqIikgJT4lDQogICMgQ29udGFyIGxhcyBvY3VycmVuY2lhcyBkZSBjYWRhIHByb3ZpbmNpYQ0KICBjb3VudChwcm92aW5jaWEsIHNvcnQgPSBUUlVFKQ0KDQojIENhcmdhciBsb3MgZGF0b3MgZ2VvZXNwYWNpYWxlcyBkZSBwYcOtc2VzDQp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibWVkaXVtIiwgcmV0dXJuY2xhc3MgPSAic2YiKQ0KDQojIEZpbHRyYXIgc29sbyBQZXLDug0KcGVydSA8LSBzdWJzZXQod29ybGQsIGFkbWluID09ICJQZXJ1IikNCg0KIyBDYXJnYW5kbyBhcmNoaXZvIGRlIHByb3ZpbmNpYXMNCnByb3ZpbmNpYXM8LXN0X3JlYWQoIkM6L1VzZXJzL2FydHVyXzR5dWNmdG0vQm94L1Byb3llY3RvIGNsw61uaWNvIFBlZHJlZ2FsL01pZ3JhY2nDs24vZGF0YS9Qcm92aW5jaWFsIElORUkgMjAyMyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhL1Byb3ZpbmNpYWwgSU5FSSAyMDIzIGdlb2dwc3BlcnUgU3V5b1BvbWFsaWEvUHJvdmluY2lhbCBJTkVJIDIwMjMgZ2VvZ3BzcGVydSBTdXlvUG9tYWxpYS5zaHgiKQ0KDQojIHByb3ZpbmNpYXM8LXN0X3JlYWQoIkM6L1VzZXJzL0NheWV0YW5vL0JveC9NaWdyYWNpw7NuL2RhdGEvUHJvdmluY2lhbCBJTkVJIDIwMjMgZ2VvZ3BzcGVydSBTdXlvUG9tYWxpYS9Qcm92aW5jaWFsIElORUkgMjAyMyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhL1Byb3ZpbmNpYWwgSU5FSSAyMDIzIGdlb2dwc3BlcnUgU3V5b1BvbWFsaWEuc2h4IikNCg0KDQoNCiMgUmVub21icmFuZG8gbGEgdmFyaWFibGUgUHJvdmluY2lhDQpjb2xuYW1lcyhwcm92aW5jaWFzKVtjb2xuYW1lcyhwcm92aW5jaWFzKSA9PSAiUFJPVklOQ0lBIl0gPC0gInByb3ZpbmNpYSINCg0KIyBDYXJnYW5kbyBhcmNoaXZvIGRlIGRlcGFydGFtZW50b3MNCmRlcGFydGFtZW50bzwtc3RfcmVhZCgiQzovVXNlcnMvYXJ0dXJfNHl1Y2Z0bS9Cb3gvUHJveWVjdG8gY2zDrW5pY28gUGVkcmVnYWwvTWlncmFjacOzbi9kYXRhL1NIUENlbnNvRGVwYXJ0YW1lbnRvIElORUkgMjAwNyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhL1NIUENlbnNvRGVwYXJ0YW1lbnRvIElORUkgMjAwNyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhLnNoeCIpDQoNCiMgIyBDYXJnYW5kbyBhcmNoaXZvIGRlIGRlcGFydGFtZW50b3MgamhvbmENCiMgZGVwYXJ0YW1lbnRvPC1zdF9yZWFkKCJDOi9Vc2Vycy9DYXlldGFuby9Cb3gvTWlncmFjacOzbi9kYXRhL1NIUENlbnNvRGVwYXJ0YW1lbnRvIElORUkgMjAwNyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhL1NIUENlbnNvRGVwYXJ0YW1lbnRvIElORUkgMjAwNyBnZW9ncHNwZXJ1IFN1eW9Qb21hbGlhLnNoeCIpDQoNCg0KIyBDb252ZXJ0aXIgbGFzIGNvbHVtbmFzIGEgY2hhcmFjdGVyDQpwcm92aW5jaWFzJHByb3ZpbmNpYSA8LSBhcy5jaGFyYWN0ZXIocHJvdmluY2lhcyRwcm92aW5jaWEpDQpjb250ZW9fcHJvdmluY2lhcyRwcm92aW5jaWEgPC0gYXMuY2hhcmFjdGVyKGNvbnRlb19wcm92aW5jaWFzJHByb3ZpbmNpYSkNCg0KIyBFbGltaW5hciBlc3BhY2lvcyBlbiBibGFuY28gYWwgaW5pY2lvIHkgYWwgZmluYWwNCnByb3ZpbmNpYXMkcHJvdmluY2lhIDwtIHRyaW13cyhwcm92aW5jaWFzJHByb3ZpbmNpYSkNCmNvbnRlb19wcm92aW5jaWFzJHByb3ZpbmNpYSA8LSB0cmltd3MoY29udGVvX3Byb3ZpbmNpYXMkcHJvdmluY2lhKQ0KDQpwcm92aW5jaWFzJHByb3ZpbmNpYSA8LSB0b2xvd2VyKHByb3ZpbmNpYXMkcHJvdmluY2lhKQ0KY29udGVvX3Byb3ZpbmNpYXMkcHJvdmluY2lhIDwtIHRvbG93ZXIoY29udGVvX3Byb3ZpbmNpYXMkcHJvdmluY2lhKQ0KDQoNCiMgVW5pciBjb250ZW9zIGNvbiBsb3MgZGF0b3MgZ2VvZ3LDoWZpY29zDQptYXBfZGF0YSA8LSBwcm92aW5jaWFzICU+JQ0KICBsZWZ0X2pvaW4oY29udGVvX3Byb3ZpbmNpYXMsIGJ5ID0gInByb3ZpbmNpYSIpDQoNCmdncGxvdChkYXRhID0gbWFwX2RhdGEpICsNCiAgIyBNYXBhIGNvbiBpbnRlbnNpZGFkIHNlZ8O6biBgbmAsIHNpbiBib3JkZXMgcGFyYSBwcm92aW5jaWFzIHNpbiBkYXRvcw0KICBnZW9tX3NmKGFlcyhmaWxsID0gbiksIGNvbG9yID0gImdyYXk1MCIpICsNCiAgIyBBZ3JlZ2FyIGzDrW1pdGVzIGRlIGRlcGFydGFtZW50b3MNCiAgZ2VvbV9zZihkYXRhID0gZGVwYXJ0YW1lbnRvLCBmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKw0KICAjIEVzY2FsYSBkZSBjb2xvcmVzDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gImxpZ2h0Ymx1ZSIsIGhpZ2ggPSAiZGFya2JsdWUiLCBuYS52YWx1ZSA9ICJ3aGl0ZSIsIG5hbWUgPSAiQ29udGVvIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlByb3ZpbmNpYXMgZGUgcHJvY2VkZW5jaWEiKQ0KDQoNCg0KYGBgDQoNCg0KDQojICBQb2JsYWNpw7NuIGRlIGVzdHVkaW8NCg0KIyMjIEluZm9ybWFjacOzbiBzb2Npb2RlbW9ncsOhZmljYQ0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjQSkgVGFibGEgMTogSW5mb3JtYWNpw7NuIHNvY2lvZGVtb2dyw6FmaWNhIC0tLS0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQoNCiMgSW5mb3JtYWNpw7NuIGRlbCBob2dhcg0KDQojIC0gVG90YWwgcGVyc29uYXMgcG9yIGhvZ2FyDQojIC0gSG9nYXJlcyBjb24gbWVub3JlcyBkZSA1IGHDsW9zDQojIC0gSG9nYXJlcyBjb24gbWVub3JlcyBkZSAxOCBhw7Fvcw0KIyAtIEFndWEgcGFyYSBiZWJlciBkZSBkb25kZSBvYnRpZW5lDQojIC0gRGVzYWd1ZQ0KIyAtIEluc2VndXJpZGFkIGFsaW1lbnRhcmlhIG1vZGVyYWRhLWdyYXZlDQojIC0gTG9jYWxpZGFkZXMNCiMgLSBFc3RhZG8gZGUgbWlncmFjaW9uDQoNCg0KZGF0YV90YWJsZV8xICA8LSBkYXRhX2hvZ2FyICU+JSAgc2VsZWN0KHBlcnNvbmFzX2hvZ2FyLCBob21lX3dhdGVyLmZhY3RvciwgaG9tZV9kZXNhZ3VlX3RpcG8uZmFjdG9yLCBmb29kX2luc2VjdXJpdHksIGxvY2FsaWRhZC5mYWN0b3IsIGNsYXNpZmljYWNpb25faG9nYXJfZSkNCiNnbGltcHNlKGRhdGFfaG9nYXIpDQojZ2xpbXBzZShkYXRhX3RhYmxlXzEpDQoNCiNzdHIoZGF0YV90YWJsZV8xJHBlcnNvbmFzX2hvZ2FyKQ0KZGF0YV90YWJsZV8xJHBlcnNvbmFzX2hvZ2FyIDwtIGFzLm51bWVyaWMoZGF0YV90YWJsZV8xJHBlcnNvbmFzX2hvZ2FyKQ0KZGF0YV90YWJsZV8xJHBlcnNvbmFzX2hvZ2FyIDwtIGFzLm51bWVyaWMoZGF0YV90YWJsZV8xJHBlcnNvbmFzX2hvZ2FyKQ0KI2dsaW1wc2UoZGF0YV90YWJsZV8xKQ0KDQoNCmRhdGFfdGFibGVfMSA8LSBkYXRhX3RhYmxlXzEgJT4lDQogIG11dGF0ZShhY3Jvc3Mod2hlcmUoaXMuZmFjdG9yKSwgfiBmY3RfZHJvcChmY3RfaW5mcmVxKC4pKSkpDQoNCg0KdGFibGFfMSA8LSANCiAgZGF0YV90YWJsZV8xICU+JQ0KICB0Ymxfc3VtbWFyeSgNCiAgICBsYWJlbCA9IGxpc3QoDQogICAgICBwZXJzb25hc19ob2dhciB+ICJUb3RhbCBkZSBwZXJzb25hcyIsDQogICAgICBob21lX3dhdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgY29uc3VtbyIsDQogICAgICBob21lX2Rlc2FndWVfdGlwby5mYWN0b3IgfiAiRGVzYWd1ZSBlbiBlbCBob2dhciIsDQogICAgICBmb29kX2luc2VjdXJpdHkgIH4gIkluc2VndXJpZGFkIGFsaW1lbnRhcmlhIG1vZGVyYWRhLWdyYXZlIiwNCiAgICAgIGNsYXNpZmljYWNpb25faG9nYXJfZSB+ICJFc3RhZG8gZGUgbWlncmFjacOzbiBkZWwgaG9nYXIiLA0KICAgICAgbG9jYWxpZGFkLmZhY3RvciB+ICJMb2NhbGlkYWQiDQogICAgKSwNCiAgICB0eXBlID0gYyhwZXJzb25hc19ob2dhcikgfiAiY29udGludW91cyIsDQogICAgc3RhdGlzdGljID0gYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIg0KICApICU+JSANCiAgYm9sZF9sYWJlbHMoKSAlPiUgDQogIGl0YWxpY2l6ZV9sZXZlbHMoKQ0KDQp0YWJsYV8xDQoNCg0KYGBgDQoNCg0KDQojIyMgSW5mb3JtYWNpw7NuIHNvY2lvZGVtb2dyw6FmaWNhIHBvciBlc3RhZG8gZGUgbWlncmFjacOzbg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCg0KDQp0YWJsYV8xX2EgPC0gZGF0YV90YWJsZV8xICU+JQ0KICB0Ymxfc3VtbWFyeSgNCiAgICBieSA9IGNsYXNpZmljYWNpb25faG9nYXJfZSwNCiAgICBtaXNzaW5nID0gIm5vIiwNCiAgICBsYWJlbCA9IGxpc3QoDQogICAgICBwZXJzb25hc19ob2dhciB+ICJUb3RhbCBkZSBwZXJzb25hcyIsDQogICAgICBob21lX3dhdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgY29uc3VtbyIsDQogICAgICBob21lX2Rlc2FndWVfdGlwby5mYWN0b3IgfiAiRGVzYWd1ZSBlbiBlbCBob2dhciIsDQogICAgICBmb29kX2luc2VjdXJpdHkgfiAiSW5zZWd1cmlkYWQgYWxpbWVudGFyaWEgbW9kZXJhZGEtZ3JhdmUiLCANCiAgICAgIGxvY2FsaWRhZC5mYWN0b3IgfiAiTG9jYWxpZGFkIg0KICAgICksDQogICAgdHlwZSA9IGMocGVyc29uYXNfaG9nYXIpIH4gImNvbnRpbnVvdXMiLCAjIENvbmZpZ3VyYSBwZXJzb25hc19ob2dhciBjb21vIGNvbnRpbnVhDQogICAgc3RhdGlzdGljID0gYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIiAjIE11ZXN0cmEgbWVkaWEgeSBkZXN2aWFjacOzbiBlc3TDoW5kYXIgcGFyYSB2YXJpYWJsZXMgY29udGludWFzDQogICkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lICAjIEFncmVnYSBjb2x1bW5hIGRlIHRvdGFsZXMgZ2VuZXJhbGVzDQogIGFkZF9wKCkgICAgICAgICAgICAjIEFncmVnYSBwLXZhbHVlcyBwYXJhIHBydWViYXMgZXN0YWTDrXN0aWNhcw0KdGFibGFfMV9hDQoNCg0KDQpgYGANCg0KDQoNCg0KIyMjIEluZm9ybWFjacOzbiBnZW5lcmFsIGRlbCBwYXJ0aWNpcGFudGUNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQoNCiMgSW5mb3JtYWNpw7NuIGluZGl2aWR1YWwNCg0KIyAtIFNleG8NCiMgLSBFZGFkIC0gcHJvbWVkaW8NCiMgLSBFZGFkIC0gZ3J1cG9zIGRlIGVkYWQNCiMgLSBOaXZlbCBlZHVjYXRpdm8NCiMgLSBPY3VwYWNpw7NuDQojIC0gRXN0YWJpbGlkYWQgbGFib3JhbA0KIyAtIFRpcG8gZGUgc2VndXJvDQojIC0gSWRpb21hIGFwcmVuZGlkbyBlbiBsYSBpbmZhY2lhDQojIC0gSWRpb21hIGhhYmxhZG8gYWN0dWFsbWVudGUNCiMgLSBQcm9jZWRlbmNpYSAvIFJlZ2nDs24gZGUgbmFjaW1pZW50bw0KIyAtIFBlcmNlcGNpw7NuIGRlIHBlc28gY29ycG9yYWwgYW50ZXMgZGUgbWlncmFyDQojIC0gUGVyY2VwY2nDs24gZGUgcGVzbyBjb3Jwb3JhbCBsdWVnbyBkZSBtaWdyYXINCiMgLSBFc3RhZG8gZGUgbWlncmFjacOzbiBkZWwgcGFydGljaXBhbnRlDQojIENyZWFyIG51ZXZhIHZhcmlhYmxlIG5pdmVsX2VkdWNhdGl2b191bmkgYWdydXBhbmRvIGNhdGVnb3LDrWFzIHNpbWlsYXJlcw0KZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgbXV0YXRlKG5pdmVsX2VkdWNhdGl2b191bmkgPSBjYXNlX3doZW4oDQogICAgbml2ZWxfZWR1Y2F0aXZvLmZhY3RvciAlaW4lIGMoIlByaW1hcmlhIGNvbXBsZXRhIiwgIlByaW1hcmlhIGluY29tcGxldGEiKSB+ICJQcmltYXJpYSIsDQogICAgbml2ZWxfZWR1Y2F0aXZvLmZhY3RvciAlaW4lIGMoIlNlY3VuZGFyaWEgY29tcGxldGEiLCAic2VjdW5kYXJpYSBpbmNvbXBsZXRhIikgfiAiU2VjdW5kYXJpYSIsDQogICAgbml2ZWxfZWR1Y2F0aXZvLmZhY3RvciAlaW4lIGMoIkVzdHVkaW8gVMOpY25pY28gY29tcGxldGEiLCAiRXN0dWRpbyBUw6ljbmljbyBpbmNvbXBsZXRvIikgfiAiVMOpY25pY28gU3VwZXJpb3IiLA0KICAgIG5pdmVsX2VkdWNhdGl2by5mYWN0b3IgJWluJSBjKCJVbml2ZXJzaWRhZCBjb21wbGV0YSIsICJVbml2ZXJzaWRhZCBpbmNvbXBsZXRhIikgfiAiVW5pdmVyc2lkYWQiLA0KICAgIG5pdmVsX2VkdWNhdGl2by5mYWN0b3IgPT0gIkFuYWxmYWJldG8iIH4gIkFuYWxmYWJldG8iLA0KICAgIFRSVUUgfiBuaXZlbF9lZHVjYXRpdm8uZmFjdG9yKSkNCg0KIyBSZWVtcGxhemFyIGxhcyByZXNwdWVzdGFzIGVuIG9jdXBhY2lvbl9vdHJvIHBvciBsYXMgY2F0ZWdvcsOtYXMgY29ycmVzcG9uZGllbnRlcyBlbiBvY3VwYWNpb24uZmFjdG9yDQogIyBBY3R1YWxpemFyIGxhcyBvYnNlcnZhY2lvbmVzIGRlIG9jdXBhY2lvbi5mYWN0b3IsIGNvcGlhciBhIG9jdXBhY2lvbl9vdHJvLCB5IGNvbWJpbmFyIGxhcyBvcGNpb25lcyAiQWdyaWN1bHR1cmEiIHkgIkdhbmFkZXLDrWEiDQogZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZSgNCiAgICAgb2N1cGFjaW9uLmZhY3RvciA9IGNhc2Vfd2hlbigNCiAgICAgICBvY3VwYWNpb25fb3RybyA9PSAiQW1hIGRlIGNhc2EiIH4gIkFtYSBkZSBjYXNhIiwNCiAgICAgICBvY3VwYWNpb25fb3RybyA9PSAiQ29sZWdpbyIgfiAiRXN0dWRpYW50ZSIsDQogICAgICAgb2N1cGFjaW9uX290cm8gPT0gIkNhcnBpbnRlcmlhICIgfiAiT2JyZXJvIHUgb3BlcmFyaW9zIChjb25zdHJ1Y2Npw7NuLCBtYXF1aW5hcmlhLCBjYXJwaW50ZXJvKSIsDQogICAgICAgb2N1cGFjaW9uX290cm8gPT0gIk1lY2FuaWNvIiB+ICJPYnJlcm8gdSBvcGVyYXJpb3MgKGNvbnN0cnVjY2nDs24sIG1hcXVpbmFyaWEsIGNhcnBpbnRlcm8pIiwNCiAgICAgICBvY3VwYWNpb25fb3RybyA9PSAiTWV0YWwgbWVjw6FuaWNvICIgfiAiT2JyZXJvIHUgb3BlcmFyaW9zIChjb25zdHJ1Y2Npw7NuLCBtYXF1aW5hcmlhLCBjYXJwaW50ZXJvKSIsDQogICAgICAgb2N1cGFjaW9uX290cm8gPT0gIkVzdHJ1Y3R1cmEgTWV0YWxpY2EiIH4gIk9icmVybyB1IG9wZXJhcmlvcyAoY29uc3RydWNjacOzbiwgbWFxdWluYXJpYSwgY2FycGludGVybykiLA0KICAgICAgIG9jdXBhY2lvbl9vdHJvID09ICJSZW5vdmFyIGF1dG9zIiB+ICJPYnJlcm8gdSBvcGVyYXJpb3MgKGNvbnN0cnVjY2nDs24sIG1hcXVpbmFyaWEsIGNhcnBpbnRlcm8pIiwNCiAgICAgICBvY3VwYWNpb25fb3RybyA9PSAiVGllbmRhIGFiYXJyb3RlcyIgfiAiQ29tZXJjaWFudGUvVmVuZGVkb3IiLA0KICAgICAgIG9jdXBhY2lvbl9vdHJvID09ICJFbiB1bmEgb3B0aWNhIiB+ICJDb21lcmNpYW50ZS9WZW5kZWRvciIsDQogICAgICAgb2N1cGFjaW9uX290cm8gPT0gIlBlcnNvbmEgY29uIGRpc2NhcGFjaWRhZCBkZXBlbmRlIGRlIHN1IG1hbcOhIiB+ICJObyBhcGxpY2EiLA0KICAgICAgIG9jdXBhY2lvbl9vdHJvID09ICJDdWFscXVpZXIgdHJhYmFqbyBxIGVuY3VlbnRyZSIgfiAiRGVzZW1wbGVhZG8iLA0KICAgICAgIG9jdXBhY2lvbl9vdHJvID09ICJSaWVnbyBkZSBjaGFjcmEiIH4gIkFncmljdWx0dXJhIiwNCiAgICAgICBUUlVFIH4gb2N1cGFjaW9uLmZhY3RvciksICAjIE1hbnRlbmVyIGVsIHZhbG9yIG9yaWdpbmFsIHNpIG5vIHNlIGN1bXBsZSBuaW5ndW5hIGNvbmRpY2nDs24NCiAgICAgb2N1cGFjaW9uX290cm8gPSBpZmVsc2UoDQogICAgICAgb2N1cGFjaW9uX290cm8gJWluJSBjKCJBbWEgZGUgY2FzYSIsICJDb2xlZ2lvIiwgIkNhcnBpbnRlcmlhICIsICJNZWNhbmljbyIsICJNZXRhbCBtZWPDoW5pY28gIiwgIkVzdHJ1Y3R1cmEgTWV0YWxpY2EiLCAiVGllbmRhIGFiYXJyb3RlcyIsICJQZXJzb25hIGNvbiBkaXNjYXBhY2lkYWQgZGVwZW5kZSBkZSBzdSBtYW3DoSIsICJDdWFscXVpZXIgdHJhYmFqbyBxIGVuY3VlbnRyZSIsICJSaWVnbyBkZSBjaGFjcmEiLCAiRW4gdW5hIG9wdGljYSIsICJSZW5vdmFyIGF1dG9zIiksIE5BLCBvY3VwYWNpb25fb3RybyksDQogICAgIG9jdXBhY2lvbl9vdHJvID0gY2FzZV93aGVuKA0KICAgICAgIG9jdXBhY2lvbi5mYWN0b3IgJWluJSBjKCJKdWJpbGFkbyIsICJEZXNlbXBsZWFkbyIsICJBZG1pbmlzdHJhZG9yL0VtcHJlc2FyaW8iLCAiVHJhYmFqYSB5IGVzdHVkaWEiLCAiUHJvZmVzaW9uYWwgZGUgZWR1Y2FjacOzbiIpIH4gb2N1cGFjaW9uLmZhY3RvciwNCiAgICAgICBUUlVFIH4gb2N1cGFjaW9uX290cm8pLA0KICAgICBvY3VwYWNpb24uZmFjdG9yID0gY2FzZV93aGVuKA0KICAgICAgIG9jdXBhY2lvbi5mYWN0b3IgJWluJSBjKCJKdWJpbGFkbyIsICJEZXNlbXBsZWFkbyIsICJBZG1pbmlzdHJhZG9yL0VtcHJlc2FyaW8iLCAiVHJhYmFqYSB5IGVzdHVkaWEiLCAiUHJvZmVzaW9uYWwgZGUgZWR1Y2FjacOzbiIpIH4gIk90cm8iLA0KICAgICAgIG9jdXBhY2lvbi5mYWN0b3IgJWluJSBjKCJBZ3JpY3VsdHVyYSIsICJHYW5hZGVyw61hIikgfiAiQWdyaWN1bHR1cmEgeSBHYW5hZGVyw61hIiwgICMgQ29tYmluYXIgQWdyaWN1bHR1cmEgeSBHYW5hZGVyw61hDQogICAgICAgVFJVRSB+IG9jdXBhY2lvbi5mYWN0b3IpKQ0KDQojZ2xpbXBzZShkYXRhX2luZGl2aWR1YWxfaG9nYXIpDQpkYXRhX2luZGl2aWR1YWxfaG9nYXIkZWRhZF9wYXJ0aWNpcGFudGUgPC0gYXMubnVtZXJpYyhkYXRhX2luZGl2aWR1YWxfaG9nYXIkZWRhZF9wYXJ0aWNpcGFudGUpDQoNCiNnbGltcHNlKHNlbGVjdChkYXRhX2luZGl2aWR1YWxfaG9nYXIsIGNvbnRhaW5zKCJzZXgiKSkpDQpkYXRhX3RhYmxlXzIgIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUgIHNlbGVjdChlZGFkX3BhcnRpY2lwYW50ZSwgc2V4b19wYXJ0aWNpcGFudGUuZmFjdG9yLCBuaXZlbF9lZHVjYXRpdm9fdW5pLCBvY3VwYWNpb24uZmFjdG9yLCBvY3VwYWNpb25fZXN0YWIuZmFjdG9yLCBzZWd1cm8uZmFjdG9yLCAgcF9jX3ByaW1lcl9pZGlvbWEuZmFjdG9yICwgcF9jX2Nhc2FfaWRpb21hLmZhY3RvciAsIGNsYXNpZmljYWNpb25faW5kaXZpZHVhbCkNCg0KDQpkYXRhX3RhYmxlXzIgPC0gZGF0YV90YWJsZV8yICU+JQ0KICBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLmZhY3RvciksIH4gZmN0X2Ryb3AoZmN0X2luZnJlcSguKSkpKQ0KDQoNCnRhYmxhXzIgPC0gDQogIGRhdGFfdGFibGVfMiAlPiUNCiAgdGJsX3N1bW1hcnkoDQogICAgbGFiZWwgPSBsaXN0KA0KICAgICAgZWRhZF9wYXJ0aWNpcGFudGUgfiAiRWRhZCIsDQogICAgICBzZXhvX3BhcnRpY2lwYW50ZS5mYWN0b3IgfiAiU2V4byIsDQogICAgICBuaXZlbF9lZHVjYXRpdm9fdW5pIH4gIk5pdmVsIEVkdWNhdGl2byIsDQogICAgICBvY3VwYWNpb24uZmFjdG9yIH4gIk9jdXBhY2nDs24iLA0KICAgICAgc2VndXJvLmZhY3RvciB+ICJTZWd1cm8gZGUgc2FsdWQiLA0KICAgICAgcF9jX3ByaW1lcl9pZGlvbWEuZmFjdG9yIH4gIlByaW1lciBpZGlvbWEgYXByZW5kaWRvIiwNCiAgICAgIHBfY19jYXNhX2lkaW9tYS5mYWN0b3IgfiAiSWRpb21hIGhhYmxhZG8gYWN0dWFsbWVudGUiLA0KICAgICAgY2xhc2lmaWNhY2lvbl9pbmRpdmlkdWFsfiAiRXN0YWRvIGRlIG1pZ3JhY2nDs24gZGVsIHBhcnRpY2lwYW50ZSIsDQogICAgICBvY3VwYWNpb25fZXN0YWIuZmFjdG9yIH4gIkVzdGFiaWxpZGFkIGxhYm9yYWwiDQogICAgKSwNCiAgICB0eXBlID0gYyhlZGFkX3BhcnRpY2lwYW50ZSkgfiAiY29udGludW91cyIsDQogICAgc3RhdGlzdGljID0gYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIg0KICApICU+JSANCiAgYm9sZF9sYWJlbHMoKSAlPiUgDQogIGl0YWxpY2l6ZV9sZXZlbHMoKQ0KDQp0YWJsYV8yDQoNCg0KYGBgDQoNCg0KDQoNCiMjIyBJbmZvcm1hY2nDs24gZGVsIHBhcnRpY2lwYW50ZSBwb3IgZXN0YWRvIGRlIG1pZ3JhY2nDs24NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQp0YWJsYV8yX2EgPC0gZGF0YV90YWJsZV8yICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IGNsYXNpZmljYWNpb25faW5kaXZpZHVhbCwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGxhYmVsID0gbGlzdCgNCiAgICAgICAgICAgICAgICBlZGFkX3BhcnRpY2lwYW50ZSB+ICJFZGFkIiwNCiAgICAgICAgICAgICAgICBzZXhvX3BhcnRpY2lwYW50ZS5mYWN0b3IgfiAiU2V4byIsDQogICAgICAgICAgICAgICAgbml2ZWxfZWR1Y2F0aXZvX3VuaSB+ICJOaXZlbCBFZHVjYXRpdm8iLA0KICAgICAgICAgICAgICAgIG9jdXBhY2lvbi5mYWN0b3IgfiAiT2N1cGFjacOzbiIsDQogICAgICAgICAgICAgICAgc2VndXJvLmZhY3RvciB+ICJTZWd1cm8gZGUgc2FsdWQiLA0KICAgICAgICAgICAgICAgIHBfY19wcmltZXJfaWRpb21hLmZhY3RvciB+ICJQcmltZXIgaWRpb21hIGFwcmVuZGlkbyIsDQogICAgICAgICAgICAgICAgcF9jX2Nhc2FfaWRpb21hLmZhY3RvciB+ICJJZGlvbWEgaGFibGFkbyBhY3R1YWxtZW50ZSIsDQogICAgICAgICAgICAgICAgb2N1cGFjaW9uX2VzdGFiLmZhY3RvciB+ICJFc3RhYmlsaWRhZCBsYWJvcmFsIiksDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzJfYQ0KDQoNCmBgYA0KDQoNCiMjIyBEaWZpY3VsdGFkZXMgYWwgbW9tZW50byBkZSBsYSBtaWdyYWNpw7NuIHBvciBnw6luZXJvDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KICMgTGltcGlhciBuaXZlbGVzIG5vIHVzYWRvcyBhbnRlcyBkZSBjcmVhciBsYSB0YWJsYQ0KIGRhdGFfbGltcGlhIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZShhY3Jvc3MoDQogICAgIHdoZXJlKGlzLmZhY3RvciksIH4gZmN0X2Ryb3AoLikNCiAgICkpDQogDQogIyBDcmVhciBsYSB0YWJsYSBkZSByZXN1bWVuDQogdGFibGFfcmVzdW1lbiA8LSBkYXRhX2xpbXBpYSAlPiUNCiAgIHRibF9zdW1tYXJ5KA0KICAgICBieSA9IHNleG9fcGFydGljaXBhbnRlLmZhY3RvciwgICMgQ29tcGFyYWNpw7NuIHBvciBzZXhvDQogICAgIGluY2x1ZGUgPSBjKGRpZmZfd2F0X2FsdGVyLmZhY3RvciwgZGlmZl93YXRfb3Ryb3NfY29uX2FsdGVyLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfd2F0X3B1Yl9hbHRlci5mYWN0b3IsIGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciwgZGlmZl90cmFuc3BfYWx0ZXIuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IsIGRpZmZfZGVsaW5jLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yLCBkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yKSwNCiAgICAgbGFiZWwgPSBsaXN0KA0KICAgICAgIGRpZmZfd2F0X2FsdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgY29uc3VtbyIsDQogICAgICAgZGlmZl93YXRfb3Ryb3NfY29uX2FsdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgb3Ryb3MgdXNvcyIsDQogICAgICAgZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvciB+ICJEZXNhZ8O8ZSBkZWwgaG9nYXIiLA0KICAgICAgIGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciB+ICJDZW50cm9zIGVkdWNhdGl2b3MiLA0KICAgICAgIGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciB+ICJFbGVjdHJpY2lkYWQgZW4gZWwgaG9nYXIiLA0KICAgICAgIGRpZmZfdHJhbnNwX2FsdGVyLmZhY3RvciB+ICJUcmFuc3BvcnRlIHDDumJsaWNvIiwNCiAgICAgICBkaWZmX3Byb2dfc29jaWFsLmZhY3RvciB+ICJQcm9ncmFtYXMgc29jaWFsZXMiLA0KICAgICAgIGRpZmZfZGVsaW5jLmZhY3RvciB+ICJEZWxpbmN1ZW5jaWEiLA0KICAgICAgIGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yIH4gIkRpc2NyaW1pbmFjacOzbiBkZSB2ZWNpbm9zIiwNCiAgICAgICBkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yIH4gIkF0ZW5jacOzbiBlbiBzYWx1ZCIsDQogICAgICAgZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yIH4gIkVuZmVybWVkYWRlcyBjb21vIGRpYXJyZWFzIg0KICAgICApLA0KICAgICBzdGF0aXN0aWMgPSBsaXN0KGFsbF9jYXRlZ29yaWNhbCgpIH4gIntufSAoe3B9JSkiKSwNCiAgICAgcGVyY2VudCA9ICJjb2x1bW4iLCAgIyBQb3JjZW50YWplcyBzZWfDum4gZWwgdG90YWwgZGUgY2FkYSBjb2x1bW5hDQogICAgIG1pc3NpbmcgPSAibm8iICAjIElnbm9yYXIgdmFsb3JlcyBmYWx0YW50ZXMgZXhwbMOtY2l0YW1lbnRlDQogICApICU+JQ0KICAgYWRkX3AodGVzdCA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gImNoaXNxLnRlc3QiKSAlPiUgICMgQcOxYWRpciB2YWxvcmVzIHAgdXNhbmRvIGNoaS1jdWFkcmFkbw0KICAgbW9kaWZ5X2hlYWRlcihsYWJlbCA9ICIqKkNhcmFjdGVyw61zdGljYXMqKiIpICU+JSAgIyBQZXJzb25hbGl6YXIgZWwgZW5jYWJlemFkbyBkZSBsYSBwcmltZXJhIGNvbHVtbmENCiAgIG1vZGlmeV9zcGFubmluZ19oZWFkZXIoYWxsX3N0YXRfY29scygpIH4gIioqRGlmaWN1bHRhZGVzIGFsIG1vbWVudG8gZGUgbGEgbWlncmFjacOzbiBwb3IgZ8OpbmVybyoqIikgJT4lICAjIEVuY2FiZXphZG8gZ2VuZXJhbA0KICAgYm9sZF9sYWJlbHMoKSAgIyBSZXNhbHRhciBub21icmVzIGRlIGxhcyB2YXJpYWJsZXMNCiANCiAjIE1vc3RyYXIgbGEgdGFibGEgZGUgcmVzdW1lbg0KIHRhYmxhX3Jlc3VtZW4NCiANCg0KDQpgYGANCg0KDQojIyMgRGlmaWN1bHRhZGVzIGFsIG1vbWVudG8gZGUgbGEgbWlncmFjacOzbiBzZWfDum4gcHJvY2VkZW5jaWENCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZShkZXBhcnRhbWVudG8gPSBwYXN0ZSgNCiAgICAgIyBQcm92aW5jaWFzIGRlIFB1bm8NCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzEgPT0gMSwgIlB1bm8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzIgPT0gMSwgIkN1c2NvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV92aXZfX18zID09IDEsICJBcHVyw61tYWMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzQgPT0gMSwgIk5vIGhlIHZpdmlkbyBlbiBQdW5vLCBDdXNjbyBvIEFwdXLDrW1hYyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgICBpZl9lbHNlKGRlcGFfdml2X19fNjYgPT0gMSwgIk90cm9zIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV9fXzQgPT0gMSwgIkFyZXF1aXBhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV9fXzE4ID09IDEsICJNb3F1ZWd1YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgICAgc2VwID0gIiwgIg0KICAgKSkgJT4lDQogICBtdXRhdGUoZGVwYXJ0YW1lbnRvID0gc3RyX3JlbW92ZV9hbGwoZGVwYXJ0YW1lbnRvLCAiTkEoLCApP3wsIE5BIikpICAjIExpbXBpYXIgTkFzIHkgY29tYXMNCiANCiBkYXRhX2luZGl2aWR1YWxfaG9nYXIgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICAgbXV0YXRlKA0KICAgICBhcV9jdV9wdSA9IGNhc2Vfd2hlbigNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJBcHVyw61tYWMsIEFyZXF1aXBhIikgfiAiQXB1csOtbWFjIiwNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJObyBoZSB2aXZpZG8gZW4gUHVubywgQ3VzY28gbyBBcHVyw61tYWMsIEFyZXF1aXBhIikgfiAiQXJlcXVpcGEiLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIk90cm9zLCBBcmVxdWlwYSIpIH4gIkFyZXF1aXBhIiwNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJQdW5vLCBBcmVxdWlwYSIpIH4gIlB1bm8iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIlB1bm8sIE90cm9zLCBBcmVxdWlwYSIpIH4gIlB1bm8iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIkFwdXLDrW1hYyIpIH4gIkFwdXLDrW1hYyIsDQogICAgICAgZGVwYXJ0YW1lbnRvICVpbiUgYygiQ3VzY28iKSB+ICJDdXNjbyIsDQogICAgICAgZGVwYXJ0YW1lbnRvICVpbiUgYygiQ3VzY28sIEFyZXF1aXBhIikgfiAiQ3VzY28iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIlB1bm8iKSB+ICJQdW5vIiwNCiAgICAgICBUUlVFIH5OQV9jaGFyYWN0ZXJfKSkNCiANCiAjIExpbXBpYXIgbml2ZWxlcyBubyB1c2Fkb3MgYW50ZXMgZGUgY3JlYXIgbGEgdGFibGENCiBkYXRhX2RlcCA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBtdXRhdGUoYWNyb3NzKA0KICAgICB3aGVyZShpcy5mYWN0b3IpLCB+IGZjdF9kcm9wKC4pDQogICApKQ0KIA0KIA0KIA0KICMgRmlsdHJhciBsb3MgZGF0b3MgcGFyYSBleGNsdWlyICJBcHVyw61tYWMiDQogZGF0YV9maWx0cmFkYSA8LSBkYXRhX2RlcCAlPiUNCiAgIGZpbHRlcihhcV9jdV9wdSAhPSAiQXB1csOtbWFjIikNCiANCiANCiAjIENyZWFyIGxhIHRhYmxhIGRlIHJlc3VtZW4NCiB0YWJsYV9yZXN1bWVuIDwtIGRhdGFfZmlsdHJhZGEgJT4lDQogICB0Ymxfc3VtbWFyeSgNCiAgICBieSA9IGFxX2N1X3B1LCAgIyBDb21wYXJhY2nDs24gcG9yIGfDqW5lcm8NCiAgICAgaW5jbHVkZSA9IGMoZGlmZl93YXRfYWx0ZXIuZmFjdG9yLCBkaWZmX3dhdF9vdHJvc19jb25fYWx0ZXIuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvciwgZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9lbGVjdHJfYWx0ZXIuZmFjdG9yLCBkaWZmX3RyYW5zcF9hbHRlci5mYWN0b3IsIA0KICAgICAgICAgICAgICAgICBkaWZmX3Byb2dfc29jaWFsLmZhY3RvciwgZGlmZl9kZWxpbmMuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9kaXNjcmlfdmVjaW5vcy5mYWN0b3IsIGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IsIA0KICAgICAgICAgICAgICAgICBkaWZmX2VuZmVfY29uX2gyMC5mYWN0b3IpLA0KICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgZGlmZl93YXRfYWx0ZXIuZmFjdG9yIH4gIkFndWEgcGFyYSBjb25zdW1vIiwNCiAgICAgICBkaWZmX3dhdF9vdHJvc19jb25fYWx0ZXIuZmFjdG9yIH4gIkFndWEgcGFyYSBvdHJvcyB1c29zIiwNCiAgICAgICBkaWZmX3dhdF9wdWJfYWx0ZXIuZmFjdG9yIH4gIkRlc2Fnw7xlIGRlbCBob2dhciIsDQogICAgICAgZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yIH4gIkNlbnRyb3MgZWR1Y2F0aXZvcyIsDQogICAgICAgZGlmZl9lbGVjdHJfYWx0ZXIuZmFjdG9yIH4gIkVsZWN0cmljaWRhZCBlbiBlbCBob2dhciIsDQogICAgICAgZGlmZl90cmFuc3BfYWx0ZXIuZmFjdG9yIH4gIlRyYW5zcG9ydGUgcMO6YmxpY28iLA0KICAgICAgIGRpZmZfcHJvZ19zb2NpYWwuZmFjdG9yIH4gIlByb2dyYW1hcyBzb2NpYWxlcyIsDQogICAgICAgZGlmZl9kZWxpbmMuZmFjdG9yIH4gIkRlbGluY3VlbmNpYSIsDQogICAgICAgZGlmZl9kaXNjcmlfdmVjaW5vcy5mYWN0b3IgfiAiRGlzY3JpbWluYWNpw7NuIGRlIHZlY2lub3MiLA0KICAgICAgIGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IgfiAiQXRlbmNpw7NuIGVuIHNhbHVkIiwNCiAgICAgICBkaWZmX2VuZmVfY29uX2gyMC5mYWN0b3IgfiAiRW5mZXJtZWRhZGVzIGNvbW8gZGlhcnJlYXMiDQogICAgICksDQogICAgIHN0YXRpc3RpYyA9IGxpc3QoYWxsX2NhdGVnb3JpY2FsKCkgfiAie259ICh7cH0lKSIpLA0KICAgICBwZXJjZW50ID0gImNvbHVtbiIsICAjIFBvcmNlbnRhamVzIHNlZ8O6biBlbCB0b3RhbCBkZSBjYWRhIGNvbHVtbmENCiAgICAgbWlzc2luZyA9ICJubyIgICMgSWdub3JhciB2YWxvcmVzIGZhbHRhbnRlcyBleHBsw61jaXRhbWVudGUNCiAgICkgJT4lDQogICBhZGRfcCh0ZXN0ID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAiZmlzaGVyLnRlc3QiKSAlPiUgICMgVXNhciBGaXNoZXIncyBFeGFjdCBUZXN0DQogICBtb2RpZnlfaGVhZGVyKGxhYmVsID0gIioqQ2FyYWN0ZXLDrXN0aWNhcyoqIikgJT4lICAjIFBlcnNvbmFsaXphciBlbCBlbmNhYmV6YWRvIGRlIGxhIHByaW1lcmEgY29sdW1uYQ0KICAgYm9sZF9sYWJlbHMoKSAgIyBSZXNhbHRhciBub21icmVzIGRlIGxhcyB2YXJpYWJsZXMNCiANCiAjIE1vc3RyYXIgbGEgdGFibGEgZGUgcmVzdW1lbg0KIHRhYmxhX3Jlc3VtZW4NCg0KIA0KDQoNCmBgYA0KDQoNCiMjIyBEaWZpY3VsdGFkZXMgYWwgbW9tZW50byBkZSBsYSBtaWdyYWNpw7NuIHNlZ8O6biBwcm9jZWRlbmNpYQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KZGF0YV9pbmRpdmlkdWFsX2hvZ2FyIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgIG11dGF0ZShkZXBhcnRhbWVudG8gPSBwYXN0ZSgNCiAgICAgIyBQcm92aW5jaWFzIGRlIFB1bm8NCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzEgPT0gMSwgIlB1bm8iLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzIgPT0gMSwgIkN1c2NvIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV92aXZfX18zID09IDEsICJBcHVyw61tYWMiLCBOQV9jaGFyYWN0ZXJfKSwNCiAgICAgaWZfZWxzZShkZXBhX3Zpdl9fXzQgPT0gMSwgIk5vIGhlIHZpdmlkbyBlbiBQdW5vLCBDdXNjbyBvIEFwdXLDrW1hYyIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgICBpZl9lbHNlKGRlcGFfdml2X19fNjYgPT0gMSwgIk90cm9zIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV9fXzQgPT0gMSwgIkFyZXF1aXBhIiwgTkFfY2hhcmFjdGVyXyksDQogICAgIGlmX2Vsc2UoZGVwYV9fXzE4ID09IDEsICJNb3F1ZWd1YSIsIE5BX2NoYXJhY3Rlcl8pLA0KICAgICAgc2VwID0gIiwgIg0KICAgKSkgJT4lDQogICBtdXRhdGUoZGVwYXJ0YW1lbnRvID0gc3RyX3JlbW92ZV9hbGwoZGVwYXJ0YW1lbnRvLCAiTkEoLCApP3wsIE5BIikpICAjIExpbXBpYXIgTkFzIHkgY29tYXMNCiANCiBkYXRhX2luZGl2aWR1YWxfaG9nYXIgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICAgbXV0YXRlKA0KICAgICBhcV9jdV9wdSA9IGNhc2Vfd2hlbigNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJBcHVyw61tYWMsIEFyZXF1aXBhIikgfiAiQXB1csOtbWFjIiwNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJObyBoZSB2aXZpZG8gZW4gUHVubywgQ3VzY28gbyBBcHVyw61tYWMsIEFyZXF1aXBhIikgfiAiQXJlcXVpcGEiLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIk90cm9zLCBBcmVxdWlwYSIpIH4gIkFyZXF1aXBhIiwNCiAgICAgICBkZXBhcnRhbWVudG8gJWluJSBjKCJQdW5vLCBBcmVxdWlwYSIpIH4gIlB1bm8iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIlB1bm8sIE90cm9zLCBBcmVxdWlwYSIpIH4gIlB1bm8iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIkFwdXLDrW1hYyIpIH4gIkFwdXLDrW1hYyIsDQogICAgICAgZGVwYXJ0YW1lbnRvICVpbiUgYygiQ3VzY28iKSB+ICJDdXNjbyIsDQogICAgICAgZGVwYXJ0YW1lbnRvICVpbiUgYygiQ3VzY28sIEFyZXF1aXBhIikgfiAiQ3VzY28iLA0KICAgICAgIGRlcGFydGFtZW50byAlaW4lIGMoIlB1bm8iKSB+ICJQdW5vIiwNCiAgICAgICBUUlVFIH5OQV9jaGFyYWN0ZXJfKSkNCiANCiANCiAjIExpbXBpYXIgbml2ZWxlcyBubyB1c2Fkb3MgYW50ZXMgZGUgY3JlYXIgbGEgdGFibGENCiBkYXRhX2RlcCA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBtdXRhdGUoYWNyb3NzKA0KICAgICB3aGVyZShpcy5mYWN0b3IpLCB+IGZjdF9kcm9wKC4pDQogICApKQ0KIA0KICMgQ3JlYXIgbGEgdGFibGEgZGUgcmVzdW1lbg0KIHRhYmxhX3Jlc3VtZW4gPC0gZGF0YV9kZXAgJT4lDQogICB0Ymxfc3VtbWFyeSgNCiAgICAgYnkgPSBhcV9jdV9wdSwgICMgQ29tcGFyYWNpw7NuIHBvciBnw6luZXJvDQogICAgIGluY2x1ZGUgPSBjKGRpZmZfd2F0X2FsdGVyLmZhY3RvciwgZGlmZl93YXRfb3Ryb3NfY29uX2FsdGVyLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfd2F0X3B1Yl9hbHRlci5mYWN0b3IsIGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciwgZGlmZl90cmFuc3BfYWx0ZXIuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IsIGRpZmZfZGVsaW5jLmZhY3RvciwgDQogICAgICAgICAgICAgICAgIGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yLCBkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yLCANCiAgICAgICAgICAgICAgICAgZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yKSwNCiAgICAgbGFiZWwgPSBsaXN0KA0KICAgICAgIGRpZmZfd2F0X2FsdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgY29uc3VtbyIsDQogICAgICAgZGlmZl93YXRfb3Ryb3NfY29uX2FsdGVyLmZhY3RvciB+ICJBZ3VhIHBhcmEgb3Ryb3MgdXNvcyIsDQogICAgICAgZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvciB+ICJEZXNhZ8O8ZSBkZWwgaG9nYXIiLA0KICAgICAgIGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciB+ICJDZW50cm9zIGVkdWNhdGl2b3MiLA0KICAgICAgIGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciB+ICJFbGVjdHJpY2lkYWQgZW4gZWwgaG9nYXIiLA0KICAgICAgIGRpZmZfdHJhbnNwX2FsdGVyLmZhY3RvciB+ICJUcmFuc3BvcnRlIHDDumJsaWNvIiwNCiAgICAgICBkaWZmX3Byb2dfc29jaWFsLmZhY3RvciB+ICJQcm9ncmFtYXMgc29jaWFsZXMiLA0KICAgICAgIGRpZmZfZGVsaW5jLmZhY3RvciB+ICJEZWxpbmN1ZW5jaWEiLA0KICAgICAgIGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yIH4gIkRpc2NyaW1pbmFjacOzbiBkZSB2ZWNpbm9zIiwNCiAgICAgICBkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yIH4gIkF0ZW5jacOzbiBlbiBzYWx1ZCIsDQogICAgICAgZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yIH4gIkVuZmVybWVkYWRlcyBjb21vIGRpYXJyZWFzIg0KICAgICApLA0KICAgICBzdGF0aXN0aWMgPSBsaXN0KGFsbF9jYXRlZ29yaWNhbCgpIH4gIntufSAoe3B9JSkiKSwNCiAgICAgcGVyY2VudCA9ICJjb2x1bW4iLCAgIyBQb3JjZW50YWplcyBzZWfDum4gZWwgdG90YWwgZGUgY2FkYSBjb2x1bW5hDQogICAgIG1pc3NpbmcgPSAibm8iICAjIElnbm9yYXIgdmFsb3JlcyBmYWx0YW50ZXMgZXhwbMOtY2l0YW1lbnRlDQogICApICU+JQ0KICAgYWRkX3AodGVzdCA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gImZpc2hlci50ZXN0IikgJT4lICAjIFVzYXIgRmlzaGVyJ3MgRXhhY3QgVGVzdA0KICAgbW9kaWZ5X2hlYWRlcihsYWJlbCA9ICIqKkNhcmFjdGVyw61zdGljYXMqKiIpICU+JSAgIyBQZXJzb25hbGl6YXIgZWwgZW5jYWJlemFkbyBkZSBsYSBwcmltZXJhIGNvbHVtbmENCiAgIGJvbGRfbGFiZWxzKCkgICMgUmVzYWx0YXIgbm9tYnJlcyBkZSBsYXMgdmFyaWFibGVzDQogDQogIyBNb3N0cmFyIGxhIHRhYmxhIGRlIHJlc3VtZW4NCiB0YWJsYV9yZXN1bWVuDQoNCiANCg0KDQpgYGANCg0KDQoNCiMjIyBQdXNoIEZhY3RvciB5IG1pZ3JhY2nDs24NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMjRikgUmF6b25lcyBwb3IgbGFzIHF1ZSBzYWxpZXJvbiBkZSBzdSBsdWdhciBkZSBvcmlnZW4gLS0tLQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIFByaW5jaXBhbGVzIHJhem9uZXMgcG9yIGxhcyBxdWUgc2FsaWVyb24gZGUgc3UgbHVnYXIgZGUgb3JpZ2VuDQptaWdyYV9tb3Rpdm9fb3JpZ2VuIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJvdXRfcmF6X2xlYXZlX29yaV9fXyIpKQ0KDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX18xIl0gPC0gIkVkdWNhY2nDs24iDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX18yIl0gPC0gIlRyYWJham8tRWNvbm9tw61hIg0KbmFtZXMobWlncmFfbW90aXZvX29yaWdlbilbbmFtZXMobWlncmFfbW90aXZvX29yaWdlbikgPT0gIm91dF9yYXpfbGVhdmVfb3JpX19fMyJdIDwtICJTb2Npb2N1bHR1cmFsZXMiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX180Il0gPC0gIlNhbHVkIg0KbmFtZXMobWlncmFfbW90aXZvX29yaWdlbilbbmFtZXMobWlncmFfbW90aXZvX29yaWdlbikgPT0gIm91dF9yYXpfbGVhdmVfb3JpX19fNjYiXSA8LSAiT3Ryb3MiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX185OCJdIDwtICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKVtuYW1lcyhtaWdyYV9tb3Rpdm9fb3JpZ2VuKSA9PSAib3V0X3Jhel9sZWF2ZV9vcmlfX185OSJdIDwtICJObyBxdWlzbyByZXNwb25kZXIiDQoNCm1pZ3JhX21vdGl2b19vcmlnZW4gPC0gbWlncmFfbW90aXZvX29yaWdlbiAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIH4gc3VtKC4gPT0gMSwgbmEucm0gPSBUUlVFKSkpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAib3BjaW9uIiwgdmFsdWVzX3RvID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgZmlsdGVyKGZyZWN1ZW5jaWEgPj0gMSkgJT4lICAjIEZpbHRyYXIgc29sbyBvcGNpb25lcyBjb24gZnJlY3VlbmNpYSA+PSAxDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIDM0OSAqIDEwMCkgICMgVXNhciAzNDkgY29tbyBuIHRvdGFsDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCm1pZ3JhX29yaWdlbiA8LSBnZ3Bsb3QobWlncmFfbW90aXZvX29yaWdlbiwgYWVzKHggPSBmY3RfcmVvcmRlcihvcGNpb24sIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IG9wY2lvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAzLjUpICsgDQogIGxhYnModGl0bGUgPSAiUmF6b25lcyBwb3IgbGFzIHF1ZSBzYWxpZXJvbiBkZSBzdSBsdWdhciBkZSBvcmlnZW4iLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCg0KDQptaWdyYV9vcmlnZW4NCg0KDQpgYGANCg0KIyMjIFB1bGwgRmFjdG9yIHkgbWlncmFjacOzbg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tDQojI0cpIFJhem9uZXMgcG9yIGxhcyBjdcOhbGVzIGxsZWfDsyBhbCBQZWRyZWdhbCAtLS0tDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIFByaW5jaXBhbGVzIHJhem9uZXMgcG9yIGxhcyBxdWUgbGxlZ2Fyb24gYWwgcGVkcmVnYWwNCm1pZ3JhX21vdGl2b19wZWRyZSA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogIHNlbGVjdChzdGFydHNfd2l0aCgibWlncmFfcF9tb3Rpdm9fcGVkcmVfX18iKSkNCg0KbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKVtuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpID09ICJtaWdyYV9wX21vdGl2b19wZWRyZV9fXzEiXSA8LSAiRWR1Y2FjacOzbiINCm5hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSlbbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKSA9PSAibWlncmFfcF9tb3Rpdm9fcGVkcmVfX18yIl0gPC0gIlRyYWJham8tRWNvbm9tw61hIg0KbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKVtuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpID09ICJtaWdyYV9wX21vdGl2b19wZWRyZV9fXzMiXSA8LSAiU29jaW9jdWx0dXJhbGVzIg0KbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKVtuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpID09ICJtaWdyYV9wX21vdGl2b19wZWRyZV9fXzQiXSA8LSAiU2FsdWQiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fNjYiXSA8LSAiT3Ryb3MiDQpuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpW25hbWVzKG1pZ3JhX21vdGl2b19wZWRyZSkgPT0gIm1pZ3JhX3BfbW90aXZvX3BlZHJlX19fOTgiXSA8LSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KbmFtZXMobWlncmFfbW90aXZvX3BlZHJlKVtuYW1lcyhtaWdyYV9tb3Rpdm9fcGVkcmUpID09ICJtaWdyYV9wX21vdGl2b19wZWRyZV9fXzk5Il0gPC0gIk5vIHF1aXNvIHJlc3BvbmRlciINCg0KbWlncmFfbW90aXZvX3BlZHJlIDwtIG1pZ3JhX21vdGl2b19wZWRyZSAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIH4gc3VtKC4gPT0gMSwgbmEucm0gPSBUUlVFKSkpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAib3BjaW9uIiwgdmFsdWVzX3RvID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgZmlsdGVyKGZyZWN1ZW5jaWEgPj0gMSkgJT4lICAjIEZpbHRyYXIgc29sbyBvcGNpb25lcyBjb24gZnJlY3VlbmNpYSA+PSAxDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIDM0OSAqIDEwMCkgICMgVXNhciAzNDkgY29tbyBuIHRvdGFsDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCm1pZ3JhX3BlZHJlIDwtIGdncGxvdChtaWdyYV9tb3Rpdm9fcGVkcmUsIGFlcyh4ID0gZmN0X3Jlb3JkZXIob3BjaW9uLCBmcmVjdWVuY2lhKSwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBvcGNpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIlJhem9uZXMgcG9yIGxhcyBxdWUgbGxlZ2Fyb24gYWwgcGVkcmVnYWwiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCm1pZ3JhX3BlZHJlDQoNCg0KYGBgDQoNCiMgVGVuZW5jaWEgZGUgYW5pbWFsZXMNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNIKSBUZW5lbmNpYSB5IGNvbnRhY3RvIGNvbiBsb3MgYW5pbWFsZXMgYW50ZXMgZGUgbGEgbWlncmFjacOzbiAtLS0tDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLQ0KIyBQZXJjZXBjacOzbiBkZSBjYW1iaW9zIGVuIGVsIEVWRU5UT1MgRVhUUkVNT1MNCnRlbmVuY2lhX2FuaW1hbGVzX2FudGVzIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShob21lX2NyaWFfYW5pbV9hbnRlc19wLmZhY3RvcikpICU+JQ0KICBmaWx0ZXIoIShob21lX2NyaWFfYW5pbV9hbnRlc19wLmZhY3RvciAlaW4lIGMoIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSIpKSkgJT4lDQogIGNvdW50KGhvbWVfY3JpYV9hbmltX2FudGVzX3AuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQp0ZW5lbmNpYV9hbmltYWxlcyA8LSBnZ3Bsb3QodGVuZW5jaWFfYW5pbWFsZXNfYW50ZXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gaG9tZV9jcmlhX2FuaW1fYW50ZXNfcC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjcpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0FudGVzIGRlIGxhIE1JR1JBQ0nDk04/IikNCnRlbmVuY2lhX2FuaW1hbGVzDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyBUZW5lbmNpYSBkZSBhbmltYWxlcyBhY3R1YWxpZGFzDQp0ZW5lbmNpYV9hbmltYWxlc19hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShob21lX2NyaWFfYW5pbS5mYWN0b3IpKSAlPiUNCiAgY291bnQoaG9tZV9jcmlhX2FuaW0uZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQp0ZW5lbmNpYV9hbmltYWxlc19hY3R1IDwtIGdncGxvdCh0ZW5lbmNpYV9hbmltYWxlc19hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gaG9tZV9jcmlhX2FuaW0uZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC43KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EZXNwdcOpcyBkZSBsYSBNSUdSQUNJw5NOPyIpDQp0ZW5lbmNpYV9hbmltYWxlc19hY3R1DQoNCg0KYGBgDQoNCg0KIyAgRGlmaWN1bHRhZGVzIGx1ZWdvIGRlIGxhIG1pZ3JhY2nDs24NCg0KIyMjIEFndWEgcGFyYSBjb25zdW1vDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KIyNCKSBEaWZpY3VsdGFkZXMgbHVlZ28gZGUgbGEgbWlncmFjacOzbiAtLS0tDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLQ0KIyBBY2Nlc28gYSBhZ3VhIHBhcmEgY29uc3Vtbw0KDQojIyBEaWZpY3VsdGFkIGRlbCBhZ3VhIGFudGVzDQpkaWZfYWd1YV9wYXMgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX3dhdF9hbHRlci5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl93YXRfYWx0ZXIuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIHNpbiBsYSBldGlxdWV0YSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlIg0KYWd1YV9wYXMgPC0gZ2dwbG90KGRpZl9hZ3VhX3BhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX3dhdF9hbHRlci5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKQ0KDQphZ3VhX3Bhcw0KDQoNCmBgYA0KDQoNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlbCBhZ3VhIGFjdHVhbGlkYWQNCmRpZl9hZ3VhX2FjdCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfd2F0X2FjdHVhbC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl93YXRfYWN0dWFsLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KYWd1YV9hY3QgPC0gZ2dwbG90KGRpZl9hZ3VhX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX3dhdF9hY3R1YWwuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKQ0KYWd1YV9hY3QNCg0KYGBgDQoNCg0KIyMjIERlc2FndWUgDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGVsIGRlc2FndWUgYW50ZXMNCmRpZl9kZXNhZ3VlX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfd2F0X3B1Yl9hbHRlci5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl93YXRfcHViX2FsdGVyLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvDQpkZXNhZ3VlX3BhcyA8LSBnZ3Bsb3QoZGlmX2Rlc2FndWVfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfd2F0X3B1Yl9hbHRlci5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKQ0KDQpkZXNhZ3VlX3Bhcw0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlbCBkZXNhZ3VlIGFjdHVhbA0KZGlmX2Rlc2FndWVfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl93YXRfcHViX2FjdHVhbC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl93YXRfcHViX2FjdHVhbC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KZGVzYWd1ZV9hY3QgPC0gZ2dwbG90KGRpZl9kZXNhZ3VlX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX3dhdF9wdWJfYWN0dWFsLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikNCg0KZGVzYWd1ZV9hY3QNCg0KYGBgDQoNCg0KIyMjIENlbnRyb3MgZWR1Y2F0aXZvcw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIGNvbGVnaW8gYW50ZXMNCmNvbGVnaW9fcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9zY2hvb2xfYWx0ZXIuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciAlaW4lIGMoIk5vIHVzYWJhIGVzdGUgc2VydmljaW8iLCAiTm8gYXBsaWNhIiwgIk5vIHNhYmUgLyBObyByZWN1ZXJkYSIpKSkgJT4lDQogIGNvdW50KGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZSBzaW4gbGEgZXRpcXVldGEgIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCmNvbGVnaW9fcGFzZWQgPC0gZ2dwbG90KGNvbGVnaW9fcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfc2Nob29sX2FsdGVyLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQpjb2xlZ2lvX3Bhc2VkDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBjb2xlZ2lvIGFjdHVhbGlkYWQNCmNvbGVnaW9fYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9zY2hvb2xfYWN0dWFsLmZhY3RvcikpICU+JQ0KICBmaWx0ZXIoIShkaWZmX3NjaG9vbF9hY3R1YWwuZmFjdG9yICVpbiUgYygiTm8gdXNvIGVzdGUgc2VydmljaW8iLCAiTm8gYXBsaWNhIikpKSAlPiUNCiAgY291bnQoZGlmZl9zY2hvb2xfYWN0dWFsLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZSBzaW4gbGEgZXRpcXVldGEgIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCmNvbGVnaW9fYWN0dSA8LSBnZ3Bsb3QoY29sZWdpb19hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9zY2hvb2xfYWN0dWFsLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikNCmNvbGVnaW9fYWN0dQ0KDQoNCmBgYA0KDQoNCg0KIyMjIEVsZWN0cmljaWRhZA0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIGVsZWN0cmljaWRhZCBhbnRlcw0KZWxlY3RyaWNpZGFkX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvcikpICU+JQ0KICBmaWx0ZXIoIShkaWZmX2VsZWN0cl9hbHRlci5mYWN0b3IgJWluJSBjKCJObyBzYWJlIC8gTm8gcmVjdWVyZGEiKSkpICU+JQ0KDQogIGNvdW50KGRpZmZfZWxlY3RyX2FsdGVyLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZSBzaW4gbGEgZXRpcXVldGEgIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCmVsZWN0cmljaWRhZF9wYXNlZCA8LSBnZ3Bsb3QoZWxlY3RyaWNpZGFkX3BhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2VsZWN0cl9hbHRlci5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpIA0KZWxlY3RyaWNpZGFkX3Bhc2VkDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBlbGVjdHJpY2lkYWQgYWN0dWFsaWRhZA0KZWxlY3RyaWNpZGFkX2FjdCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZWxlY3RyX2FjdHVhbC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl9lbGVjdHJfYWN0dWFsLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KZWxlY3RyaWNpZGFkX2FjdHUgPC0gZ2dwbG90KGVsZWN0cmljaWRhZF9hY3QsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9lbGVjdHJfYWN0dWFsLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikgDQplbGVjdHJpY2lkYWRfYWN0dQ0KYGBgDQoNCg0KIyMjIFRyYW5zcG9ydGUNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSB0cmFuc3BvcnRlIGFudGVzDQp0cmFuc3BvcnRlX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfdHJhbnNwX2FsdGVyLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3RyYW5zcF9hbHRlci5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUgc2luIGxhIGV0aXF1ZXRhICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQp0cmFuc3BvcnRlX3Bhc2VkIDwtIGdncGxvdCh0cmFuc3BvcnRlX3BhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX3RyYW5zcF9hbHRlci5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpDQp0cmFuc3BvcnRlX3Bhc2VkDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSB0cmFuc3BvcnRlIGFjdHVhbGlkYWQNCnRyYW5zcG9ydGVfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl90cmFuc3BfYWN0dWFsLmZhY3RvcikpICU+JQ0KICBjb3VudChkaWZmX3RyYW5zcF9hY3R1YWwuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllDQp0cmFuc3BvcnRlX2FjdHUgPC0gZ2dwbG90KHRyYW5zcG9ydGVfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfdHJhbnNwX2FjdHVhbC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgQUNUVUFMPyIpDQp0cmFuc3BvcnRlX2FjdHUNCmBgYA0KDQoNCiMjIyBQcm9ncmFtYXMgU29jaWFsZXMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBwcm9ncmFtYXMgc29jaWFsZXMgYW50ZXMNCnByb2dyYW1fc29jaWFsX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfcHJvZ19zb2NpYWwuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfcHJvZ19zb2NpYWwuZmFjdG9yICVpbiUgYygiTm8gdXNhYmEgZXN0ZSBzZXJ2aWNpbyIsICJObyBhcGxpY2EgLyBubyBlcmEgZWxlZ2libGUiLCAiTm8gc2FiZSAvIE5vIHJlY3VlcmRhIikpKSAlPiUNCiAgY291bnQoZGlmZl9wcm9nX3NvY2lhbC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllIGNvbiBsb3MgZGF0b3MgZmlsdHJhZG9zDQpwcm9ncmFtX3NvY2lhbF9wYXNlZCA8LSBnZ3Bsb3QocHJvZ3JhbV9zb2NpYWxfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfcHJvZ19zb2NpYWwuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkZXMgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKQ0KDQpwcm9ncmFtX3NvY2lhbF9wYXNlZA0KDQpgYGANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHByb2dyZ2FtYXMgc29jaWFsZXMgYWN0dWFsaWRhZA0KcHJvZ3JhbV9zb2NpYWxfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9wcm9nX3NvY2lhbF9hY3QuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfcHJvZ19zb2NpYWxfYWN0LmZhY3RvciAlaW4lIGMoIk5vIHVzbyBlc3RlIHNlcnZpY2lvIiwgIk5vIGFwbGljYSwgbm8gZXMgZWxlZ2libGUiLCAiTm8gc2FiZSAvIE5vIHJlY3VlcmRhIikpKSAlPiUNCiAgY291bnQoZGlmZl9wcm9nX3NvY2lhbF9hY3QuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KcHJvZ3JhbV9zb2NpYWxfYWN0dSA8LSBnZ3Bsb3QocHJvZ3JhbV9zb2NpYWxfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfcHJvZ19zb2NpYWxfYWN0LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikNCnByb2dyYW1fc29jaWFsX2FjdHUNCg0KYGBgDQoNCg0KIyMjIERlbGluY3VlbmNpYQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIHByb2dyYW1hcyBzb2NpYWxlcyBhbnRlcw0KZGVsaW5jdWVuY2lhX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZGVsaW5jLmZhY3RvcikpICU+JQ0KICBmaWx0ZXIoIShkaWZmX2RlbGluYy5mYWN0b3IgJWluJSBjKCJObyByZWN1ZXJkYSAvIG5vIHNhYmUiKSkpICU+JQ0KDQogIGNvdW50KGRpZmZfZGVsaW5jLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZSBzaW4gbGEgZXRpcXVldGEgIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCmRlbGluY3VlbmNpYV9wYXNlZCA8LSBnZ3Bsb3QoZGVsaW5jdWVuY2lhX3BhcywgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2RlbGluYy5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWRlcyBsdWVnbyBkZSBsYSBNSUdSQUNJw5NOPyIpIA0KZGVsaW5jdWVuY2lhX3Bhc2VkDQoNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBwcm9ncmdhbWFzIHNvY2lhbGVzIGFjdHVhbGlkYWQNCmRlbGluY3VlbmNpYV9hY3QgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX2RlbGluY19hY3QuZmFjdG9yKSkgJT4lDQogIGNvdW50KGRpZmZfZGVsaW5jX2FjdC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUNCmRlbGluY3VlbmNpYV9hY3R1IDwtIGdncGxvdChkZWxpbmN1ZW5jaWFfYWN0LCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZGVsaW5jX2FjdC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgQUNUVUFMPyIpIA0KZGVsaW5jdWVuY2lhX2FjdHUNCg0KYGBgDQoNCg0KIyMjIERpc2NyaW1pbmFjacOzbiBkZSBsb3MgdmVjaW5vcw0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyBEaWZpY3VsdGFkIGRlIERpc2NyaW1pbmFjacOzbiBhbnRlcw0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19wYXMgPC0gZGF0YV9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkaWZmX2Rpc2NyaV92ZWNpbm9zLmZhY3RvcikpICU+JQ0KICBmaWx0ZXIoIShkaWZmX2Rpc2NyaV92ZWNpbm9zLmZhY3RvciAlaW4lIGMoIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSIpKSkgJT4lDQoNCiAgY291bnQoZGlmZl9kaXNjcmlfdmVjaW5vcy5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUNCmRpc2NyaW1pbmFjaW9uX3ZlY2lub3NfcGFzZWQgPC0gZ2dwbG90KGRpc2NyaW1pbmFjaW9uX3ZlY2lub3NfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfZGlzY3JpX3ZlY2lub3MuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKyAgIyBDb252aWVydGUgZWwgZ3LDoWZpY28gZGUgYmFycmFzIGVuIHVuIGdyw6FmaWNvIGRlIHBpZQ0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkZXMgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKQ0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19wYXNlZA0KDQoNCmBgYA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgRGlzY3JpbWluYWNpw7NuIGFjdHVhbGlkYWQNCmRpc2NyaW1pbmFjaW9uX3ZlY2lub3NfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9kaXNjcmlfdmVjaW5vc19hY3QuZmFjdG9yKSkgJT4lDQogIGNvdW50KGRpZmZfZGlzY3JpX3ZlY2lub3NfYWN0LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIGRlIHBpZQ0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19hY3R1IDwtIGdncGxvdChkaXNjcmltaW5hY2lvbl92ZWNpbm9zX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2Rpc2NyaV92ZWNpbm9zX2FjdC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjgpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgQUNUVUFMPyIpIA0KZGlzY3JpbWluYWNpb25fdmVjaW5vc19hY3R1DQoNCmBgYA0KDQoNCiMjIyBEaWFycmVhcyANCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIERpYXJyZWFzDQoNCiMjIERpZmljdWx0YWQgZGUgbGEgZGlhcnJlYSBhbnRlcw0KZGlmX2RpYXJyZWFfcGFzIDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfZW5mZV9jb25faDIwLmZhY3RvciAlaW4lIGMoIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSIpKSkgJT4lDQoNCiAgY291bnQoZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCmRpYXJyZWFfcGFzIDwtIGdncGxvdChkaWZfZGlhcnJlYV9wYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9lbmZlX2Nvbl9oMjAuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIGx1ZWdvIGRlIGxhIE1JR1JBQ0nDk04/IikNCg0KZGlhcnJlYV9wYXMNCg0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBkZSBsYSBkaWFycmVhIGFjdHVhbGlkYWQNCmRpZl9kaWFycmVhX2FjdCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfZW5mZV9jb25faDIwX2FjdC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl9lbmZlX2Nvbl9oMjBfYWN0LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KZGlhcnJlYV9hY3QgPC0gZ2dwbG90KGRpZl9kaWFycmVhX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2VuZmVfY29uX2gyMF9hY3QuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9EaWZpY3VsdGFkIEFDVFVBTD8iKQ0KDQpkaWFycmVhX2FjdA0KDQpgYGANCg0KDQoNCg0KIyMjIFNhbHVkDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGlmaWN1bHRhZCBjb24gbGEgc2FsdWQgYW50ZXMNCnNhbHVkX3BhcyA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IpKSAlPiUNCiAgICBmaWx0ZXIoIShkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yICVpbiUgYygiTm8gcmVjdWVyZGEgLyBubyBzYWJlIikpKSAlPiUNCg0KICBjb3VudChkaWZmX2F0ZW5fc2FsdWQuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gZGUgcGllDQpzYWx1ZF9wYXNlZCA8LSBnZ3Bsb3Qoc2FsdWRfcGFzLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRpZmZfYXRlbl9zYWx1ZC5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArICAjIENvbnZpZXJ0ZSBlbCBncsOhZmljbyBkZSBiYXJyYXMgZW4gdW4gZ3LDoWZpY28gZGUgcGllDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCLCv0RpZmljdWx0YWQgbHVlZ28gZGUgbGEgTUlHUkFDScOTTj8iKSANCnNhbHVkX3Bhc2VkDQoNCmBgYA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmljdWx0YWQgZGUgU2FsdWQgYWN0dWFsaWRhZA0Kc2FsdWRfYWN0IDwtIGRhdGFfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGlmZl9hdGVuX3NhbHVkX2FjdC5mYWN0b3IpKSAlPiUNCiAgY291bnQoZGlmZl9hdGVuX3NhbHVkX2FjdC5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwaWUNCnNhbHVkX2FjdHUgPC0gZ2dwbG90KHNhbHVkX2FjdCwgYWVzKHggPSAiIiwgeSA9IGZyZWN1ZW5jaWEsIGZpbGwgPSBkaWZmX2F0ZW5fc2FsdWRfYWN0LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsgICMgQ29udmllcnRlIGVsIGdyw6FmaWNvIGRlIGJhcnJhcyBlbiB1biBncsOhZmljbyBkZSBwaWUNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIsK/RGlmaWN1bHRhZCBBQ1RVQUw/IikgDQpzYWx1ZF9hY3R1DQoNCmBgYA0KDQoNCiMjIyBUcmF0byBkZWwgcGVyc29uYWwgZGUgc2FsdWQgKFBTKQ0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMjIERpZmVyZW50ZSB0cmF0byBjb24gbG9zIHByb2Zlc2lvbmFsZXMgZGUgbGEgc2FsdWQNCmRpZl90cmF0b19zYWx1ZCA8LSBkYXRhX2hvZ2FyICU+JQ0KICBmaWx0ZXIoIWlzLm5hKGRpZmZfc190cmF0b19kaWYuZmFjdG9yKSkgJT4lDQogIGZpbHRlcighKGRpZmZfc190cmF0b19kaWYuZmFjdG9yICVpbiUgYygiTm8gcmVjdWVyZGEgLyBubyBzYWJlIikpKSAlPiUNCiAgY291bnQoZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBSZW5vbWJyYXIgbGEgc2VndW5kYSBhbHRlcm5hdGl2YSBkZWwgZmFjdG9yDQpkaWZfdHJhdG9fc2FsdWQkZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IgPC0gZmN0X3JlY29kZSgNCiAgZGlmX3RyYXRvX3NhbHVkJGRpZmZfc190cmF0b19kaWYuZmFjdG9yLA0KICAiU2luIGNvbnRhY3RvIGNvbiBQUyIgPSAiTm8gaGVtb3MgdGVuaWRvIGNvbnRhY3RvIGNvbiBwcm9mZXNpb25hbGVzIGRlIHNhbHVkIikNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBiYXJyYXMgaG9yaXpvbnRhbGVzDQpkaWZfdHJhdG8gPC0gZ2dwbG90KGRpZl90cmF0b19zYWx1ZCwgYWVzKHggPSBmY3RfcmVvcmRlcihkaWZmX3NfdHJhdG9fZGlmLmZhY3RvciwgZnJlY3VlbmNpYSksIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZGlmZl9zX3RyYXRvX2RpZi5mYWN0b3IpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIsK/SGEgcGVyY2liaWRvIHF1ZSBlbCBQUyBsZSB0cmF0YSBkaWZlcmVudGU/IiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJGcmVjdWVuY2lhIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsICAjIE9jdWx0YSBsYSBsZXllbmRhDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSAgIyBDZW50cmEgeSBlc3RpbGl6YSBlbCB0w610dWxvDQpkaWZfdHJhdG8NCg0KDQoNCmBgYA0KDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyBSYXpvbmVzIGRlIGRpZmVyZW50ZSB0cmF0bw0KdHJhdG8gPC0gZGF0YV9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXyIpKQ0KDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzEiXSA8LSAiSWRpb21hIG8gYWNlbnRvIg0KbmFtZXModHJhdG8pW25hbWVzKHRyYXRvKSA9PSAiZGlmZl9zX3Jhel90cmF0b19kaWZfX18yIl0gPC0gIkN1bHR1cmEiDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzMiXSA8LSAiIFJhemEvIHByb2NlZGVuY2lhIMOpdG5pY2EiDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzQiXSA8LSAiQ29sb3IgZGUgcGllbCINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fNSJdIDwtICJSZWxpZ2nDs24iDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzYiXSA8LSAiU2VndXJvIG3DqWRpY28iDQpuYW1lcyh0cmF0bylbbmFtZXModHJhdG8pID09ICJkaWZmX3NfcmF6X3RyYXRvX2RpZl9fXzciXSA8LSAiUG9yIGhhYmVyIHZlbmlkbyBkZSBvdHJvIGx1Z2FyIg0KbmFtZXModHJhdG8pW25hbWVzKHRyYXRvKSA9PSAiZGlmZl9zX3Jhel90cmF0b19kaWZfX182NiJdIDwtICJPdHJhIHJhesOzbiINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fOTgiXSA8LSAiTm8gcmVjdWVyZGEgLyBubyBzYWJlICINCm5hbWVzKHRyYXRvKVtuYW1lcyh0cmF0bykgPT0gImRpZmZfc19yYXpfdHJhdG9fZGlmX19fOTkiXSA8LSAiTm8gcXVpc28gcmVzcG9uZGVyIg0KDQp0cmF0byA8LSB0cmF0byAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIH4gc3VtKC4gPT0gMSwgbmEucm0gPSBUUlVFKSkpICU+JQ0KICBwaXZvdF9sb25nZXIoY29scyA9IGV2ZXJ5dGhpbmcoKSwgbmFtZXNfdG8gPSAib3BjaW9uIiwgdmFsdWVzX3RvID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgZmlsdGVyKGZyZWN1ZW5jaWEgPj0gMSkgJT4lICAjIEZpbHRyYXIgc29sbyBvcGNpb25lcyBjb24gZnJlY3VlbmNpYSA+PSAxDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIDM0OSAqIDEwMCkgICMgVXNhciAzNDkgY29tbyBuIHRvdGFsDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCmRpZl90cmF0b19wcm9mX3NhbHVkIDwtIGdncGxvdCh0cmF0bywgYWVzKHggPSBmY3RfcmVvcmRlcihvcGNpb24sIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IG9wY2lvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAzLjUpICsgDQogIGxhYnModGl0bGUgPSAiUmF6b25lcyBkZWwgdHJhdG8gZGlmZXJlbnRlIHBvciBwYXJ0ZSBkZWwgUFMiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCmRpZl90cmF0b19wcm9mX3NhbHVkDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCiMgIERlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KIyMjIERlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCg0KIyMgRGVzcGxhemFtaWVudG8gZm9yemFkbw0KZGVzcF9mb3J6YWRvIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShkZXNwX2FsZ19mb3J6LmZhY3RvcikpICU+JQ0KICBjb3VudChkZXNwX2FsZ19mb3J6LmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KZGVzcGxfZm9yemFkbyA8LSBnZ3Bsb3QoZGVzcF9mb3J6YWRvLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRlc3BfYWxnX2ZvcnouZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiwr9Vc3RlZCBmdWUgb2JsaWdhZG8gYSBkZWphciBzdSBsdWdhciBkZSBvcmlnZW4/IikNCg0KZGVzcGxfZm9yemFkbw0Kcm0oZGVzcF9mb3J6YWRvLCBkZXNwbF9mb3J6YWRvKQ0KDQpgYGANCg0KIyMjIFJhem9uZXMgZGVsIGRlc3BsYXphbWllbnRvIGZvcnphZG8NCg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiMgTW90aXZvIGRlbCBkZXNwbGF6YW1pZW50byBmb3J6YWRvDQpyYXpvbmVzX2Rlc3BfZm9yeiA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZGVzcF9tb3Rpdl9mb3J6LmZhY3RvcikpICU+JQ0KICBjb3VudChkZXNwX21vdGl2X2ZvcnouZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCg0KIyBSZW5vbWJyYXIgbGEgc2VndW5kYSBhbHRlcm5hdGl2YSBkZWwgZmFjdG9yDQpyYXpvbmVzX2Rlc3BfZm9yeiRkZXNwX21vdGl2X2ZvcnouZmFjdG9yIDwtIGZjdF9yZWNvZGUoDQogIHJhem9uZXNfZGVzcF9mb3J6JGRlc3BfbW90aXZfZm9yei5mYWN0b3IsDQogICJEZXNhc3RyZXMgTmF0dXJhbGVzIiA9ICJEZXNhc3RyZXMgbmF0dXJhbGVzOiBpbnVuZGFjaW9uZXMsIHNlcXXDrWFzLCB0ZXJyZW1vdG9zLCBlcnVwY2lvbmVzIHZvbGPDoW5pY2FzLCBodWF5Y29zLCBpbmNlbmRpb3MgZm9yZXN0YWxlcywgZXRjLiIsDQoiRXZpdGFyIHRlcnJvcmlzbW8sIGNvbmZsaWN0byBhcm1hZG8sIGV0Yy4iID0gIlBhcmEgZXZpdGFyIHRlcnJvcmlzbW8sIGNvbmZsaWN0byBhcm1hZG8sIHZpb2xlbmNpYSBwb2zDrXRpY2EsIHZpb2xhY2nDs24gZGUgZGVyZWNob3MgaHVtYW5vcy4iKQ0KDQojIA0KIyBDcmVhciBlbCBncsOhZmljbw0KcmF6X2Rlc3BfZnJvcnphZG8gPC0gZ2dwbG90KHJhem9uZXNfZGVzcF9mb3J6LCBhZXMoeCA9IGZjdF9yZW9yZGVyKGRlc3BfbW90aXZfZm9yei5mYWN0b3IsIGZyZWN1ZW5jaWEpLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IGRlc3BfbW90aXZfZm9yei5mYWN0b3IpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuNykgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMy41KSArIA0KICBsYWJzKHRpdGxlID0gIlByaW5jaXBhbGVzIHJhem9uZXMiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCg0KcmF6X2Rlc3BfZnJvcnphZG8NCg0Kcm0ocmF6b25lc19kZXNwX2ZvcnosIHJhel9kZXNwX2Zyb3J6YWRvKQ0KDQpgYGANCg0KIyAgUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBDTElNQSAoYW50ZXMgZGUgbWlncmFyKQ0KDQojIyMgQ2xpbWENCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtDQojIFBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gZWwgQ0xJTUENCnBlcmNwX2NsaW1hIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYShwZXJjZXBfY2xpbV9hbnRlX3Zpdi5mYWN0b3IpKSAlPiUNCiAgY291bnQocGVyY2VwX2NsaW1fYW50ZV92aXYuZmFjdG9yLCBuYW1lID0gImZyZWN1ZW5jaWEiKSAlPiUNCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gc3VtKGZyZWN1ZW5jaWEpICogMTAwKSAgIyBDYWxjdWxhciBlbCBwb3JjZW50YWplDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28gDQpjbGltYSA8LSBnZ3Bsb3QocGVyY3BfY2xpbWEsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gcGVyY2VwX2NsaW1fYW50ZV92aXYuZmFjdG9yKSkgKw0KICBnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGZyZWN1ZW5jaWEsICIgKCIsIHJvdW5kKHBvcmNlbnRhamUsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgZ2d0aXRsZSgiUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBjbGltYSIpDQoNCmNsaW1hDQpybShwZXJjcF9jbGltYSwgY2xpbWEpDQoNCmBgYA0KDQojIyMgQ2FtYmlvcyBlbiBlbCBDbGltYQ0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KIyBDYW1iaW9zIGVuIGVsIGNsaW1hDQpjbGltYV9wZXIgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoInBlcmNlcF9jbGltX2NhbWJfX18iKSkNCg0KbmFtZXMoY2xpbWFfcGVyKVtuYW1lcyhjbGltYV9wZXIpID09ICJwZXJjZXBfY2xpbV9jYW1iX19fMSJdIDwtICJBdW1lbnRvIGVuIGxhIHRlbXBlcmF0dXJhIg0KbmFtZXMoY2xpbWFfcGVyKVtuYW1lcyhjbGltYV9wZXIpID09ICJwZXJjZXBfY2xpbV9jYW1iX19fMiJdIDwtICJEaXNtaW51Y2nDs24gZW4gbGEgdGVtcGVyYXR1cmEiDQpuYW1lcyhjbGltYV9wZXIpW25hbWVzKGNsaW1hX3BlcikgPT0gInBlcmNlcF9jbGltX2NhbWJfX18zIl0gPC0gIkNhbWJpbyBlbiBsb3MgcGF0cm9uZXMgZGUgbGx1dmlhIg0KbmFtZXMoY2xpbWFfcGVyKVtuYW1lcyhjbGltYV9wZXIpID09ICJwZXJjZXBfY2xpbV9jYW1iX19fNCJdIDwtICJNw6FzIGV2ZW50b3MgY2xpbcOhdGljb3MgZXh0cmVtb3MiDQpuYW1lcyhjbGltYV9wZXIpW25hbWVzKGNsaW1hX3BlcikgPT0gInBlcmNlcF9jbGltX2NhbWJfX182NiJdIDwtICJPdHJvcyINCm5hbWVzKGNsaW1hX3BlcilbbmFtZXMoY2xpbWFfcGVyKSA9PSAicGVyY2VwX2NsaW1fY2FtYl9fXzk4Il0gPC0gIk5vIHJlY3VlcmRhIC8gbm8gc2FiZSINCm5hbWVzKGNsaW1hX3BlcilbbmFtZXMoY2xpbWFfcGVyKSA9PSAicGVyY2VwX2NsaW1fY2FtYl9fXzk5Il0gPC0gIk5vIHF1aXNvIHJlc3BvbmRlciINCg0KIyBDYWxjdWxhciBsYSBmcmVjdWVuY2lhIHkgcG9yY2VudGFqZSBkZSBjYWRhIG9wY2nDs24NCmNsaW1hX3BlciA8LSBjbGltYV9wZXIgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCB+IHN1bSguID09IDEsIG5hLnJtID0gVFJVRSkpKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gIm9wY2lvbiIsIHZhbHVlc190byA9ICJmcmVjdWVuY2lhIikgJT4lDQogIGZpbHRlcihmcmVjdWVuY2lhID49IDEpICU+JSAgIyBGaWx0cmFyIHNvbG8gb3BjaW9uZXMgY29uIGZyZWN1ZW5jaWEgPj0gMQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KY2xpbWFfcCA8LSBnZ3Bsb3QoY2xpbWFfcGVyLCBhZXMoeCA9IGZjdF9yZW9yZGVyKG9wY2lvbiwgZnJlY3VlbmNpYSksIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gb3BjaW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDMuNSkgKyANCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIGNvbnNpZGVyYSB1c3RlZCBxdWUgY2FtYmnDsyBlbCBjbGltYT8iLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIkZyZWN1ZW5jaWEiKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgICMgT2N1bHRhIGxhIGxleWVuZGENCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICAjIENlbnRyYSB5IGVzdGlsaXphIGVsIHTDrXR1bG8NCmNsaW1hX3ANCg0KYGBgDQoNCg0KIyMjIFRlbXBlcmF0dXJhDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQpwZXJjcF90ZW1wZXJhdHVyYSA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEodGVtcF9jYW1iX2FudGVfdml2aW8uZmFjdG9yKSkgJT4lDQogIGNvdW50KHRlbXBfY2FtYl9hbnRlX3ZpdmlvLmZhY3RvciwgbmFtZSA9ICJmcmVjdWVuY2lhIikgJT4lDQogIG11dGF0ZShwb3JjZW50YWplID0gZnJlY3VlbmNpYSAvIHN1bShmcmVjdWVuY2lhKSAqIDEwMCkgICMgQ2FsY3VsYXIgZWwgcG9yY2VudGFqZQ0KDQojIENyZWFyIGVsIGdyw6FmaWNvIA0KdGVtcGVyYXR1cmEgPC0gZ2dwbG90KHBlcmNwX3RlbXBlcmF0dXJhLCBhZXMoeCA9ICIiLCB5ID0gZnJlY3VlbmNpYSwgZmlsbCA9IHRlbXBfY2FtYl9hbnRlX3ZpdmlvLmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIlBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gbGEgVGVtcGVyYXR1cmEiKQ0KDQp0ZW1wZXJhdHVyYQ0Kcm0ocGVyY3BfdGVtcGVyYXR1cmEsIHRlbXBlcmF0dXJhKQ0KDQpgYGANCg0KIyMjIExsdXZpYXMNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9ICJhc2lzIn0NCiMgUGVyY2VwY2nDs24gZGUgY2FtYmlvcyBlbiBlbCBMTFVWSUFTDQpwZXJjcF9sbHV2aWFzIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgZmlsdGVyKCFpcy5uYSh0ZW1fYW50ZV9jYW1iX2xsdXYuZmFjdG9yKSkgJT4lDQogIGNvdW50KHRlbV9hbnRlX2NhbWJfbGx1di5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyANCmxsdXZpYXMgPC0gZ2dwbG90KHBlcmNwX2xsdXZpYXMsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gdGVtX2FudGVfY2FtYl9sbHV2LmZhY3RvcikpICsNCiAgZ2VvbV9iYXIod2lkdGggPSAxLCBzdGF0ID0gImlkZW50aXR5IikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgbGFicyh4ID0gIiIsIHkgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIikpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGdndGl0bGUoIlBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gbGFzIExsdXZpYXMiKQ0KbGx1dmlhcw0Kcm0ocGVyY3BfbGx1dmlhcywgbGx1dmlhcykNCg0KYGBgDQoNCiMjIyBFdmVudG9zIEV4dHJlbW9zDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQojIFBlcmNlcGNpw7NuIGRlIGNhbWJpb3MgZW4gZWwgRVZFTlRPUyBFWFRSRU1PUw0KcGVyY3BfZXZlbnRfZXh0cmVtZSA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogIGZpbHRlcighaXMubmEoZXZlbnRfZXh0X2FudGVfcHJvdi5mYWN0b3IpKSAlPiUNCiAgY291bnQoZXZlbnRfZXh0X2FudGVfcHJvdi5mYWN0b3IsIG5hbWUgPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyBzdW0oZnJlY3VlbmNpYSkgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUNCg0KIyBDcmVhciBlbCBncsOhZmljbyANCmV2ZW50b3NfZXh0cmVtb3MgPC0gZ2dwbG90KHBlcmNwX2V2ZW50X2V4dHJlbWUsIGFlcyh4ID0gIiIsIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gZXZlbnRfZXh0X2FudGVfcHJvdi5mYWN0b3IpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoZnJlY3VlbmNpYSwgIiAoIiwgcm91bmQocG9yY2VudGFqZSwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBnZ3RpdGxlKCJQZXJjZXBjacOzbiBkZSBjYW1iaW9zIGVuIEV2ZW50b3MgRXh0cmVtb3MiKQ0KDQpldmVudG9zX2V4dHJlbW9zDQpybShwZXJjcF9ldmVudF9leHRyZW1lLCBldmVudG9zX2V4dHJlbW9zKQ0KDQoNCmBgYA0KDQojICBQYXRyb25lcyBkaWV0YXJpb3MgeSBtaWdyYWNpw7NuDQoNCiMjIyBBbnRlcyBkZSBNaWdyYXINCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0gImFzaXMifQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0NCiMgQW50ZXMgZGUgbWlncmFyICBkb25kZSBjb25zdW1pYXMgc3VzIGFsaW1lbnRvcw0KY29uc3VtZV9hbnRfYWxpbWVudG9zIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJkb25kZV9jb25zdV9hbnRlc19fXyIpKQ0KDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fMSJdIDwtICJFbiBjYXNhIg0KbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9hbnRlc19fXzIiXSA8LSAiRW4gcmVzdGF1cmFudGUiDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fMyJdIDwtICJFbiBsYSBjYWxsZSINCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX180Il0gPC0gIkVuIGVsIHRyYWJham8iDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fNSJdIDwtICJFbiBlbCBjb21lZG9yIHBvcHVwbGFyIg0KbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9hbnRlc19fXzY2Il0gPC0gIk90cm8gbcOpdG9kbyINCm5hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hbnRfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfYW50ZXNfX185OCJdIDwtICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQpuYW1lcyhjb25zdW1lX2FudF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYW50X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X2FudGVzX19fOTkiXSA8LSAiTm8gcXVpc28gcmVzcG9uZGVyIg0KDQoNCmNvbnN1bWVfYW50X2FsaW1lbnRvcyA8LSBjb25zdW1lX2FudF9hbGltZW50b3MgJT4lDQogIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCB+IHN1bSguID09IDEsIG5hLnJtID0gVFJVRSkpKSAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBldmVyeXRoaW5nKCksIG5hbWVzX3RvID0gIm9wY2lvbiIsIHZhbHVlc190byA9ICJmcmVjdWVuY2lhIikgJT4lDQogIGZpbHRlcihmcmVjdWVuY2lhID49IDEpICU+JSAgIyBGaWx0cmFyIHNvbG8gb3BjaW9uZXMgY29uIGZyZWN1ZW5jaWEgPj0gMQ0KICBtdXRhdGUocG9yY2VudGFqZSA9IGZyZWN1ZW5jaWEgLyAzNDkgKiAxMDApICAjIFVzYXIgMzQ5IGNvbW8gbiB0b3RhbA0KDQoNCiMgQ3JlYXIgZWwgZ3LDoWZpY28NCmFsaW1lbnRvc19hbnRlcyA8LSBnZ3Bsb3QoY29uc3VtZV9hbnRfYWxpbWVudG9zLCBhZXMoeCA9IGZjdF9yZW9yZGVyKG9wY2lvbiwgZnJlY3VlbmNpYSksIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gb3BjaW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDMuNSkgKyANCiAgbGFicyh0aXRsZSA9ICLCv0TDs25kZSBjb25zdW1pYSBzdXMgYWxpbWVudG9zPyIsDQogICAgICAgeCA9ICIiLA0KICAgICAgIHkgPSAiRnJlY3VlbmNpYSIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCAgIyBPY3VsdGEgbGEgbGV5ZW5kYQ0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSkgICMgQ2VudHJhIHkgZXN0aWxpemEgZWwgdMOtdHVsbw0KDQphbGltZW50b3NfYW50ZXMNCg0KDQoNCmBgYA0KDQojIyMgTHVlZ28gZGUgbGEgTWlncmFjacOzbg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQojIEFjdHVhbG1lbnRlIGRvbmRlIGNvbnN1bWUgc3VzIGFsaW1lbnRvcw0KY29uc3VtZV9hY3RfYWxpbWVudG9zIDwtIGRhdGFfaW5kaXZpZHVhbF9ob2dhciAlPiUNCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJkb25kZV9jb25zdV9fXyIpKQ0KDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fMSJdIDwtICJFbiBjYXNhIg0KbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9fXzIiXSA8LSAiRW4gcmVzdGF1cmFudGUiDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fMyJdIDwtICJFbiBsYSBjYWxsZSINCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX180Il0gPC0gIkVuIGVsIHRyYWJham8iDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fNSJdIDwtICJFbiBlbCBjb21lZG9yIHBvcHVwbGFyIg0KbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKVtuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpID09ICJkb25kZV9jb25zdV9fXzY2Il0gPC0gIk90cm8gbcOpdG9kbyINCm5hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcylbbmFtZXMoY29uc3VtZV9hY3RfYWxpbWVudG9zKSA9PSAiZG9uZGVfY29uc3VfX185OCJdIDwtICJObyByZWN1ZXJkYSAvIG5vIHNhYmUiDQpuYW1lcyhjb25zdW1lX2FjdF9hbGltZW50b3MpW25hbWVzKGNvbnN1bWVfYWN0X2FsaW1lbnRvcykgPT0gImRvbmRlX2NvbnN1X19fOTkiXSA8LSAiTm8gcXVpc28gcmVzcG9uZGVyIg0KDQpjb25zdW1lX2FjdF9hbGltZW50b3MgPC0gY29uc3VtZV9hY3RfYWxpbWVudG9zICU+JQ0KICBzdW1tYXJpc2UoYWNyb3NzKGV2ZXJ5dGhpbmcoKSwgfiBzdW0oLiA9PSAxLCBuYS5ybSA9IFRSVUUpKSkgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJvcGNpb24iLCB2YWx1ZXNfdG8gPSAiZnJlY3VlbmNpYSIpICU+JQ0KICBmaWx0ZXIoZnJlY3VlbmNpYSA+PSAxKSAlPiUgICMgRmlsdHJhciBzb2xvIG9wY2lvbmVzIGNvbiBmcmVjdWVuY2lhID49IDENCiAgbXV0YXRlKHBvcmNlbnRhamUgPSBmcmVjdWVuY2lhIC8gMzQ5ICogMTAwKSAgIyBVc2FyIDM0OSBjb21vIG4gdG90YWwNCg0KIyBDcmVhciBlbCBncsOhZmljbw0KYWxpbWVudG9zX2FjdHVhbCA8LSBnZ3Bsb3QoY29uc3VtZV9hY3RfYWxpbWVudG9zLCBhZXMoeCA9IGZjdF9yZW9yZGVyKG9wY2lvbiwgZnJlY3VlbmNpYSksIHkgPSBmcmVjdWVuY2lhLCBmaWxsID0gb3BjaW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChmcmVjdWVuY2lhLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDMuNSkgKyANCiAgbGFicyh0aXRsZSA9ICLCv0FjdHVhbG1lbnRlIGTDs25kZSBjb25zdW1lIHN1cyBhbGltZW50b3M/IiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICJGcmVjdWVuY2lhIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsICAjIE9jdWx0YSBsYSBsZXllbmRhDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpKSAgIyBDZW50cmEgeSBlc3RpbGl6YSBlbCB0w610dWxvDQoNCmFsaW1lbnRvc19hY3R1YWwNCg0KYGBgDQoNCg0KIyBQZXJjZXBjacOzbiBkZWwgZXN0YWRvIG51dHJpY2lvbmFsDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSAiYXNpcyJ9DQoNCiAjIENyZWFyIGxhIG51ZXZhIHZhcmlhYmxlIGltY19hbnRlcw0KIGRhdGFfaW5kaXZpZHVhbF9ob2dhciA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBtdXRhdGUoaW1jX2FudGVzID0gY2FzZV93aGVuKA0KICAgICBwZXNvX2FudGVzID49IDEgJiBwZXNvX2FudGVzIDw9IDUgfiAiUGVzbyBub3JtYWwgbyBiYWpvIHBlc28iLA0KICAgICBwZXNvX2FudGVzID49IDYgJiBwZXNvX2FudGVzIDw9IDkgfiAiU29icmVwZXNvIHUgb2Jlc2lkYWQiLA0KICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICMgTWFuZWphIGNhc29zIGZ1ZXJhIGRlIGxvcyByYW5nb3MgZXNwZWNpZmljYWRvcw0KDQogDQogIyBDcmVhciBsYSBudWV2YSB2YXJpYWJsZSBpbWNfZGVzcHVlcw0KIGRhdGFfaW5kaXZpZHVhbF9ob2dhciA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBtdXRhdGUoaW1jX2Rlc3B1ZXMgPSBjYXNlX3doZW4oDQogICAgIHBlc29fYWhvcmEgPj0gMSAmIHBlc29fYWhvcmEgPD0gNSB+ICJQZXNvIG5vcm1hbCBvIGJham8gcGVzbyIsDQogICAgIHBlc29fYWhvcmEgPj0gNiAmIHBlc29fYWhvcmEgPD0gOSB+ICJTb2JyZXBlc28gdSBvYmVzaWRhZCIsDQogICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkgIyBNYW5lamEgY2Fzb3MgZnVlcmEgZGUgbG9zIHJhbmdvcyBlc3BlY2lmaWNhZG9zDQoNCg0KICMgUmVzdW1pciBsb3MgdG90YWxlcyBwYXJhIGltY19hbnRlcy4NCiByZXN1bWVuX2ltY19hbnRlcyA8LSBkYXRhX2luZGl2aWR1YWxfaG9nYXIgJT4lDQogICBmaWx0ZXIoIWlzLm5hKGltY19hbnRlcykpICU+JSAgIyBFeGNsdWlyIHZhbG9yZXMgTkEgZW4gaW1jX2FudGVzDQogICBncm91cF9ieShpbWNfYW50ZXMpICU+JSAgIyBBZ3J1cGFyIHBvciBpbWNfYW50ZXMNCiAgIHN1bW1hcmlzZShjb250ZW8gPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JSAgIyBDYWxjdWxhciBlbCBjb250ZW8gdG90YWwNCiAgIG11dGF0ZShwb3JjZW50YWplID0gY29udGVvIC8gc3VtKGNvbnRlbykgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUgdG90YWwNCiANCiAjIFJlc3VtaXIgbG9zIHRvdGFsZXMgcGFyYSBpbWNfZGVzcHVlcw0KIHJlc3VtZW5faW1jX2Rlc3B1ZXMgPC0gZGF0YV9pbmRpdmlkdWFsX2hvZ2FyICU+JQ0KICAgZmlsdGVyKCFpcy5uYShpbWNfZGVzcHVlcykpICU+JSAgIyBFeGNsdWlyIHZhbG9yZXMgTkEgZW4gaW1jX2Rlc3B1ZXMNCiAgIGdyb3VwX2J5KGltY19kZXNwdWVzKSAlPiUgICMgQWdydXBhciBwb3IgaW1jX2Rlc3B1ZXMNCiAgIHN1bW1hcmlzZShjb250ZW8gPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JSAgIyBDYWxjdWxhciBlbCBjb250ZW8gdG90YWwNCiAgIG11dGF0ZShwb3JjZW50YWplID0gY29udGVvIC8gc3VtKGNvbnRlbykgKiAxMDApICAjIENhbGN1bGFyIGVsIHBvcmNlbnRhamUgdG90YWwNCiANCiAjIENvbWJpbmFyIGxvcyBkYXRvcw0KIHJlc3VtZW5faW1jX2FudGVzIDwtIHJlc3VtZW5faW1jX2FudGVzICU+JSBtdXRhdGUodGlwbyA9ICJBbnRlcyBkZSBtaWdyYXIiKQ0KIHJlc3VtZW5faW1jX2Rlc3B1ZXMgPC0gcmVzdW1lbl9pbWNfZGVzcHVlcyAlPiUgbXV0YXRlKHRpcG8gPSAiRW4gbGEgYWN0dWFsaWRhZCIpDQogDQogcmVzdW1lbl9pbWNfdG90YWwgPC0gYmluZF9yb3dzKHJlc3VtZW5faW1jX2FudGVzLCByZXN1bWVuX2ltY19kZXNwdWVzKQ0KIA0KICMgR3LDoWZpY28gY29tYmluYWRvIGNvbiBmYWNldGFzDQogaW1jX3RvdGFsIDwtIGdncGxvdChyZXN1bWVuX2ltY190b3RhbCwgYWVzKHggPSBmYWN0b3IoaWZlbHNlKHRpcG8gPT0gIkFudGVzIGRlIG1pZ3JhciIsIGltY19hbnRlcywgaW1jX2Rlc3B1ZXMpLCBsZXZlbHMgPSB1bmlxdWUoYyhpbWNfYW50ZXMsIGltY19kZXNwdWVzKSkpLCB5ID0gcG9yY2VudGFqZSwgZmlsbCA9IGZhY3RvcihpZmVsc2UodGlwbyA9PSAiQW50ZXMgZGUgbWlncmFyIiwgaW1jX2FudGVzLCBpbWNfZGVzcHVlcykpKSkgKw0KICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC41KSArICAjIEFuY2hvIGRlIGxhcyBiYXJyYXMgYWp1c3RhZG8NCiAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoY29udGVvLCAiICgiLCByb3VuZChwb3JjZW50YWplLCAxKSwgIiUpIikpLCAgIyBFdGlxdWV0YXMgYWp1c3RhZGFzDQogICAgICAgICAgICAgdmp1c3QgPSAtMC41LCBzaXplID0gMykgKyAgIyBBanVzdGUgZGUgcG9zaWNpw7NuIHkgdGFtYcOxbyBkZWwgdGV4dG8NCiAgIGZhY2V0X3dyYXAofiB0aXBvLCBzY2FsZXMgPSAiZnJlZSIpICsgICMgQ3JlYXIgZmFjZXRhcyBwYXJhIGFudGVzIHkgZGVzcHXDqXMNCiAgIGxhYnModGl0bGUgPSAiUGVyY2VwY2nDs24gZGUgY2FtYmlvIGRlIHBlc28gYW50ZXMgeSBsdWVnbyBkZSBsYSBNaWdyYWNpw7NuIiwNCiAgICAgICAgeCA9IE5VTEwsICAjIFF1aXRhIGVsIG5vbWJyZSBhbCBlamUgeA0KICAgICAgICB5ID0gTlVMTCwgICMgUXVpdGEgZWwgbm9tYnJlIGFsIGVqZSB5DQogICAgICAgIGZpbGwgPSAiSU1DIikgKyAgIyBUw610dWxvIGRlIGxhIGxleWVuZGENCiAgIHRoZW1lX21pbmltYWwoKSArDQogICB0aGVtZSgNCiAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksICAjIENlbnRyYSBlbCB0w610dWxvIGRlbCBncsOhZmljbw0KICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksICAjIEFzZWd1cmEgcXVlIGVsIHTDrXR1bG8gZGUgbGEgbGV5ZW5kYSBlc3TDqSBlbiBibGFuY28NCiAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICAjIFF1aXRhIGxhcyBldGlxdWV0YXMgZGVsIGVqZSB4DQoNCiANCiAjIE1vc3RyYXIgZWwgZ3LDoWZpY28NCiBpbWNfdG90YWwNCg0KDQpgYGANCg==