Análise das Funções, Objetivos e Desafios da Gestão das Reservas Internacionais

Este relatório tem como objetivo analisar a administração das reservas internacionais, abordando suas funções, objetivos e os principais desafios da gestão desses ativos. As reservas cumprem papel essencial na estabilidade econômica, ao reduzir vulnerabilidades externas e reforçar a credibilidade da política monetária frente a choques cambiais e incertezas globais.

Conceito e Composição das Reservas

O tema das reservas internacionais é central para compreender a estabilidade macroeconômica e a capacidade de resposta de um país a choques externos. As reservas são recursos mantidos pelo Banco Central com o objetivo de garantir liquidez em momentos de crise, sustentar a confiança dos investidores e reduzir a vulnerabilidade cambial. Elas funcionam como uma espécie de “seguro” financeiro, permitindo que o país intervenha no mercado de câmbio ou honre compromissos externos em períodos de instabilidade.

Conceitualmente, as reservas internacionais são compostas por ativos externos de alta liquidez e baixo risco, como moedas estrangeiras, títulos públicos de economias avançadas, ouro e Direitos Especiais de Saque (DES) do FMI. Essa diversificação busca equilibrar segurança e rentabilidade, preservando o valor dos ativos diante de flutuações nos mercados globais.

O gráfico ilustra a composição das reservas por moeda em 2024, evidenciando a predominância do dólar americano, que representa 78,5% do total. Essa concentração reflete a posição do dólar como principal moeda de reserva e meio de liquidação internacional. Em seguida aparecem o renminbi (5,3%), o euro (5,2%), a libra esterlina (3,7%) e o ouro (3,6%), com participações menores do iene (1,7%), dólar canadense (1,1%) e dólar australiano (1%). A distribuição indica uma estratégia conservadora, alinhada ao padrão global, em que a predominância do dólar assegura liquidez imediata, enquanto a presença de outras moedas e do ouro contribui para diversificação e mitigação de riscos.

Evolução no Brasil das reservas

O comportamento das reservas internacionais brasileiras ao longo dos anos 2000 reflete o fortalecimento do setor externo e o ciclo de crescimento das exportações de commodities. O aumento dos preços internacionais e os sucessivos superávits comerciais permitiram ao país acumular reservas de forma consistente, reduzindo sua vulnerabilidade externa e ampliando a capacidade de enfrentamento a crises financeiras. Esse movimento consolidou o Brasil entre os países emergentes com maior volume de reservas internacionais, reforçando a credibilidade da política macroeconômica e a percepção de solidez perante investidores estrangeiros.

O gráfico mostra a evolução das reservas internacionais em comparação com a balança comercial entre dezembro de 2000 e setembro de 2025. Nota-se que, nos primeiros anos da série, o nível de reservas era significativamente inferior ao saldo comercial, refletindo a limitada capacidade de acumulação externa naquele período. A partir de meados da década de 2000, o avanço expressivo das exportações e os saldos positivos da balança comercial impulsionaram o crescimento das reservas, que ultrapassam a balança comercial por volta do final do ano de 2010. Desde então, o estoque de reservas mantém trajetória superior, evidenciando o amadurecimento da posição externa do país e o uso dos ganhos comerciais como instrumento de fortalecimento das contas externas.

Relação com o Câmbio

As reservas internacionais exercem papel fundamental na contenção da volatilidade cambial, funcionando como um mecanismo de proteção em momentos de fuga de capitais ou desvalorização do real. Ao permitir que o Banco Central atue no mercado de câmbio por meio da venda de dólares ou de instrumentos derivativos, as reservas ajudam a suavizar movimentos bruscos da taxa de câmbio e a preservar a estabilidade financeira. Essa função é especialmente relevante em economias emergentes, nas quais choques externos (como mudanças nas condições de liquidez global ou variações no preço das commodities) costumam gerar pressões imediatas sobre a moeda doméstica.

O gráfico ,que relaciona as reservas internacionais à taxa real de câmbio entre 2020 e 2025, evidencia essa dinâmica. Observa-se uma trajetória marcada por oscilações, com períodos em que o câmbio se valoriza e outros em que o real sofre desvalorização acentuada, enquanto as reservas apresentam comportamento mais estável. Em dezembro de 2021, por exemplo, os dois indicadores se aproximam, mas ao longo da série há momentos de afastamento significativo — refletindo tanto a volatilidade do câmbio quanto o papel amortecedor das reservas. No geral, nota-se que, mesmo com variações pontuais, o nível elevado de reservas contribui para conter movimentos mais extremos da taxa de câmbio, reforçando a capacidade de defesa da economia frente a choques externos.

Função e Importância Global

As reservas internacionais também cumprem uma função estratégica ao fortalecer a confiança internacional e reduzir o risco-país. Um volume elevado de reservas transmite segurança a investidores e credores externos, pois indica que o país tem capacidade de honrar seus compromissos financeiros mesmo em cenários de estresse global. Além disso, as reservas funcionam como um colchão de liquidez que permite ao governo reagir rapidamente em crises externas, evitando escassez de divisas, desvalorizações abruptas da moeda e instabilidade financeira.

O gráfico a seguir apresenta o ranking dos 15 países com maiores volumes de reservas internacionais em 2025 (até setembro). Observa-se que a China lidera com ampla margem, refletindo décadas de superávits comerciais e forte controle cambial. Em seguida aparecem Arábia Saudita, Japão, Espanha, Suíça e Rússia, economias que acumulam reservas elevadas por diferentes motivos, desde a exportação de petróleo, no caso saudita, até a busca por estabilidade financeira e proteção contra choques externos, como no caso japonês e suíço.

O Brasil também figura entre as principais economias emergentes do ranking, reforçando sua posição de relativa solidez externa. Esse patamar de reservas oferece importante sustentação à credibilidade do país, contribuindo para manter o risco soberano em níveis controlados e garantir estabilidade macroeconômica mesmo em períodos de incerteza internacional.

Custos de Manutenção e Impactos na Política Econômica

As reservas internacionais são fundamentais para a estabilidade macroeconômica brasileira, mas sua manutenção implica custos fiscais significativos. Este custo decorre do diferencial entre a taxa Selic, que o país paga para financiar sua dívida interna, e o rendimento das reservas aplicadas em ativos externos de baixo risco, principalmente títulos do Tesouro Americano.

O mecanismo funciona assim: quando o Banco Central compra dólares no mercado pagando em reais, aumenta a moeda em circulação, o que poderia pressionar a inflação. Para neutralizar esse efeito, emite títulos públicos que pagam a Selic para retirar esses reais de circulação, processo chamado esterilização. Como esses títulos pagam juros significativamente superiores ao rendimento das reservas no exterior, surge o custo fiscal.

Entre 2010 e 2025, o custo fiscal das reservas variou conforme o diferencial Selic–Treasury 10Y. Entre 2015 e 2017, com Selic acima de 13% e Treasury em 2 a 2,6%, o custo foi de R$ 150 a 180 bilhões. Durante a pandemia (2020–2021), com Selic em 1,9% e Treasury 0,5 a 1,7%, caiu para R$ 15 a 40 bilhões. Entre 2022 e 2025, com Selic de 10,5 a 14,9% e Treasury 1,5 a 4,6%, os custos ficaram entre R$ 80 a 160 bilhões, mostrando que o principal determinante é o diferencial entre as taxas.

Há, portanto, um trade-off evidente: as reservas protegem contra crises cambiais, mas o custo fiscal poderia financiar investimentos públicos ou redução da dívida. A perspectiva futura desse custo depende da trajetória da Selic e dos rendimentos dos títulos do Tesouro americano. Se o Brasil consolidar desinflação sustentável e redução do risco fiscal, a Selic poderá convergir para níveis mais próximos aos internacionais, reduzindo o diferencial e o custo. Caso contrário, a persistência de juros estruturalmente altos no Brasil manterá o ônus fiscal elevado.

Apêndice - Custo Fiscal das Reservas Internacionais

O diferencial de custo fiscal é calculado por:

\[\text{Diferencial} = i_{Selic} - i_{ext}\]

Onde:

  • \(i_{Selic}\) = Taxa Selic (% a.a.)
  • \(i_{ext}\) = Rendimento das reservas no exterior (% a.a.)

O custo fiscal anual em reais é dado por:

\[CF = R \times C \times (i_{Selic} - i_{ext})\]

Onde:

  • \(CF\) = Custo Fiscal (R$ bilhões)
  • \(R\) = Reservas Internacionais (US$ bilhões)
  • \(C\) = Taxa de câmbio média (R\(/US\))
  • \(i_{Selic}\) = Taxa Selic (em decimal)
  • \(i_{ext}\) = Rendimento externo (em decimal)

Conclusão

A análise das reservas internacionais evidencia seu papel estratégico na manutenção da estabilidade macroeconômica e na mitigação de riscos externos. Ao longo dos últimos anos, a acumulação de reservas permitiu ao país reduzir a volatilidade cambial, fortalecer a confiança de investidores internacionais e assegurar recursos em períodos de crise, consolidando a posição do Brasil entre os principais países emergentes em termos de volume de reservas.

Entretanto, a gestão dessas reservas não está isenta de custos. A diferença entre a remuneração obtida em ativos externos de baixo risco e o custo do financiamento interno, via taxa Selic, representa um custo fiscal relevante que precisa ser monitorado, especialmente em ciclos de juros elevados. Esse equilíbrio delicado entre segurança cambial e eficiência fiscal evidencia a complexidade de decisões envolvendo política econômica, política monetária e gestão de riscos externos.

Em suma, a sustentabilidade da política de reservas internacionais depende de decisões consistentes, capazes de equilibrar proteção cambial, manutenção da confiança internacional e custos fiscais. O desafio reside em preservar esse “colchão” financeiro sem comprometer a disciplina orçamentária, garantindo, ao mesmo tempo, estabilidade financeira e resiliência frente a choques externos.

Referências

EMPIRICUS. O que são reservas internacionais e qual sua importância para o Brasil. Disponível em: https://www.empiricus.com.br/explica/reservas-internacionais/. Acesso em: 21 out. 2025.

POLITIZE!. Reservas internacionais: o que são e por que são importantes para o Brasil? Disponível em: https://www.politize.com.br/reservas-internacionais/. Acesso em: 21 out. 2025.

FUNDAÇÃO GETULIO VARGAS (FGV). Reservas internacionais e estabilidade macroeconômica. Disponível em: https://repositorio.fgv.br/server/api/core/bitstreams/84931d48-9720-41c9-9ffe-69926edd63b9/content. Acesso em: 21 out. 2025.

ESTADÃO. Quanto o Brasil tem de reservas internacionais? Disponível em: https://www.estadao.com.br/economia/quanto-o-brasil-tem-de-reservas-internacionais-nprei/. Acesso em: 21 out. 2025.

G1 – PORTAL DE NOTÍCIAS GLOBO. Com disparada do dólar e leilões do BC, reservas internacionais do Brasil caem 7,1% em 2024. Disponível em: https://g1.globo.com/economia/noticia/2025/01/05/com-disparada-do-dolar-e-leiloes-do-bc-reservas-internacionais-do-brasil-caem-71percent-em-2024.ghtml. Acesso em: 21 out. 2025.

INSTITUTO DE PESQUISA ECONÔMICA APLICADA (IPEA). Reservas internacionais. Carta de Conjuntura. Disponível em: https://www.ipea.gov.br/cartadeconjuntura/index.php/tag/reservas-internacionais/. Acesso em: 21 out. 2025.

O GLOBO. BC faz intervenção recorde no dólar; mas afinal, quanto o Brasil tem em reservas cambiais? Disponível em: https://oglobo.globo.com/economia/financas/noticia/2024/12/19/bc-faz-intervencao-recorde-no-dolar-mas-afinal-quanto-o-brasil-tem-em-reservas-cambais.ghtml. Acesso em: 21 out. 2025.

NORD INVESTIMENTOS. Reservas internacionais do Brasil: o que são e qual sua importância? Disponível em: https://www.nordinvestimentos.com.br/blog/reservas-internacionais-brasil/. Acesso em: 21 out. 2025.

BANCO CENTRAL DO BRASIL (BCB). Relatório de Gestão das Reservas Internacionais – 2025. Disponível em: https://www.bcb.gov.br/content/publicacoes/relgestaoreservas/GESTAORESERVAS202503-relatorio_anual_reservas_internacionais_2025.pdf. Acesso em: 21 out. 2025.

TRADING ECONOMICS. Foreign Exchange Reserves – G20 Countries. Disponível em: https://pt.tradingeconomics.com/country-list/foreign-exchange-reserves?continent=g20. Acesso em: 21 out. 2025.

Banco Central do Brasil (BCB). Relatório de Gestão das Reservas Internacionais. Disponível em: https://www.bcb.gov.br/publicacoes/relgestaoreservas. Acesso em: 21 out. 2025.

BOARD OF GOVERNORS OF THE FEDERAL RESERVE SYSTEM (US). Market Yield on U.S. Treasury Securities at 10-Year Constant Maturity, Quoted on an Investment Basis [GS10]. Disponível em: https://fred.stlouisfed.org/series/GS10 . Acesso em: 21 out. 2025.

LS0tDQp0aXRsZTogICJSZWxhdMOzcmlvIGRlIEFkbWluaXN0cmHDp8OjbyBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMiDQphdXRob3I6ICJEYXZpIE9saXZlaXJhKFRyYWluZWUpIGUgSXNhZG9yYSBMZWFsKFRyYWluZWUpLiBMdWl6IEdhbWEoUHJvZmVzc29yIE9yaWVudGFkb3IpLSBEb3V0b3IgZW0gRWNvbm9taWEgZSBwcm9mZXNzb3IgZG8gSWJtZWMgQkggIg0KZGF0ZTogIjIxLTEwLTIwMjUiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdGhlbWU6IGx1bWVuDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUgDQotLS0NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UpDQoNCiMgQ2FycmVnYXIgcGFjb3Rlcw0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGZyZWRyKQ0KbGlicmFyeShyYmNiKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShwZGZ0b29scykNCg0KDQpgYGANCg0KDQoNCiMgQW7DoWxpc2UgZGFzIEZ1bsOnw7VlcywgT2JqZXRpdm9zIGUgRGVzYWZpb3MgZGEgR2VzdMOjbyBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMNCkVzdGUgcmVsYXTDs3JpbyB0ZW0gY29tbyBvYmpldGl2byBhbmFsaXNhciBhIGFkbWluaXN0cmHDp8OjbyBkYXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMsIGFib3JkYW5kbyBzdWFzIGZ1bsOnw7Vlcywgb2JqZXRpdm9zIGUgb3MgcHJpbmNpcGFpcyBkZXNhZmlvcyBkYSBnZXN0w6NvIGRlc3NlcyBhdGl2b3MuIEFzIHJlc2VydmFzIGN1bXByZW0gcGFwZWwgZXNzZW5jaWFsIG5hIGVzdGFiaWxpZGFkZSBlY29uw7RtaWNhLCBhbyByZWR1emlyIHZ1bG5lcmFiaWxpZGFkZXMgZXh0ZXJuYXMgZSByZWZvcsOnYXIgYSBjcmVkaWJpbGlkYWRlIGRhIHBvbMOtdGljYSBtb25ldMOhcmlhIGZyZW50ZSBhIGNob3F1ZXMgY2FtYmlhaXMgZSBpbmNlcnRlemFzIGdsb2JhaXMuDQoNCg0KDQojICoqQ29uY2VpdG8gZSBDb21wb3Npw6fDo28gZGFzIFJlc2VydmFzKioNCmBgYHtyfQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkoZHBseXIpDQoNCiMgLS0tIFBhbGV0YSBkZSBDb3JlcyBBZGFwdGFkYSAodXNhbmRvIGFzIHByaW1laXJhcyBjb3JlcyBkYSBzdWEgcmVmZXLDqm5jaWEpIC0tLQ0KbWluaGFfcGFsZXRhX3Jlc2VydmFzIDwtIGMoDQogICIjMDIwMjNDIiwgIyBEw7NsYXIgKE1haW9yIFBhcnRpY2lwYcOnw6NvKQ0KICAiI0ZFQjcxMiIsICMgUmVubWluYmkNCiAgIiM0NkIxRTEiLCAjIEV1cm8NCiAgIiMwMDJDNUUiLCAjIExpYnJhDQogICJibGFjayIsICAgIyBPdXJvDQogICIjOEU0NEFEIiwgIyBJZW5lDQogICIjRTY3RTIyIiwgIyBEw7NsYXIgQ2FuYWRlbnNlDQogICIjMTZBMDg1IiAgIyBEw7NsYXIgQXVzdHJhbGlhbm8NCikNCg0KIyAxLiBDYXJyZWdhciBvcyBkYWRvcw0KIyBPIGFycXVpdm8gIlJlc2VydmFzIGRlIG1vZWRhcy5jc3YiIGRldmUgZXN0YXIgbm8gc2V1IGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8uDQpkYWRvcyA8LSByZWFkLmNzdigNCiAgIlJlc2VydmFzIGRlIG1vZWRhcy5jc3YiLA0KICBzZXAgPSAiOyIsDQogIGRlYyA9ICIsIg0KKQ0KDQojIDIuIFByZXBhcmFyIG9zIGRhZG9zIHBhcmEgbyBIaWdoY2hhcnRlcg0KZGFkb3NfaGlnaGNoYXJ0IDwtIGRhZG9zIHw+DQogIHJlbmFtZSgNCiAgICBuYW1lID0gTW9lZGEsDQogICAgeSA9IFBhcnRpY2lwYcOnw6NvDQogICkgfD4NCiAgIyBHYXJhbnRlIHF1ZSBhIGNvbHVuYSAneScgKFBhcnRpY2lwYcOnw6NvKSBzZWphIG51bcOpcmljYSBlIGFycmVkb25kYQ0KICBtdXRhdGUoeSA9IHJvdW5kKGFzLm51bWVyaWMoeSksIDIpKQ0KDQojIDMuIENyaWFyIG8gR3LDoWZpY28gZGUgUGl6emEgY29tIEVzdGlsbyBDb21wbGV0byBlIExlZ2VuZGEgbmEgQmFzZQ0KaGlnaGNoYXJ0KCkgfD4NCiAgaGNfY2hhcnQodHlwZSA9ICJwaWUiKSB8Pg0KICBoY19zaXplKGhlaWdodCA9IDYwMCkgfD4NCiAgaGNfY29sb3JzKG1pbmhhX3BhbGV0YV9yZXNlcnZhcykgfD4NCiAgDQogICMgVMONVFVMT1MgRSBTVUJUw41UVUxPUw0KICBoY190aXRsZSh0ZXh0ID0gIkFsb2Nhw6fDo28gcG9yIE1vZWRhcyBuYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgZG8gQnJhc2lsICgyMDI0KSIpIHw+DQogIGhjX3N1YnRpdGxlKHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChEZXplbWJybyAyMDI0KSIpIHw+DQogIA0KICAjIE9Qw4fDlUVTIERPIEdSw4FGSUNPIChQSUUpDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHBpZSA9IGxpc3QoDQogICAgICBhbGxvd1BvaW50U2VsZWN0ID0gVFJVRSwNCiAgICAgIGN1cnNvciA9ICJwb2ludGVyIiwNCiAgICAgICMgUsOTVFVMT1MgRVhURVJOT1M6IE1hbnRpZG8gbyBlc3RpbG8gZGEgaW1hZ2VtIGFudGVyaW9yLg0KICAgICAgIyBTZSBmaWNhciBwb2x1w61kbyBjb20gYSBsZWdlbmRhLCB2b2PDqiBwb2RlIGRlc2FiaWxpdGFyIChlbmFibGVkID0gRkFMU0UpLg0KICAgICAgZGF0YUxhYmVscyA9IGxpc3QoDQogICAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICBmb3JtYXQgPSAie3BvaW50Lm5hbWV9OiB7cG9pbnQucGVyY2VudGFnZTouMWZ9JSIsDQogICAgICAgIGRpc3RhbmNlID0gMjAsDQogICAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IikNCiAgICAgICksDQogICAgICAjIEFMVEVSQcOHw4NPIDE6IEhhYmlsaXRhIGEgbGVnZW5kYSAobmVjZXNzw6FyaW8gcGFyYSBoY19sZWdlbmQgZnVuY2lvbmFyKQ0KICAgICAgc2hvd0luTGVnZW5kID0gVFJVRSwNCiAgICAgICMgQUxURVJBw4fDg08gMjogUmVtb3ZlIG8gZXNwYcOnYW1lbnRvIGludGVybm8gKHRvcm5hLXNlIHVtIFBJWlpBIGNvbXBsZXRvKQ0KICAgICAgaW5uZXJTaXplID0gJzAlJw0KICAgICkNCiAgKSB8Pg0KICANCiAgIyBBRElDSU9OQSBBIFPDiVJJRSBERSBEQURPUw0KICBoY19hZGRfc2VyaWVzKG5hbWUgPSAiUGFydGljaXBhw6fDo28gKCUpIiwgZGF0YSA9IGxpc3RfcGFyc2UoZGFkb3NfaGlnaGNoYXJ0KSkgfD4NCiAgDQogICMgVE9PTFRJUCAoRGljYSBkZSBGZXJyYW1lbnRhKQ0KICBoY190b29sdGlwKA0KICAgIHBvaW50Rm9ybWF0ID0gIjxiPntwb2ludC5uYW1lfTwvYj48YnIvPlBhcnRpY2lwYcOnw6NvOiA8Yj57cG9pbnQueTouMmZ9JTwvYj4iLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyDQogICkgfD4NCiAgDQogICMgQUxURVJBw4fDg08gMzogQ09ORklHVVJBw4fDg08gREEgTEVHRU5EQSBOQSBCQVNFIChFaXhvIFgpDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwgIyBQb3Npw6fDo286IEluZmVyaW9yDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgfD4NCiAgDQogICMgQ1LDiURJVE9TIEUgRVhQT1JUQcOHw4NPDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogQkNCIHwgR3LDoWZpY286IEVsYWJvcmHDp8OjbyBQcsOzcHJpYSINCiAgKSB8Pg0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCmBgYA0KTyB0ZW1hIGRhcyByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyDDqSBjZW50cmFsIHBhcmEgY29tcHJlZW5kZXIgYSBlc3RhYmlsaWRhZGUgbWFjcm9lY29uw7RtaWNhIGUgYSBjYXBhY2lkYWRlIGRlIHJlc3Bvc3RhIGRlIHVtIHBhw61zIGEgY2hvcXVlcyBleHRlcm5vcy4gQXMgcmVzZXJ2YXMgc8OjbyByZWN1cnNvcyBtYW50aWRvcyBwZWxvIEJhbmNvIENlbnRyYWwgY29tIG8gb2JqZXRpdm8gZGUgZ2FyYW50aXIgbGlxdWlkZXogZW0gbW9tZW50b3MgZGUgY3Jpc2UsIHN1c3RlbnRhciBhIGNvbmZpYW7Dp2EgZG9zIGludmVzdGlkb3JlcyBlIHJlZHV6aXIgYSB2dWxuZXJhYmlsaWRhZGUgY2FtYmlhbC4gRWxhcyBmdW5jaW9uYW0gY29tbyB1bWEgZXNww6ljaWUgZGUg4oCcc2VndXJv4oCdIGZpbmFuY2Vpcm8sIHBlcm1pdGluZG8gcXVlIG8gcGHDrXMgaW50ZXJ2ZW5oYSBubyBtZXJjYWRvIGRlIGPDom1iaW8gb3UgaG9ucmUgY29tcHJvbWlzc29zIGV4dGVybm9zIGVtIHBlcsOtb2RvcyBkZSBpbnN0YWJpbGlkYWRlLg0KDQpDb25jZWl0dWFsbWVudGUsIGFzIHJlc2VydmFzIGludGVybmFjaW9uYWlzIHPDo28gY29tcG9zdGFzIHBvciBhdGl2b3MgZXh0ZXJub3MgZGUgYWx0YSBsaXF1aWRleiBlIGJhaXhvIHJpc2NvLCBjb21vIG1vZWRhcyBlc3RyYW5nZWlyYXMsIHTDrXR1bG9zIHDDumJsaWNvcyBkZSBlY29ub21pYXMgYXZhbsOnYWRhcywgb3VybyBlIERpcmVpdG9zIEVzcGVjaWFpcyBkZSBTYXF1ZSAoREVTKSBkbyBGTUkuIEVzc2EgZGl2ZXJzaWZpY2HDp8OjbyBidXNjYSBlcXVpbGlicmFyIHNlZ3VyYW7Dp2EgZSByZW50YWJpbGlkYWRlLCBwcmVzZXJ2YW5kbyBvIHZhbG9yIGRvcyBhdGl2b3MgZGlhbnRlIGRlIGZsdXR1YcOnw7VlcyBub3MgbWVyY2Fkb3MgZ2xvYmFpcy4NCg0KTyBncsOhZmljbyBpbHVzdHJhIGEgY29tcG9zacOnw6NvIGRhcyByZXNlcnZhcyBwb3IgbW9lZGEgZW0gMjAyNCwgZXZpZGVuY2lhbmRvIGEgcHJlZG9taW7Dom5jaWEgZG8gZMOzbGFyIGFtZXJpY2FubywgcXVlIHJlcHJlc2VudGEgNzgsNSUgZG8gdG90YWwuIEVzc2EgY29uY2VudHJhw6fDo28gcmVmbGV0ZSBhIHBvc2nDp8OjbyBkbyBkw7NsYXIgY29tbyBwcmluY2lwYWwgbW9lZGEgZGUgcmVzZXJ2YSBlIG1laW8gZGUgbGlxdWlkYcOnw6NvIGludGVybmFjaW9uYWwuIEVtIHNlZ3VpZGEgYXBhcmVjZW0gbyByZW5taW5iaSAoNSwzJSksIG8gZXVybyAoNSwyJSksIGEgbGlicmEgZXN0ZXJsaW5hICgzLDclKSBlIG8gb3VybyAoMyw2JSksIGNvbSBwYXJ0aWNpcGHDp8O1ZXMgbWVub3JlcyBkbyBpZW5lICgxLDclKSwgZMOzbGFyIGNhbmFkZW5zZSAoMSwxJSkgZSBkw7NsYXIgYXVzdHJhbGlhbm8gKDElKS4gQSBkaXN0cmlidWnDp8OjbyBpbmRpY2EgdW1hIGVzdHJhdMOpZ2lhIGNvbnNlcnZhZG9yYSwgYWxpbmhhZGEgYW8gcGFkcsOjbyBnbG9iYWwsIGVtIHF1ZSBhIHByZWRvbWluw6JuY2lhIGRvIGTDs2xhciBhc3NlZ3VyYSBsaXF1aWRleiBpbWVkaWF0YSwgZW5xdWFudG8gYSBwcmVzZW7Dp2EgZGUgb3V0cmFzIG1vZWRhcyBlIGRvIG91cm8gY29udHJpYnVpIHBhcmEgZGl2ZXJzaWZpY2HDp8OjbyBlIG1pdGlnYcOnw6NvIGRlIHJpc2Nvcy4NCg0KDQoNCg0KIyAqKkV2b2x1w6fDo28gbm8gQnJhc2lsIGRhcyByZXNlcnZhcyoqIA0KYGBge3J9DQojIC0tLSBQYWNvdGVzIC0tLQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiMgLS0tIExlciBkYWRvcyBkYSBCYWxhbsOnYSBDb21lcmNpYWwgLS0tDQpiYWxhbmNhX3JhdyA8LSByZWFkX2RlbGltKA0KICAiQmFsYW5jYSBjb21lcmNpYWwgMDAtMjUuY3N2IiwNCiAgZGVsaW0gPSAiOyIsDQogIGxvY2FsZSA9IGxvY2FsZShlbmNvZGluZyA9ICJsYXRpbjEiKQ0KKQ0KDQojIC0tLSBMZXIgZGFkb3MgZGFzIFJlc2VydmFzIEludGVybmFjaW9uYWlzIC0tLQ0KcmVzZXJ2YXNfcmF3IDwtIHJlYWRfZGVsaW0oDQogICJSZXNlcnZhcyBpbnRlciAwMC0yNS5jc3YiLA0KICBkZWxpbSA9ICI7IiwNCiAgbG9jYWxlID0gbG9jYWxlKGVuY29kaW5nID0gImxhdGluMSIpDQopDQoNCiMgLS0tIFByb2Nlc3NhciBCYWxhbsOnYSBDb21lcmNpYWwgLS0tDQpiYWxhbmNhX3Byb2Nlc3NlZCA8LSBiYWxhbmNhX3JhdyAlPiUNCiAgcmVuYW1lKERhdGEgPSAxLCBCYWxhbmNhID0gMikgJT4lDQogIG11dGF0ZSgNCiAgICBCYWxhbmNhID0gZ3N1YigiLCIsICIuIiwgdHJpbXdzKEJhbGFuY2EpKSwNCiAgICBCYWxhbmNhID0gYXMubnVtZXJpYyhCYWxhbmNhKSwNCiAgICBEYXRhID0gcGFzdGUwKCIwMS8iLCBEYXRhKSwNCiAgICBEYXRhID0gZG15KERhdGEsIGxvY2FsZSA9ICJwdF9CUi51dGY4IiksDQogICAgRGF0YSA9IGZsb29yX2RhdGUoRGF0YSwgIm1vbnRoIikNCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShCYWxhbmNhKSkNCg0KIyAtLS0gUHJvY2Vzc2FyIFJlc2VydmFzIC0tLQ0KcmVzZXJ2YXNfcHJvY2Vzc2VkIDwtIHJlc2VydmFzX3JhdyAlPiUNCiAgcmVuYW1lKERhdGEgPSAxLCBSZXNlcnZhcyA9IDIpICU+JQ0KICBtdXRhdGUoDQogICAgUmVzZXJ2YXMgPSBnc3ViKCIsIiwgIi4iLCB0cmltd3MoUmVzZXJ2YXMpKSwNCiAgICBSZXNlcnZhcyA9IGFzLm51bWVyaWMoUmVzZXJ2YXMpLA0KICAgIERhdGEgPSBwYXN0ZTAoIjAxLyIsIERhdGEpLA0KICAgIERhdGEgPSBkbXkoRGF0YSwgbG9jYWxlID0gInB0X0JSLnV0ZjgiKSwNCiAgICBEYXRhID0gZmxvb3JfZGF0ZShEYXRhLCAibW9udGgiKQ0KICApICU+JQ0KICBmaWx0ZXIoIWlzLm5hKFJlc2VydmFzKSkNCg0KIyAtLS0gQ29udmVydGVyIHBhcmEgZm9ybWF0byBIaWdoY2hhcnRlciAtLS0NCmJhbGFuY2FfaGMgPC0gYmFsYW5jYV9wcm9jZXNzZWQgJT4lDQogIG11dGF0ZShEYXRhID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKERhdGEpKSAlPiUNCiAgc2VsZWN0KERhdGEsIEJhbGFuY2EpDQoNCnJlc2VydmFzX2hjIDwtIHJlc2VydmFzX3Byb2Nlc3NlZCAlPiUNCiAgbXV0YXRlKERhdGEgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkpICU+JQ0KICBzZWxlY3QoRGF0YSwgUmVzZXJ2YXMpDQoNCiMgLS0tIEdyw6FmaWNvIGNvbWJpbmFkbyBIaWdoY2hhcnRlciAtLS0NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGJhbGFuY2FfaGMpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJCYWxhbsOnYSBDb21lcmNpYWwgKFVTJCBtaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiNGRUI3MTIiLA0KICAgIHlBeGlzID0gMCwNCiAgICBsaW5lV2lkdGggPSAxLjgNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIocmVzZXJ2YXNfaGMpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJSZXNlcnZhcyBJbnRlcm5hY2lvbmFpcyAoVVMkIG1pbGjDtWVzKSIsDQogICAgY29sb3IgPSAiIzAwMzM2NiIsDQogICAgeUF4aXMgPSAxLA0KICAgIGxpbmVXaWR0aCA9IDEuOA0KICApICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkJhbGFuw6dhIENvbWVyY2lhbCBlIFJlc2VydmFzIEludGVybmFjaW9uYWlzICgyMDAw4oCTMjAyNSkiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAyMjcwNCBlIDM1NDYpIikgJT4lDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiQmFsYW7Dp2EgQ29tZXJjaWFsIChVUyQgbWlsaMO1ZXMpIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiNGRUI3MTIiKSksDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWU6LC4wZn0iLCBzdHlsZSA9IGxpc3QoY29sb3IgPSAiI0ZFQjcxMiIpKSwNCiAgICAgIG9wcG9zaXRlID0gRkFMU0UsDQogICAgICBtaW4gPSAtMTIwMDAsIA0KICAgICAgbWF4ID0gNjAwMCAgDQogICAgKSwNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgKFVTJCBtaWxow7VlcykiLCBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzAwMzM2NiIpKSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZTosLjBmfSIsIHN0eWxlID0gbGlzdChjb2xvciA9ICIjMDAzMzY2IikpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFLA0KICAgICAgbWluID0gMCwNCiAgICAgIG1heCA9IDM2MDAwMCANCiAgICApDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMSwNCiAgICB2YWx1ZVByZWZpeCA9ICJVUyQgIiwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIgbWlsaMO1ZXMiDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCIsDQogICAgaXRlbVN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMXB4IikNCiAgKSAlPiUNCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogQkNCIHwgR3LDoWZpY286IEVsYWJvcmHDp8OjbyBQcsOzcHJpYSIpICU+JQ0KICBoY19jaGFydChiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIpDQpgYGANCk8gY29tcG9ydGFtZW50byBkYXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgYnJhc2lsZWlyYXMgYW8gbG9uZ28gZG9zIGFub3MgMjAwMCByZWZsZXRlIG8gZm9ydGFsZWNpbWVudG8gZG8gc2V0b3IgZXh0ZXJubyBlIG8gY2ljbG8gZGUgY3Jlc2NpbWVudG8gZGFzIGV4cG9ydGHDp8O1ZXMgZGUgY29tbW9kaXRpZXMuIE8gYXVtZW50byBkb3MgcHJlw6dvcyBpbnRlcm5hY2lvbmFpcyBlIG9zIHN1Y2Vzc2l2b3Mgc3VwZXLDoXZpdHMgY29tZXJjaWFpcyBwZXJtaXRpcmFtIGFvIHBhw61zIGFjdW11bGFyIHJlc2VydmFzIGRlIGZvcm1hIGNvbnNpc3RlbnRlLCByZWR1emluZG8gc3VhIHZ1bG5lcmFiaWxpZGFkZSBleHRlcm5hIGUgYW1wbGlhbmRvIGEgY2FwYWNpZGFkZSBkZSBlbmZyZW50YW1lbnRvIGEgY3Jpc2VzIGZpbmFuY2VpcmFzLiBFc3NlIG1vdmltZW50byBjb25zb2xpZG91IG8gQnJhc2lsIGVudHJlIG9zIHBhw61zZXMgZW1lcmdlbnRlcyBjb20gbWFpb3Igdm9sdW1lIGRlIHJlc2VydmFzIGludGVybmFjaW9uYWlzLCByZWZvcsOnYW5kbyBhIGNyZWRpYmlsaWRhZGUgZGEgcG9sw610aWNhIG1hY3JvZWNvbsO0bWljYSBlIGEgcGVyY2Vww6fDo28gZGUgc29saWRleiBwZXJhbnRlIGludmVzdGlkb3JlcyBlc3RyYW5nZWlyb3MuDQoNCk8gZ3LDoWZpY28gbW9zdHJhIGEgZXZvbHXDp8OjbyBkYXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgZW0gY29tcGFyYcOnw6NvIGNvbSBhIGJhbGFuw6dhIGNvbWVyY2lhbCBlbnRyZSBkZXplbWJybyBkZSAyMDAwIGUgc2V0ZW1icm8gZGUgMjAyNS4gTm90YS1zZSBxdWUsIG5vcyBwcmltZWlyb3MgYW5vcyBkYSBzw6lyaWUsIG8gbsOtdmVsIGRlIHJlc2VydmFzIGVyYSBzaWduaWZpY2F0aXZhbWVudGUgaW5mZXJpb3IgYW8gc2FsZG8gY29tZXJjaWFsLCByZWZsZXRpbmRvIGEgbGltaXRhZGEgY2FwYWNpZGFkZSBkZSBhY3VtdWxhw6fDo28gZXh0ZXJuYSBuYXF1ZWxlIHBlcsOtb2RvLiBBIHBhcnRpciBkZSBtZWFkb3MgZGEgZMOpY2FkYSBkZSAyMDAwLCBvIGF2YW7Dp28gZXhwcmVzc2l2byBkYXMgZXhwb3J0YcOnw7VlcyBlIG9zIHNhbGRvcyBwb3NpdGl2b3MgZGEgYmFsYW7Dp2EgY29tZXJjaWFsIGltcHVsc2lvbmFyYW0gbyBjcmVzY2ltZW50byBkYXMgcmVzZXJ2YXMsIHF1ZSB1bHRyYXBhc3NhbSBhIGJhbGFuw6dhIGNvbWVyY2lhbCBwb3Igdm9sdGEgZG8gZmluYWwgZG8gYW5vIGRlIDIwMTAuIERlc2RlIGVudMOjbywgbyBlc3RvcXVlIGRlIHJlc2VydmFzIG1hbnTDqW0gdHJhamV0w7NyaWEgc3VwZXJpb3IsIGV2aWRlbmNpYW5kbyBvIGFtYWR1cmVjaW1lbnRvIGRhIHBvc2nDp8OjbyBleHRlcm5hIGRvIHBhw61zIGUgbyB1c28gZG9zIGdhbmhvcyBjb21lcmNpYWlzIGNvbW8gaW5zdHJ1bWVudG8gZGUgZm9ydGFsZWNpbWVudG8gZGFzIGNvbnRhcyBleHRlcm5hcy4NCg0KIA0KIyAqKlJlbGHDp8OjbyBjb20gbyBDw6JtYmlvKioNCmBgYHtyfQ0KIyAtLS0gUGFjb3RlcyAtLS0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShzdHJpbmdyKQ0KDQojIC0tLSBMZXIgZGFkb3MgLS0tDQpkYWRvc19yYXcgPC0gcmVhZF9kZWxpbSgNCiAgIkNhbWJpb3hyZXNlcnZhLmNzdiIsDQogIGRlbGltID0gIjsiLA0KICBsb2NhbGUgPSBsb2NhbGUoZW5jb2RpbmcgPSAibGF0aW4xIikNCikNCg0KIyAtLS0gUHJvY2Vzc2FyIGRhZG9zIC0tLQ0KZGFkb3NfcHJvY2Vzc2VkIDwtIGRhZG9zX3JhdyAlPiUNCiAgcmVuYW1lKA0KICAgIERhdGEgPSAxLCANCiAgICBSZXNlcnZhcyA9IDIsDQogICAgQ2FtYmlvX1JlYWwgPSAzDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICAjIExpbXBhciB2YWxvcmVzIG51bcOpcmljb3MNCiAgICBSZXNlcnZhcyA9IGdzdWIoIlxcLiIsICIiLCB0cmltd3MoUmVzZXJ2YXMpKSwgICMgUmVtb3ZlIHBvbnRvcyBkZSBtaWxoYXINCiAgICBSZXNlcnZhcyA9IGdzdWIoIiwiLCAiLiIsIFJlc2VydmFzKSwgICAgICAgICAgICAjIFRyb2NhIHbDrXJndWxhIHBvciBwb250bw0KICAgIFJlc2VydmFzID0gYXMubnVtZXJpYyhSZXNlcnZhcyksDQogICAgDQogICAgQ2FtYmlvX1JlYWwgPSBnc3ViKCIsIiwgIi4iLCB0cmltd3MoQ2FtYmlvX1JlYWwpKSwNCiAgICBDYW1iaW9fUmVhbCA9IGFzLm51bWVyaWMoQ2FtYmlvX1JlYWwpLA0KICAgIA0KICAgICMgUHJvY2Vzc2FyIGRhdGFzDQogICAgRGF0YSA9IHBhc3RlMCgiMDEvIiwgRGF0YSksDQogICAgRGF0YSA9IGRteShEYXRhLCBsb2NhbGUgPSAicHRfQlIudXRmOCIpLA0KICAgIERhdGEgPSBmbG9vcl9kYXRlKERhdGEsICJtb250aCIpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEoUmVzZXJ2YXMpICYgIWlzLm5hKENhbWJpb19SZWFsKSkgJT4lDQogIGFycmFuZ2UoRGF0YSkgJT4lDQogICMgUmVtb3ZlciBvdXRsaWVycyBleHRyZW1vcyAob3BjaW9uYWwpDQogIGZpbHRlcigNCiAgICBSZXNlcnZhcyA+IHF1YW50aWxlKFJlc2VydmFzLCAwLjAxLCBuYS5ybSA9IFRSVUUpLA0KICAgIFJlc2VydmFzIDwgcXVhbnRpbGUoUmVzZXJ2YXMsIDAuOTksIG5hLnJtID0gVFJVRSkNCiAgKQ0KDQojIC0tLSBDYWxjdWxhciBjb3JyZWxhw6fDo28gLS0tDQpjb3JyZWxhY2FvIDwtIGNvcihkYWRvc19wcm9jZXNzZWQkUmVzZXJ2YXMsIGRhZG9zX3Byb2Nlc3NlZCRDYW1iaW9fUmVhbCwgDQogICAgICAgICAgICAgICAgICB1c2UgPSAiY29tcGxldGUub2JzIikNCg0KIyAtLS0gQ29udmVydGVyIHBhcmEgZm9ybWF0byBIaWdoY2hhcnRlciAoc8OpcmllcyB0ZW1wb3JhaXMpIC0tLQ0KcmVzZXJ2YXNfaGMgPC0gZGFkb3NfcHJvY2Vzc2VkICU+JQ0KICBtdXRhdGUoRGF0YSA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChEYXRhKSkgJT4lDQogIHNlbGVjdChEYXRhLCBSZXNlcnZhcykNCg0KY2FtYmlvX2hjIDwtIGRhZG9zX3Byb2Nlc3NlZCAlPiUNCiAgbXV0YXRlKERhdGEgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkpICU+JQ0KICBzZWxlY3QoRGF0YSwgQ2FtYmlvX1JlYWwpDQoNCiMgLS0tIEdSw4FGSUNPOiBTw6lyaWVzIFRlbXBvcmFpcyAtLS0NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKHJlc2VydmFzX2hjKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgKFVTJCBtaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMDMzNjYiLA0KICAgIHlBeGlzID0gMCwNCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihjYW1iaW9faGMpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJUYXhhIFJlYWwgZGUgQ8OibWJpbyAoSVBDQSwgw41uZGljZSkiLA0KICAgIGNvbG9yID0gIiNGRUI3MTIiLA0KICAgIHlBeGlzID0gMSwNCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlJlc2VydmFzIEludGVybmFjaW9uYWlzIGUgVGF4YSBSZWFsIGRlIEPDom1iaW8gKDIwMjDigJMyMDI1KSINCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAzNTQ2IGUgMTE3NTMpIg0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJSZXNlcnZhcyAoVVMkIG1pbGjDtWVzKSIsIA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzAwMzM2NiIpDQogICAgICApLA0KICAgICAgbGFiZWxzID0gbGlzdCgNCiAgICAgICAgZm9ybWF0ID0gInt2YWx1ZTosLjBmfSIsIA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzAwMzM2NiIpDQogICAgICApLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJDw6JtYmlvIFJlYWwgKMONbmRpY2UpIiwgDQogICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjRkVCNzEyIikNCiAgICAgICksDQogICAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgICBmb3JtYXQgPSAie3ZhbHVlOi4xZn0iLCANCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiNGRUI3MTIiKQ0KICAgICAgKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGNvbm5lY3ROdWxscyA9IEZBTFNFLA0KICAgICAgZ2FwU2l6ZSA9IDUsDQogICAgICB0dXJib1RocmVzaG9sZCA9IDANCiAgICApDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMg0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiLA0KICAgIGl0ZW1TdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTFweCIpDQogICkgJT4lDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsIA0KICAgIHRleHQgPSAiRm9udGU6IEJDQiB8IEdyw6FmaWNvOiBFbGFib3Jhw6fDo28gUHLDs3ByaWEiDQogICkgJT4lDQogIGhjX2NoYXJ0KGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIikNCmBgYA0KQXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgZXhlcmNlbSBwYXBlbCBmdW5kYW1lbnRhbCBuYSBjb250ZW7Dp8OjbyBkYSB2b2xhdGlsaWRhZGUgY2FtYmlhbCwgZnVuY2lvbmFuZG8gY29tbyB1bSBtZWNhbmlzbW8gZGUgcHJvdGXDp8OjbyBlbSBtb21lbnRvcyBkZSBmdWdhIGRlIGNhcGl0YWlzIG91IGRlc3ZhbG9yaXphw6fDo28gZG8gcmVhbC4gQW8gcGVybWl0aXIgcXVlIG8gQmFuY28gQ2VudHJhbCBhdHVlIG5vIG1lcmNhZG8gZGUgY8OibWJpbyBwb3IgbWVpbyBkYSB2ZW5kYSBkZSBkw7NsYXJlcyBvdSBkZSBpbnN0cnVtZW50b3MgZGVyaXZhdGl2b3MsIGFzIHJlc2VydmFzIGFqdWRhbSBhIHN1YXZpemFyIG1vdmltZW50b3MgYnJ1c2NvcyBkYSB0YXhhIGRlIGPDom1iaW8gZSBhIHByZXNlcnZhciBhIGVzdGFiaWxpZGFkZSBmaW5hbmNlaXJhLiBFc3NhIGZ1bsOnw6NvIMOpIGVzcGVjaWFsbWVudGUgcmVsZXZhbnRlIGVtIGVjb25vbWlhcyBlbWVyZ2VudGVzLCBuYXMgcXVhaXMgY2hvcXVlcyBleHRlcm5vcyAoY29tbyBtdWRhbsOnYXMgbmFzIGNvbmRpw6fDtWVzIGRlIGxpcXVpZGV6IGdsb2JhbCBvdSB2YXJpYcOnw7VlcyBubyBwcmXDp28gZGFzIGNvbW1vZGl0aWVzKSBjb3N0dW1hbSBnZXJhciBwcmVzc8O1ZXMgaW1lZGlhdGFzIHNvYnJlIGEgbW9lZGEgZG9tw6lzdGljYS4NCg0KTyBncsOhZmljbyAscXVlIHJlbGFjaW9uYSBhcyByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyDDoCB0YXhhIHJlYWwgZGUgY8OibWJpbyBlbnRyZSAyMDIwIGUgMjAyNSwgZXZpZGVuY2lhIGVzc2EgZGluw6JtaWNhLiBPYnNlcnZhLXNlIHVtYSB0cmFqZXTDs3JpYSBtYXJjYWRhIHBvciBvc2NpbGHDp8O1ZXMsIGNvbSBwZXLDrW9kb3MgZW0gcXVlIG8gY8OibWJpbyBzZSB2YWxvcml6YSBlIG91dHJvcyBlbSBxdWUgbyByZWFsIHNvZnJlIGRlc3ZhbG9yaXphw6fDo28gYWNlbnR1YWRhLCBlbnF1YW50byBhcyByZXNlcnZhcyBhcHJlc2VudGFtIGNvbXBvcnRhbWVudG8gbWFpcyBlc3TDoXZlbC4gRW0gZGV6ZW1icm8gZGUgMjAyMSwgcG9yIGV4ZW1wbG8sIG9zIGRvaXMgaW5kaWNhZG9yZXMgc2UgYXByb3hpbWFtLCBtYXMgYW8gbG9uZ28gZGEgc8OpcmllIGjDoSBtb21lbnRvcyBkZSBhZmFzdGFtZW50byBzaWduaWZpY2F0aXZvIOKAlCByZWZsZXRpbmRvIHRhbnRvIGEgdm9sYXRpbGlkYWRlIGRvIGPDom1iaW8gcXVhbnRvIG8gcGFwZWwgYW1vcnRlY2Vkb3IgZGFzIHJlc2VydmFzLiBObyBnZXJhbCwgbm90YS1zZSBxdWUsIG1lc21vIGNvbSB2YXJpYcOnw7VlcyBwb250dWFpcywgbyBuw612ZWwgZWxldmFkbyBkZSByZXNlcnZhcyBjb250cmlidWkgcGFyYSBjb250ZXIgbW92aW1lbnRvcyBtYWlzIGV4dHJlbW9zIGRhIHRheGEgZGUgY8OibWJpbywgcmVmb3LDp2FuZG8gYSBjYXBhY2lkYWRlIGRlIGRlZmVzYSBkYSBlY29ub21pYSBmcmVudGUgYSBjaG9xdWVzIGV4dGVybm9zLg0KDQoNCg0KIyAqKkZ1bsOnw6NvIGUgSW1wb3J0w6JuY2lhIEdsb2JhbCoqDQpgYGB7cn0NCiMgLS0tIFBhY290ZXMgLS0tDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KIyAtLS0gRGFkb3MgZGFzIFJlc2VydmFzIEludGVybmFjaW9uYWlzIChUcmFkaW5nIEVjb25vbWljcyAtIFNldC8yMDI1KSAtLS0NCmRhZG9zX3Jlc2VydmFzIDwtIGRhdGEuZnJhbWUoDQogIFBhaXMgPSBjKCJDaGluYSIsICJKYXDDo28iLCAiU3XDrcOnYSIsICLDjW5kaWEiLCAiUsO6c3NpYSIsICJBcsOhYmlhIFNhdWRpdGEiLA0KICAgICAgICAgICAiQ2luZ2FwdXJhIiwgIkNvcmVpYSBkbyBTdWwiLCAiQWxlbWFuaGEiLCAiQnJhc2lsIiwgIkhvbmcgS29uZyIsDQogICAgICAgICAgICJNw6l4aWNvIiwgIlRhaWzDom5kaWEiLCAiUmVpbm8gVW5pZG8iLCAiRnJhbsOnYSIsICJJdMOhbGlhIiwNCiAgICAgICAgICAgIkNhbmFkw6EiLCAiSW5kb27DqXNpYSIsICJFc3BhbmhhIiwgIkF1c3Ryw6FsaWEiLCAiVHVycXVpYSIsDQogICAgICAgICAgICJIb2xhbmRhIiwgIsOBZnJpY2EgZG8gU3VsIiwgIkFyZ2VudGluYSIsICJFc3RhZG9zIFVuaWRvcyIpLA0KICBSZXNlcnZhcyA9IGMoMzMzNjAwMCwgMTM0MTMwMCwgNzI2NzM5LCA2OTk2MDAsIDcxMzMwMSwgMTcxMjQ0NSwNCiAgICAgICAgICAgICAgIDUwODUzNCwgNDIyMDIwLCA0MzU2MDIsIDM1NTQyMCwgMzUyOTg4LCAyNDcyODksDQogICAgICAgICAgICAgICAyNDMwNjAsIDIxMTIxMCwgMzMwLCAzMzAsIDEyNjU2MCwgMTQ1NzAwLA0KICAgICAgICAgICAgICAgMTAzOTAyMSwgMTA3MTMyLCA4NzM0MCwgOTAwMzIsIDY5NzM5LCAzMjMyNywgMzYxNjEpLA0KICBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UNCikNCg0KIyAtLS0gT3JkZW5hciBwb3IgcmVzZXJ2YXMgKGRlY3Jlc2NlbnRlKSBlIHBlZ2FyIHRvcCAxNSAtLS0NCmRhZG9zX3RvcDE1IDwtIGRhZG9zX3Jlc2VydmFzICU+JQ0KICBhcnJhbmdlKGRlc2MoUmVzZXJ2YXMpKSAlPiUNCiAgaGVhZCgxNSkgJT4lDQogIG11dGF0ZSgNCiAgICBQYWlzID0gZmFjdG9yKFBhaXMsIGxldmVscyA9IHJldihQYWlzKSksICAjIEludmVydGVyIHBhcmEgZ3LDoWZpY28gaG9yaXpvbnRhbA0KICAgIENvbG9yID0gaWZlbHNlKFBhaXMgPT0gIkJyYXNpbCIsICIjRkVCNzEyIiwgIiMwMDMzNjYiKSAgIyBEZXN0YWNhciBCcmFzaWwNCiAgKQ0KaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KHR5cGUgPSAiYmFyIikgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiVG9wIDE1IFBhw61zZXMgY29tIE1haW9yZXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgKFVTJCBtaWxow7VlcykgKDIwMjUpIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFdlaWdodCA9ICJib2xkIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJGb250ZTogVHJhZGluZyBFY29ub21pY3MgKFNldGVtYnJvIDIwMjUpIg0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gYXMuY2hhcmFjdGVyKGRhZG9zX3RvcDE1JFBhaXMpLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIiIpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlJlc2VydmFzIEludGVybmFjaW9uYWlzIChVUyQgbWlsaMO1ZXMpIiksDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlOiwuMGZ9IikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZSgNCiAgICAgIGRhdGEuZnJhbWUoDQogICAgICAgIHkgPSBkYWRvc190b3AxNSRSZXNlcnZhcywNCiAgICAgICAgY29sb3IgPSBkYWRvc190b3AxNSRDb2xvcg0KICAgICAgKQ0KICAgICksDQogICAgbmFtZSA9ICJSZXNlcnZhcyIsDQogICAgY29sb3JCeVBvaW50ID0gVFJVRSwNCiAgICBkYXRhTGFiZWxzID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgZm9ybWF0ID0gIntwb2ludC55OiwuMGZ9IiwNCiAgICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgZm9udFdlaWdodCA9ICJub3JtYWwiKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICB2YWx1ZURlY2ltYWxzID0gMCwNCiAgICB2YWx1ZVByZWZpeCA9ICJVUyQgIiwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIgbWlsaMO1ZXMiDQogICkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IFRyYWRpbmcgRWNvbm9taWNzIHwgR3LDoWZpY286IEVsYWJvcmHDp8OjbyBQcsOzcHJpYSINCiAgKSAlPiUNCiAgaGNfY2hhcnQoYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiKQ0KDQoNCmBgYA0KQXMgcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgdGFtYsOpbSBjdW1wcmVtIHVtYSBmdW7Dp8OjbyBlc3RyYXTDqWdpY2EgYW8gZm9ydGFsZWNlciBhIGNvbmZpYW7Dp2EgaW50ZXJuYWNpb25hbCBlIHJlZHV6aXIgbyByaXNjby1wYcOtcy4gVW0gdm9sdW1lIGVsZXZhZG8gZGUgcmVzZXJ2YXMgdHJhbnNtaXRlIHNlZ3VyYW7Dp2EgYSBpbnZlc3RpZG9yZXMgZSBjcmVkb3JlcyBleHRlcm5vcywgcG9pcyBpbmRpY2EgcXVlIG8gcGHDrXMgdGVtIGNhcGFjaWRhZGUgZGUgaG9ucmFyIHNldXMgY29tcHJvbWlzc29zIGZpbmFuY2Vpcm9zIG1lc21vIGVtIGNlbsOhcmlvcyBkZSBlc3RyZXNzZSBnbG9iYWwuIEFsw6ltIGRpc3NvLCBhcyByZXNlcnZhcyBmdW5jaW9uYW0gY29tbyB1bSBjb2xjaMOjbyBkZSBsaXF1aWRleiBxdWUgcGVybWl0ZSBhbyBnb3Zlcm5vIHJlYWdpciByYXBpZGFtZW50ZSBlbSBjcmlzZXMgZXh0ZXJuYXMsIGV2aXRhbmRvIGVzY2Fzc2V6IGRlIGRpdmlzYXMsIGRlc3ZhbG9yaXphw6fDtWVzIGFicnVwdGFzIGRhIG1vZWRhIGUgaW5zdGFiaWxpZGFkZSBmaW5hbmNlaXJhLg0KDQpPIGdyw6FmaWNvIGEgc2VndWlyIGFwcmVzZW50YSBvIHJhbmtpbmcgZG9zIDE1IHBhw61zZXMgY29tIG1haW9yZXMgdm9sdW1lcyBkZSByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyBlbSAyMDI1IChhdMOpIHNldGVtYnJvKS4gT2JzZXJ2YS1zZSBxdWUgYSBDaGluYSBsaWRlcmEgY29tIGFtcGxhIG1hcmdlbSwgcmVmbGV0aW5kbyBkw6ljYWRhcyBkZSBzdXBlcsOhdml0cyBjb21lcmNpYWlzIGUgZm9ydGUgY29udHJvbGUgY2FtYmlhbC4gRW0gc2VndWlkYSBhcGFyZWNlbSBBcsOhYmlhIFNhdWRpdGEsIEphcMOjbywgRXNwYW5oYSwgU3XDrcOnYSBlIFLDunNzaWEsIGVjb25vbWlhcyBxdWUgYWN1bXVsYW0gcmVzZXJ2YXMgZWxldmFkYXMgcG9yIGRpZmVyZW50ZXMgbW90aXZvcywgZGVzZGUgYSBleHBvcnRhw6fDo28gZGUgcGV0csOzbGVvLCBubyBjYXNvIHNhdWRpdGEsIGF0w6kgYSBidXNjYSBwb3IgZXN0YWJpbGlkYWRlIGZpbmFuY2VpcmEgZSBwcm90ZcOnw6NvIGNvbnRyYSBjaG9xdWVzIGV4dGVybm9zLCBjb21vIG5vIGNhc28gamFwb27DqnMgZSBzdcOtw6dvLg0KDQpPIEJyYXNpbCB0YW1iw6ltIGZpZ3VyYSBlbnRyZSBhcyBwcmluY2lwYWlzIGVjb25vbWlhcyBlbWVyZ2VudGVzIGRvIHJhbmtpbmcsIHJlZm9yw6dhbmRvIHN1YSBwb3Npw6fDo28gZGUgcmVsYXRpdmEgc29saWRleiBleHRlcm5hLiBFc3NlIHBhdGFtYXIgZGUgcmVzZXJ2YXMgb2ZlcmVjZSBpbXBvcnRhbnRlIHN1c3RlbnRhw6fDo28gw6AgY3JlZGliaWxpZGFkZSBkbyBwYcOtcywgY29udHJpYnVpbmRvIHBhcmEgbWFudGVyIG8gcmlzY28gc29iZXJhbm8gZW0gbsOtdmVpcyBjb250cm9sYWRvcyBlIGdhcmFudGlyIGVzdGFiaWxpZGFkZSBtYWNyb2Vjb27DtG1pY2EgbWVzbW8gZW0gcGVyw61vZG9zIGRlIGluY2VydGV6YSBpbnRlcm5hY2lvbmFsLg0KDQoNCg0KIyAqKkN1c3RvcyBkZSBNYW51dGVuw6fDo28gZSBJbXBhY3RvcyBuYSBQb2zDrXRpY2EgRWNvbsO0bWljYSoqDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShzdHJpbmdyKQ0KDQojIC0tLSBMZXIgZGFkb3MgZGFzIHJlc2VydmFzIGJyYXNpbGVpcmFzIC0tLQ0KZGFkb3NfcmF3IDwtIHJlYWRfZGVsaW0oDQogICJDdXN0b2Zpc2NhbC5jc3YiLA0KICBkZWxpbSA9ICI7IiwNCiAgbG9jYWxlID0gbG9jYWxlKGVuY29kaW5nID0gImxhdGluMSIsIGRlY2ltYWxfbWFyayA9ICIuIikNCikNCg0KIyAtLS0gUHJvY2Vzc2FyIGRhZG9zIGJyYXNpbGVpcm9zIC0tLQ0KZGFkb3NfcHJvY2Vzc2VkIDwtIGRhZG9zX3JhdyAlPiUNCiAgcmVuYW1lKA0KICAgIERhdGEgPSAxLA0KICAgIFJlc2VydmFzID0gMiwNCiAgICBDYW1iaW8gPSAzLA0KICAgIFNlbGljID0gNA0KICApICU+JQ0KICBtdXRhdGUoDQogICAgIyBMaW1wYXIgdmFsb3JlcyBudW3DqXJpY29zIGRhcyByZXNlcnZhcw0KICAgIFJlc2VydmFzID0gZ3N1YigiXFwuIiwgIiIsIHRyaW13cyhSZXNlcnZhcykpLA0KICAgIFJlc2VydmFzID0gZ3N1YigiLCIsICIuIiwgUmVzZXJ2YXMpLA0KICAgIFJlc2VydmFzID0gYXMubnVtZXJpYyhSZXNlcnZhcyksDQogICAgDQogICAgIyBMaW1wYXIgY8OibWJpbyAodHJvY2FyIHbDrXJndWxhIHBvciBwb250bykNCiAgICBDYW1iaW8gPSBnc3ViKCIsIiwgIi4iLCB0cmltd3MoQ2FtYmlvKSksDQogICAgQ2FtYmlvID0gYXMubnVtZXJpYyhDYW1iaW8pLA0KICAgIA0KICAgICMgTGltcGFyIFNlbGljDQogICAgU2VsaWMgPSBnc3ViKCIsIiwgIi4iLCB0cmltd3MoU2VsaWMpKSwNCiAgICBTZWxpYyA9IGFzLm51bWVyaWMoU2VsaWMpLA0KICAgIA0KICAgICMgUHJvY2Vzc2FyIGRhdGFzDQogICAgRGF0YSA9IHBhc3RlMCgiMDEvIiwgRGF0YSksDQogICAgRGF0YSA9IGRteShEYXRhLCBsb2NhbGUgPSAicHRfQlIudXRmOCIpLA0KICAgIERhdGEgPSBmbG9vcl9kYXRlKERhdGEsICJtb250aCIpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEoUmVzZXJ2YXMpICYgIWlzLm5hKENhbWJpbykgJiAhaXMubmEoU2VsaWMpKQ0KDQojIC0tLSBDcmlhciB0YWJlbGEgY29tIGRhZG9zIEZFREZVTkRTICh0YXhhIGRlIGp1cm9zIEVVQSkgLS0tDQojIC0tLSBDcmlhciB0YWJlbGEgY29tIGRhZG9zIEdTMTAgKHJlbmRpbWVudG8gZGUgVHJlYXN1cnkgMTBZLCBzdWJzdGl0dWluZG8gRkVERlVORFMpIC0tLQ0KZmVkZnVuZHNfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBEYXRhID0gYXMuRGF0ZShjKA0KICAgICIyMDEwLTA0LTAxIiwgIjIwMTAtMDUtMDEiLCAiMjAxMC0wNi0wMSIsICIyMDEwLTA3LTAxIiwgIjIwMTAtMDgtMDEiLCAiMjAxMC0wOS0wMSIsDQogICAgIjIwMTAtMTAtMDEiLCAiMjAxMC0xMS0wMSIsICIyMDEwLTEyLTAxIiwgIjIwMTEtMDEtMDEiLCAiMjAxMS0wMi0wMSIsICIyMDExLTAzLTAxIiwNCiAgICAiMjAxMS0wNC0wMSIsICIyMDExLTA1LTAxIiwgIjIwMTEtMDYtMDEiLCAiMjAxMS0wNy0wMSIsICIyMDExLTA4LTAxIiwgIjIwMTEtMDktMDEiLA0KICAgICIyMDExLTEwLTAxIiwgIjIwMTEtMTEtMDEiLCAiMjAxMS0xMi0wMSIsICIyMDEyLTAxLTAxIiwgIjIwMTItMDItMDEiLCAiMjAxMi0wMy0wMSIsDQogICAgIjIwMTItMDQtMDEiLCAiMjAxMi0wNS0wMSIsICIyMDEyLTA2LTAxIiwgIjIwMTItMDctMDEiLCAiMjAxMi0wOC0wMSIsICIyMDEyLTA5LTAxIiwNCiAgICAiMjAxMi0xMC0wMSIsICIyMDEyLTExLTAxIiwgIjIwMTItMTItMDEiLCAiMjAxMy0wMS0wMSIsICIyMDEzLTAyLTAxIiwgIjIwMTMtMDMtMDEiLA0KICAgICIyMDEzLTA0LTAxIiwgIjIwMTMtMDUtMDEiLCAiMjAxMy0wNi0wMSIsICIyMDEzLTA3LTAxIiwgIjIwMTMtMDgtMDEiLCAiMjAxMy0wOS0wMSIsDQogICAgIjIwMTMtMTAtMDEiLCAiMjAxMy0xMS0wMSIsICIyMDEzLTEyLTAxIiwgIjIwMTQtMDEtMDEiLCAiMjAxNC0wMi0wMSIsICIyMDE0LTAzLTAxIiwNCiAgICAiMjAxNC0wNC0wMSIsICIyMDE0LTA1LTAxIiwgIjIwMTQtMDYtMDEiLCAiMjAxNC0wNy0wMSIsICIyMDE0LTA4LTAxIiwgIjIwMTQtMDktMDEiLA0KICAgICIyMDE0LTEwLTAxIiwgIjIwMTQtMTEtMDEiLCAiMjAxNC0xMi0wMSIsICIyMDE1LTAxLTAxIiwgIjIwMTUtMDItMDEiLCAiMjAxNS0wMy0wMSIsDQogICAgIjIwMTUtMDQtMDEiLCAiMjAxNS0wNS0wMSIsICIyMDE1LTA2LTAxIiwgIjIwMTUtMDctMDEiLCAiMjAxNS0wOC0wMSIsICIyMDE1LTA5LTAxIiwNCiAgICAiMjAxNS0xMC0wMSIsICIyMDE1LTExLTAxIiwgIjIwMTUtMTItMDEiLCAiMjAxNi0wMS0wMSIsICIyMDE2LTAyLTAxIiwgIjIwMTYtMDMtMDEiLA0KICAgICIyMDE2LTA0LTAxIiwgIjIwMTYtMDUtMDEiLCAiMjAxNi0wNi0wMSIsICIyMDE2LTA3LTAxIiwgIjIwMTYtMDgtMDEiLCAiMjAxNi0wOS0wMSIsDQogICAgIjIwMTYtMTAtMDEiLCAiMjAxNi0xMS0wMSIsICIyMDE2LTEyLTAxIiwgIjIwMTctMDEtMDEiLCAiMjAxNy0wMi0wMSIsICIyMDE3LTAzLTAxIiwNCiAgICAiMjAxNy0wNC0wMSIsICIyMDE3LTA1LTAxIiwgIjIwMTctMDYtMDEiLCAiMjAxNy0wNy0wMSIsICIyMDE3LTA4LTAxIiwgIjIwMTctMDktMDEiLA0KICAgICIyMDE3LTEwLTAxIiwgIjIwMTctMTEtMDEiLCAiMjAxNy0xMi0wMSIsICIyMDE4LTAxLTAxIiwgIjIwMTgtMDItMDEiLCAiMjAxOC0wMy0wMSIsDQogICAgIjIwMTgtMDQtMDEiLCAiMjAxOC0wNS0wMSIsICIyMDE4LTA2LTAxIiwgIjIwMTgtMDctMDEiLCAiMjAxOC0wOC0wMSIsICIyMDE4LTA5LTAxIiwNCiAgICAiMjAxOC0xMC0wMSIsICIyMDE4LTExLTAxIiwgIjIwMTgtMTItMDEiLCAiMjAxOS0wMS0wMSIsICIyMDE5LTAyLTAxIiwgIjIwMTktMDMtMDEiLA0KICAgICIyMDE5LTA0LTAxIiwgIjIwMTktMDUtMDEiLCAiMjAxOS0wNi0wMSIsICIyMDE5LTA3LTAxIiwgIjIwMTktMDgtMDEiLCAiMjAxOS0wOS0wMSIsDQogICAgIjIwMTktMTAtMDEiLCAiMjAxOS0xMS0wMSIsICIyMDE5LTEyLTAxIiwgIjIwMjAtMDEtMDEiLCAiMjAyMC0wMi0wMSIsICIyMDIwLTAzLTAxIiwNCiAgICAiMjAyMC0wNC0wMSIsICIyMDIwLTA1LTAxIiwgIjIwMjAtMDYtMDEiLCAiMjAyMC0wNy0wMSIsICIyMDIwLTA4LTAxIiwgIjIwMjAtMDktMDEiLA0KICAgICIyMDIwLTEwLTAxIiwgIjIwMjAtMTEtMDEiLCAiMjAyMC0xMi0wMSIsICIyMDIxLTAxLTAxIiwgIjIwMjEtMDItMDEiLCAiMjAyMS0wMy0wMSIsDQogICAgIjIwMjEtMDQtMDEiLCAiMjAyMS0wNS0wMSIsICIyMDIxLTA2LTAxIiwgIjIwMjEtMDctMDEiLCAiMjAyMS0wOC0wMSIsICIyMDIxLTA5LTAxIiwNCiAgICAiMjAyMS0xMC0wMSIsICIyMDIxLTExLTAxIiwgIjIwMjEtMTItMDEiLCAiMjAyMi0wMS0wMSIsICIyMDIyLTAyLTAxIiwgIjIwMjItMDMtMDEiLA0KICAgICIyMDIyLTA0LTAxIiwgIjIwMjItMDUtMDEiLCAiMjAyMi0wNi0wMSIsICIyMDIyLTA3LTAxIiwgIjIwMjItMDgtMDEiLCAiMjAyMi0wOS0wMSIsDQogICAgIjIwMjItMTAtMDEiLCAiMjAyMi0xMS0wMSIsICIyMDIyLTEyLTAxIiwgIjIwMjMtMDEtMDEiLCAiMjAyMy0wMi0wMSIsICIyMDIzLTAzLTAxIiwNCiAgICAiMjAyMy0wNC0wMSIsICIyMDIzLTA1LTAxIiwgIjIwMjMtMDYtMDEiLCAiMjAyMy0wNy0wMSIsICIyMDIzLTA4LTAxIiwgIjIwMjMtMDktMDEiLA0KICAgICIyMDIzLTEwLTAxIiwgIjIwMjMtMTEtMDEiLCAiMjAyMy0xMi0wMSIsICIyMDI0LTAxLTAxIiwgIjIwMjQtMDItMDEiLCAiMjAyNC0wMy0wMSIsDQogICAgIjIwMjQtMDQtMDEiLCAiMjAyNC0wNS0wMSIsICIyMDI0LTA2LTAxIiwgIjIwMjQtMDctMDEiLCAiMjAyNC0wOC0wMSIsICIyMDI0LTA5LTAxIiwNCiAgICAiMjAyNC0xMC0wMSIsICIyMDI0LTExLTAxIiwgIjIwMjQtMTItMDEiLCAiMjAyNS0wMS0wMSIsICIyMDI1LTAyLTAxIiwgIjIwMjUtMDMtMDEiLA0KICAgICIyMDI1LTA0LTAxIiwgIjIwMjUtMDUtMDEiLCAiMjAyNS0wNi0wMSIsICIyMDI1LTA3LTAxIiwgIjIwMjUtMDgtMDEiLCAiMjAyNS0wOS0wMSINCiAgKSksDQogIEZFREZVTkRTID0gYygNCiAgICAzLjg1LCAzLjQyLCAzLjIsIDMuMDEsIDIuNywgMi42NSwNCiAgICAyLjU0LCAyLjc2LCAzLjI5LCAzLjM5LCAzLjU4LCAzLjQxLA0KICAgIDMuNDYsIDMuMTcsIDMuMCwgMy4wLCAyLjMsIDEuOTgsDQogICAgMi4xNSwgMi4wMSwgMS45OCwgMS45NywgMS45NywgMi4xNywNCiAgICAyLjA1LCAxLjgsIDEuNjIsIDEuNTMsIDEuNjgsIDEuNzIsDQogICAgMS43NSwgMS42NSwgMS43MiwgMS45MSwgMS45OCwgMS45NiwNCiAgICAxLjc2LCAxLjkzLCAyLjMsIDIuNTgsIDIuNzQsIDIuODEsDQogICAgMi42MiwgMi43MiwgMi45LCAyLjg2LCAyLjcxLCAyLjcyLA0KICAgIDIuNzEsIDIuNTYsIDIuNiwgMi41NCwgMi40MiwgMi41MywNCiAgICAyLjMsIDIuMzMsIDIuMjEsIDEuODgsIDEuOTgsIDIuMDQsDQogICAgMS45NCwgMi4yLCAyLjM2LCAyLjMyLCAyLjE3LCAyLjE3LA0KICAgIDIuMDcsIDIuMjYsIDIuMjQsIDIuMDksIDEuNzgsIDEuODksDQogICAgMS44MSwgMS44MSwgMS42NCwgMS41LCAxLjU2LCAxLjYzLA0KICAgIDEuNzYsIDIuMTQsIDIuNDksIDIuNDMsIDIuNDIsIDIuNDgsDQogICAgMi4zLCAyLjMsIDIuMTksIDIuMzIsIDIuMjEsIDIuMiwNCiAgICAyLjM2LCAyLjM1LCAyLjQsIDIuNTgsIDIuODYsIDIuODQsDQogICAgMi44NywgMi45OCwgMi45MSwgMi44OSwgMi44OSwgMy4wLA0KICAgIDMuMTUsIDMuMTIsIDIuODMsIDIuNzEsIDIuNjgsIDIuNTcsDQogICAgMi41MywgMi40LCAyLjA3LCAyLjA2LCAxLjYzLCAxLjcsDQogICAgMS43MSwgMS44MSwgMS44NiwgMS43NiwgMS41LCAwLjg3LA0KICAgIDAuNjYsIDAuNjcsIDAuNzMsIDAuNjIsIDAuNjUsIDAuNjgsDQogICAgMC43OSwgMC44NywgMC45MywgMS4wOCwgMS4yNiwgMS42MSwNCiAgICAxLjY0LCAxLjYyLCAxLjUyLCAxLjMyLCAxLjI4LCAxLjM3LA0KICAgIDEuNTgsIDEuNTYsIDEuNDcsIDEuNzYsIDEuOTMsIDIuMTMsDQogICAgMi43NSwgMi45LCAzLjE0LCAyLjksIDIuOSwgMy41MiwNCiAgICAzLjk4LCAzLjg5LCAzLjYyLCAzLjUzLCAzLjc1LCAzLjY2LA0KICAgIDMuNDYsIDMuNTcsIDMuNzUsIDMuOSwgNC4xNywgNC4zOCwNCiAgICA0LjgsIDQuNSwgNC4wMiwgNC4wNiwgNC4yMSwgNC4yMSwNCiAgICA0LjU0LCA0LjQ4LCA0LjMxLCA0LjI1LCAzLjg3LCAzLjcyLA0KICAgIDQuMSwgNC4zNiwgNC4zOSwgNC42MywgNC40NSwgNC4yOCwNCiAgICA0LjI4LCA0LjQyLCA0LjM4LCA0LjM5LCA0LjI2LCA0LjEyDQogICkNCikNCiMgLS0tIEp1bnRhciBkYWRvcyBicmFzaWxlaXJvcyBjb20gRkVERlVORFMgLS0tDQpkYWRvc19jb21wbGV0b3MgPC0gZGFkb3NfcHJvY2Vzc2VkICU+JQ0KICBsZWZ0X2pvaW4oZmVkZnVuZHNfZGF0YSwgYnkgPSAiRGF0YSIpICU+JQ0KICBtdXRhdGUoDQogICAgIyBDYWxjdWxhciBkaWZlcmVuY2lhbCAoY3VzdG8gZmlzY2FsKQ0KICAgIERpZmVyZW5jaWFsID0gU2VsaWMgLSBGRURGVU5EUw0KICApICU+JQ0KICBmaWx0ZXIoIWlzLm5hKEZFREZVTkRTKSkNCg0KIyAtLS0gQ29udmVydGVyIHBhcmEgZm9ybWF0byBIaWdoY2hhcnRlciAtLS0NCnNlbGljX2hjIDwtIGRhZG9zX2NvbXBsZXRvcyAlPiUNCiAgbXV0YXRlKERhdGEgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkpICU+JQ0KICBzZWxlY3QoRGF0YSwgU2VsaWMpDQoNCmZlZGZ1bmRzX2hjIDwtIGRhZG9zX2NvbXBsZXRvcyAlPiUNCiAgbXV0YXRlKERhdGEgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkpICU+JQ0KICBzZWxlY3QoRGF0YSwgRkVERlVORFMpDQoNCmRpZmVyZW5jaWFsX2hjIDwtIGRhZG9zX2NvbXBsZXRvcyAlPiUNCiAgbXV0YXRlKERhdGEgPSBkYXRldGltZV90b190aW1lc3RhbXAoRGF0YSkpICU+JQ0KICBzZWxlY3QoRGF0YSwgRGlmZXJlbmNpYWwpDQoNCiMgLS0tIEdyw6FmaWNvIGRlIExpbmhhcyBjb20gw4FyZWEgLS0tDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihzZWxpY19oYyksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlRheGEgU2VsaWMgKGN1c3RvKSIsDQogICAgY29sb3IgPSAiIzAwMzM2NiIsDQogICAgeUF4aXMgPSAwLA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGZlZGZ1bmRzX2hjKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiVHJlYXN1cnkxMFkgKHJlY2VpdGEpIiwNCiAgICBjb2xvciA9ICIjMDBCMDUwIiwNCiAgICB5QXhpcyA9IDAsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGlmZXJlbmNpYWxfaGMpLA0KICAgIHR5cGUgPSAiYXJlYSIsDQogICAgbmFtZSA9ICJEaWZlcmVuY2lhbCAoY3VzdG8gZmlzY2FsKSIsDQogICAgY29sb3IgPSAiI0ZFQjcxMiIsDQogICAgZmlsbE9wYWNpdHkgPSAwLjMsDQogICAgeUF4aXMgPSAwLA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBGQUxTRSwNCiAgICAgIHN5bWJvbCA9ICJsaW5lIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJDdXN0byBGaXNjYWwgZGFzIFJlc2VydmFzIEludGVybmFjaW9uYWlzICgyMDEw4oCTMjAyNSkiDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRGlmZXJlbmNpYWwgZW50cmUgVGF4YSBTZWxpYyBlIFJlbmRpbWVudG8gRXh0ZXJubyAoRVVBKSINCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVGF4YSBkZSBKdXJvcyAoJSBhLmEuKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZTouMWZ9JSIpLA0KICAgIG9wcG9zaXRlID0gRkFMU0UNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUgYS5hLiINCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjExcHgiKQ0KICApICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJDQiAoU0dTKSBlIEZSRUQgKEdTMTApIHwgR3LDoWZpY286IEVsYWJvcmHDp8OjbyBQcsOzcHJpYSINCiAgKSAlPiUNCiAgaGNfY2hhcnQoYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiKQ0KYGBgDQpBcyByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyBzw6NvIGZ1bmRhbWVudGFpcyBwYXJhIGEgZXN0YWJpbGlkYWRlIG1hY3JvZWNvbsO0bWljYSBicmFzaWxlaXJhLCBtYXMgc3VhIG1hbnV0ZW7Dp8OjbyBpbXBsaWNhIGN1c3RvcyBmaXNjYWlzIHNpZ25pZmljYXRpdm9zLiBFc3RlIGN1c3RvIGRlY29ycmUgZG8gZGlmZXJlbmNpYWwgZW50cmUgYSB0YXhhIFNlbGljLCBxdWUgbyBwYcOtcyBwYWdhIHBhcmEgZmluYW5jaWFyIHN1YSBkw612aWRhIGludGVybmEsIGUgbyByZW5kaW1lbnRvIGRhcyByZXNlcnZhcyBhcGxpY2FkYXMgZW0gYXRpdm9zIGV4dGVybm9zIGRlIGJhaXhvIHJpc2NvLCBwcmluY2lwYWxtZW50ZSB0w610dWxvcyBkbyBUZXNvdXJvIEFtZXJpY2Fuby4NCg0KTyBtZWNhbmlzbW8gZnVuY2lvbmEgYXNzaW06IHF1YW5kbyBvIEJhbmNvIENlbnRyYWwgY29tcHJhIGTDs2xhcmVzIG5vIG1lcmNhZG8gcGFnYW5kbyBlbSByZWFpcywgYXVtZW50YSBhIG1vZWRhIGVtIGNpcmN1bGHDp8OjbywgbyBxdWUgcG9kZXJpYSBwcmVzc2lvbmFyIGEgaW5mbGHDp8Ojby4gUGFyYSBuZXV0cmFsaXphciBlc3NlIGVmZWl0bywgZW1pdGUgdMOtdHVsb3MgcMO6YmxpY29zIHF1ZSBwYWdhbSBhIFNlbGljIHBhcmEgcmV0aXJhciBlc3NlcyByZWFpcyBkZSBjaXJjdWxhw6fDo28sIHByb2Nlc3NvIGNoYW1hZG8gZXN0ZXJpbGl6YcOnw6NvLiBDb21vIGVzc2VzIHTDrXR1bG9zIHBhZ2FtIGp1cm9zIHNpZ25pZmljYXRpdmFtZW50ZSBzdXBlcmlvcmVzIGFvIHJlbmRpbWVudG8gZGFzIHJlc2VydmFzIG5vIGV4dGVyaW9yLCBzdXJnZSBvIGN1c3RvIGZpc2NhbC4NCg0KRW50cmUgMjAxMCBlIDIwMjUsIG8gY3VzdG8gZmlzY2FsIGRhcyByZXNlcnZhcyB2YXJpb3UgY29uZm9ybWUgbyBkaWZlcmVuY2lhbCBTZWxpY+KAk1RyZWFzdXJ5IDEwWS4gRW50cmUgMjAxNSBlIDIwMTcsIGNvbSBTZWxpYyBhY2ltYSBkZSAxMyUgZSBUcmVhc3VyeSBlbSAyIGEgMiw2JSwgbyBjdXN0byBmb2kgZGUgUiQgMTUwIGEgMTgwIGJpbGjDtWVzLiBEdXJhbnRlIGEgcGFuZGVtaWEgKDIwMjDigJMyMDIxKSwgY29tIFNlbGljIGVtIDEsOSUgZSBUcmVhc3VyeSAwLDUgYSAxLDclLCBjYWl1IHBhcmEgUiQgMTUgYSA0MCBiaWxow7Vlcy4gRW50cmUgMjAyMiBlIDIwMjUsIGNvbSBTZWxpYyBkZSAxMCw1IGEgMTQsOSUgZSBUcmVhc3VyeSAxLDUgYSA0LDYlLCBvcyBjdXN0b3MgZmljYXJhbSBlbnRyZSBSJCA4MCBhIDE2MCBiaWxow7VlcywgbW9zdHJhbmRvIHF1ZSBvIHByaW5jaXBhbCBkZXRlcm1pbmFudGUgw6kgbyBkaWZlcmVuY2lhbCBlbnRyZSBhcyB0YXhhcy4NCg0KSMOhLCBwb3J0YW50bywgdW0gdHJhZGUtb2ZmIGV2aWRlbnRlOiBhcyByZXNlcnZhcyBwcm90ZWdlbSBjb250cmEgY3Jpc2VzIGNhbWJpYWlzLCBtYXMgbyBjdXN0byBmaXNjYWwgcG9kZXJpYSBmaW5hbmNpYXIgaW52ZXN0aW1lbnRvcyBww7pibGljb3Mgb3UgcmVkdcOnw6NvIGRhIGTDrXZpZGEuIEEgcGVyc3BlY3RpdmEgZnV0dXJhIGRlc3NlIGN1c3RvIGRlcGVuZGUgZGEgdHJhamV0w7NyaWEgZGEgU2VsaWMgZSBkb3MgcmVuZGltZW50b3MgZG9zIHTDrXR1bG9zIGRvIFRlc291cm8gYW1lcmljYW5vLiBTZSBvIEJyYXNpbCBjb25zb2xpZGFyIGRlc2luZmxhw6fDo28gc3VzdGVudMOhdmVsIGUgcmVkdcOnw6NvIGRvIHJpc2NvIGZpc2NhbCwgYSBTZWxpYyBwb2RlcsOhIGNvbnZlcmdpciBwYXJhIG7DrXZlaXMgbWFpcyBwcsOzeGltb3MgYW9zIGludGVybmFjaW9uYWlzLCByZWR1emluZG8gbyBkaWZlcmVuY2lhbCBlIG8gY3VzdG8uIENhc28gY29udHLDoXJpbywgYSBwZXJzaXN0w6puY2lhIGRlIGp1cm9zIGVzdHJ1dHVyYWxtZW50ZSBhbHRvcyBubyBCcmFzaWwgbWFudGVyw6EgbyDDtG51cyBmaXNjYWwgZWxldmFkby4NCg0KDQojIyMjIEFww6puZGljZSAtIEN1c3RvIEZpc2NhbCBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMNCg0KTyBkaWZlcmVuY2lhbCBkZSBjdXN0byBmaXNjYWwgw6kgY2FsY3VsYWRvIHBvcjoNCg0KJCRcdGV4dHtEaWZlcmVuY2lhbH0gPSBpX3tTZWxpY30gLSBpX3tleHR9JCQNCg0KT25kZToNCg0KLSAkaV97U2VsaWN9JCA9IFRheGEgU2VsaWMgKCUgYS5hLikNCi0gJGlfe2V4dH0kID0gUmVuZGltZW50byBkYXMgcmVzZXJ2YXMgbm8gZXh0ZXJpb3IgKCUgYS5hLikNCg0KTyBjdXN0byBmaXNjYWwgYW51YWwgZW0gcmVhaXMgw6kgZGFkbyBwb3I6DQoNCiQkQ0YgPSBSIFx0aW1lcyBDIFx0aW1lcyAoaV97U2VsaWN9IC0gaV97ZXh0fSkkJA0KDQpPbmRlOg0KDQotICRDRiQgPSBDdXN0byBGaXNjYWwgKFIkIGJpbGjDtWVzKQ0KLSAkUiQgPSBSZXNlcnZhcyBJbnRlcm5hY2lvbmFpcyAoVVMkIGJpbGjDtWVzKQ0KLSAkQyQgPSBUYXhhIGRlIGPDom1iaW8gbcOpZGlhIChSJC9VUyQpDQotICRpX3tTZWxpY30kID0gVGF4YSBTZWxpYyAoZW0gZGVjaW1hbCkNCi0gJGlfe2V4dH0kID0gUmVuZGltZW50byBleHRlcm5vIChlbSBkZWNpbWFsKQ0KDQoNCiMjIENvbmNsdXPDo28NCkEgYW7DoWxpc2UgZGFzIHJlc2VydmFzIGludGVybmFjaW9uYWlzIGV2aWRlbmNpYSBzZXUgcGFwZWwgZXN0cmF0w6lnaWNvIG5hIG1hbnV0ZW7Dp8OjbyBkYSBlc3RhYmlsaWRhZGUgbWFjcm9lY29uw7RtaWNhIGUgbmEgbWl0aWdhw6fDo28gZGUgcmlzY29zIGV4dGVybm9zLiBBbyBsb25nbyBkb3Mgw7psdGltb3MgYW5vcywgYSBhY3VtdWxhw6fDo28gZGUgcmVzZXJ2YXMgcGVybWl0aXUgYW8gcGHDrXMgcmVkdXppciBhIHZvbGF0aWxpZGFkZSBjYW1iaWFsLCBmb3J0YWxlY2VyIGEgY29uZmlhbsOnYSBkZSBpbnZlc3RpZG9yZXMgaW50ZXJuYWNpb25haXMgZSBhc3NlZ3VyYXIgcmVjdXJzb3MgZW0gcGVyw61vZG9zIGRlIGNyaXNlLCBjb25zb2xpZGFuZG8gYSBwb3Npw6fDo28gZG8gQnJhc2lsIGVudHJlIG9zIHByaW5jaXBhaXMgcGHDrXNlcyBlbWVyZ2VudGVzIGVtIHRlcm1vcyBkZSB2b2x1bWUgZGUgcmVzZXJ2YXMuDQoNCkVudHJldGFudG8sIGEgZ2VzdMOjbyBkZXNzYXMgcmVzZXJ2YXMgbsOjbyBlc3TDoSBpc2VudGEgZGUgY3VzdG9zLiBBIGRpZmVyZW7Dp2EgZW50cmUgYSByZW11bmVyYcOnw6NvIG9idGlkYSBlbSBhdGl2b3MgZXh0ZXJub3MgZGUgYmFpeG8gcmlzY28gZSBvIGN1c3RvIGRvIGZpbmFuY2lhbWVudG8gaW50ZXJubywgdmlhIHRheGEgU2VsaWMsIHJlcHJlc2VudGEgdW0gY3VzdG8gZmlzY2FsIHJlbGV2YW50ZSBxdWUgcHJlY2lzYSBzZXIgbW9uaXRvcmFkbywgZXNwZWNpYWxtZW50ZSBlbSBjaWNsb3MgZGUganVyb3MgZWxldmFkb3MuIEVzc2UgZXF1aWzDrWJyaW8gZGVsaWNhZG8gZW50cmUgc2VndXJhbsOnYSBjYW1iaWFsIGUgZWZpY2nDqm5jaWEgZmlzY2FsIGV2aWRlbmNpYSBhIGNvbXBsZXhpZGFkZSBkZSBkZWNpc8O1ZXMgZW52b2x2ZW5kbyBwb2zDrXRpY2EgZWNvbsO0bWljYSwgcG9sw610aWNhIG1vbmV0w6FyaWEgZSBnZXN0w6NvIGRlIHJpc2NvcyBleHRlcm5vcy4NCg0KRW0gc3VtYSwgYSBzdXN0ZW50YWJpbGlkYWRlIGRhIHBvbMOtdGljYSBkZSByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyBkZXBlbmRlIGRlIGRlY2lzw7VlcyBjb25zaXN0ZW50ZXMsIGNhcGF6ZXMgZGUgZXF1aWxpYnJhciBwcm90ZcOnw6NvIGNhbWJpYWwsIG1hbnV0ZW7Dp8OjbyBkYSBjb25maWFuw6dhIGludGVybmFjaW9uYWwgZSBjdXN0b3MgZmlzY2Fpcy4gTyBkZXNhZmlvIHJlc2lkZSBlbSBwcmVzZXJ2YXIgZXNzZSDigJxjb2xjaMOjb+KAnSBmaW5hbmNlaXJvIHNlbSBjb21wcm9tZXRlciBhIGRpc2NpcGxpbmEgb3LDp2FtZW50w6FyaWEsIGdhcmFudGluZG8sIGFvIG1lc21vIHRlbXBvLCBlc3RhYmlsaWRhZGUgZmluYW5jZWlyYSBlIHJlc2lsacOqbmNpYSBmcmVudGUgYSBjaG9xdWVzIGV4dGVybm9zLg0KDQoNCg0KIyMgUmVmZXLDqm5jaWFzDQpFTVBJUklDVVMuIE8gcXVlIHPDo28gcmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgZSBxdWFsIHN1YSBpbXBvcnTDom5jaWEgcGFyYSBvIEJyYXNpbC4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vd3d3LmVtcGlyaWN1cy5jb20uYnIvZXhwbGljYS9yZXNlcnZhcy1pbnRlcm5hY2lvbmFpcy8uIEFjZXNzbyBlbTogMjEgb3V0LiAyMDI1Lg0KDQpQT0xJVElaRSEuIFJlc2VydmFzIGludGVybmFjaW9uYWlzOiBvIHF1ZSBzw6NvIGUgcG9yIHF1ZSBzw6NvIGltcG9ydGFudGVzIHBhcmEgbyBCcmFzaWw/IERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5wb2xpdGl6ZS5jb20uYnIvcmVzZXJ2YXMtaW50ZXJuYWNpb25haXMvLiBBY2Vzc28gZW06IDIxIG91dC4gMjAyNS4NCg0KRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUyAoRkdWKS4gUmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgZSBlc3RhYmlsaWRhZGUgbWFjcm9lY29uw7RtaWNhLiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9yZXBvc2l0b3Jpby5mZ3YuYnIvc2VydmVyL2FwaS9jb3JlL2JpdHN0cmVhbXMvODQ5MzFkNDgtOTcyMC00MWM5LTlmZmUtNjk5MjZlZGQ2M2I5L2NvbnRlbnQuIEFjZXNzbyBlbTogMjEgb3V0LiAyMDI1Lg0KDQpFU1RBRMODTy4gUXVhbnRvIG8gQnJhc2lsIHRlbSBkZSByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcz8gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vd3d3LmVzdGFkYW8uY29tLmJyL2Vjb25vbWlhL3F1YW50by1vLWJyYXNpbC10ZW0tZGUtcmVzZXJ2YXMtaW50ZXJuYWNpb25haXMtbnByZWkvLiBBY2Vzc28gZW06IDIxIG91dC4gMjAyNS4NCg0KRzEg4oCTIFBPUlRBTCBERSBOT1TDjUNJQVMgR0xPQk8uIENvbSBkaXNwYXJhZGEgZG8gZMOzbGFyIGUgbGVpbMO1ZXMgZG8gQkMsIHJlc2VydmFzIGludGVybmFjaW9uYWlzIGRvIEJyYXNpbCBjYWVtIDcsMSUgZW0gMjAyNC4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vZzEuZ2xvYm8uY29tL2Vjb25vbWlhL25vdGljaWEvMjAyNS8wMS8wNS9jb20tZGlzcGFyYWRhLWRvLWRvbGFyLWUtbGVpbG9lcy1kby1iYy1yZXNlcnZhcy1pbnRlcm5hY2lvbmFpcy1kby1icmFzaWwtY2FlbS03MXBlcmNlbnQtZW0tMjAyNC5naHRtbC4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNCklOU1RJVFVUTyBERSBQRVNRVUlTQSBFQ09Ow5RNSUNBIEFQTElDQURBIChJUEVBKS4gUmVzZXJ2YXMgaW50ZXJuYWNpb25haXMuIENhcnRhIGRlIENvbmp1bnR1cmEuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5pcGVhLmdvdi5ici9jYXJ0YWRlY29uanVudHVyYS9pbmRleC5waHAvdGFnL3Jlc2VydmFzLWludGVybmFjaW9uYWlzLy4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNCk8gR0xPQk8uIEJDIGZheiBpbnRlcnZlbsOnw6NvIHJlY29yZGUgbm8gZMOzbGFyOyBtYXMgYWZpbmFsLCBxdWFudG8gbyBCcmFzaWwgdGVtIGVtIHJlc2VydmFzIGNhbWJpYWlzPyBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9vZ2xvYm8uZ2xvYm8uY29tL2Vjb25vbWlhL2ZpbmFuY2FzL25vdGljaWEvMjAyNC8xMi8xOS9iYy1mYXotaW50ZXJ2ZW5jYW8tcmVjb3JkZS1uby1kb2xhci1tYXMtYWZpbmFsLXF1YW50by1vLWJyYXNpbC10ZW0tZW0tcmVzZXJ2YXMtY2FtYmFpcy5naHRtbC4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNCk5PUkQgSU5WRVNUSU1FTlRPUy4gUmVzZXJ2YXMgaW50ZXJuYWNpb25haXMgZG8gQnJhc2lsOiBvIHF1ZSBzw6NvIGUgcXVhbCBzdWEgaW1wb3J0w6JuY2lhPyBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3cubm9yZGludmVzdGltZW50b3MuY29tLmJyL2Jsb2cvcmVzZXJ2YXMtaW50ZXJuYWNpb25haXMtYnJhc2lsLy4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNCkJBTkNPIENFTlRSQUwgRE8gQlJBU0lMIChCQ0IpLiBSZWxhdMOzcmlvIGRlIEdlc3TDo28gZGFzIFJlc2VydmFzIEludGVybmFjaW9uYWlzIOKAkyAyMDI1LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3cuYmNiLmdvdi5ici9jb250ZW50L3B1YmxpY2Fjb2VzL3JlbGdlc3Rhb3Jlc2VydmFzL0dFU1RBT1JFU0VSVkFTMjAyNTAzLXJlbGF0b3Jpb19hbnVhbF9yZXNlcnZhc19pbnRlcm5hY2lvbmFpc18yMDI1LnBkZi4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNClRSQURJTkcgRUNPTk9NSUNTLiBGb3JlaWduIEV4Y2hhbmdlIFJlc2VydmVzIOKAkyBHMjAgQ291bnRyaWVzLiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9wdC50cmFkaW5nZWNvbm9taWNzLmNvbS9jb3VudHJ5LWxpc3QvZm9yZWlnbi1leGNoYW5nZS1yZXNlcnZlcz9jb250aW5lbnQ9ZzIwLiBBY2Vzc28gZW06IDIxIG91dC4gMjAyNS4NCg0KQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKEJDQikuIFJlbGF0w7NyaW8gZGUgR2VzdMOjbyBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5iY2IuZ292LmJyL3B1YmxpY2Fjb2VzL3JlbGdlc3Rhb3Jlc2VydmFzLiBBY2Vzc28gZW06IDIxIG91dC4gMjAyNS4NCg0KQk9BUkTigK9PRuKAr0dPVkVSTk9SU+KAr09G4oCvVEhF4oCvRkVERVJBTOKAr1JFU0VSVkXigK9TWVNURU0gKFVTKS4gTWFya2V0IFlpZWxkIG9uIFUuUy4gVHJlYXN1cnkgU2VjdXJpdGllcyBhdCAxMC1ZZWFyIENvbnN0YW50IE1hdHVyaXR5LCBRdW90ZWQgb24gYW4gSW52ZXN0bWVudCBCYXNpcyBbR1MxMF0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2ZyZWQuc3Rsb3Vpc2ZlZC5vcmcvc2VyaWVzL0dTMTANCi4gQWNlc3NvIGVtOiAyMSBvdXQuIDIwMjUuDQoNCg==