Relatório Atividade Econômica - Resultado de 2025 e Previsão
para 2026
O relatório a seguir tem como objetivo analisar empiricamente o
resultado da Atividade Econômica em 2025, bem como as projeções para
esse ano de 2026.
Previsão para o ano de 2026
Para 2026, a projeção do PIB se aproxima de um cenário próximo de
1,7%, refletindo essa “queda controlada” da economia. Esse movimento é
também um reflexo da sinalização da última reunião do Copom, que indicou
um corte de juros até o final do ano, com a Selic devendo terminar entre
12% e 12,75% — um patamar inferior ao recente, porém ainda muito
restritivo. Na prática, isso significa que, embora haja um alívio em
relação aos 15% de 2025, o crédito e o consumo das famílias devem
continuar operando sob restrição, ainda que em intensidade ligeiramente
menor.
Esse cenário doméstico ocorre em meio a uma desaceleração da
atividade global. Conforme projeções da OCDE, a economia mundial tem
mostrado resiliência diante dos choques comerciais, com crescimento
estimado em 3,2% para 2025, impulsionado por políticas macroeconômicas
ainda favoráveis. No entanto, os impactos das tarifas implementadas
pelos Estados Unidos ainda não se materializaram por completo e tendem a
provocar uma desaceleração do crescimento global, que deve recuar para
2,9% em 2026.
Além disso, é importante considerar o componente político do ciclo
econômico brasileiro, uma vez que 2026 será um ano de eleições
presidenciais. Historicamente, períodos eleitorais costumam gerar maior
volatilidade macroeconômica e mudanças de expectativas por parte de
agentes econômicos e investidores. Um exemplo relevante ocorreu em 2014,
quando o ambiente eleitoral foi acompanhado por deterioração das
expectativas fiscais, aumento da incerteza política e redução do
investimento privado. Naquele período, a taxa de crescimento do PIB
desacelerou significativamente, passando de 3,0% em 2013 para apenas
0,5% em 2014, refletindo um cenário de incerteza econômica e ajuste de
expectativas.
Esse padrão histórico sugere que anos eleitorais tendem a
intensificar a cautela de empresas e investidores, especialmente em
economias emergentes como o Brasil, onde mudanças na condução da
política fiscal, monetária e regulatória podem alterar
significativamente as perspectivas econômicas. Dessa forma, ainda que a
política monetária esteja em trajetória de flexibilização moderada, a
proximidade do ciclo eleitoral de 2026 pode contribuir para manter o
ambiente de investimentos mais cauteloso, reforçando o cenário de
crescimento moderado projetado para o período
Atividade Econômica nos Setores
(Agropecuária/Indústria/Serviços)
Ao analisar diferentes setores da economia percebe-se o o mesmo
aumento do Índice de Atividade Econômica agora em meio aos diferentes
setores da economia nacional, as altas foram de 13,1% na agropecuária,
1,5% na indústria e 2,1% em serviços.
Apesar da desacelaração o setor de serviços se manteve aquecido ao
longo do ano, com uma inflação persistente que impediu uma crescente
maior nesse mercado. Os serviços de informação e comunicação cresceram
1.7% e aqueles prestados as famílias cresceram 1.1% O agronegócio
permanece sendo um pilar fundamental para a economia do país, em um
contexto de recuperação em culturas estratégicas com indicações de uma
safra de grãos 2024/25 está em 350 milhões de toneladas. O desempenho do
Agro tem efeito direto do PIB e na balança comercial com o IBC-Br
contribuindo para a elaboração da política monetária. O setor industrial
pode apresentar desafios em 2026 em relação aos estoques elevados e um
câmbio médio especulado para R$ 5,50.
Cenário do crédito de consumo na atividade econômica
brasileira
A dinâmica do crédito constitui um dos pilares da atividade econômica
no Brasil, funcionando como mecanismo relevante de amplificação do ciclo
doméstico. Ao facilitar o acesso a financiamento para famílias e
empresas, o crédito sustenta o consumo, contribui para a expansão da
demanda agregada e influencia diretamente o ritmo de crescimento
econômico. O crédito atua como mecanismo de amplificação do ciclo
econômico, em que afeta diretamente a capacidade de consumo das
famílias.Em períodos de melhora do mercado de trabalho, a expansão das
concessões reforça o crescimento da demanda doméstica; por outro lado,
em momentos de desaceleração, o recuo do crédito tende a intensificar a
contração da atividade. A análise conjunta da massa de rendimento real
habitual das famílias e das concessões de crédito com recursos livres
para pessoas físicas sugere que, em determinados momentos do ciclo
econômico brasileiro, a dinâmica do crédito assume caráter antecedente
em relação à evolução da renda agregada. Observa-se que períodos de
aceleração nas concessões tendem a preceder movimentos mais intensos de
recuperação da massa salarial, indicando que a expansão do financiamento
pode atuar como um dos primeiros sinais de melhora na demanda doméstica.
Entre 2017 e 2019, por exemplo, as concessões às famílias apresentaram
trajetória de crescimento consistente, saindo de patamares próximos a R$
110 bilhões mensais para níveis acima de R$ 150 bilhões, enquanto a
massa salarial avançava de forma mais gradual. Esse comportamento sugere
que a retomada do consumo ocorreu inicialmente por meio da ampliação do
crédito, com a renda reagindo de maneira mais lenta ao longo do processo
de recuperação econômica. Dinâmica semelhante pode ser observada no
período posterior ao choque da pandemia. Após a forte contração de 2020,
as concessões de crédito às pessoas físicas retomaram trajetória de alta
de maneira relativamente rápida, ultrapassando R$ 200 bilhões mensais já
em 2021 e alcançando níveis superiores a R$ 300 bilhões em 2025. A massa
salarial real, por sua vez, apresentou recuperação mais gradual,
avançando de cerca de R$ 273 bilhões em 2021 para aproximadamente R$ 367
bilhões ao final de 2025. Esse descompasso temporal reforça a hipótese
de que o crédito pode atuar como mecanismo de antecipação do consumo,
permitindo que famílias ajustem seus gastos antes da consolidação plena
do crescimento da renda. Do ponto de vista econômico, esse comportamento
pode ser explicado pela maior sensibilidade das concessões às condições
financeiras e às expectativas. Alterações na percepção de risco, na
liquidez do sistema financeiro ou nas expectativas em relação ao ciclo
monetário tendem a impactar rapidamente a oferta e a demanda por
crédito, enquanto a evolução do mercado de trabalho e da renda ocorre de
forma mais gradual. Assim, a expansão do crédito não apenas reflete a
atividade econômica corrente, mas também pode sinalizar mudanças futuras
no ritmo da demanda doméstica. Dessa forma, os dados recentes sugerem
que as concessões às famílias desempenham papel relevante como indicador
antecedente do ciclo econômico brasileiro. Ao ampliar a capacidade de
consumo em momentos de melhora das condições financeiras, o crédito atua
como vetor de propagação da atividade, reforçando movimentos de expansão
e contribuindo para a dinâmica observada na massa salarial ao longo do
tempo. A análise da evolução conjunta da massa salarial real e das
concessões de crédito às pessoas físicas evidencia o papel central do
crédito na dinâmica recente da economia brasileira. Ao longo do ciclo,
observa-se que a expansão das concessões não apenas acompanha a melhora
do mercado de trabalho, mas, em determinados momentos, antecede a
aceleração mais intensa da renda agregada, sugerindo que o crédito atua
como mecanismo de antecipação do consumo e como amplificador da demanda
doméstica.
Dessa forma, os dados analisados sugerem que o crédito não deve ser
interpretado apenas como variável auxiliar, mas como componente
estrutural da dinâmica macroeconômica brasileira, desempenhando papel
determinante tanto na intensificação das fases de expansão quanto na
propagação de períodos de desaceleração.
Análise do Mercado de Trabalho
A dinâmica do mercado de trabalho tem desempenhado papel central na
trajetória recente da atividade econômica brasileira. A evolução da taxa
de desocupação, da população na força de trabalho e da massa salarial
real revela não apenas os efeitos dos diferentes ciclos econômicos
enfrentados pelo país na última década, mas também os fundamentos que
sustentam o momento atual da economia. Entre 2015 e 2017, a economia
brasileira enfrentou forte contração, refletida na deterioração abrupta
do mercado de trabalho. A taxa de desocupação avançou de aproximadamente
6,5% para patamar próximo de 14%, configurando uma duplicação do
desemprego em curto intervalo de tempo. Esse movimento foi acompanhado
por enfraquecimento da renda agregada e retração do consumo das
famílias. Ainda que a população na força de trabalho tenha mantido
tendência estrutural de crescimento, o choque recessivo se traduziu em
incapacidade de absorção dessa força de trabalho, ampliando a ociosidade
e reduzindo o dinamismo da economia doméstica. O mercado de trabalho,
nesse período, atuou como canal de transmissão da recessão, reforçando o
ciclo negativo. Nos anos subsequentes, observou-se estabilização do
desemprego, porém ainda em níveis elevados, superiores a 11%. A
recuperação econômica mostrou-se moderada e insuficiente para promover
reabsorção rápida da mão de obra desempregada. A massa salarial
apresentou crescimento limitado, restringindo a capacidade de aceleração
do consumo. Esse período foi caracterizado por recuperação frágil, com
elevado grau de ociosidade no mercado de trabalho.
A forte compressão do desemprego elevou a renda disponível das
famílias e fortaleceu o consumo doméstico, componente central do PIB
brasileiro. O mercado de trabalho deixou de atuar como restrição e
passou a funcionar como mecanismo de propagação do crescimento.
Com desemprego em torno de 5%, o grau de ociosidade da economia
encontra-se reduzido para padrões históricos nacionais. Esse cenário
implica: Maior pressão potencial sobre salários, Redução da margem de
crescimento via absorção adicional de trabalhadores,Dependência
crescente de ganhos de produtividade para sustentar expansão futura
A evidência empírica sugere que o mercado de trabalho tem sido o
principal vetor da retomada recente da atividade econômica brasileira. A
forte compressão da taxa de desocupação que recuou para níveis
historicamente baixos combinada à estabilização da população na força de
trabalho e ao avanço consistente da massa salarial real, consolidou um
ambiente favorável à expansão do consumo das famílias, principal
componente da demanda agregada.
Contudo, a economia opera atualmente com grau reduzido de ociosidade.
Com desemprego próximo de mínimas históricas e força de trabalho
relativamente estabilizada, a margem de expansão via maior utilização do
fator trabalho torna-se limitada. Nesse contexto, a continuidade do
crescimento exigirá transição para um modelo mais intensivo em
produtividade, investimento e eficiência alocativa.
Renda e Consumo das Famílias
Acerca do consumo e da renda das famílias, apesar de um cenário de
juros elevados, o consumo doméstico manteve-se relativamente resiliente
ao longo do período, sustentado principalmente por um mercado de
trabalho ainda aquecido e por ganhos reais de renda. Dados recentes
indicam que a taxa de desemprego no Brasil permaneceu em patamares
historicamente baixos, próximos de 7% ao longo de 2025, segundo o IBGE,
enquanto a massa de rendimento real habitual do trabalho apresentou
crescimento consistente, refletindo tanto a expansão do emprego quanto a
recuperação do poder de compra da população. Esse avanço da renda real
tende a sustentar o consumo das famílias mesmo em um ambiente de crédito
mais restritivo, uma vez que parte relevante do consumo no Brasil está
associada à renda corrente.
Outro fator relevante foi o arrefecimento da inflação de alimentos,
que contribuiu para reduzir pressões sobre o orçamento das famílias. A
combinação de condições climáticas mais favoráveis para a produção
agrícola, juntamente com um câmbio relativamente estável, ajudou a
conter o custo de itens alimentícios ao longo do ano, liberando parcela
maior da renda disponível para outros tipos de consumo. Esse movimento
teve impacto direto sobre os indicadores de atividade ligados ao
consumo, especialmente no varejo ampliado.
Como reflexo desses fatores, indicadores de consumo mostraram
desempenho positivo no final do ano. Em dezembro, o consumo avançou
15,69%, registrando crescimento expressivo em comparação ao mesmo
período de 2024, o que reforça a ideia de que a combinação entre
expansão do emprego, recuperação da renda real e desaceleração
inflacionária contribuiu para sustentar a demanda doméstica mesmo em um
ambiente de política monetária ainda restritiva.
Contudo, é importante considerar que 2026 será um ano eleitoral, o
que historicamente tende a elevar o grau de incerteza econômica no
Brasil. Episódios passados ilustram esse padrão. Em 2014, por exemplo, o
processo eleitoral foi acompanhado por deterioração das expectativas
fiscais e aumento da volatilidade nos mercados financeiros, o que
contribuiu para a desaceleração da atividade econômica, com o PIB
crescendo apenas 0,5% naquele ano, após expansão de 3,0% em 2013. De
forma semelhante, em 2018, o período eleitoral foi marcado por forte
incerteza política e elevada volatilidade cambial, o que levou empresas
e investidores a adotar uma postura mais cautelosa em relação a
investimentos e decisões de consumo de maior valor.
Esse comportamento ocorre porque anos eleitorais aumentam a incerteza
sobre a condução futura da política econômica, especialmente em relação
à política fiscal, reformas estruturais e diretrizes regulatórias. Em
economias emergentes como o Brasil, essa incerteza tende a impactar
diretamente as expectativas de agentes econômicos, levando empresas a
postergar investimentos e famílias a adotarem maior cautela em decisões
de consumo de longo prazo.
Dessa forma, embora os fundamentos do mercado de trabalho e da renda
ainda contribuam para sustentar o consumo das famílias, a proximidade do
ciclo eleitoral de 2026 pode introduzir um grau adicional de cautela no
comportamento de consumidores e investidores, o que reforça a
expectativa de um crescimento econômico mais moderado ao longo do
período.
REFERÊNCIAS
INFOMONEY. PIB 2026: o ano em que a economia não desaba, mas também
não decola. São Paulo: InfoMoney, 2026. Disponível em: https://www.infomoney.com.br/economia/pib-2026-o-ano-em-que-a-economia-nao-desaba-mas-tambem-nao-decola/
. Acesso em: 05 mar. 2026.
INFOMONEY. Serviços: setor recua em dezembro de 2025, aponta IBGE,
com impacto de juros elevados. São Paulo: InfoMoney, 2026. Disponível
em: https://www.infomoney.com.br/economia/servicos-ibge-dezembro-2025-queda-juros/
. Acesso em: 05 mar. 2026.
EMPRESA BRASIL DE COMUNICAÇÃO. Prévia do PIB aponta crescimento de
2,5% da economia brasileira em 2025. Brasília, DF: Agência Brasil, 2026.
Disponível em: https://agenciabrasil.ebc.com.br/economia/noticia/2026-02/previa-do-pib-aponta-crescimento-de-25-da-economia-brasileira-em-2025
. Acesso em: 05 mar. 2026.
FUNDAÇÃO GETULIO VARGAS. Economia cresceu 2,2% em 2025, segundo o
Monitor do PIB-FGV. Rio de Janeiro: FGV IBRE, 2026. Disponível em: https://portalibre.fgv.br/noticias/economia-cresceu-22-em-2025-segundo-o-monitor-do-pib-fgv
. Acesso em: 05 mar. 2026.
XP INVESTIMENTOS. Brasil Macro Mensal: crescimento mais forte e
inflação mais baixa. São Paulo: XP Investimentos, 2026. Disponível em:
https://conteudos.xpi.com.br/economia/brasil-macro-mensal-crescimento-mais-forte-inflacao-mais-baixa/
. Acesso em: 05 mar. 2026.
EDITORA ABRIL. Atividade econômica brasileira cresce 2,5% em 2025.
São Paulo: Você S/A, 2026. Disponível em: https://vocesa.abril.com.br/economia/atividade-economica-brasileira-cresce-25-em-2025/
. Acesso em: 05 mar. 2026.
BANCO CENTRAL DO BRASIL. Índice de Atividade Econômica do Banco
Central (IBC-Br). Brasília, DF: BCB, 2026. Disponível em: https://www.bcb.gov.br/estatisticas/ibc-br . Acesso em:
05 mar. 2026
INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Indicadores
econômicos e sociais. Rio de Janeiro: IBGE, 2026. Disponível em: https://www.ibge.gov.br/indicadores . Acesso em: 05 mar.
2026.
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gQXRpdmlkYWRlIEVjb27DtG1pY2EiDQphdXRob3I6ICJKb8OjbyBQZWRybyBHb2RpbmhvIGUgTHVpeiBSZXplbmRlIg0KZGF0ZTogIjIwMjYtMDItMTIiDQpvdXRwdXQ6IA0KIGh0bWxfZG9jdW1lbnQ6DQogIHRvYzogdHJ1ZQ0KICB0aGVtZTogbHVtZW4NCiAgaGlnaGxpZ2h0OiB0YW5nbw0KICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UpDQoNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHNpZHJhcikNCmxpYnJhcnkoaXBlYWRhdGFyKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkodGlkeXIpDQpgYGANCg0KIyMgKipSZWxhdMOzcmlvIEF0aXZpZGFkZSBFY29uw7RtaWNhIC0gUmVzdWx0YWRvIGRlIDIwMjUgZSBQcmV2aXPDo28gcGFyYSAyMDI2KioNCg0KTyByZWxhdMOzcmlvIGEgc2VndWlyIHRlbSBjb21vIG9iamV0aXZvIGFuYWxpc2FyIGVtcGlyaWNhbWVudGUgbyByZXN1bHRhZG8gZGEgQXRpdmlkYWRlIEVjb27DtG1pY2EgZW0gMjAyNSwgYmVtIGNvbW8gYXMgcHJvamXDp8O1ZXMgcGFyYSBlc3NlIGFubyBkZSAyMDI2Lg0KDQojIyAqUmVzdWx0YWRvIC0gQXRpdmlkYWRlIEVjb27DtG1pY2EgZGUgMjAyNSBlbSBDb21wYXJhw6fDo28gY29tIDIwMjQqDQoNCk8gYW5vIGRlIDIwMjUgZm9pIG1hcmNhZG8gcG9yIHVtYSBhbHRhIHRheGEgZGUganVyb3MsIGNvbSBhIFNFTElDIG1hbnRlbmRvLXNlIGVtIDE1JSBhbyBsb25nbyBkZSB0b2RvIGFubywgbWFzIHRhbWLDqW0gY29tIG9zIGVzdMOtbXVsb3MgZmlzY2FpcyBlIGRlIGNyw6lkaXRvIGltcHVsc2lvbmFuZG8gbyBwYcOtcy4gRGVzc2EgZm9ybWEsIGFvIHNlIGFuYWxpc2FyIG8gUElCIE1lbnNhbCBlIG8gSUJDLUJyIGRvIMO6bHRpbW8gYW5vIGVtIGNvbXBhcmHDp8OjbyBhbyBkZSAyMDI0LCBwZXJjZWJlLXNlIHF1ZSwgYXBlc2FyIGRvcyBqdXJvcyBhbHRvcyBlIGRlIG91dHJvcyBmYXRvcmVzIGRlc2Zhdm9yw6F2ZWlzLCBob3V2ZSBzaW0gdW0gY3Jlc2NpbWVudG8gbm8gYW5vIGRlIDIwMjUg4oCUIDIsNSUgbm8gSUJDLUJyIGUgMiw1JSBubyBQSUIg4oCUIHBvcsOpbSBlbSB1bSByaXRtbyBtZW5vciBzZSBjb21wYXJhZG8gYSAyMDI0LCB0ZW5kw6puY2lhIHF1ZSBvY29ycmV1IHRhbnRvIGNvbSBvIFBJQiBxdWFudG8gY29tIG8gw41uZGljZSBkZSBBdGl2aWRhZGUgRWNvbsO0bWljYS4gQXBlc2FyIGRpc3NvLCBlbSBkYWRvcyBtYWlzIHJlY2VudGVzIG8gSUJDLUJyIHJlY3VvdSAwLjIlLCBldmlkZW5jaWFuZG8gZXNzYSBkZXNhY2VsYXJhw6fDo28gZGEgZWNvbm9taWEsIGNvbSBzZXRvcmVzIGRlIGdyYW5kZSBwZXNvIG5hIGVjb25vbWlhIGNvbW8gQWdyb3BlY3XDoXJpYSwgU2VydmnDp29zIGUgSW5kw7pzdHJhaWEgc2VuZG8gaW1wYWN0YWRvcyBwb3IgZXNzZSByZWN1by4NCg0KTyBjcmVzY2ltZW50byBkbyBQSUIsIHBvcnRhbnRvLCBhY29tcGFuaG91IG8gSUJDLUJyLCByZXBldGluZG8gbyBtZXNtbyBwYWRyw6NvIGRlIGRlc2FjZWxlcmHDp8OjbyBlbSByZWxhw6fDo28gYSAyMDI0LiBFc3NlIGNvbXBvcnRhbWVudG8gw6kgZXhwbGljYWRvLCBwcmluY2lwYWxtZW50ZSwgcGVsYSBtZW5vciBjb250cmlidWnDp8OjbyBkbyBzZXRvciBkZSBTZXJ2acOnb3MgKHF1ZSB0ZW0gbyBtYWlvciBwZXNvIG5hIGVjb25vbWlhKSwgc29tYWRhIGEgcmVkdcOnw7VlcyBubyBzZXRvciBJbmR1c3RyaWFsIGUgbm8gY29tcG9uZW50ZSBkZSBJbXBvc3Rvcy4gQXBlbmFzIGEgQWdyb3BlY3XDoXJpYSBhdW1lbnRvdSBzdWEgcGFydGljaXBhw6fDo28sIGVtYm9yYSBzZXUgaW1wYWN0byBzZWphIGluZmVyaW9yIGFvIGRvIHNldG9yIGRlIFNlcnZpw6dvcy4gTm8gZ2VyYWwsIG8gUElCIGluaWNpb3UgbyBhbm8gY29tIGZvcnRlIGNyZXNjaW1lbnRvIGUgdGVybWlub3UgY29tIGVzdGFiaWxpZGFkZSwgcmVmbGV4byBkbyBhcGVydG8gbW9uZXTDoXJpbyBlIGRhIGltcG9zacOnw6NvIGRlIHRhcmlmYXMgbm8gcGHDrXMuDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcyBkbyBQSUIgbWVuc2FsIChjw7NkaWdvIDQzODApIC0gZW0gUiQgbWlsaMO1ZXMNCmRhZG9zX3BpYiA8LSBnZXRfc2VyaWVzKDQzODAsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDEtMzEiKSAlPiUgDQogIHJlbmFtZShQSUJfbWVuc2FsID0gYDQzODBgKQ0KDQojIENvbGV0YXIgZGFkb3MgZG8gSUJDLUJyIGNvbSBhanVzdGUgc2F6b25hbCAoY8OzZGlnbyAyNDM2NCkNCmRhZG9zX2liY2JyIDwtIGdldF9zZXJpZXMoMjQzNjQsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjYtMDEtMzEiKSAlPiUgDQogIHJlbmFtZShJQkNCciA9IGAyNDM2NGApDQoNCiMgUHJlcGFyYXIgZGFkb3MgZG8gUElCIChjb252ZXJ0ZXIgcGFyYSB0cmlsaMO1ZXMpDQpkYWRvc19waWJfbWVuc2FsIDwtIGRhZG9zX3BpYiAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IHllYXIoZGF0ZSksDQogICAgbWVzID0gbW9udGgoZGF0ZSwgbGFiZWwgPSBUUlVFLCBhYmJyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICAjIENPUlJFw4fDg086IG1pbGjDtWVzIHBhcmEgdHJpbGjDtWVzID0gZGl2aWRpciBwb3IgMS4wMDAuMDAwIChuw6NvIDEwMC4wMDApDQogICAgUElCX3RyaWxob2VzID0gcm91bmQoUElCX21lbnNhbCAvIDEwMDAwMCwgMikNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgUElCX3RyaWxob2VzKQ0KDQojIFByZXBhcmFyIGRhZG9zIGRvIElCQy1Ccg0KZGFkb3NfaWJjYnJfbWVuc2FsIDwtIGRhZG9zX2liY2JyICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgIElCQ0JyX2FycmVkb25kYWRvID0gcm91bmQoSUJDQnIsIDEpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCB0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX3BpYl9tZW5zYWwgJT4lDQogIGxlZnRfam9pbihkYWRvc19pYmNicl9tZW5zYWwsIGJ5ID0gYygiZGF0ZSIsICJ0aW1lc3RhbXAiKSkgJT4lDQogIGFycmFuZ2UoZGF0ZSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIHBhcmEgZWl4b3MNCnBpYl9taW4gPC0gbWluKGRhZG9zX2NvbWJpbmFkb3MkUElCX3RyaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpwaWJfbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJFBJQl90cmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KaWJjX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KaWJjX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRJQkNCcl9hcnJlZG9uZGFkbywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KcGliX3JhbmdlIDwtIHBpYl9tYXggLSBwaWJfbWluDQppYmNfcmFuZ2UgPC0gaWJjX21heCAtIGliY19taW4NCg0KIyBDcmlhciBncsOhZmljbyBjb21iaW5hZG8NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllIDE6IFBJQiAoY29sdW5hcykgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIFBJQl90cmlsaG9lcykpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBuYW1lID0gIlBJQiBNZW5zYWwgKFIkIHRyaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHRyaWxow7VlcyIpDQogICkgJT4lDQogICMgU8OpcmllIDI6IElCQy1CciAobGluaGEpIC0gZWl4byBkaXJlaXRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIElCQ0JyX2FycmVkb25kYWRvKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciAow61uZGljZSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIENvbmZpZ3VyYXIgZWl4b3MgWSBkdWFpcw0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBJQiAoUiQgdHJpbGjDtWVzKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gdHJpIiksDQogICAgICBtaW4gPSBmbG9vcihwaWJfbWluIC0gMC4wNSAqIHBpYl9yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKHBpYl9tYXggKyAwLjA1ICogcGliX3JhbmdlKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIklCQy1CciAow61uZGljZSAtIGJhc2UgMjAyMj0xMDApIiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUsDQogICAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgICBtaW4gPSBmbG9vcihpYmNfbWluIC0gMC4wNSAqIGliY19yYW5nZSksDQogICAgICBtYXggPSBjZWlsaW5nKGliY19tYXggKyAwLjA1ICogaWJjX3JhbmdlKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUElCIHZzLiBJQkMtQnI6IEF0aXZpZGFkZSBFY29uw7RtaWNhIEJyYXNpbGVpcmEiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJDb21wYXJhw6fDo28gZW50cmUgUElCIE1lbnNhbCAoUiQgdHJpbGjDtWVzKSBlIElCQy1CciAow61uZGljZSkgLSAyMDI0IGEgMjAyNiIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLCANCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoU0dTIC0gQ8OzZGlnb3M6IDQzODAgZSAyNDM2NCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAnbW9udGgnLCBjb3VudCA9IDMsIHRleHQgPSAnM00nKSwNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gNiwgdGV4dCA9ICc2TScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDEsIHRleHQgPSAnMVknKSwNCiAgICAgIGxpc3QodHlwZSA9ICdhbGwnLCB0ZXh0ID0gJ1RvZG8gcGVyw61vZG8nKQ0KICAgICksDQogICAgc2VsZWN0ZWQgPSAyDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweCI+PGI+e3BvaW50LmtleX08L2I+PC9zcGFuPjxici8+JywNCiAgICBwb2ludEZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6e3Nlcmllcy5jb2xvcn0iPuKXjzwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnk6LjFmfXtzZXJpZXMudG9vbHRpcE9wdGlvbnMudmFsdWVTdWZmaXh9PC9iPjxici8+Jw0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBwb2ludFBhZGRpbmcgPSAwLjEsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA1LA0KICAgICAgYm9yZGVyV2lkdGggPSAwLjUNCiAgICApLA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gVFJVRSwNCiAgICAgIGNvbm5lY3ROdWxscyA9IFRSVUUNCiAgICApDQogICkNCmBgYA0KDQojIyAqUHJldmlzw6NvIHBhcmEgbyBhbm8gZGUgMjAyNioNCg0KUGFyYSAyMDI2LCBhIHByb2plw6fDo28gZG8gUElCIHNlIGFwcm94aW1hIGRlIHVtIGNlbsOhcmlvIHByw7N4aW1vIGRlIDEsNyUsIHJlZmxldGluZG8gZXNzYSAicXVlZGEgY29udHJvbGFkYSIgZGEgZWNvbm9taWEuIEVzc2UgbW92aW1lbnRvIMOpIHRhbWLDqW0gdW0gcmVmbGV4byBkYSBzaW5hbGl6YcOnw6NvIGRhIMO6bHRpbWEgcmV1bmnDo28gZG8gQ29wb20sIHF1ZSBpbmRpY291IHVtIGNvcnRlIGRlIGp1cm9zIGF0w6kgbyBmaW5hbCBkbyBhbm8sIGNvbSBhIFNlbGljIGRldmVuZG8gdGVybWluYXIgZW50cmUgMTIlIGUgMTIsNzUlIOKAlCB1bSBwYXRhbWFyIGluZmVyaW9yIGFvIHJlY2VudGUsIHBvcsOpbSBhaW5kYSBtdWl0byByZXN0cml0aXZvLiBOYSBwcsOhdGljYSwgaXNzbyBzaWduaWZpY2EgcXVlLCBlbWJvcmEgaGFqYSB1bSBhbMOtdmlvIGVtIHJlbGHDp8OjbyBhb3MgMTUlIGRlIDIwMjUsIG8gY3LDqWRpdG8gZSBvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcyBkZXZlbSBjb250aW51YXIgb3BlcmFuZG8gc29iIHJlc3RyacOnw6NvLCBhaW5kYSBxdWUgZW0gaW50ZW5zaWRhZGUgbGlnZWlyYW1lbnRlIG1lbm9yLg0KDQpFc3NlIGNlbsOhcmlvIGRvbcOpc3RpY28gb2NvcnJlIGVtIG1laW8gYSB1bWEgZGVzYWNlbGVyYcOnw6NvIGRhIGF0aXZpZGFkZSBnbG9iYWwuIENvbmZvcm1lIHByb2plw6fDtWVzIGRhIE9DREUsIGEgZWNvbm9taWEgbXVuZGlhbCB0ZW0gbW9zdHJhZG8gcmVzaWxpw6puY2lhIGRpYW50ZSBkb3MgY2hvcXVlcyBjb21lcmNpYWlzLCBjb20gY3Jlc2NpbWVudG8gZXN0aW1hZG8gZW0gMywyJSBwYXJhIDIwMjUsIGltcHVsc2lvbmFkbyBwb3IgcG9sw610aWNhcyBtYWNyb2Vjb27DtG1pY2FzIGFpbmRhIGZhdm9yw6F2ZWlzLiBObyBlbnRhbnRvLCBvcyBpbXBhY3RvcyBkYXMgdGFyaWZhcyBpbXBsZW1lbnRhZGFzIHBlbG9zIEVzdGFkb3MgVW5pZG9zIGFpbmRhIG7Do28gc2UgbWF0ZXJpYWxpemFyYW0gcG9yIGNvbXBsZXRvIGUgdGVuZGVtIGEgcHJvdm9jYXIgdW1hIGRlc2FjZWxlcmHDp8OjbyBkbyBjcmVzY2ltZW50byBnbG9iYWwsIHF1ZSBkZXZlIHJlY3VhciBwYXJhIDIsOSUgZW0gMjAyNi4NCg0KQWzDqW0gZGlzc28sIMOpIGltcG9ydGFudGUgY29uc2lkZXJhciBvIGNvbXBvbmVudGUgcG9sw610aWNvIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlybywgdW1hIHZleiBxdWUgMjAyNiBzZXLDoSB1bSBhbm8gZGUgZWxlacOnw7VlcyBwcmVzaWRlbmNpYWlzLiBIaXN0b3JpY2FtZW50ZSwgcGVyw61vZG9zIGVsZWl0b3JhaXMgY29zdHVtYW0gZ2VyYXIgbWFpb3Igdm9sYXRpbGlkYWRlIG1hY3JvZWNvbsO0bWljYSBlIG11ZGFuw6dhcyBkZSBleHBlY3RhdGl2YXMgcG9yIHBhcnRlIGRlIGFnZW50ZXMgZWNvbsO0bWljb3MgZSBpbnZlc3RpZG9yZXMuIFVtIGV4ZW1wbG8gcmVsZXZhbnRlIG9jb3JyZXUgZW0gMjAxNCwgcXVhbmRvIG8gYW1iaWVudGUgZWxlaXRvcmFsIGZvaSBhY29tcGFuaGFkbyBwb3IgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyBmaXNjYWlzLCBhdW1lbnRvIGRhIGluY2VydGV6YSBwb2zDrXRpY2EgZSByZWR1w6fDo28gZG8gaW52ZXN0aW1lbnRvIHByaXZhZG8uIE5hcXVlbGUgcGVyw61vZG8sIGEgdGF4YSBkZSBjcmVzY2ltZW50byBkbyBQSUIgZGVzYWNlbGVyb3Ugc2lnbmlmaWNhdGl2YW1lbnRlLCBwYXNzYW5kbyBkZSAzLDAlIGVtIDIwMTMgcGFyYSBhcGVuYXMgMCw1JSBlbSAyMDE0LCByZWZsZXRpbmRvIHVtIGNlbsOhcmlvIGRlIGluY2VydGV6YSBlY29uw7RtaWNhIGUgYWp1c3RlIGRlIGV4cGVjdGF0aXZhcy4NCg0KRXNzZSBwYWRyw6NvIGhpc3TDs3JpY28gc3VnZXJlIHF1ZSBhbm9zIGVsZWl0b3JhaXMgdGVuZGVtIGEgaW50ZW5zaWZpY2FyIGEgY2F1dGVsYSBkZSBlbXByZXNhcyBlIGludmVzdGlkb3JlcywgZXNwZWNpYWxtZW50ZSBlbSBlY29ub21pYXMgZW1lcmdlbnRlcyBjb21vIG8gQnJhc2lsLCBvbmRlIG11ZGFuw6dhcyBuYSBjb25kdcOnw6NvIGRhIHBvbMOtdGljYSBmaXNjYWwsIG1vbmV0w6FyaWEgZSByZWd1bGF0w7NyaWEgcG9kZW0gYWx0ZXJhciBzaWduaWZpY2F0aXZhbWVudGUgYXMgcGVyc3BlY3RpdmFzIGVjb27DtG1pY2FzLiBEZXNzYSBmb3JtYSwgYWluZGEgcXVlIGEgcG9sw610aWNhIG1vbmV0w6FyaWEgZXN0ZWphIGVtIHRyYWpldMOzcmlhIGRlIGZsZXhpYmlsaXphw6fDo28gbW9kZXJhZGEsIGEgcHJveGltaWRhZGUgZG8gY2ljbG8gZWxlaXRvcmFsIGRlIDIwMjYgcG9kZSBjb250cmlidWlyIHBhcmEgbWFudGVyIG8gYW1iaWVudGUgZGUgaW52ZXN0aW1lbnRvcyBtYWlzIGNhdXRlbG9zbywgcmVmb3LDp2FuZG8gbyBjZW7DoXJpbyBkZSBjcmVzY2ltZW50byBtb2RlcmFkbyBwcm9qZXRhZG8gcGFyYSBvIHBlcsOtb2RvDQoNCiMjICpBdGl2aWRhZGUgRWNvbsO0bWljYSBub3MgU2V0b3JlcyAoQWdyb3BlY3XDoXJpYS9JbmTDunN0cmlhL1NlcnZpw6dvcykqDQoNCkFvIGFuYWxpc2FyIGRpZmVyZW50ZXMgc2V0b3JlcyBkYSBlY29ub21pYSBwZXJjZWJlLXNlIG8gbyBtZXNtbyBhdW1lbnRvIGRvIMONbmRpY2UgZGUgQXRpdmlkYWRlIEVjb27DtG1pY2EgYWdvcmEgZW0gbWVpbyBhb3MgZGlmZXJlbnRlcyBzZXRvcmVzIGRhIGVjb25vbWlhIG5hY2lvbmFsLCBhcyBhbHRhcyBmb3JhbSBkZSAxMywxJSBuYSBhZ3JvcGVjdcOhcmlhLCAxLDUlIG5hIGluZMO6c3RyaWEgZSAyLDElIGVtIHNlcnZpw6dvcy4gDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIENvbGV0YXIgZGFkb3MgZG9zIHNldG9yZXMgKElCQy1CciBzZXRvcmlhbCkgZGUgamFuZWlyby8yMDI0IGF0w6kgZGV6ZW1icm8vMjAyNQ0KIyBBVEVOw4fDg086IFPDo28gbsO6bWVyb3Mtw61uZGljZSBjb20gYmFzZSAyMDIyID0gMTAwLCBOw4NPIHPDo28gdmFsb3JlcyBlbSBSJCBtaWxow7Vlcw0KDQpkYWRvc19zZXJ2aWNvcyA8LSBnZXRfc2VyaWVzKDI5NjA2LCBzdGFydF9kYXRlID0gIjIwMjQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDI1LTEyLTMwIikgJT4lIA0KICByZW5hbWUoU2Vydmljb3MgPSBgMjk2MDZgKSAgIyBJQkMtQnIgU2VydmnDp29zICjDrW5kaWNlKSAtIGNvbSBhanVzdGUgc2F6b25hbA0KDQpkYWRvc19hZ3JvIDwtIGdldF9zZXJpZXMoMjk2MDIsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjUtMTItMzAiKSAlPiUgDQogIHJlbmFtZShBZ3JvcGVjdWFyaWEgPSBgMjk2MDJgKSAgIyBJQkMtQnIgQWdyb3BlY3XDoXJpYSAow61uZGljZSkgLSBjb20gYWp1c3RlIHNhem9uYWwNCg0KZGFkb3NfaW5kdXN0cmlhIDwtIGdldF9zZXJpZXMoMjk2MDQsIHN0YXJ0X2RhdGUgPSAiMjAyNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMjUtMTItMzAiKSAlPiUgDQogIHJlbmFtZShJbmR1c3RyaWEgPSBgMjk2MDRgKSAgIyBJQkMtQnIgSW5kw7pzdHJpYSAow61uZGljZSkgLSBjb20gYWp1c3RlIHNhem9uYWwNCg0KIyBDb21iaW5hciB0b2RvcyBvcyBkYWRvcw0KZGFkb3Nfc2V0b3JlcyA8LSBkYWRvc19zZXJ2aWNvcyAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX2Fncm8sIGJ5ID0gImRhdGUiKSAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX2luZHVzdHJpYSwgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgICMgTWFudGVyIHZhbG9yZXMgb3JpZ2luYWlzIGRvIMOtbmRpY2UgKGJhc2UgMjAyMiA9IDEwMCkNCiAgICBTZXJ2aWNvc19pbmRpY2UgPSBTZXJ2aWNvcywNCiAgICBBZ3JvcGVjdWFyaWFfaW5kaWNlID0gQWdyb3BlY3VhcmlhLA0KICAgIEluZHVzdHJpYV9pbmRpY2UgPSBJbmR1c3RyaWENCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgU2Vydmljb3NfaW5kaWNlLCBBZ3JvcGVjdWFyaWFfaW5kaWNlLCBJbmR1c3RyaWFfaW5kaWNlKSAlPiUNCiAgYXJyYW5nZShkYXRlKQ0KDQojIFZlcmlmaWNhciBzZSBow6EgZGFkb3MNCmlmKG5yb3coZGFkb3Nfc2V0b3JlcykgPT0gMCkgew0KICBzdG9wKCJOw6NvIGZvcmFtIGVuY29udHJhZG9zIGRhZG9zIHBhcmEgbyBwZXLDrW9kbyBzZWxlY2lvbmFkby4gVmVyaWZpcXVlIHNlIG9zIGPDs2RpZ29zIGVzdMOjbyBjb3JyZXRvcyBlIHNlIG9zIGRhZG9zIGVzdMOjbyBkaXNwb27DrXZlaXMuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIGRvIGVpeG8gWSBwYXJhIHpvb20gYXV0b23DoXRpY28NCnlfbWluIDwtIG1pbihjKGRhZG9zX3NldG9yZXMkU2Vydmljb3NfaW5kaWNlLCANCiAgICAgICAgICAgICAgIGRhZG9zX3NldG9yZXMkQWdyb3BlY3VhcmlhX2luZGljZSwgDQogICAgICAgICAgICAgICBkYWRvc19zZXRvcmVzJEluZHVzdHJpYV9pbmRpY2UpLCBuYS5ybSA9IFRSVUUpDQp5X21heCA8LSBtYXgoYyhkYWRvc19zZXRvcmVzJFNlcnZpY29zX2luZGljZSwgDQogICAgICAgICAgICAgICBkYWRvc19zZXRvcmVzJEFncm9wZWN1YXJpYV9pbmRpY2UsIA0KICAgICAgICAgICAgICAgZGFkb3Nfc2V0b3JlcyRJbmR1c3RyaWFfaW5kaWNlKSwgbmEucm0gPSBUUlVFKQ0KDQojIEFkaWNpb25hciB1bWEgbWFyZ2VtIGRlIDUlIHBhcmEgbWVsaG9yIHZpc3VhbGl6YcOnw6NvDQp5X3JhbmdlIDwtIHlfbWF4IC0geV9taW4NCnlfbWluX2FqdXN0YWRvIDwtIG1heCgwLCBmbG9vcih5X21pbiAtIDAuMDUgKiB5X3JhbmdlKSkNCnlfbWF4X2FqdXN0YWRvIDwtIGNlaWxpbmcoeV9tYXggKyAwLjA1ICogeV9yYW5nZSkNCg0KIyBDcmlhciBvIGdyw6FmaWNvIGNvbSBwb250b3MgKG1hcmtlcnMpIG5hcyBsaW5oYXMNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllOiBTZXJ2acOnb3MNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3Nfc2V0b3JlcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgU2Vydmljb3NfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBTZXJ2acOnb3MiLA0KICAgIGNvbG9yID0gIiM0NmIxZTEiLCAgIyBBenVsIGNsYXJvDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KA0KICAgICAgZW5hYmxlZCA9IFRSVUUsICAgICAgICAjIEhBQklMSVRBIE9TIFBPTlRPUw0KICAgICAgcmFkaXVzID0gMywgICAgICAgICAgICAjIFRhbWFuaG8gZG8gcG9udG8NCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLCAgICAgIyBGb3JtYXRvOiBjw61yY3Vsbw0KICAgICAgZmlsbENvbG9yID0gIiM0NmIxZTEiLCAjIENvciBkZSBwcmVlbmNoaW1lbnRvDQogICAgICBsaW5lV2lkdGggPSAxLCAgICAgICAgICMgQm9yZGEgZG8gcG9udG8NCiAgICAgIGxpbmVDb2xvciA9ICIjRkZGRkZGIiAgIyBDb3IgZGEgYm9yZGEgKGJyYW5jbyBwYXJhIGRlc3RhY2FyKQ0KICAgICksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogQWdyb3BlY3XDoXJpYQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZXRvcmVzICU+JSBzZWxlY3QodGltZXN0YW1wLCBBZ3JvcGVjdWFyaWFfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBBZ3JvcGVjdcOhcmlhIiwNCiAgICBjb2xvciA9ICIjZmViNzEyIiwgICMgRG91cmFkbw0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdCgNCiAgICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgICAgcmFkaXVzID0gMywNCiAgICAgIHN5bWJvbCA9ICJjaXJjbGUiLA0KICAgICAgZmlsbENvbG9yID0gIiNmZWI3MTIiLA0KICAgICAgbGluZVdpZHRoID0gMSwNCiAgICAgIGxpbmVDb2xvciA9ICIjRkZGRkZGIg0KICAgICksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogSW5kw7pzdHJpYQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZXRvcmVzICU+JSBzZWxlY3QodGltZXN0YW1wLCBJbmR1c3RyaWFfaW5kaWNlKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIklCQy1CciBJbmTDunN0cmlhIiwNCiAgICBjb2xvciA9ICIjMDIwMjNjIiwgICMgQXp1bCBlc2N1cm8NCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoDQogICAgICBlbmFibGVkID0gVFJVRSwNCiAgICAgIHJhZGl1cyA9IDMsDQogICAgICBzeW1ib2wgPSAiY2lyY2xlIiwNCiAgICAgIGZpbGxDb2xvciA9ICIjMDIwMjNjIiwNCiAgICAgIGxpbmVXaWR0aCA9IDEsDQogICAgICBsaW5lQ29sb3IgPSAiI0ZGRkZGRiINCiAgICApLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSAoYmFzZTogMjAyMiA9IDEwMCkiKSwNCiAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0iKSwNCiAgICBtaW4gPSB5X21pbl9hanVzdGFkbywNCiAgICBtYXggPSB5X21heF9hanVzdGFkbywNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSAxMDAsDQogICAgICAgIGNvbG9yID0gIiM2NjY2NjYiLA0KICAgICAgICBkYXNoU3R5bGUgPSAiZGFzaCIsDQogICAgICAgIHdpZHRoID0gMSwNCiAgICAgICAgbGFiZWwgPSBsaXN0KHRleHQgPSAiQmFzZSAoMjAyMiA9IDEwMCkiKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiSUJDLUJyIHBvciBTZXRvciAtIEF0aXZpZGFkZSBFY29uw7RtaWNhIGNvbSBBanVzdGUgU2F6b25hbCIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIsONbmRpY2UgYmFzZTogMjAyMiA9IDEwMCAtIFBlcsOtb2RvOiBKYW4vMjAyNCBhIERlei8yMDI1IikgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsIA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChTR1MgLSBDw7NkaWdvczogMjk2MDYsIDI5NjAyLCAyOTYwNCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAnbW9udGgnLCBjb3VudCA9IDMsIHRleHQgPSAnM00nKSwNCiAgICAgIGxpc3QodHlwZSA9ICdtb250aCcsIGNvdW50ID0gNiwgdGV4dCA9ICc2TScpLA0KICAgICAgbGlzdCh0eXBlID0gJ2FsbCcsIHRleHQgPSAnVG9kbyBwZXLDrW9kbycpDQogICAgKSwNCiAgICBzZWxlY3RlZCA9IDINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGhlYWRlckZvcm1hdCA9ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij48Yj57cG9pbnQua2V5fTwvYj48L3NwYW4+PGJyLz4nLA0KICAgIHBvaW50Rm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjp7c2VyaWVzLmNvbG9yfSI+4pePPC9zcGFuPiB7c2VyaWVzLm5hbWV9OiA8Yj57cG9pbnQueTouMWZ9PC9iPjxici8+JywNCiAgICB2YWx1ZURlY2ltYWxzID0gMQ0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQpBcGVzYXIgZGEgZGVzYWNlbGFyYcOnw6NvIG8gc2V0b3IgZGUgc2VydmnDp29zIHNlIG1hbnRldmUgYXF1ZWNpZG8gYW8gbG9uZ28gZG8gYW5vLCBjb20gdW1hIGluZmxhw6fDo28gcGVyc2lzdGVudGUgcXVlIGltcGVkaXUgdW1hIGNyZXNjZW50ZSBtYWlvciBuZXNzZSBtZXJjYWRvLiBPcyBzZXJ2acOnb3MgZGUgaW5mb3JtYcOnw6NvIGUgY29tdW5pY2HDp8OjbyBjcmVzY2VyYW0gMS43JSBlIGFxdWVsZXMgcHJlc3RhZG9zIGFzIGZhbcOtbGlhcyBjcmVzY2VyYW0gMS4xJSBPIGFncm9uZWfDs2NpbyBwZXJtYW5lY2Ugc2VuZG8gdW0gcGlsYXIgZnVuZGFtZW50YWwgcGFyYSBhIGVjb25vbWlhIGRvIHBhw61zLCBlbSB1bSBjb250ZXh0byBkZSByZWN1cGVyYcOnw6NvIGVtIGN1bHR1cmFzIGVzdHJhdMOpZ2ljYXMgY29tIGluZGljYcOnw7VlcyBkZSB1bWEgc2FmcmEgZGUgZ3LDo29zIDIwMjQvMjUgZXN0w6EgZW0gMzUwIG1pbGjDtWVzIGRlIHRvbmVsYWRhcy4gTyBkZXNlbXBlbmhvIGRvIEFncm8gdGVtIGVmZWl0byBkaXJldG8gZG8gUElCIGUgbmEgYmFsYW7Dp2EgY29tZXJjaWFsIGNvbSBvIElCQy1CciBjb250cmlidWluZG8gcGFyYSBhIGVsYWJvcmHDp8OjbyBkYSBwb2zDrXRpY2EgbW9uZXTDoXJpYS4gTyBzZXRvciBpbmR1c3RyaWFsIHBvZGUgYXByZXNlbnRhciBkZXNhZmlvcyBlbSAyMDI2IGVtIHJlbGHDp8OjbyBhb3MgZXN0b3F1ZXMgZWxldmFkb3MgZSB1bSBjw6JtYmlvIG3DqWRpbyBlc3BlY3VsYWRvIHBhcmEgUiQgNSw1MC4gICANCg0KDQojIyAqQ2Vuw6FyaW8gZG8gY3LDqWRpdG8gZGUgY29uc3VtbyBuYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhKg0KDQpBIGRpbsOibWljYSBkbyBjcsOpZGl0byBjb25zdGl0dWkgdW0gZG9zIHBpbGFyZXMgZGEgYXRpdmlkYWRlIGVjb27DtG1pY2Egbm8gQnJhc2lsLCBmdW5jaW9uYW5kbyBjb21vIG1lY2FuaXNtbyByZWxldmFudGUgZGUgYW1wbGlmaWNhw6fDo28gZG8gY2ljbG8gZG9tw6lzdGljby4gQW8gZmFjaWxpdGFyIG8gYWNlc3NvIGEgZmluYW5jaWFtZW50byBwYXJhIGZhbcOtbGlhcyBlIGVtcHJlc2FzLCBvIGNyw6lkaXRvIHN1c3RlbnRhIG8gY29uc3VtbywgY29udHJpYnVpIHBhcmEgYSBleHBhbnPDo28gZGEgZGVtYW5kYSBhZ3JlZ2FkYSBlIGluZmx1ZW5jaWEgZGlyZXRhbWVudGUgbyByaXRtbyBkZSBjcmVzY2ltZW50byBlY29uw7RtaWNvLg0KTyBjcsOpZGl0byBhdHVhIGNvbW8gbWVjYW5pc21vIGRlIGFtcGxpZmljYcOnw6NvIGRvIGNpY2xvIGVjb27DtG1pY28sIGVtIHF1ZSBhZmV0YSBkaXJldGFtZW50ZSBhIGNhcGFjaWRhZGUgZGUgY29uc3VtbyBkYXMgZmFtw61saWFzLkVtIHBlcsOtb2RvcyBkZSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8sIGEgZXhwYW5zw6NvIGRhcyBjb25jZXNzw7VlcyByZWZvcsOnYSBvIGNyZXNjaW1lbnRvIGRhIGRlbWFuZGEgZG9tw6lzdGljYTsgcG9yIG91dHJvIGxhZG8sIGVtIG1vbWVudG9zIGRlIGRlc2FjZWxlcmHDp8OjbywgbyByZWN1byBkbyBjcsOpZGl0byB0ZW5kZSBhIGludGVuc2lmaWNhciBhIGNvbnRyYcOnw6NvIGRhIGF0aXZpZGFkZS4NCkEgYW7DoWxpc2UgY29uanVudGEgZGEgbWFzc2EgZGUgcmVuZGltZW50byByZWFsIGhhYml0dWFsIGRhcyBmYW3DrWxpYXMgZSBkYXMgY29uY2Vzc8O1ZXMgZGUgY3LDqWRpdG8gY29tIHJlY3Vyc29zIGxpdnJlcyBwYXJhIHBlc3NvYXMgZsOtc2ljYXMgc3VnZXJlIHF1ZSwgZW0gZGV0ZXJtaW5hZG9zIG1vbWVudG9zIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlybywgYSBkaW7Dom1pY2EgZG8gY3LDqWRpdG8gYXNzdW1lIGNhcsOhdGVyIGFudGVjZWRlbnRlIGVtIHJlbGHDp8OjbyDDoCBldm9sdcOnw6NvIGRhIHJlbmRhIGFncmVnYWRhLiBPYnNlcnZhLXNlIHF1ZSBwZXLDrW9kb3MgZGUgYWNlbGVyYcOnw6NvIG5hcyBjb25jZXNzw7VlcyB0ZW5kZW0gYSBwcmVjZWRlciBtb3ZpbWVudG9zIG1haXMgaW50ZW5zb3MgZGUgcmVjdXBlcmHDp8OjbyBkYSBtYXNzYSBzYWxhcmlhbCwgaW5kaWNhbmRvIHF1ZSBhIGV4cGFuc8OjbyBkbyBmaW5hbmNpYW1lbnRvIHBvZGUgYXR1YXIgY29tbyB1bSBkb3MgcHJpbWVpcm9zIHNpbmFpcyBkZSBtZWxob3JhIG5hIGRlbWFuZGEgZG9tw6lzdGljYS4NCkVudHJlIDIwMTcgZSAyMDE5LCBwb3IgZXhlbXBsbywgYXMgY29uY2Vzc8O1ZXMgw6BzIGZhbcOtbGlhcyBhcHJlc2VudGFyYW0gdHJhamV0w7NyaWEgZGUgY3Jlc2NpbWVudG8gY29uc2lzdGVudGUsIHNhaW5kbyBkZSBwYXRhbWFyZXMgcHLDs3hpbW9zIGEgUiQgMTEwIGJpbGjDtWVzIG1lbnNhaXMgcGFyYSBuw612ZWlzIGFjaW1hIGRlIFIkIDE1MCBiaWxow7VlcywgZW5xdWFudG8gYSBtYXNzYSBzYWxhcmlhbCBhdmFuw6dhdmEgZGUgZm9ybWEgbWFpcyBncmFkdWFsLiBFc3NlIGNvbXBvcnRhbWVudG8gc3VnZXJlIHF1ZSBhIHJldG9tYWRhIGRvIGNvbnN1bW8gb2NvcnJldSBpbmljaWFsbWVudGUgcG9yIG1laW8gZGEgYW1wbGlhw6fDo28gZG8gY3LDqWRpdG8sIGNvbSBhIHJlbmRhIHJlYWdpbmRvIGRlIG1hbmVpcmEgbWFpcyBsZW50YSBhbyBsb25nbyBkbyBwcm9jZXNzbyBkZSByZWN1cGVyYcOnw6NvIGVjb27DtG1pY2EuDQpEaW7Dom1pY2Egc2VtZWxoYW50ZSBwb2RlIHNlciBvYnNlcnZhZGEgbm8gcGVyw61vZG8gcG9zdGVyaW9yIGFvIGNob3F1ZSBkYSBwYW5kZW1pYS4gQXDDs3MgYSBmb3J0ZSBjb250cmHDp8OjbyBkZSAyMDIwLCBhcyBjb25jZXNzw7VlcyBkZSBjcsOpZGl0byDDoHMgcGVzc29hcyBmw61zaWNhcyByZXRvbWFyYW0gdHJhamV0w7NyaWEgZGUgYWx0YSBkZSBtYW5laXJhIHJlbGF0aXZhbWVudGUgcsOhcGlkYSwgdWx0cmFwYXNzYW5kbyBSJCAyMDAgYmlsaMO1ZXMgbWVuc2FpcyBqw6EgZW0gMjAyMSBlIGFsY2Fuw6dhbmRvIG7DrXZlaXMgc3VwZXJpb3JlcyBhIFIkIDMwMCBiaWxow7VlcyBlbSAyMDI1LiBBIG1hc3NhIHNhbGFyaWFsIHJlYWwsIHBvciBzdWEgdmV6LCBhcHJlc2VudG91IHJlY3VwZXJhw6fDo28gbWFpcyBncmFkdWFsLCBhdmFuw6dhbmRvIGRlIGNlcmNhIGRlIFIkIDI3MyBiaWxow7VlcyBlbSAyMDIxIHBhcmEgYXByb3hpbWFkYW1lbnRlIFIkIDM2NyBiaWxow7VlcyBhbyBmaW5hbCBkZSAyMDI1LiBFc3NlIGRlc2NvbXBhc3NvIHRlbXBvcmFsIHJlZm9yw6dhIGEgaGlww7N0ZXNlIGRlIHF1ZSBvIGNyw6lkaXRvIHBvZGUgYXR1YXIgY29tbyBtZWNhbmlzbW8gZGUgYW50ZWNpcGHDp8OjbyBkbyBjb25zdW1vLCBwZXJtaXRpbmRvIHF1ZSBmYW3DrWxpYXMgYWp1c3RlbSBzZXVzIGdhc3RvcyBhbnRlcyBkYSBjb25zb2xpZGHDp8OjbyBwbGVuYSBkbyBjcmVzY2ltZW50byBkYSByZW5kYS4NCkRvIHBvbnRvIGRlIHZpc3RhIGVjb27DtG1pY28sIGVzc2UgY29tcG9ydGFtZW50byBwb2RlIHNlciBleHBsaWNhZG8gcGVsYSBtYWlvciBzZW5zaWJpbGlkYWRlIGRhcyBjb25jZXNzw7VlcyDDoHMgY29uZGnDp8O1ZXMgZmluYW5jZWlyYXMgZSDDoHMgZXhwZWN0YXRpdmFzLiBBbHRlcmHDp8O1ZXMgbmEgcGVyY2Vww6fDo28gZGUgcmlzY28sIG5hIGxpcXVpZGV6IGRvIHNpc3RlbWEgZmluYW5jZWlybyBvdSBuYXMgZXhwZWN0YXRpdmFzIGVtIHJlbGHDp8OjbyBhbyBjaWNsbyBtb25ldMOhcmlvIHRlbmRlbSBhIGltcGFjdGFyIHJhcGlkYW1lbnRlIGEgb2ZlcnRhIGUgYSBkZW1hbmRhIHBvciBjcsOpZGl0bywgZW5xdWFudG8gYSBldm9sdcOnw6NvIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZSBkYSByZW5kYSBvY29ycmUgZGUgZm9ybWEgbWFpcyBncmFkdWFsLiBBc3NpbSwgYSBleHBhbnPDo28gZG8gY3LDqWRpdG8gbsOjbyBhcGVuYXMgcmVmbGV0ZSBhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGNvcnJlbnRlLCBtYXMgdGFtYsOpbSBwb2RlIHNpbmFsaXphciBtdWRhbsOnYXMgZnV0dXJhcyBubyByaXRtbyBkYSBkZW1hbmRhIGRvbcOpc3RpY2EuDQpEZXNzYSBmb3JtYSwgb3MgZGFkb3MgcmVjZW50ZXMgc3VnZXJlbSBxdWUgYXMgY29uY2Vzc8O1ZXMgw6BzIGZhbcOtbGlhcyBkZXNlbXBlbmhhbSBwYXBlbCByZWxldmFudGUgY29tbyBpbmRpY2Fkb3IgYW50ZWNlZGVudGUgZG8gY2ljbG8gZWNvbsO0bWljbyBicmFzaWxlaXJvLiBBbyBhbXBsaWFyIGEgY2FwYWNpZGFkZSBkZSBjb25zdW1vIGVtIG1vbWVudG9zIGRlIG1lbGhvcmEgZGFzIGNvbmRpw6fDtWVzIGZpbmFuY2VpcmFzLCBvIGNyw6lkaXRvIGF0dWEgY29tbyB2ZXRvciBkZSBwcm9wYWdhw6fDo28gZGEgYXRpdmlkYWRlLCByZWZvcsOnYW5kbyBtb3ZpbWVudG9zIGRlIGV4cGFuc8OjbyBlIGNvbnRyaWJ1aW5kbyBwYXJhIGEgZGluw6JtaWNhIG9ic2VydmFkYSBuYSBtYXNzYSBzYWxhcmlhbCBhbyBsb25nbyBkbyB0ZW1wby4NCkEgYW7DoWxpc2UgZGEgZXZvbHXDp8OjbyBjb25qdW50YSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsIGUgZGFzIGNvbmNlc3PDtWVzIGRlIGNyw6lkaXRvIMOgcyBwZXNzb2FzIGbDrXNpY2FzIGV2aWRlbmNpYSBvIHBhcGVsIGNlbnRyYWwgZG8gY3LDqWRpdG8gbmEgZGluw6JtaWNhIHJlY2VudGUgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4gQW8gbG9uZ28gZG8gY2ljbG8sIG9ic2VydmEtc2UgcXVlIGEgZXhwYW5zw6NvIGRhcyBjb25jZXNzw7VlcyBuw6NvIGFwZW5hcyBhY29tcGFuaGEgYSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8sIG1hcywgZW0gZGV0ZXJtaW5hZG9zIG1vbWVudG9zLCBhbnRlY2VkZSBhIGFjZWxlcmHDp8OjbyBtYWlzIGludGVuc2EgZGEgcmVuZGEgYWdyZWdhZGEsIHN1Z2VyaW5kbyBxdWUgbyBjcsOpZGl0byBhdHVhIGNvbW8gbWVjYW5pc21vIGRlIGFudGVjaXBhw6fDo28gZG8gY29uc3VtbyBlIGNvbW8gYW1wbGlmaWNhZG9yIGRhIGRlbWFuZGEgZG9tw6lzdGljYS4NCg0KRGVzc2EgZm9ybWEsIG9zIGRhZG9zIGFuYWxpc2Fkb3Mgc3VnZXJlbSBxdWUgbyBjcsOpZGl0byBuw6NvIGRldmUgc2VyIGludGVycHJldGFkbyBhcGVuYXMgY29tbyB2YXJpw6F2ZWwgYXV4aWxpYXIsIG1hcyBjb21vIGNvbXBvbmVudGUgZXN0cnV0dXJhbCBkYSBkaW7Dom1pY2EgbWFjcm9lY29uw7RtaWNhIGJyYXNpbGVpcmEsIGRlc2VtcGVuaGFuZG8gcGFwZWwgZGV0ZXJtaW5hbnRlIHRhbnRvIG5hIGludGVuc2lmaWNhw6fDo28gZGFzIGZhc2VzIGRlIGV4cGFuc8OjbyBxdWFudG8gbmEgcHJvcGFnYcOnw6NvIGRlIHBlcsOtb2RvcyBkZSBkZXNhY2VsZXJhw6fDo28uDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcw0KIyAyODU0NTogTWFzc2EgZGUgcmVuZGltZW50byByZWFsIGhhYml0dWFsIChSJCBtaWxow7VlcykNCmRhZG9zX3JlbmRhIDwtIGdldF9zZXJpZXMoMjg1NDUsIHN0YXJ0X2RhdGUgPSAiMjAyMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSkgJT4lIA0KICByZW5hbWUoTWFzc2FfcmVuZGEgPSBgMjg1NDVgKQ0KDQojIDI0NDQ0OiBDb25jZXNzw7VlcyBkZSBjcsOpZGl0byAtIHJlY3Vyc29zIGxpdnJlcyAtIHNhem9uYWxtZW50ZSBhanVzdGFkYXMgKFIkIG1pbGjDtWVzKQ0KZGFkb3NfY3JlZGl0byA8LSBnZXRfc2VyaWVzKDI0NDQ0LCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKENyZWRpdG8gPSBgMjQ0NDRgKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX3JlbmRhICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfY3JlZGl0bywgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vID0geWVhcihkYXRlKSwNCiAgICBtZXMgPSBtb250aChkYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpLA0KICAgICMgQ29udmVydGVyIGFtYmFzIHBhcmEgYmlsaMO1ZXMgKHZpc3VhbGl6YcOnw6NvIG1haXMgbGltcGEpDQogICAgTWFzc2FfYmlsaG9lcyA9IHJvdW5kKE1hc3NhX3JlbmRhIC8gMTAwMCwgMSksDQogICAgQ3JlZGl0b19iaWxob2VzID0gcm91bmQoQ3JlZGl0byAvIDEwMDAsIDEpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCBhbm8sIG1lcywgdGltZXN0YW1wLCBNYXNzYV9iaWxob2VzLCBDcmVkaXRvX2JpbGhvZXMsIE1hc3NhX3JlbmRhLCBDcmVkaXRvKSAlPiUNCiAgYXJyYW5nZShkYXRlKQ0KDQojIFZlcmlmaWNhciBkYWRvcw0KaWYobnJvdyhkYWRvc19jb21iaW5hZG9zKSA9PSAwKSB7DQogIHN0b3AoIkRhZG9zIG7Do28gZW5jb250cmFkb3MuIFZlcmlmaXF1ZSBvcyBjw7NkaWdvcy4iKQ0KfQ0KDQojIENhbGN1bGFyIGxpbWl0ZXMgcGFyYSBlaXhvcw0KcmVuZGFfbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJE1hc3NhX2JpbGhvZXMsIG5hLnJtID0gVFJVRSkNCnJlbmRhX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRNYXNzYV9iaWxob2VzLCBuYS5ybSA9IFRSVUUpDQpjcmVkaXRvX21pbiA8LSBtaW4oZGFkb3NfY29tYmluYWRvcyRDcmVkaXRvX2JpbGhvZXMsIG5hLnJtID0gVFJVRSkNCmNyZWRpdG9fbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJENyZWRpdG9fYmlsaG9lcywgbmEucm0gPSBUUlVFKQ0KDQojIE1hcmdlbSBkZSA1JQ0KcmVuZGFfcmFuZ2UgPC0gcmVuZGFfbWF4IC0gcmVuZGFfbWluDQpjcmVkaXRvX3JhbmdlIDwtIGNyZWRpdG9fbWF4IC0gY3JlZGl0b19taW4NCg0KIyBDcmlhciBncsOhZmljbyBjb20gZHVhcyBzw6lyaWVzIGVtIGJpbGjDtWVzDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICAjIFPDqXJpZSAxOiBNYXNzYSBkZSByZW5kYSAoY29sdW5hcykgLSBlaXhvIGVzcXVlcmRvDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbWJpbmFkb3MgJT4lIHNlbGVjdCh0aW1lc3RhbXAsIE1hc3NhX2JpbGhvZXMpKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJNYXNzYSBTYWxhcmlhbCAoUiQgYmlsaMO1ZXMpIiwNCiAgICBjb2xvciA9ICIjZmViNzEyIiwgICMgVmVyZGUNCiAgICB5QXhpcyA9IDAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiBiaWxow7VlcyIpDQogICkgJT4lDQogICMgU8OpcmllIDI6IENvbmNlc3PDtWVzIGRlIGNyw6lkaXRvIChsaW5oYSkgLSBlaXhvIGRpcmVpdG8NCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfY29tYmluYWRvcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgQ3JlZGl0b19iaWxob2VzKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIkNvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLCAgIyBBenVsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSAzKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiBiaWxow7VlcyIpDQogICkgJT4lDQogICMgQ29uZmlndXJhciBlaXhvcyBZIGR1YWlzIChhbWJvcyBlbSBiaWxow7VlcykNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJNYXNzYSBTYWxhcmlhbCAoUiQgYmlsaMO1ZXMpIiksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSBiaSIpLA0KICAgICAgbWluID0gZmxvb3IocmVuZGFfbWluIC0gMC4wNSAqIHJlbmRhX3JhbmdlKSwNCiAgICAgIG1heCA9IGNlaWxpbmcocmVuZGFfbWF4ICsgMC4wNSAqIHJlbmRhX3JhbmdlKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIkNvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykiKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0gYmkiKSwNCiAgICAgIG1pbiA9IGZsb29yKGNyZWRpdG9fbWluIC0gMC4wNSAqIGNyZWRpdG9fcmFuZ2UpLA0KICAgICAgbWF4ID0gY2VpbGluZyhjcmVkaXRvX21heCArIDAuMDUgKiBjcmVkaXRvX3JhbmdlKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICdkYXRldGltZScsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlOiViICVZfScpDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiUmVuZGEgdnMuIE1lcmNhZG8gZGUgQ3LDqWRpdG8iKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJNYXNzYSBTYWxhcmlhbCBlIENvbmNlc3PDtWVzIGRlIENyw6lkaXRvIChSJCBiaWxow7VlcykgLSBEYWRvcyBjb20gYWp1c3RlIHNhem9uYWwiKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCAoU0dTIC0gQ8OzZGlnb3M6IDI4NTQ1LCAyNDQ0NCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPlIkIHtwb2ludC55Oi4xZn0gYmlsaMO1ZXM8L2I+PGJyLz4nDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMDUsDQogICAgICBib3JkZXJXaWR0aCA9IDAuNQ0KICAgICksDQogICAgbGluZSA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQojIyAqQW7DoWxpc2UgZG8gTWVyY2FkbyBkZSBUcmFiYWxobyoNCg0KQSBkaW7Dom1pY2EgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyB0ZW0gZGVzZW1wZW5oYWRvIHBhcGVsIGNlbnRyYWwgbmEgdHJhamV0w7NyaWEgcmVjZW50ZSBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhLiBBIGV2b2x1w6fDo28gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvLCBkYSBwb3B1bGHDp8OjbyBuYSBmb3LDp2EgZGUgdHJhYmFsaG8gZSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsIHJldmVsYSBuw6NvIGFwZW5hcyBvcyBlZmVpdG9zIGRvcyBkaWZlcmVudGVzIGNpY2xvcyBlY29uw7RtaWNvcyBlbmZyZW50YWRvcyBwZWxvIHBhw61zIG5hIMO6bHRpbWEgZMOpY2FkYSwgbWFzIHRhbWLDqW0gb3MgZnVuZGFtZW50b3MgcXVlIHN1c3RlbnRhbSBvIG1vbWVudG8gYXR1YWwgZGEgZWNvbm9taWEuDQpFbnRyZSAyMDE1IGUgMjAxNywgYSBlY29ub21pYSBicmFzaWxlaXJhIGVuZnJlbnRvdSBmb3J0ZSBjb250cmHDp8OjbywgcmVmbGV0aWRhIG5hIGRldGVyaW9yYcOnw6NvIGFicnVwdGEgZG8gbWVyY2FkbyBkZSB0cmFiYWxoby4NCkEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvIGF2YW7Dp291IGRlIGFwcm94aW1hZGFtZW50ZSA2LDUlIHBhcmEgcGF0YW1hciBwcsOzeGltbyBkZSAxNCUsIGNvbmZpZ3VyYW5kbyB1bWEgZHVwbGljYcOnw6NvIGRvIGRlc2VtcHJlZ28gZW0gY3VydG8gaW50ZXJ2YWxvIGRlIHRlbXBvLiBFc3NlIG1vdmltZW50byBmb2kgYWNvbXBhbmhhZG8gcG9yIGVuZnJhcXVlY2ltZW50byBkYSByZW5kYSBhZ3JlZ2FkYSBlIHJldHJhw6fDo28gZG8gY29uc3VtbyBkYXMgZmFtw61saWFzLg0KQWluZGEgcXVlIGEgcG9wdWxhw6fDo28gbmEgZm9yw6dhIGRlIHRyYWJhbGhvIHRlbmhhIG1hbnRpZG8gdGVuZMOqbmNpYSBlc3RydXR1cmFsIGRlIGNyZXNjaW1lbnRvLCBvIGNob3F1ZSByZWNlc3Npdm8gc2UgdHJhZHV6aXUgZW0gaW5jYXBhY2lkYWRlIGRlIGFic29yw6fDo28gZGVzc2EgZm9yw6dhIGRlIHRyYWJhbGhvLCBhbXBsaWFuZG8gYSBvY2lvc2lkYWRlIGUgcmVkdXppbmRvIG8gZGluYW1pc21vIGRhIGVjb25vbWlhIGRvbcOpc3RpY2EuDQpPIG1lcmNhZG8gZGUgdHJhYmFsaG8sIG5lc3NlIHBlcsOtb2RvLCBhdHVvdSBjb21vIGNhbmFsIGRlIHRyYW5zbWlzc8OjbyBkYSByZWNlc3PDo28sIHJlZm9yw6dhbmRvIG8gY2ljbG8gbmVnYXRpdm8uDQpOb3MgYW5vcyBzdWJzZXF1ZW50ZXMsIG9ic2Vydm91LXNlIGVzdGFiaWxpemHDp8OjbyBkbyBkZXNlbXByZWdvLCBwb3LDqW0gYWluZGEgZW0gbsOtdmVpcyBlbGV2YWRvcywgc3VwZXJpb3JlcyBhIDExJS4NCkEgcmVjdXBlcmHDp8OjbyBlY29uw7RtaWNhIG1vc3Ryb3Utc2UgbW9kZXJhZGEgZSBpbnN1ZmljaWVudGUgcGFyYSBwcm9tb3ZlciByZWFic29yw6fDo28gcsOhcGlkYSBkYSBtw6NvIGRlIG9icmEgZGVzZW1wcmVnYWRhLiBBIG1hc3NhIHNhbGFyaWFsIGFwcmVzZW50b3UgY3Jlc2NpbWVudG8gbGltaXRhZG8sIHJlc3RyaW5naW5kbyBhIGNhcGFjaWRhZGUgZGUgYWNlbGVyYcOnw6NvIGRvIGNvbnN1bW8uDQpFc3NlIHBlcsOtb2RvIGZvaSBjYXJhY3Rlcml6YWRvIHBvciByZWN1cGVyYcOnw6NvIGZyw6FnaWwsIGNvbSBlbGV2YWRvIGdyYXUgZGUgb2Npb3NpZGFkZSBubyBtZXJjYWRvIGRlIHRyYWJhbGhvLg0KDQpBIGZvcnRlIGNvbXByZXNzw6NvIGRvIGRlc2VtcHJlZ28gZWxldm91IGEgcmVuZGEgZGlzcG9uw612ZWwgZGFzIGZhbcOtbGlhcyBlIGZvcnRhbGVjZXUgbyBjb25zdW1vIGRvbcOpc3RpY28sIGNvbXBvbmVudGUgY2VudHJhbCBkbyBQSUIgYnJhc2lsZWlyby4NCk8gbWVyY2FkbyBkZSB0cmFiYWxobyBkZWl4b3UgZGUgYXR1YXIgY29tbyByZXN0cmnDp8OjbyBlIHBhc3NvdSBhIGZ1bmNpb25hciBjb21vIG1lY2FuaXNtbyBkZSBwcm9wYWdhw6fDo28gZG8gY3Jlc2NpbWVudG8uDQoNCkNvbSBkZXNlbXByZWdvIGVtIHRvcm5vIGRlIDUlLCBvIGdyYXUgZGUgb2Npb3NpZGFkZSBkYSBlY29ub21pYSBlbmNvbnRyYS1zZSByZWR1emlkbyBwYXJhIHBhZHLDtWVzIGhpc3TDs3JpY29zIG5hY2lvbmFpcy4NCkVzc2UgY2Vuw6FyaW8gaW1wbGljYTogTWFpb3IgcHJlc3PDo28gcG90ZW5jaWFsIHNvYnJlIHNhbMOhcmlvcywNClJlZHXDp8OjbyBkYSBtYXJnZW0gZGUgY3Jlc2NpbWVudG8gdmlhIGFic29yw6fDo28gYWRpY2lvbmFsIGRlIHRyYWJhbGhhZG9yZXMsRGVwZW5kw6puY2lhIGNyZXNjZW50ZSBkZSBnYW5ob3MgZGUgcHJvZHV0aXZpZGFkZSBwYXJhIHN1c3RlbnRhciBleHBhbnPDo28gZnV0dXJhDQoNCg0KQSBldmlkw6puY2lhIGVtcMOtcmljYSBzdWdlcmUgcXVlIG8gbWVyY2FkbyBkZSB0cmFiYWxobyB0ZW0gc2lkbyBvIHByaW5jaXBhbCB2ZXRvciBkYSByZXRvbWFkYSByZWNlbnRlIGRhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEuIEEgZm9ydGUgY29tcHJlc3PDo28gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvICBxdWUgcmVjdW91IHBhcmEgbsOtdmVpcyBoaXN0b3JpY2FtZW50ZSBiYWl4b3MgIGNvbWJpbmFkYSDDoCBlc3RhYmlsaXphw6fDo28gZGEgcG9wdWxhw6fDo28gbmEgZm9yw6dhIGRlIHRyYWJhbGhvIGUgYW8gYXZhbsOnbyBjb25zaXN0ZW50ZSBkYSBtYXNzYSBzYWxhcmlhbCByZWFsLCBjb25zb2xpZG91IHVtIGFtYmllbnRlIGZhdm9yw6F2ZWwgw6AgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcywgcHJpbmNpcGFsIGNvbXBvbmVudGUgZGEgZGVtYW5kYSBhZ3JlZ2FkYS4NCg0KQ29udHVkbywgYSBlY29ub21pYSBvcGVyYSBhdHVhbG1lbnRlIGNvbSBncmF1IHJlZHV6aWRvIGRlIG9jaW9zaWRhZGUuIENvbSBkZXNlbXByZWdvIHByw7N4aW1vIGRlIG3DrW5pbWFzIGhpc3TDs3JpY2FzIGUgZm9yw6dhIGRlIHRyYWJhbGhvIHJlbGF0aXZhbWVudGUgZXN0YWJpbGl6YWRhLCBhIG1hcmdlbSBkZSBleHBhbnPDo28gdmlhIG1haW9yIHV0aWxpemHDp8OjbyBkbyBmYXRvciB0cmFiYWxobyB0b3JuYS1zZSBsaW1pdGFkYS4gTmVzc2UgY29udGV4dG8sIGEgY29udGludWlkYWRlIGRvIGNyZXNjaW1lbnRvIGV4aWdpcsOhIHRyYW5zacOnw6NvIHBhcmEgdW0gbW9kZWxvIG1haXMgaW50ZW5zaXZvIGVtIHByb2R1dGl2aWRhZGUsIGludmVzdGltZW50byBlIGVmaWNpw6puY2lhIGFsb2NhdGl2YS4NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQoNCiMgQ29sZXRhciBkYWRvcw0KIyBJQkMtQnIgKGF0aXZpZGFkZSBlY29uw7RtaWNhKSAtIGPDs2RpZ28gMjQzNjMNCmRhZG9zX2liYyA8LSBnZXRfc2VyaWVzKDI0MzYzLCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCkpICU+JSANCiAgcmVuYW1lKElCQyA9IGAyNDM2M2ApDQoNCiMgVGF4YSBkZSBkZXNvY3VwYcOnw6NvIC0gUE5BREMgLSBjw7NkaWdvIDI0MzY5DQpkYWRvc19kZXNlbXByZWdvIDwtIGdldF9zZXJpZXMoMjQzNjksIHN0YXJ0X2RhdGUgPSAiMjAyMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSkgJT4lIA0KICByZW5hbWUoRGVzZW1wcmVnbyA9IGAyNDM2OWApDQoNCiMgQ29tYmluYXIgZGFkb3MNCmRhZG9zX2NvbWJpbmFkb3MgPC0gZGFkb3NfaWJjICU+JQ0KICBsZWZ0X2pvaW4oZGFkb3NfZGVzZW1wcmVnbywgYnkgPSAiZGF0ZSIpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vID0geWVhcihkYXRlKSwNCiAgICBtZXMgPSBtb250aChkYXRlLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksDQogICAgdGltZXN0YW1wID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGUpDQogICkgJT4lDQogIHNlbGVjdChkYXRlLCBhbm8sIG1lcywgdGltZXN0YW1wLCBJQkMsIERlc2VtcHJlZ28pICU+JQ0KICBhcnJhbmdlKGRhdGUpDQoNCiMgVmVyaWZpY2FyIGRhZG9zDQppZihucm93KGRhZG9zX2NvbWJpbmFkb3MpID09IDApIHsNCiAgc3RvcCgiRGFkb3MgbsOjbyBlbmNvbnRyYWRvcy4gVmVyaWZpcXVlIG9zIGPDs2RpZ29zLiIpDQp9DQoNCiMgQ2FsY3VsYXIgbGltaXRlcyBwYXJhIGVpeG9zDQppYmNfbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJElCQywgbmEucm0gPSBUUlVFKQ0KaWJjX21heCA8LSBtYXgoZGFkb3NfY29tYmluYWRvcyRJQkMsIG5hLnJtID0gVFJVRSkNCmRlc2VtcHJlZ29fbWluIDwtIG1pbihkYWRvc19jb21iaW5hZG9zJERlc2VtcHJlZ28sIG5hLnJtID0gVFJVRSkNCmRlc2VtcHJlZ29fbWF4IDwtIG1heChkYWRvc19jb21iaW5hZG9zJERlc2VtcHJlZ28sIG5hLnJtID0gVFJVRSkNCg0KIyBNYXJnZW0gZGUgNSUNCmliY19yYW5nZSA8LSBpYmNfbWF4IC0gaWJjX21pbg0KZGVzZW1wcmVnb19yYW5nZSA8LSBkZXNlbXByZWdvX21heCAtIGRlc2VtcHJlZ29fbWluDQoNCiMgQ3JpYXIgZ3LDoWZpY28NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogICMgU8OpcmllIDE6IElCQy1CciAobGluaGEpIC0gZWl4byBlc3F1ZXJkbw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBJQkMpKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiSUJDLUJyIChhdGl2aWRhZGUgZWNvbsO0bWljYSkiLA0KICAgIGNvbG9yID0gIiMwMjAyM2MiLCAgIyBBenVsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZSAyOiBUYXhhIGRlIGRlc2VtcHJlZ28gKGxpbmhhKSAtIGVpeG8gZGlyZWl0bw0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBEZXNlbXByZWdvKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlRheGEgZGUgRGVzZW1wcmVnbyAoJSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMiksDQogICAgeUF4aXMgPSAxLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgIyBDb25maWd1cmFyIGVpeG9zIFkgZHVhaXMgKGVpeG8gZG8gZGVzZW1wcmVnbyBpbnZlcnRpZG8pDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiSUJDLUJyICjDrW5kaWNlKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRSwNCiAgICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0iKSwNCiAgICAgIG1pbiA9IGZsb29yKGliY19taW4gLSAwLjA1ICogaWJjX3JhbmdlKSwNCiAgICAgIG1heCA9IGNlaWxpbmcoaWJjX21heCArIDAuMDUgKiBpYmNfcmFuZ2UpDQogICAgKSwNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVGF4YSBkZSBEZXNlbXByZWdvICglKSIpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSUiKSwNCiAgICAgIG1pbiA9IGZsb29yKGRlc2VtcHJlZ29fbWluIC0gMC4wNSAqIGRlc2VtcHJlZ29fcmFuZ2UpLA0KICAgICAgbWF4ID0gY2VpbGluZyhkZXNlbXByZWdvX21heCArIDAuMDUgKiBkZXNlbXByZWdvX3JhbmdlKSwNCiAgICAgIHJldmVyc2VkID0gVFJVRSAgIyBJTlZFUlRFIE8gRUlYTzogZGVzZW1wcmVnbyBjYWluZG8gPSBsaW5oYSBzdWJpbmRvDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gJ2RhdGV0aW1lJywNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICd7dmFsdWU6JWIgJVl9JykNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJBdGl2aWRhZGUgRWNvbsO0bWljYSB2cy4gTWVyY2FkbyBkZSBUcmFiYWxobyIpICU+JQ0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gIklCQy1CciAow61uZGljZSkgZSBUYXhhIGRlIERlc2VtcHJlZ28gKCUpIC0gRGFkb3MgbWVuc2FpcyIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChjw7NkLiAyNDM2MykgZSBJQkdFL1BOQURDIChjw7NkLiAyNDM2OSkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn17c2VyaWVzLnRvb2x0aXBPcHRpb25zLnZhbHVlU3VmZml4fTwvYj48YnIvPicNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBsaW5lID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IFRSVUUsDQogICAgICBjb25uZWN0TnVsbHMgPSBUUlVFDQogICAgKQ0KICApDQpgYGANCiMjICpSZW5kYSBlIENvbnN1bW8gZGFzIEZhbcOtbGlhcyoNCg0KQWNlcmNhIGRvIGNvbnN1bW8gZSBkYSByZW5kYSBkYXMgZmFtw61saWFzLCBhcGVzYXIgZGUgdW0gY2Vuw6FyaW8gZGUganVyb3MgZWxldmFkb3MsIG8gY29uc3VtbyBkb23DqXN0aWNvIG1hbnRldmUtc2UgcmVsYXRpdmFtZW50ZSByZXNpbGllbnRlIGFvIGxvbmdvIGRvIHBlcsOtb2RvLCBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBvciB1bSBtZXJjYWRvIGRlIHRyYWJhbGhvIGFpbmRhIGFxdWVjaWRvIGUgcG9yIGdhbmhvcyByZWFpcyBkZSByZW5kYS4gRGFkb3MgcmVjZW50ZXMgaW5kaWNhbSBxdWUgYSB0YXhhIGRlIGRlc2VtcHJlZ28gbm8gQnJhc2lsIHBlcm1hbmVjZXUgZW0gcGF0YW1hcmVzIGhpc3RvcmljYW1lbnRlIGJhaXhvcywgcHLDs3hpbW9zIGRlIDclIGFvIGxvbmdvIGRlIDIwMjUsIHNlZ3VuZG8gbyBJQkdFLCBlbnF1YW50byBhIG1hc3NhIGRlIHJlbmRpbWVudG8gcmVhbCBoYWJpdHVhbCBkbyB0cmFiYWxobyBhcHJlc2VudG91IGNyZXNjaW1lbnRvIGNvbnNpc3RlbnRlLCByZWZsZXRpbmRvIHRhbnRvIGEgZXhwYW5zw6NvIGRvIGVtcHJlZ28gcXVhbnRvIGEgcmVjdXBlcmHDp8OjbyBkbyBwb2RlciBkZSBjb21wcmEgZGEgcG9wdWxhw6fDo28uIEVzc2UgYXZhbsOnbyBkYSByZW5kYSByZWFsIHRlbmRlIGEgc3VzdGVudGFyIG8gY29uc3VtbyBkYXMgZmFtw61saWFzIG1lc21vIGVtIHVtIGFtYmllbnRlIGRlIGNyw6lkaXRvIG1haXMgcmVzdHJpdGl2bywgdW1hIHZleiBxdWUgcGFydGUgcmVsZXZhbnRlIGRvIGNvbnN1bW8gbm8gQnJhc2lsIGVzdMOhIGFzc29jaWFkYSDDoCByZW5kYSBjb3JyZW50ZS4NCg0KT3V0cm8gZmF0b3IgcmVsZXZhbnRlIGZvaSBvIGFycmVmZWNpbWVudG8gZGEgaW5mbGHDp8OjbyBkZSBhbGltZW50b3MsIHF1ZSBjb250cmlidWl1IHBhcmEgcmVkdXppciBwcmVzc8O1ZXMgc29icmUgbyBvcsOnYW1lbnRvIGRhcyBmYW3DrWxpYXMuIEEgY29tYmluYcOnw6NvIGRlIGNvbmRpw6fDtWVzIGNsaW3DoXRpY2FzIG1haXMgZmF2b3LDoXZlaXMgcGFyYSBhIHByb2R1w6fDo28gYWdyw61jb2xhLCBqdW50YW1lbnRlIGNvbSB1bSBjw6JtYmlvIHJlbGF0aXZhbWVudGUgZXN0w6F2ZWwsIGFqdWRvdSBhIGNvbnRlciBvIGN1c3RvIGRlIGl0ZW5zIGFsaW1lbnTDrWNpb3MgYW8gbG9uZ28gZG8gYW5vLCBsaWJlcmFuZG8gcGFyY2VsYSBtYWlvciBkYSByZW5kYSBkaXNwb27DrXZlbCBwYXJhIG91dHJvcyB0aXBvcyBkZSBjb25zdW1vLiBFc3NlIG1vdmltZW50byB0ZXZlIGltcGFjdG8gZGlyZXRvIHNvYnJlIG9zIGluZGljYWRvcmVzIGRlIGF0aXZpZGFkZSBsaWdhZG9zIGFvIGNvbnN1bW8sIGVzcGVjaWFsbWVudGUgbm8gdmFyZWpvIGFtcGxpYWRvLg0KDQpDb21vIHJlZmxleG8gZGVzc2VzIGZhdG9yZXMsIGluZGljYWRvcmVzIGRlIGNvbnN1bW8gbW9zdHJhcmFtIGRlc2VtcGVuaG8gcG9zaXRpdm8gbm8gZmluYWwgZG8gYW5vLiBFbSBkZXplbWJybywgbyBjb25zdW1vIGF2YW7Dp291IDE1LDY5JSwgcmVnaXN0cmFuZG8gY3Jlc2NpbWVudG8gZXhwcmVzc2l2byBlbSBjb21wYXJhw6fDo28gYW8gbWVzbW8gcGVyw61vZG8gZGUgMjAyNCwgbyBxdWUgcmVmb3LDp2EgYSBpZGVpYSBkZSBxdWUgYSBjb21iaW5hw6fDo28gZW50cmUgZXhwYW5zw6NvIGRvIGVtcHJlZ28sIHJlY3VwZXJhw6fDo28gZGEgcmVuZGEgcmVhbCBlIGRlc2FjZWxlcmHDp8OjbyBpbmZsYWNpb27DoXJpYSBjb250cmlidWl1IHBhcmEgc3VzdGVudGFyIGEgZGVtYW5kYSBkb23DqXN0aWNhIG1lc21vIGVtIHVtIGFtYmllbnRlIGRlIHBvbMOtdGljYSBtb25ldMOhcmlhIGFpbmRhIHJlc3RyaXRpdmEuDQoNCkNvbnR1ZG8sIMOpIGltcG9ydGFudGUgY29uc2lkZXJhciBxdWUgMjAyNiBzZXLDoSB1bSBhbm8gZWxlaXRvcmFsLCBvIHF1ZSBoaXN0b3JpY2FtZW50ZSB0ZW5kZSBhIGVsZXZhciBvIGdyYXUgZGUgaW5jZXJ0ZXphIGVjb27DtG1pY2Egbm8gQnJhc2lsLiBFcGlzw7NkaW9zIHBhc3NhZG9zIGlsdXN0cmFtIGVzc2UgcGFkcsOjby4gRW0gMjAxNCwgcG9yIGV4ZW1wbG8sIG8gcHJvY2Vzc28gZWxlaXRvcmFsIGZvaSBhY29tcGFuaGFkbyBwb3IgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyBmaXNjYWlzIGUgYXVtZW50byBkYSB2b2xhdGlsaWRhZGUgbm9zIG1lcmNhZG9zIGZpbmFuY2Vpcm9zLCBvIHF1ZSBjb250cmlidWl1IHBhcmEgYSBkZXNhY2VsZXJhw6fDo28gZGEgYXRpdmlkYWRlIGVjb27DtG1pY2EsIGNvbSBvIFBJQiBjcmVzY2VuZG8gYXBlbmFzIDAsNSUgbmFxdWVsZSBhbm8sIGFww7NzIGV4cGFuc8OjbyBkZSAzLDAlIGVtIDIwMTMuIERlIGZvcm1hIHNlbWVsaGFudGUsIGVtIDIwMTgsIG8gcGVyw61vZG8gZWxlaXRvcmFsIGZvaSBtYXJjYWRvIHBvciBmb3J0ZSBpbmNlcnRlemEgcG9sw610aWNhIGUgZWxldmFkYSB2b2xhdGlsaWRhZGUgY2FtYmlhbCwgbyBxdWUgbGV2b3UgZW1wcmVzYXMgZSBpbnZlc3RpZG9yZXMgYSBhZG90YXIgdW1hIHBvc3R1cmEgbWFpcyBjYXV0ZWxvc2EgZW0gcmVsYcOnw6NvIGEgaW52ZXN0aW1lbnRvcyBlIGRlY2lzw7VlcyBkZSBjb25zdW1vIGRlIG1haW9yIHZhbG9yLg0KDQpFc3NlIGNvbXBvcnRhbWVudG8gb2NvcnJlIHBvcnF1ZSBhbm9zIGVsZWl0b3JhaXMgYXVtZW50YW0gYSBpbmNlcnRlemEgc29icmUgYSBjb25kdcOnw6NvIGZ1dHVyYSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYSwgZXNwZWNpYWxtZW50ZSBlbSByZWxhw6fDo28gw6AgcG9sw610aWNhIGZpc2NhbCwgcmVmb3JtYXMgZXN0cnV0dXJhaXMgZSBkaXJldHJpemVzIHJlZ3VsYXTDs3JpYXMuIEVtIGVjb25vbWlhcyBlbWVyZ2VudGVzIGNvbW8gbyBCcmFzaWwsIGVzc2EgaW5jZXJ0ZXphIHRlbmRlIGEgaW1wYWN0YXIgZGlyZXRhbWVudGUgYXMgZXhwZWN0YXRpdmFzIGRlIGFnZW50ZXMgZWNvbsO0bWljb3MsIGxldmFuZG8gZW1wcmVzYXMgYSBwb3N0ZXJnYXIgaW52ZXN0aW1lbnRvcyBlIGZhbcOtbGlhcyBhIGFkb3RhcmVtIG1haW9yIGNhdXRlbGEgZW0gZGVjaXPDtWVzIGRlIGNvbnN1bW8gZGUgbG9uZ28gcHJhem8uDQoNCkRlc3NhIGZvcm1hLCBlbWJvcmEgb3MgZnVuZGFtZW50b3MgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBlIGRhIHJlbmRhIGFpbmRhIGNvbnRyaWJ1YW0gcGFyYSBzdXN0ZW50YXIgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMsIGEgcHJveGltaWRhZGUgZG8gY2ljbG8gZWxlaXRvcmFsIGRlIDIwMjYgcG9kZSBpbnRyb2R1emlyIHVtIGdyYXUgYWRpY2lvbmFsIGRlIGNhdXRlbGEgbm8gY29tcG9ydGFtZW50byBkZSBjb25zdW1pZG9yZXMgZSBpbnZlc3RpZG9yZXMsIG8gcXVlIHJlZm9yw6dhIGEgZXhwZWN0YXRpdmEgZGUgdW0gY3Jlc2NpbWVudG8gZWNvbsO0bWljbyBtYWlzIG1vZGVyYWRvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIENvbGV0YXIgZGFkb3MgZG8gQ29uc3VtbyBkYXMgRmFtw61saWFzICgyMjEwMCkNCmRhZG9zX2NvbnN1bW8gPC0gZ2V0X3NlcmllcygyMjEwMCwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShDb25zdW1vX2ZhbWlsaWFzID0gYDIyMTAwYCkNCg0KIyBDb2xldGFyIGRhZG9zIGRhIFJlbmRhIGRhcyBGYW3DrWxpYXMgKDI5MDI4KQ0KZGFkb3NfcmVuZGEgPC0gZ2V0X3NlcmllcygyOTAyOCwgc3RhcnRfZGF0ZSA9ICIyMDIwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKSAlPiUgDQogIHJlbmFtZShSZW5kYV9mYW1pbGlhcyA9IGAyOTAyOGApDQoNCiMgUHJlcGFyYXIgZGFkb3MgZGUgQ09OU1VNTw0KZGFkb3NfY29uc3Vtb190cmltIDwtIGRhZG9zX2NvbnN1bW8gJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSB5ZWFyKGRhdGUpLA0KICAgIHRyaW1lc3RyZSA9IHF1YXJ0ZXIoZGF0ZSwgd2l0aF95ZWFyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICBpbmRpY2VfY29uc3VtbyA9IHJvdW5kKDEwMCAqIENvbnN1bW9fZmFtaWxpYXMgLyBmaXJzdChDb25zdW1vX2ZhbWlsaWFzKSwgMSkNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgaW5kaWNlX2NvbnN1bW8pDQoNCiMgUHJlcGFyYXIgZGFkb3MgZGUgUkVOREENCmRhZG9zX3JlbmRhX3RyaW0gPC0gZGFkb3NfcmVuZGEgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSB5ZWFyKGRhdGUpLA0KICAgIHRyaW1lc3RyZSA9IHF1YXJ0ZXIoZGF0ZSwgd2l0aF95ZWFyID0gRkFMU0UpLA0KICAgIHRpbWVzdGFtcCA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChkYXRlKSwNCiAgICBpbmRpY2VfcmVuZGEgPSByb3VuZCgxMDAgKiBSZW5kYV9mYW1pbGlhcyAvIGZpcnN0KFJlbmRhX2ZhbWlsaWFzKSwgMSkNCiAgKSAlPiUNCiAgc2VsZWN0KGRhdGUsIHRpbWVzdGFtcCwgaW5kaWNlX3JlbmRhKQ0KDQojIENvbWJpbmFyIGRhZG9zDQpkYWRvc19jb21iaW5hZG9zIDwtIGRhZG9zX2NvbnN1bW9fdHJpbSAlPiUNCiAgbGVmdF9qb2luKGRhZG9zX3JlbmRhX3RyaW0sIGJ5ID0gYygiZGF0ZSIsICJ0aW1lc3RhbXAiKSkNCg0KIyBWZXJpZmljYXIgZGFkb3MNCmlmKG5yb3coZGFkb3NfY29tYmluYWRvcykgPT0gMCkgew0KICBzdG9wKCJEYWRvcyBuw6NvIGVuY29udHJhZG9zLiBWZXJpZmlxdWUgb3MgY8OzZGlnb3MuIikNCn0NCg0KIyBDYWxjdWxhciBsaW1pdGVzIGRvIGVpeG8gWSAoY29uc2lkZXJhbmRvIGFtYmFzIGFzIHPDqXJpZXMpDQp5X21pbiA8LSBtaW4oYyhkYWRvc19jb21iaW5hZG9zJGluZGljZV9jb25zdW1vLCBkYWRvc19jb21iaW5hZG9zJGluZGljZV9yZW5kYSksIG5hLnJtID0gVFJVRSkNCnlfbWF4IDwtIG1heChjKGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX2NvbnN1bW8sIGRhZG9zX2NvbWJpbmFkb3MkaW5kaWNlX3JlbmRhKSwgbmEucm0gPSBUUlVFKQ0KeV9yYW5nZSA8LSB5X21heCAtIHlfbWluDQp5X21pbl9hanVzdGFkbyA8LSBmbG9vcih5X21pbiAtIDAuMDUgKiB5X3JhbmdlKQ0KeV9tYXhfYWp1c3RhZG8gPC0gY2VpbGluZyh5X21heCArIDAuMDUgKiB5X3JhbmdlKQ0KDQojIENyaWFyIGdyw6FmaWNvIGNvbWJpbmFkbw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgIyBTw6lyaWU6IENvbnN1bW8gKGNvbHVuYXMpIC0gQVpVTA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19jb21iaW5hZG9zICU+JSBzZWxlY3QodGltZXN0YW1wLCBpbmRpY2VfY29uc3VtbykpLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBuYW1lID0gIkNvbnN1bW8gZGFzIEZhbcOtbGlhcyIsDQogICAgY29sb3IgPSAiIzAyMDIzYyIsDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICAjIFPDqXJpZTogUmVuZGEgKGxpbmhhKSAtIERPVVJBRE8NCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfY29tYmluYWRvcyAlPiUgc2VsZWN0KHRpbWVzdGFtcCwgaW5kaWNlX3JlbmRhKSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlJlbmRhIGRhcyBGYW3DrWxpYXMiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgeUF4aXMgPSAwLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlICgxwrogVHJpbS8yMDIwID0gMTAwKSIpLA0KICAgIG9wcG9zaXRlID0gRkFMU0UsDQogICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgIG1pbiA9IHlfbWluX2FqdXN0YWRvLA0KICAgIG1heCA9IHlfbWF4X2FqdXN0YWRvLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDEwMCwNCiAgICAgICAgY29sb3IgPSAiIzY2NjY2NiIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJkYXNoIiwNCiAgICAgICAgd2lkdGggPSAxLA0KICAgICAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJCYXNlICgxwrogVHJpbS8yMDIwKSIpDQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gJ2RhdGV0aW1lJywNCiAgICBsYWJlbHMgPSBsaXN0KGZvcm1hdCA9ICd7dmFsdWU6JVl9JykNCiAgKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJSZW5kYSB2cy4gQ29uc3VtbyBkYXMgRmFtw61saWFzIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiw41uZGljZSBCYXNlOiAxwrogVHJpbWVzdHJlLzIwMjAgPSAxMDAgLSBEYWRvcyBUcmltZXN0cmFpcyIpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIChTR1MgLSBDw7NkaWdvczogMjIxMDAgZSAyOTAyOCkiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAneWVhcicsIGNvdW50ID0gMSwgdGV4dCA9ICcxWScpLA0KICAgICAgbGlzdCh0eXBlID0gJ3llYXInLCBjb3VudCA9IDIsIHRleHQgPSAnMlknKSwNCiAgICAgIGxpc3QodHlwZSA9ICd5ZWFyJywgY291bnQgPSAzLCB0ZXh0ID0gJzNZJyksDQogICAgICBsaXN0KHR5cGUgPSAnYWxsJywgdGV4dCA9ICdUb2RvIHBlcsOtb2RvJykNCiAgICApLA0KICAgIHNlbGVjdGVkID0gMg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgaGVhZGVyRm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHgiPjxiPntwb2ludC5rZXl9PC9iPjwvc3Bhbj48YnIvPicsDQogICAgcG9pbnRGb3JtYXQgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOntzZXJpZXMuY29sb3J9Ij7il488L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55Oi4xZn08L2I+PGJyLz4nDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMSwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMDUsDQogICAgICBib3JkZXJXaWR0aCA9IDAuNQ0KICAgICksDQogICAgbGluZSA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBUUlVFLA0KICAgICAgY29ubmVjdE51bGxzID0gVFJVRQ0KICAgICkNCiAgKQ0KYGBgDQojIyBSRUZFUsOKTkNJQVMNCg0KSU5GT01PTkVZLiBQSUIgMjAyNjogbyBhbm8gZW0gcXVlIGEgZWNvbm9taWEgbsOjbyBkZXNhYmEsIG1hcyB0YW1iw6ltIG7Do28gZGVjb2xhLiBTw6NvIFBhdWxvOiBJbmZvTW9uZXksIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9lY29ub21pYS9waWItMjAyNi1vLWFuby1lbS1xdWUtYS1lY29ub21pYS1uYW8tZGVzYWJhLW1hcy10YW1iZW0tbmFvLWRlY29sYS8+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2Lg0KDQpJTkZPTU9ORVkuIFNlcnZpw6dvczogc2V0b3IgcmVjdWEgZW0gZGV6ZW1icm8gZGUgMjAyNSwgYXBvbnRhIElCR0UsIGNvbSBpbXBhY3RvIGRlIGp1cm9zIGVsZXZhZG9zLiBTw6NvIFBhdWxvOiBJbmZvTW9uZXksIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9lY29ub21pYS9zZXJ2aWNvcy1pYmdlLWRlemVtYnJvLTIwMjUtcXVlZGEtanVyb3MvPg0KLiBBY2Vzc28gZW06IDA1IG1hci4gMjAyNi4NCg0KRU1QUkVTQSBCUkFTSUwgREUgQ09NVU5JQ0HDh8ODTy4gUHLDqXZpYSBkbyBQSUIgYXBvbnRhIGNyZXNjaW1lbnRvIGRlIDIsNSUgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSBlbSAyMDI1LiBCcmFzw61saWEsIERGOiBBZ8OqbmNpYSBCcmFzaWwsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9hZ2VuY2lhYnJhc2lsLmViYy5jb20uYnIvZWNvbm9taWEvbm90aWNpYS8yMDI2LTAyL3ByZXZpYS1kby1waWItYXBvbnRhLWNyZXNjaW1lbnRvLWRlLTI1LWRhLWVjb25vbWlhLWJyYXNpbGVpcmEtZW0tMjAyNT4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEVjb25vbWlhIGNyZXNjZXUgMiwyJSBlbSAyMDI1LCBzZWd1bmRvIG8gTW9uaXRvciBkbyBQSUItRkdWLiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9ub3RpY2lhcy9lY29ub21pYS1jcmVzY2V1LTIyLWVtLTIwMjUtc2VndW5kby1vLW1vbml0b3ItZG8tcGliLWZndj4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNClhQIElOVkVTVElNRU5UT1MuIEJyYXNpbCBNYWNybyBNZW5zYWw6IGNyZXNjaW1lbnRvIG1haXMgZm9ydGUgZSBpbmZsYcOnw6NvIG1haXMgYmFpeGEuIFPDo28gUGF1bG86IFhQIEludmVzdGltZW50b3MsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cHM6Ly9jb250ZXVkb3MueHBpLmNvbS5ici9lY29ub21pYS9icmFzaWwtbWFjcm8tbWVuc2FsLWNyZXNjaW1lbnRvLW1haXMtZm9ydGUtaW5mbGFjYW8tbWFpcy1iYWl4YS8+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2Lg0KDQpFRElUT1JBIEFCUklMLiBBdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhIGNyZXNjZSAyLDUlIGVtIDIwMjUuIFPDo28gUGF1bG86IFZvY8OqIFMvQSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3ZvY2VzYS5hYnJpbC5jb20uYnIvZWNvbm9taWEvYXRpdmlkYWRlLWVjb25vbWljYS1icmFzaWxlaXJhLWNyZXNjZS0yNS1lbS0yMDI1Lz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQoNCkJBTkNPIENFTlRSQUwgRE8gQlJBU0lMLiDDjW5kaWNlIGRlIEF0aXZpZGFkZSBFY29uw7RtaWNhIGRvIEJhbmNvIENlbnRyYWwgKElCQy1CcikuIEJyYXPDrWxpYSwgREY6IEJDQiwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5iY2IuZ292LmJyL2VzdGF0aXN0aWNhcy9pYmMtYnI+DQouIEFjZXNzbyBlbTogMDUgbWFyLiAyMDI2DQoNCklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gSW5kaWNhZG9yZXMgZWNvbsO0bWljb3MgZSBzb2NpYWlzLiBSaW8gZGUgSmFuZWlybzogSUJHRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL3d3dy5pYmdlLmdvdi5ici9pbmRpY2Fkb3Jlcz4NCi4gQWNlc3NvIGVtOiAwNSBtYXIuIDIwMjYuDQo=