a) GERAL

● Gráfico 1.1: Percentuais de utilização por modos de deslocamento por municípios da PMB

● Gráfico 1.2: Percentuais de utilização dos modos de deslocamento por municípios da PMB e por sexo

● Gráfico 1.3: Percentuais de utilização dos modos de deslocamento por municípios da PMB por sexo e faixa de idade

● Gráfico 1.4: Percentuais de utilização dos modos de deslocamento por municípios da PMB por sexo e faixas de renda do trabalho principal (em salários mínimos)

● Gráfico 1.5: Percentuais de utilização por modos de deslocamento por Grupo da PMB

● Gráfico 1.6: Percentuais de utilização dos modos de deslocamento por Grupo da PMB e por sexo

● Gráfico 1.7: Percentuais de utilização dos modos de deslocamento por Grupo da PMB, por sexo e faixa de idade

● Gráfico 1.8: Percentuais de utilização dos modos de deslocamento por Grupo da PMB, por sexo e faixas de renda do trabalho principal (em salários mínimos) Puro

● Tabela 1.1: Percentuais de domicílios segundo posse de veículos por município da PMB

● Tabela 1.2: Percentuais de domicílios segundo proximidade de ciclovias ou ciclofaixas por município da PMB

● Tabela 1.3: Percepção da existência de ciclovia por município da PMB

● Tabela 1.4: Percepção da existência de sinalização para pedestres por município da PMB

● Tabela 1.5: Percepção da existência de arborização por município da PMB

● Tabela 1.6: Percepção da existência de calçadas por município da PMB Mais:

● Tabela A.1: Percentuais de utilização dos modos de deslocamento entre Cisgênero e Transgênero por munícipios da PMB

● Tabela A.2: Percentuais de utilização dos modos de deslocamento por Orientação Sexual por munícipios da PMB

● Tabela A.3: Percentuais de utilização dos modos de deslocamento entre LGBTQIA+ por munícipios da PMB

● Tabela A.4: Percentuais de utilização dos modos de deslocamento por Estado Civil por munícipios da PMB

● Tabela A.5: Percentuais de utilização dos modos de deslocamento por Residentes com Cônjuge por munícipios da PMB

● Tabela A.6: Percentuais de utilização dos modos de deslocamento por Classe do Critério Brasil por munícipios da PMB

● Tabela A.7: Percentuais de utilização dos modos de deslocamento por Composição dos Domicílios por munícipios da PMB

b) TRABALHO

● Gráfico 2.1: Percentuais de utilização por modos de deslocamento para o trabalho por municípios da PMB

● Gráfico 2.2: Percentuais de utilização dos modos de deslocamento para o trabalho por sexo por Grupo da PMB

● Gráfico 2.3: Percentuais de utilização dos modos de deslocamento para o trabalho por sexo e faixas de renda do trabalho principal (em salários mínimos)

pdad2024$strata_faixaidade_trabalho

● Gráfico 2.4: Percentuais de utilização dos modos de deslocamento para o trabalho por sexo e faixa de idade

● Gráfico 2.5: Percentuais de utilização dos modos de deslocamento para o trabalho por tempo de deslocamento por Grupo da PMB

● Gráfico 2.6: Percentuais de utilização dos modos de deslocamento para o trabalho por sexo e tempo de deslocamento

df$pergunta[str_detect(df$pergunta,"traba")] |> unique()
[1] "Res_trabalho_modal"       "Res_trabalho_modal_ativa" "Res_trabalho_tempo_30min" "Resp_trabalho_destino"   
df |> filter(filter=="PMB",pergunta=="Res_trabalho_modal_ativa",str_detect(strata_kind,"Res_trabalho"),str_detect(strata_kind,"sex")) |> #select(strata_kind) |> distinct()
  ggplot(aes(pct*100,strata2))+geom_col()+facet_grid(strata1~resp)+theme_minimal()+geom_label(aes(label=pct_text))
Error in `combine_vars()`:
! Faceting variables must have at least one value.
Run `]8;;x-r-run:rlang::last_trace()rlang::last_trace()]8;;` to see where the error occurred.

● Gráfico 2.7: Percentuais de utilização dos modos de deslocamento para o trabalho por sexo, tempo de deslocamento e cor/raça

pendente

● Tabela 2.1: Percentuais de utilização dos modos de deslocamento para o trabalho por cor/raça # pendente

 |> filter(filter=="PMB",pergunta=="Res_trabalho_modal_ativa",str_detect(strata_kind,"Res_trabalho"),str_detect(strata_kind,"cor"))
Erro: '|>' inesperado em " |>"

● Tabela 2.2: Percentual da população por cor/raça para cada modo de deslocamento para o trabalho

● Tabela 2.3: Percentual da população por sexo e cor/raça para cada modo de deslocamento para o trabalho

● Tabela 2.4: Percentuais da população que utilizam automóvel para ir ao trabalho segundo posse de veículos no domicílio

Pendente

● Tabela 2.5: Percentuais da população que utilizam o modo a pé para ir ao trabalho segundo posse de automóvel no domicílio ### Pendente

● Tabela 2.6: Percentuais de utilização de bicicletas por motivo de trabalho

● Tabela 2.7: Percepção de ciclovia para aqueles que vão de bicicleta para o trabalho

pendencia

● Tabela 2.8: Percentuais de utilização do modo a pé por motivo de trabalho ### pendencia

● Tabela 2.9: Percepção da existência de sinalização para pedestres para aqueles que vão a pé para o trabalho

pendente

● Tabela 2.10: Percepção da população que utiliza o modo a pé para o trabalho sobre a existência de arborização

pendente

● Tabela 2.11: Percepção da população que utiliza o modo a pé para o trabalho sobre a existência de calçadas

pendente

● Tabela 2.12: Percentuais de moradores segundo tempo de deslocamento por motivo de trabalho por município da PMB

pendente

● Tabela 2.13: Percentuais de moradores segundo tempo de deslocamento por motivo de trabalho por Grupo da PMB

pendente

● Tabela 2.14: Percentuais da população que utilizam ônibus para ir ao trabalho segundo posse de automóvel no domicílio por município da PMB

pendente

c) ESTUDO

● Gráfico 3.1: Percentuais de utilização por modos de deslocamento para o estudo por municípios da PMB ● Gráfico 3.2: Percentuais da população segundo modo de deslocamento por motivo de estudo por sexo

● Gráfico 3.3: Percentuais de utilização dos modos de deslocamento por motivo de estudo por sexo e faixas de renda domiciliar per capita (em salários mínimos)

● Gráfico 3.4: Percentuais de utilização dos modos de deslocamento para a escola por tempo de deslocamento

● Gráfico 3.5: Percentuais da população segundo modo de deslocamento por motivo de estudo, tempo de deslocamento e por sexo

● Gráfico 3.6: Percentuais da população segundo modo de deslocamento por motivo de estudo por sexo, tempo de deslocamento e cor/raça

● Tabela 3.1: Percentual de utilização dos modos de deslocamento por motivo de estudo por sexo e faixa de idade #### pendente

resp

0 a 6 anos

7 a 14 anos

15 a 17 anos

18 a 24 anos

25 ou mais

A pé

21,96%

55,78%

16,94%

3,86%

1,45%

Automóvel

30,71%

39,18%

7,94%

9,2%

12,97%

Bicicleta

22,47%

46,13%

23,04%

4,25*%

4,11*%

Escolar Privado

29,77%

53,62%

10,57%

4,72*%

1,33*%

Escolar Público

18,5%

53,87%

21,56%

4,43%

1,64*%

Motocicleta

13,35*%

31,8%

8,51*%

28,27%

18,07*%

Privado (empresa de aplicativo, táxi etc)

12,76*%

15,13*%

10,73*%

40,42*%

20,96*%

Ônibus

7,14*%

19,66%

27,61%

29,97%

15,61%

Mobilidade Ativa

22,03%

54,43%

17,79%

3,92%

1,82%

Motorizado Privado individual

27,64%

36,81%

8,18%

13,32%

14,05%

Trasnporte Coletivo (incluindo escolares)

17,75%

43,06%

20,71%

12,53%

5,95%

Motorizado Privado

27,64%

36,81%

8,18%

13,32%

14,05%

Trasnporte Coletivo

7,14*%

19,66%

27,61%

29,97%

15,61%

Trasnporte Escolares

22,61%

53,78%

17,55%

4,54%

1,53*%

● Tabela 3.2: Percentual da população segundo meio de deslocamento por motivo de estudo, sexo e cor/raça

resp

Feminino

Masculino

A pé

69,4%

66,42%

Automóvel

50,64%

55,48%

Bicicleta

71,56%

64,22%

Escolar Privado

55,68%

59,02%

Escolar Público

72,92%

69,75%

Motocicleta

58,02%

74,54%

Privado (empresa de aplicativo, táxi etc)

60,52%

91,51%

Ônibus

61,49%

71,83%

Mobilidade Ativa

69,62%

66,04%

Motorizado Privado individual

52,2%

59,15%

Trasnporte Coletivo (incluindo escolares)

64,62%

67,67%

Motorizado Privado

52,2%

59,15%

Trasnporte Coletivo

61,49%

71,83%

Trasnporte Escolares

66,32%

66,13%

resp

Feminino

Masculino

A pé

1,78*%

1,47*%

Automóvel

1,82*%

2,9*%

Bicicleta

2,06*%

0,16*%

Escolar Privado

2,63*%

0,75*%

Escolar Público

1,17*%

1,3*%

Motocicleta

41,98*%

2,25*%

Privado (empresa de aplicativo, táxi etc)

9*%

8,49*%

Ônibus

0,39*%

0,53*%

Mobilidade Ativa

1,81*%

1,24*%

Motorizado Privado individual

2,41*%

2,74*%

Trasnporte Coletivo (incluindo escolares)

1,26*%

0,96*%

Motorizado Privado

2,41*%

2,74*%

Trasnporte Coletivo

0,39*%

0,53*%

Trasnporte Escolares

1,73*%

1,11*%

● Tabela 3.3: Percentual da população por cor/raça para cada modo de deslocamento por motivo de estudo

resp

Amarela

Branca

Indígena

Parda

Preta

A pé

1,63%

29,79%

0,45*%

59,93%

8,2%

Automóvel

2,31*%

44,76%

47,22%

5,71%

Bicicleta

0,79*%

32,42%

0,15*%

60,37%

6,28%

Escolar Privado

1,74*%

41,03%

51,09%

6,14%

Escolar Público

1,17*%

27,61%

0,03*%

59,11%

12,07%

Motocicleta

1,42*%

30,27%

58,64%

9,68*%

Privado (empresa de aplicativo, táxi etc)

7,71*%

27,36*%

52,72%

12,22*%

Ônibus

0,45*%

33,55%

0,28*%

55,04%

10,67%

Mobilidade Ativa

1,52%

30,16%

0,41*%

59,99%

7,93%

Motorizado Privado individual

2,56*%

42,04%

48,84%

6,56%

Trasnporte Coletivo (incluindo escolares)

1,09*%

32,84%

0,1*%

55,83%

10,15%

Motorizado Privado

2,56*%

42,04%

48,84%

6,56%

Trasnporte Coletivo

0,45*%

33,55%

0,28*%

55,04%

10,67%

Trasnporte Escolares

1,38*%

32,51%

0,02*%

56,18%

9,91%

● Tabela 3.4: Percentual da população por sexo e cor/raça por meio de deslocamento por motivo de estudo

resp

strata1

Negro

não Negra

A pé

Feminino

69,4%

30,6%

A pé

Masculino

66,42%

33,58%

Automóvel

Feminino

50,64%

49,36%

Automóvel

Masculino

55,48%

44,52%

Bicicleta

Feminino

71,56%

28,44%

Bicicleta

Masculino

64,22%

35,78%

Escolar Privado

Feminino

55,68%

44,32%

Escolar Privado

Masculino

59,02%

40,98%

Escolar Público

Feminino

72,92%

27,08%

Escolar Público

Masculino

69,75%

30,25%

Motocicleta

Feminino

58,02%

41,98*%

Motocicleta

Masculino

74,54%

25,46*%

Privado (empresa de aplicativo, táxi etc)

Feminino

60,52%

39,48*%

Privado (empresa de aplicativo, táxi etc)

Masculino

91,51%

8,49*%

Ônibus

Feminino

61,49%

38,51%

Ônibus

Masculino

71,83%

28,17%

Mobilidade Ativa

Feminino

69,62%

30,38%

Mobilidade Ativa

Masculino

66,04%

33,96%

Motorizado Privado individual

Feminino

52,2%

47,8%

Motorizado Privado individual

Masculino

59,15%

40,85%

Trasnporte Coletivo (incluindo escolares)

Feminino

64,62%

35,38%

Trasnporte Coletivo (incluindo escolares)

Masculino

67,67%

32,33%

Motorizado Privado

Feminino

52,2%

47,8%

Motorizado Privado

Masculino

59,15%

40,85%

Trasnporte Coletivo

Feminino

61,49%

38,51%

Trasnporte Coletivo

Masculino

71,83%

28,17%

Trasnporte Escolares

Feminino

66,32%

33,68%

Trasnporte Escolares

Masculino

66,13%

33,87%

● Tabela 3.5: Percentual de utilização de bicicletas por motivo de estudo

strata1

A pé

Alexânia

1,54%

Cidade Ocidental

6,63%

Cocalzinho de Goiás

1,54%

Cristalina

3,88%

Formosa

6,33%

Luziânia

17,39%

Novo Gama

8,59%

Padre Bernardo

2,21%

Planaltina

9,67%

Santo Antônio do Descoberto

5,7%

Valparaíso de Goiás

13,48%

Águas Lindas de Goiás

23,04%

● Tabela 3.6: Percepção da existência de ciclovias para aqueles que utilizam bicicleta por motivo de estudo ### pendente

● Tabela 3.7: Percentuais de utilização do modo a pé por motivo de estudo

strata1

Bicicleta

Alexânia

3,64%

Cidade Ocidental

0,7*%

Cocalzinho de Goiás

1,63*%

Cristalina

10,8%

Formosa

22,37%

Luziânia

20,38%

Novo Gama

3,56*%

Padre Bernardo

1,91*%

Planaltina

11,72%

Santo Antônio do Descoberto

1,41*%

Valparaíso de Goiás

6,55*%

Águas Lindas de Goiás

15,32*%

● Tabela 3.8: Percepção da existência de sinalização para pedestres para aqueles que vão a pé para a escola ### pendente

● Tabela 3.9: Percepção da existência de arborização para aqueles que vão a pé para a escola ### pendente

● Tabela 3.10: Percepção da existência de calçadas para aqueles que vão a pé para a escola ### pendente

● Tabela 3.11: Percentuais de moradores segundo tempo de deslocamento por motivo de estudo por Grupo da PMB

strata1

A pé

Automóvel

Bicicleta

Escolar Privado

Escolar Público

Motocicleta

Privado (empresa de aplicativo, táxi etc)

Ônibus

Mobilidade Ativa

Motorizado Privado individual

Trasnporte Coletivo (incluindo escolares)

Motorizado Privado

Trasnporte Coletivo

Trasnporte Escolares

PMB grupo 1

49,98%

54,07%

41,99%

64,93%

54,73%

41,23%

32,1*%

57,39%

48,87%

51,23%

58,12%

51,23%

57,39%

58,45%

PMB grupo 2

7,24%

5,24%

5,05%

8,21%

10,23%

6,21*%

0,82*%

6,95%

6,93%

5,06%

8,69%

5,06%

6,95%

9,49%

PMB grupo 3

26,79%

19,48%

18,86%

15,88%

26,91%

8,5*%

38,04*%

23,3%

25,68%

19,48%

23,01%

19,48%

23,3%

22,88%

PMB grupo 4

16%

21,21%

34,1%

10,98%

8,14%

44,06%

29,04*%

12,36%

18,51%

24,24%

10,18%

24,24%

12,36%

9,17%

● Tabela 3.12: Percentuais de modos de deslocamento por motivo de estudo por Município da PMB

strata1

A pé

Automóvel

Bicicleta

Escolar Privado

Escolar Público

Motocicleta

Privado (empresa de aplicativo, táxi etc)

Ônibus

Mobilidade Ativa

Motorizado Privado individual

Trasnporte Coletivo (incluindo escolares)

Motorizado Privado

Trasnporte Coletivo

Trasnporte Escolares

Alexânia

1,54%

1,86%

3,64%

0,92*%

2,21%

2,52*%

0,82*%

0,82*%

1,83%

1,87%

1,45%

1,87%

0,82*%

1,74%

Cidade Ocidental

6,63%

4,66%

0,7*%

6,46%

17,43%

3,92*%

6,57%

5,81%

4,28%

11,27%

4,28%

6,57%

13,43%

Cocalzinho de Goiás

1,54%

0,76*%

1,63*%

1,96%

1,99%

1,47*%

0,85*%

0,59*%

1,56%

0,85%

1,55%

0,85%

0,59*%

1,98%

Cristalina

3,88%

5,42%

10,8%

3,06%

5,27%

4,82*%

2,39*%

2*%

4,84%

5,16%

3,69%

5,16%

2*%

4,46%

Formosa

6,33%

13,17%

22,37%

5,14*%

2,46*%

22,94*%

10,22*%

2,71*%

8,56%

14,05%

3,21%

14,05%

2,71*%

3,44%

Luziânia

17,39%

17,71%

20,38%

23,46%

5,34%

21,08%

9,45*%

14,14%

17,81%

17,54%

12,64%

17,54%

14,14%

11,95%

Novo Gama

8,59%

6,32%

3,56*%

11,5%

6,41%

6,36*%

17,56%

7,89%

5,63%

11,19%

5,63%

17,56%

8,27%

Padre Bernardo

2,21%

1,68%

1,91*%

1,65%

3,04%

3,68*%

1,11*%

3,76%

2,16%

1,86%

2,92%

1,86%

3,76%

2,53%

Planaltina

9,67%

8,05%

11,72%

5,84*%

5,68%

21,12*%

18,81*%

9,65%

9,96%

10,19%

6,97%

10,19%

9,65%

5,74%

Santo Antônio do Descoberto

5,7%

3,38*%

1,41*%

7,29%

8,01%

3,69*%

6,14%

5,1%

3,19*%

7,24%

3,19*%

6,14%

7,75%

Valparaíso de Goiás

13,48%

19,96%

6,55*%

20,46%

20,27%

11,4*%

13,9*%

17,12%

12,52%

18,62%

19,33%

18,62%

17,12%

20,34%

Águas Lindas de Goiás

23,04%

17,04%

15,32*%

12,26*%

21,88%

3,35*%

36,09*%

18,94%

21,96%

16,77%

18,55%

16,77%

18,94%

18,37%

● Tabela C.1: Percentuais de modos de deslocamento por motivo de estudo por Grupo da PMB

strata1

A pé

Automóvel

Bicicleta

Escolar Privado

Escolar Público

Motocicleta

Privado (empresa de aplicativo, táxi etc)

Ônibus

Mobilidade Ativa

Motorizado Privado individual

Trasnporte Coletivo (incluindo escolares)

Motorizado Privado

Trasnporte Coletivo

Trasnporte Escolares

PMB grupo 1

49,98%

54,07%

41,99%

64,93%

54,73%

41,23%

32,1*%

57,39%

48,87%

51,23%

58,12%

51,23%

57,39%

58,45%

PMB grupo 2

7,24%

5,24%

5,05%

8,21%

10,23%

6,21*%

0,82*%

6,95%

6,93%

5,06%

8,69%

5,06%

6,95%

9,49%

PMB grupo 3

26,79%

19,48%

18,86%

15,88%

26,91%

8,5*%

38,04*%

23,3%

25,68%

19,48%

23,01%

19,48%

23,3%

22,88%

PMB grupo 4

16%

21,21%

34,1%

10,98%

8,14%

44,06%

29,04*%

12,36%

18,51%

24,24%

10,18%

24,24%

12,36%

9,17%

● Tabela C.2: Percentuais de utilização dos modos de deslocamento por motivo de estudo por Composição dos Domicílios ### pendente

d) SERVIÇOS DE SAÚDE E COMPRAS

● Gráfico 4.1: Percentuais de utilização por modos de deslocamento para serviços de saúde por municípios da PMB

● Gráfico 4.2: Percentuais de utilização por modos de deslocamento por motivos de compras por municípios da PMB ### pendente

● Tabela 4.1: Percentuais de utilização por modos de deslocamento para serviços de saúde por Municípios da PMB ### pendente

● Tabela 4.2: Percentuais de utilização por modos de deslocamento por motivos de compras por Municípios da PMB ### pendente

● Tabela D.1: Percentuais de modos de deslocamento por motivo de compras por Município da PMB ### pendente

● Tabela D.2: Percentuais de modos de deslocamento por motivo de compras por Grupo da PMB ### pendente

● Tabela D.3: Percentuais de modos de deslocamento por motivo de utilização de serviços de saúde por Município da PMB ### pendente

● Tabela D.4: Percentuais de modos de deslocamento por motivo de utilização de serviços de saúde por Grupo da PMB ### pendente

● Tabela D.5: Percentuais de utilização dos modos de deslocamento por motivo de compras por gênero e faixa de idade ### pendente

● Tabela D.6: Percentuais de utilização dos modos de deslocamento por motivo de acesso à serviços de saúde por gênero e faixa de idade ### pendente

LS0tCnRpdGxlOiAiQ29tbyBBbmRhIGFvIMKyIC0gUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA1MDAKLS0tCgojIGEpIEdFUkFMCgoK4pePIEdyw6FmaWNvIDEuMTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG11bmljw61waW9zIGRhIFBNQiAKCuKXjyBHcsOhZmljbyAxLjI6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgZSBwb3Igc2V4byAKCuKXjyBHcsOhZmljbyAxLjM6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgcG9yIHNleG8gZSBmYWl4YSBkZSBpZGFkZSAKCuKXjyBHcsOhZmljbyAxLjQ6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIgcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG8gdHJhYmFsaG8gcHJpbmNpcGFsIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpIAoK4pePIEdyw6FmaWNvIDEuNTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIEdydXBvIGRhIFBNQiAKCuKXjyBHcsOhZmljbyAxLjY6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBHcnVwbyBkYSBQTUIgZSBwb3Igc2V4byAKCuKXjyBHcsOhZmljbyAxLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBHcnVwbyBkYSBQTUIsIHBvciBzZXhvIGUgZmFpeGEgZGUgaWRhZGUgCgril48gR3LDoWZpY28gMS44OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgR3J1cG8gZGEgUE1CLCBwb3Igc2V4byBlIGZhaXhhcyBkZSByZW5kYSBkbyB0cmFiYWxobyBwcmluY2lwYWwgKGVtIHNhbMOhcmlvcyBtw61uaW1vcykgUHVybyAKCuKXjyBUYWJlbGEgMS4xOiBQZXJjZW50dWFpcyBkZSBkb21pY8OtbGlvcyBzZWd1bmRvIHBvc3NlIGRlIHZlw61jdWxvcyBwb3IgbXVuaWPDrXBpbyBkYSBQTUIgCgril48gVGFiZWxhIDEuMjogUGVyY2VudHVhaXMgZGUgZG9taWPDrWxpb3Mgc2VndW5kbyBwcm94aW1pZGFkZSBkZSBjaWNsb3ZpYXMgb3UgY2ljbG9mYWl4YXMgcG9yIG11bmljw61waW8gZGEgUE1CIAoK4pePIFRhYmVsYSAxLjM6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGNpY2xvdmlhIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS40OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBzaW5hbGl6YcOnw6NvIHBhcmEgcGVkZXN0cmVzIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS41OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBhcmJvcml6YcOnw6NvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCuKXjyBUYWJlbGEgMS42OiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgcG9yIG11bmljw61waW8gZGEgUE1CIE1haXM6IAoK4pePIFRhYmVsYSBBLjE6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIGVudHJlIENpc2fDqm5lcm8gZSBUcmFuc2fDqm5lcm8gcG9yIG11bsOtY2lwaW9zIGRhIFBNQiAKCuKXjyBUYWJlbGEgQS4yOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgT3JpZW50YcOnw6NvIFNleHVhbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjM6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIGVudHJlIExHQlRRSUErIHBvciBtdW7DrWNpcGlvcyBkYSBQTUIgCgril48gVGFiZWxhIEEuNDogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIEVzdGFkbyBDaXZpbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjU6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBSZXNpZGVudGVzIGNvbSBDw7RuanVnZSBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjY6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBDbGFzc2UgZG8gQ3JpdMOpcmlvIEJyYXNpbCBwb3IgbXVuw61jaXBpb3MgZGEgUE1CIAoK4pePIFRhYmVsYSBBLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBDb21wb3Npw6fDo28gZG9zCkRvbWljw61saW9zIHBvciBtdW7DrWNpcGlvcyBkYSBQTUIKCiMgYikgIFRSQUJBTEhPCgril48gR3LDoWZpY28gMi4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIG11bmljw61waW9zIGRhIFBNQgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmJHN0cmF0YV9raW5kIHw+IHVuaXF1ZSgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX3RyYWJhbGhvX21vZGFsIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jYWxpZGFkZSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQofnJlc3Asc2NhbGVzID0gImZyZWUiKSt0aGVtZV9taW5pbWFsKCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICAKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYkcGVyZ3VudGFbc3RyX2RldGVjdChkZiRwZXJndW50YSwidHJhYmEiKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2NhbGlkYWRlIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCiAgCmBgYAoK4pePIEdyw6FmaWNvIDIuMjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciBzZXhvIHBvciBHcnVwbyBkYSBQTUIKCmBgYHtyIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0yMH0KZGYkc3RyYXRhX2tpbmQgfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9ncnVwb2xvY2FsIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgCmBgYAoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dydXBvbG9jYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKICAKYGBgCgril48gR3LDoWZpY28gMi4zOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG8gdHJhYmFsaG8gcHJpbmNpcGFsIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpCgpgYGB7ciBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0yMH0KZGYkc3RyYXRhX2tpbmQgfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9zZXhvIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX3JlbmRhc21pbmQiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEyKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKHJlc3B+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgCmBgYAoKYGBge3IgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9MjB9CiNkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX3NleG8iKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKICAKYGBgCgpgYGB7cn0KcGRhZDIwMjQkc3RyYXRhX2ZhaXhhaWRhZGVfdHJhYmFsaG8KYGBgCgril48gR3LDoWZpY28gMi40OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSBmYWl4YSBkZSBpZGFkZQoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2ZhaXhhaWRhZGVfdHJhYmFsaG8iKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGEyKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKHJlc3B+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoK4pePIEdyw6FmaWNvIDIuNTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIEdydXBvIGRhIFBNQgoKYGBge3IgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwiUmVzX3RyYWJhbGhvIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleCIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gR3LDoWZpY28gMi42OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8gcG9yIHNleG8gZSB0ZW1wbyBkZSBkZXNsb2NhbWVudG8KCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwiUmVzX3RyYWJhbGhvIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgoKCmBgYAoK4pePIEdyw6FmaWNvIDIuNzogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIHRyYWJhbGhvIHBvciBzZXhvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBjb3IvcmHDp2EKCiMgcGVuZGVudGUKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKCmBgYAoK4pePIFRhYmVsYSAyLjE6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBhcmEgbyB0cmFiYWxobyBwb3IgY29yL3Jhw6dhIFwjIHBlbmRlbnRlCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYkcGVyZ3VudGFbc3RyX2RldGVjdChkZiRwZXJndW50YSwidHJhYmEiKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc190cmFiYWxobyIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsImNvciIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5zdHJhdGEyKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gVGFiZWxhIDIuMjogUGVyY2VudHVhbCBkYSBwb3B1bGHDp8OjbyBwb3IgY29yL3Jhw6dhIHBhcmEgY2FkYSBtb2RvIGRlIGRlc2xvY2FtZW50byBwYXJhIG8gdHJhYmFsaG8KCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbF9hdGl2YSIsIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoK4pePIFRhYmVsYSAyLjM6IFBlcmNlbnR1YWwgZGEgcG9wdWxhw6fDo28gcG9yIHNleG8gZSBjb3IvcmHDp2EgcGFyYSBjYWRhIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBhcmEgbyB0cmFiYWxobwoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi40OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gYXV0b23Ds3ZlbCBwYXJhIGlyIGFvIHRyYWJhbGhvIHNlZ3VuZG8gcG9zc2UgZGUgdmXDrWN1bG9zIG5vIGRvbWljw61saW8KCiMjIyBQZW5kZW50ZQoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi41OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gbyBtb2RvIGEgcMOpIHBhcmEgaXIgYW8gdHJhYmFsaG8gc2VndW5kbyBwb3NzZSBkZSBhdXRvbcOzdmVsIG5vIGRvbWljw61saW8gXCMjIyBQZW5kZW50ZQoKYGBge3J9CgpkZiRwZXJndW50YVtzdHJfZGV0ZWN0KGRmJHBlcmd1bnRhLCJ0cmFiYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc190cmFiYWxob19tb2RhbCIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4Iiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCgpgYGAKCuKXjyBUYWJlbGEgMi42OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZGUgYmljaWNsZXRhcyBwb3IgbW90aXZvIGRlIHRyYWJhbGhvCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc3BfcG9zc2VfYXV0b23Ds3ZlbDIiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIlJlc3BfcG9zc2VfYXV0b23Ds3ZlbDIiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgril48gVGFiZWxhIDIuNzogUGVyY2Vww6fDo28gZGUgY2ljbG92aWEgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGRlIGJpY2ljbGV0YSBwYXJhIG8gdHJhYmFsaG8KCiMjIyBwZW5kZW5jaWEKCuKXjyBUYWJlbGEgMi44OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG8gbW9kbyBhIHDDqSBwb3IgbW90aXZvIGRlIHRyYWJhbGhvIFwjIyMgcGVuZGVuY2lhCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmJHN0cmF0YV9raW5kW3N0cl9kZXRlY3QoZGYkc3RyYXRhX2tpbmQsImF1dG8iKV0gfD4gdW5pcXVlKCkKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIscGVyZ3VudGE9PSJSZXNfdHJhYmFsaG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsImdydSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCItICIpLHJlc3A9PSJBIHDDqSIpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CgpkZiRzdHJhdGFfa2luZFtzdHJfZGV0ZWN0KGRmJHN0cmF0YV9raW5kLCJsb2NhIildIHw+IHVuaXF1ZSgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX3RyYWJhbGhvX21vZGFsIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikscmVzcD09IkEgcMOpIikgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCgoK4pePIFRhYmVsYSAyLjk6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIHNpbmFsaXphw6fDo28gcGFyYSBwZWRlc3RyZXMgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgbyB0cmFiYWxobyAKCiMjIyBwZW5kZW50ZSAKCuKXjyBUYWJlbGEgMi4xMDogUGVyY2Vww6fDo28gZGEgcG9wdWxhw6fDo28gcXVlIHV0aWxpemEgbyBtb2RvIGEgcMOpIHBhcmEgbyB0cmFiYWxobyBzb2JyZSBhIGV4aXN0w6puY2lhIGRlIGFyYm9yaXphw6fDo28gCgojIyMgcGVuZGVudGUgCgril48gVGFiZWxhIDIuMTE6IFBlcmNlcMOnw6NvIGRhIHBvcHVsYcOnw6NvIHF1ZSB1dGlsaXphIG8gbW9kbyBhIHDDqSBwYXJhIG8gdHJhYmFsaG8gc29icmUgYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgCgojIyMgcGVuZGVudGUgCgril48gVGFiZWxhIDIuMTI6IFBlcmNlbnR1YWlzIGRlIG1vcmFkb3JlcyBzZWd1bmRvIHRlbXBvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIHRyYWJhbGhvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAyLjEzOiBQZXJjZW50dWFpcyBkZSBtb3JhZG9yZXMgc2VndW5kbyB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSB0cmFiYWxobyBwb3IgR3J1cG8gZGEgUE1CIAoKIyMjIHBlbmRlbnRlIAoK4pePIFRhYmVsYSAyLjE0OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBxdWUgdXRpbGl6YW0gw7RuaWJ1cyBwYXJhIGlyIGFvIHRyYWJhbGhvIHNlZ3VuZG8gcG9zc2UgZGUgYXV0b23Ds3ZlbCBubyBkb21pY8OtbGlvIHBvciBtdW5pY8OtcGlvIGRhIFBNQiAKCiMjIyBwZW5kZW50ZQoKIyBjKSAgRVNUVURPCgoK4pePIEdyw6FmaWNvIDMuMTogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBvIGVzdHVkbyBwb3IgbXVuaWPDrXBpb3MgZGEgUE1CIOKXjyBHcsOhZmljbyAzLjI6IFBlcmNlbnR1YWlzIGRhIHBvcHVsYcOnw6NvIHNlZ3VuZG8gbW9kbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIHNleG8gCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKZGYkc3RyYXRhX2tpbmRbc3RyX2RldGVjdChkZiRzdHJhdGFfa2luZCwibG9jYSIpXSB8PiB1bmlxdWUoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2MiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQoKYGBgCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWwiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9nIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYApgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KZGYgfD4gZmlsdGVyKHN0cl9kZXRlY3QocGVyZ3VudGEsIm9fbW9kYWwiKSkgfD4gc2VsZWN0KHBlcmd1bnRhKSB8PiBkaXN0aW5jdCgpCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHBlcmd1bnRhPT0iUmVzX2VzdHVkb19tb2RhbF9hdGl2YSIsc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dyIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIi0gIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKCkrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKCmBgYAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEyIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiLSAiKSkgfD4gI3NlbGVjdChzdHJhdGFfa2luZCkgfD4gZGlzdGluY3QoKQogIGdncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQpgYGAKCgoK4pePIEdyw6FmaWNvIDMuMzogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIHNleG8gZSBmYWl4YXMgZGUgcmVuZGEgZG9taWNpbGlhciBwZXIgY2FwaXRhIChlbSBzYWzDoXJpb3MgbcOtbmltb3MpIAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEyIixzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSBzdHJhdGFfciIpKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbCgpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQpgYGAKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MjB9CmRmIHw+IGZpbHRlcihzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIikpIHw+IHNlbGVjdChwZXJndW50YSkgfD4gZGlzdGluY3QoKQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixwZXJndW50YT09IlJlc19lc3R1ZG9fbW9kYWxfYXRpdmEiLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtIHN0cmF0YV9yIikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoK4pePIEdyw6FmaWNvIDMuNDogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcGFyYSBhIGVzY29sYSBwb3IgdGVtcG8gZGUgZGVzbG9jYW1lbnRvIAoKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTIwfQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwib19tb2RhbCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInRlbXAiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChyZXNwfnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoKCgril48gR3LDoWZpY28gMy41OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBzZWd1bmRvIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBwb3Igc2V4byAKCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0yMH0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIm9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJ0ZW1wIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChyZXNwfnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAril48gR3LDoWZpY28gMy42OiBQZXJjZW50dWFpcyBkYSBwb3B1bGHDp8OjbyBzZWd1bmRvIG1vZG8gZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvIHBvciBzZXhvLCB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gZSBjb3IvcmHDp2EKCgpgYGB7ciBmaWcuaGVpZ2h0PTEyLCBmaWcud2lkdGg9MjB9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJvX21vZGFsIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwiY29yIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic2V4IikpIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICBnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMikpK2dlb21fY29sKCkrZmFjZXRfZ3JpZChzdHJhdGExfnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCmBgYAoKCgril48gVGFiZWxhIDMuMTogUGVyY2VudHVhbCBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyBwb3Igc2V4byBlIGZhaXhhIGRlIGlkYWRlIAojIyMjIHBlbmRlbnRlCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJmYWl4YSIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJtw7MiKQogICAgICAgICAgICAgKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgI2dncGxvdChhZXMocGN0KjEwMCxzdHJhdGExKSkrZ2VvbV9jb2woKStmYWNldF9ncmlkKH5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQpgYGAKCgoK4pePIFRhYmVsYSAzLjI6IFBlcmNlbnR1YWwgZGEgcG9wdWxhw6fDo28gc2VndW5kbyBtZWlvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbywgc2V4byBlIGNvci9yYcOnYSAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInNleG8iKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yMiIpCiAgICAgICAgICAgICApIHw+ICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3AsZmlsbD1zdHJhdGEyKSkrZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKStmYWNldF9ncmlkKH5zdHJhdGExKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXhvIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9jb3IyIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiMgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTIpKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQoc3RyYXRhMX5yZXNwKSt0aGVtZV9taW5pbWFsKCkrZ2VvbV9sYWJlbChhZXMobGFiZWw9cGN0X3RleHQpKQogIHVuZ3JvdXAoKSB8PiBzZWxlY3Qoc3RyYXRhMSxyZXNwLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1zdHJhdGExLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKYGBgCgril48gVGFiZWxhIDMuMzogUGVyY2VudHVhbCBkYSBwb3B1bGHDp8OjbyBwb3IgY29yL3Jhw6dhIHBhcmEgY2FkYSBtb2RvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvcjIiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IyBzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAscmVzcCkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICB1bmdyb3VwKCkgfD4gc2VsZWN0KHN0cmF0YTEscmVzcCxwY3RfdGV4dCkgfD4gcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9c3RyYXRhMSx2YWx1ZXNfZnJvbSA9cGN0X3RleHQsdmFsdWVzX2ZuID0gXCh4KSBmaXJzdCh4KSkgfD4gZmxleHRhYmxlKCkKCmBgYAoKCuKXjyBUYWJlbGEgMy40OiBQZXJjZW50dWFsIGRhIHBvcHVsYcOnw6NvIHBvciBzZXhvIGUgY29yL3Jhw6dhIHBvciBtZWlvIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCgoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTV9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJSZXNfZXN0dWRvX21vZGFsIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvcjIiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzZXgiKSwjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgdW5ncm91cCgpIHw+IHNlbGVjdCgsc3RyYXRhMixyZXNwLHN0cmF0YTEscGN0X3RleHQpIHw+IHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPXN0cmF0YTIsdmFsdWVzX2Zyb20gPXBjdF90ZXh0LHZhbHVlc19mbiA9IFwoeCkgZmlyc3QoeCkpIHw+IGZsZXh0YWJsZSgpCgoKYGBgCgril48gVGFiZWxhIDMuNTogUGVyY2VudHVhbCBkZSB1dGlsaXphw6fDo28gZGUgYmljaWNsZXRhcyBwb3IgbW90aXZvIGRlIGVzdHVkbyAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfbG9jYWxpZGFkZSIpLHN0cl9kZXRlY3QocmVzcCwicMOpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHN0cmF0YTEpKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnJlc3ApK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpIHw+IAogICAgdW5ncm91cCgpIHw+IHNlbGVjdChyZXNwLHN0cmF0YTEscGN0X3RleHQpIHw+IHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPXJlc3AsdmFsdWVzX2Zyb20gPXBjdF90ZXh0LHZhbHVlc19mbiA9IFwoeCkgZmlyc3QoeCkpIHw+IGZsZXh0YWJsZSgpCgoKYGBgCgoK4pePIFRhYmVsYSAzLjY6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGNpY2xvdmlhcyBwYXJhIGFxdWVsZXMgcXVlIHV0aWxpemFtIGJpY2ljbGV0YSBwb3IgbW90aXZvIGRlIGVzdHVkbyAKIyMjIHBlbmRlbnRlCgoK4pePIFRhYmVsYSAzLjc6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkbyBtb2RvIGEgcMOpIHBvciBtb3Rpdm8gZGUgZXN0dWRvIAoKYGBge3IgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTV9CgpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJSZXNfZXN0dWRvX21vZGFsIiksIXN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsIiAtICIpLHN0cl9kZXRlY3Qoc3RyYXRhX2tpbmQsInN0cmF0YV9sb2NhbGlkYWRlIiksc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IAogICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAsc3RyYXRhMSkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+cmVzcCkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkgCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAril48gVGFiZWxhIDMuODogUGVyY2Vww6fDo28gZGEgZXhpc3TDqm5jaWEgZGUgc2luYWxpemHDp8OjbyBwYXJhIHBlZGVzdHJlcyBwYXJhIGFxdWVsZXMgcXVlIHbDo28gYSBww6kgcGFyYSBhIGVzY29sYSAKIyMjIHBlbmRlbnRlCgoK4pePIFRhYmVsYSAzLjk6IFBlcmNlcMOnw6NvIGRhIGV4aXN0w6puY2lhIGRlIGFyYm9yaXphw6fDo28gcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgYSBlc2NvbGEgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAzLjEwOiBQZXJjZXDDp8OjbyBkYSBleGlzdMOqbmNpYSBkZSBjYWzDp2FkYXMgcGFyYSBhcXVlbGVzIHF1ZSB2w6NvIGEgcMOpIHBhcmEgYSBlc2NvbGEgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSAzLjExOiBQZXJjZW50dWFpcyBkZSBtb3JhZG9yZXMgc2VndW5kbyB0ZW1wbyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIEdydXBvIGRhIFBNQiAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE1fQoKZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiUmVzX2VzdHVkb19tb2RhbCIpLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSwjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgICAgICAgICAgICApIHw+IAogICNzZWxlY3Qoc3RyYXRhX2tpbmQpIHw+IGRpc3RpbmN0KCkKICAgICNnZ3Bsb3QoYWVzKHBjdCoxMDAscmVzcCkpK2dlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikrZmFjZXRfZ3JpZCh+c3RyYXRhMSkrdGhlbWVfbWluaW1hbCgpK2dlb21fbGFiZWwoYWVzKGxhYmVsPXBjdF90ZXh0KSkKICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSAzLjEyOiBQZXJjZW50dWFpcyBkZSBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBlc3R1ZG8gcG9yIE11bmljw61waW8gZGEgUE1CCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2xvIiksI3N0cl9kZXRlY3QocmVzcCwiaWNpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSBDLjE6IFBlcmNlbnR1YWlzIGRlIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGVzdHVkbyBwb3IgR3J1cG8gZGEgUE1CIApgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNX0KCmRmIHw+IGZpbHRlcihmaWx0ZXI9PSJQTUIiLHN0cl9kZXRlY3QocGVyZ3VudGEsIlJlc19lc3R1ZG9fbW9kYWwiKSwhc3RyX2RldGVjdChzdHJhdGFfa2luZCwiIC0gIiksc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2dyIiksI3N0cl9kZXRlY3QocmVzcCwiaWNpIikjc3RyX2RldGVjdChzdHJhdGFfa2luZCwic3RyYXRhX2NvciIpLAogICAgICAgICAgICAgKSB8PiAKICAjc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCiAgICAjZ2dwbG90KGFlcyhwY3QqMTAwLHJlc3ApKStnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpK2ZhY2V0X2dyaWQofnN0cmF0YTEpK3RoZW1lX21pbmltYWwoKStnZW9tX2xhYmVsKGFlcyhsYWJlbD1wY3RfdGV4dCkpCiAgICAgIHVuZ3JvdXAoKSB8PiBzZWxlY3QocmVzcCxzdHJhdGExLHBjdF90ZXh0KSB8PiBwaXZvdF93aWRlcihuYW1lc19mcm9tID1yZXNwLHZhbHVlc19mcm9tID1wY3RfdGV4dCx2YWx1ZXNfZm4gPSBcKHgpIGZpcnN0KHgpKSB8PiBmbGV4dGFibGUoKQoKCmBgYAoK4pePIFRhYmVsYSBDLjI6IFBlcmNlbnR1YWlzIGRlIHV0aWxpemHDp8OjbyBkb3MgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgZXN0dWRvIHBvciBDb21wb3Npw6fDo28gZG9zIERvbWljw61saW9zCiMjIyBwZW5kZW50ZQoKIyBkKSAgU0VSVknDh09TIERFIFNBw5pERSBFIENPTVBSQVMKCgril48gR3LDoWZpY28gNC4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIG11bmljw61waW9zIGRhIFBNQiAKCmBgYHtyfQpkZiB8PiBmaWx0ZXIoZmlsdGVyPT0iUE1CIixzdHJfZGV0ZWN0KHBlcmd1bnRhLCJzYXVkZSIpKSB8PiAjLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSkjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCgpgYGAKCgril48gR3LDoWZpY28gNC4yOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvcyBkZSBjb21wcmFzIHBvciBtdW5pY8OtcGlvcyBkYSBQTUIKIyMjIHBlbmRlbnRlCgpgYGB7cn0KZGYgfD4gZmlsdGVyKGZpbHRlcj09IlBNQiIsc3RyX2RldGVjdChwZXJndW50YSwiY29tcCIpKSB8PiAjLCFzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCIgLSAiKSxzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfZ3IiKSkjc3RyX2RldGVjdChyZXNwLCJpY2kiKSNzdHJfZGV0ZWN0KHN0cmF0YV9raW5kLCJzdHJhdGFfY29yIiksCiAgc2VsZWN0KHN0cmF0YV9raW5kKSB8PiBkaXN0aW5jdCgpCmBgYAoKCuKXjyBUYWJlbGEgNC4xOiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gcG9yIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwYXJhIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIE11bmljw61waW9zIGRhIFBNQiAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIDQuMjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIHBvciBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2b3MgZGUgY29tcHJhcyBwb3IgTXVuaWPDrXBpb3MgZGEgUE1CCiMjIyBwZW5kZW50ZQoKCgril48gVGFiZWxhIEQuMTogUGVyY2VudHVhaXMgZGUgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgY29tcHJhcyBwb3IgTXVuaWPDrXBpbyBkYSBQTUIgCiMjIyBwZW5kZW50ZQoK4pePIFRhYmVsYSBELjI6IFBlcmNlbnR1YWlzIGRlIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGNvbXByYXMgcG9yIEdydXBvIGRhIFBNQiAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIEQuMzogUGVyY2VudHVhaXMgZGUgbW9kb3MgZGUgZGVzbG9jYW1lbnRvIHBvciBtb3Rpdm8gZGUgdXRpbGl6YcOnw6NvIGRlIHNlcnZpw6dvcyBkZSBzYcO6ZGUgcG9yIE11bmljw61waW8gZGEgUE1CIAojIyMgcGVuZGVudGUKCuKXjyBUYWJlbGEgRC40OiBQZXJjZW50dWFpcyBkZSBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSB1dGlsaXphw6fDo28gZGUgc2VydmnDp29zIGRlIHNhw7pkZSBwb3IgR3J1cG8gZGEgUE1CIAojIyMgcGVuZGVudGUKCuKXjyBUYWJlbGEgRC41OiBQZXJjZW50dWFpcyBkZSB1dGlsaXphw6fDo28gZG9zIG1vZG9zIGRlIGRlc2xvY2FtZW50byBwb3IgbW90aXZvIGRlIGNvbXByYXMgcG9yIGfDqm5lcm8gZSBmYWl4YSBkZSBpZGFkZSAKIyMjIHBlbmRlbnRlCgril48gVGFiZWxhIEQuNjogUGVyY2VudHVhaXMgZGUgdXRpbGl6YcOnw6NvIGRvcyBtb2RvcyBkZSBkZXNsb2NhbWVudG8gcG9yIG1vdGl2byBkZSBhY2Vzc28gw6Agc2VydmnDp29zIGRlIHNhw7pkZSBwb3IgZ8OqbmVybyBlIGZhaXhhIGRlIGlkYWRlCiMjIyBwZW5kZW50ZQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=