1.⁠Contexto Global

1.1 Contexto geopolítico e choques externos

A economia global contemporânea é marcada pela transmutação de riscos. O conceito de Slowbalization mostra que as economias do mundo são integradas, e uma crise em uma tende a causar um efeito dominó, afetando todo o resto do mundo. Nesse contexto, acontecimentos geopolíticos em locais distantes podem afetar o Brasil.

Mais recentemente, o bloqueio do Estreito de Ormuz exemplifica essa fragilidade. Localizado entre o Golfo Omã e o Golfo Pérsico, trata-se de um dos pontos principais de escoamento de petróleo, por onde passa cerca de 20% da produção mundial diária. Segundo a Agência Internacional de Energia (AIE), o fechamento dessa passagem impede o transporte de cerca de 15 milhões de barris de petróleo bruto e 5 milhões de barris de derivados por dia. Além disso, países da região do golfo têm reduzido sua produção de petróleo em aproximadamente 10 milhões de barris por dia, já que seus tanques de abastecimento estão cheios e não existem muitas outras maneiras de transporte.

Dadas tais restrições, observa-se uma pressão de alta sobre os preços do petróleo. Diante de ameaças como o bloqueio do Estreito de Ormuz, investidores e empresas tendem a aumentar a demanda por contratos futuros, buscando se proteger contra uma possível escassez. Esse movimento eleva os preços no mercado internacional.

Além disso, a incerteza intensifica a sensibilidade do mercado, fazendo com que os preços oscilem. Essa volatilidade prejudica tanto países importadores quanto exportadores, ao dificultar o planejamento econômico e a tomada de decisão.

Como o petróleo é a matéria prima básica, sua valorização encarece toda a cadeia produtiva - desde os combustíveis, até subprodutos químicos utilizados na produção de fertilizantes.

1.2 Incerteza global: VIX e relação com o petróleo

A instabilidade em pontos como o Estreito de Ormuz gera impactos físicos na oferta de petróleo, mas também afeta a percepção de risco para todos os países. Nesse contexto, a incerteza é quantificada em indicadores de volatilidade, como o CBOE Volatility Index (VIX). Conhecido como índice do medo, o VIX mensura as expectativas de volatilidade. É calculado a partir das opções do S&P 500, um índice que reúne as 500 maiores empresas de capital aberto dos EUA e serve como um termômetro da economia global. Essas opções funcionam como contratos de seguro: investidores os compram para proteger suas carteiras contra quedas bruscas no mercado. Quando a incerteza geopolítica cresce, a demanda por esses seguros dispara, elevando seus preços. O VIX traduz esse custo em um número que representa a volatilidade implícita (a variação esperada para os próximos 30 dias). Assim, um VIX elevado sinaliza que o mercado está “pagando caro pelo medo”, antecipando instabilidades que afetam desde o valor das ações até o preço de commodities estratégicas como o petróleo.

O gráfico 1 apresenta a evolução do VIX e do preço do petróleo de 2007 até os dados mais atuais.

Gráfico 1:

## [1] "VIX"
## [1] "BZ=F"
## Período comum: 30/07/2007 a 27/04/2026 — 4661 observações

A relação entre o medo do mercado e o preço da energia depende da origem da crise. Em choques de demanda, como na crise financeira de 2008 e no início da pandemia de COVID-19, observa-se um comportamento inversamente proporcional: enquanto o VIX atinge níveis elevados devido ao pânico nos mercados, o preço do petróleo recua drasticamente. Esse movimento reflete o temor de uma paralisia econômica global que, consequentemente, derruba o consumo de combustível e energia.

Por outro lado, em choques de oferta e tensões geopolíticas, o cenário se inverte. Como observado no Gráfico 1 durante a Guerra na Ucrânia e os conflitos no Mar Vermelho, as duas variáveis tendem a se mover na mesma direção. Nesse caso, o aumento da incerteza (VIX alto) está diretamente associado ao risco de falta de produto no mercado, o que pressiona os preços para cima.

Mais recentemente, as tensões entre Estados Unidos e Irã reforçam esse padrão de “crise de oferta”, evidenciando uma elevação simultânea do VIX e do petróleo. Esse comportamento indica que o mercado não teme uma falta de compradores, mas sim uma redução de oferta.

2.⁠ ⁠Do Petróleo ao Campo

Para compreender a magnitude do impacto de um choque energético no Brasil, é necessário analisar como esse fenômeno atinge o agronegócio, o principal motor da economia nacional. Como demonstrado no Gráfico 2, o setor mantém uma participação robusta na composição do PIB brasileiro consolidando, ao longo da última década, uma trajetória de resiliência que hoje sustenta aproximadamente 30% da economia nacional.

Gráfico 2:

De acordo com o Ministério da Agricultura, o agronegócio representa cerca de 30% de toda a riqueza produzida no país. Além disso, em 2025, o PIB da agropecuária registrou um crescimento de 11,7%, impulsionando o resultado geral da economia brasileira. A riqueza produzida pelo setor nesse período atingiu a marca de R$ 775,3 bilhões. Esses números evidenciam que qualquer fator que desestabilize os custos de produção no campo não afeta apenas o produtor rural, mas compromete a estabilidade econômica de todo o país. Diante dessa dependência, entender como o petróleo afeta o agronegócio é fundamental para compreender os rumos da nossa economia.

2.1 Dependência brasileira e o papel dos fertilizantes

Para manter a produtividade recorde mencionada anteriormente, o solo brasileiro depende massivamente de fertilizantes nitrogenados, sendo a ureia o principal deles. O processo de fabricação desse insumo é o ponto onde o campo e o setor energético se fundem: a ureia é produzida a partir da amônia, que por sua vez exige grandes volumes de hidrogênio e energia. Na indústria global, esse hidrogênio é extraído majoritariamente do gás natural (cujo preço é diretamente indexado ao petróleo bruto). O problema para o Brasil é que essa transformação acontece fora de nossas fronteiras. Apesar de sermos uma potência agrícola, somos extremamente dependentes do mercado externo para suprir essa demanda química. De acordo com o economista André Braz, do FGV Ibre, o Brasil importa hoje cerca de 85% dos fertilizantes que consome, com destaque absoluto para a ureia. Essa configuração coloca o produtor brasileiro em uma posição vulnerável: ele depende de um insumo cujo custo de fabricação é ditado pelo mercado internacional de energia. Em contextos de tensões globais, elevações no preço do petróleo tendem a pressionar o custo de produção da ureia nas principais regiões produtoras, como Europa, Ásia e Oriente Médio. Diante dessa realidade, surge uma questão fundamental: até que ponto a variação do petróleo realmente dita o preço da ureia no mercado?

2.2 Evidência empírica: relação entre petróleo e ureia

Diante da relação teórica estabelecida anteriormente entre o setor energético e a produção de fertilizantes, torna-se relevante investigar até que ponto variações no preço do petróleo se transmitem aos preços da ureia. Para isso, foi estimado um modelo econométrico com base em dados diários de mercado, conforme apresentado no Gráfico 3.

Gráfico 3:

O Gráfico 3 apresenta a relação entre os preços da ureia e do petróleo, ambos em logaritmo natural, juntamente com a reta de regressão estimada. Observa-se uma relação positiva entre as variáveis, indicando que aumentos no preço do petróleo estão associados a elevações no preço da ureia. Nota-se que a amostra conta com 914 observações, o que representa um número elevado e permite identificar padrões de forma mais confiável.

A estimativa é apresentada na equação 1:

Equação 1:

\[\ln(\text{Ureia}) = -0{,}7810 + 0{,}4950 \cdot \ln(\text{Brent}) + 0{,}6241 \cdot \ln(\text{Câmbio}) + 0{,}4506 \cdot \ln(\text{Gás})\] Trata-se de um modelo log-log multivariado, no qual os coeficientes associados a cada variável podem ser interpretados como elasticidades. Como os preços são medidos em unidades distintas — petróleo em dólares por barril, ureia em dólares por tonelada, câmbio em reais por dólar e gás natural em dólares por MMBtu - a especificação em logaritmos permite comparar variações percentuais entre as variáveis. Nesse contexto, o coeficiente \(\beta_1 = 0{,}4950\) indica que um aumento de 1% no preço do petróleo está associado, em média, a um aumento de aproximadamente 0,50% no preço da ureia. O coeficiente \(\beta_2 = 0{,}6241\) indica que uma desvalorização de 1% do real frente ao dólar está associada a um aumento de aproximadamente 0,62% no preço da ureia em reais, o que reflete o caráter importado do insumo. Por fim, o coeficiente \(\beta_3 = 0{,}4506\) indica que um aumento de 1% no preço do gás natural está associado a um aumento de aproximadamente 0,45% no preço da ureia.

O coeficiente de determinação (\(R^2 = 0{,}7555\)) indica que cerca de 76% da variação no preço da ureia é explicada conjuntamente pelas variações no preço do petróleo, do câmbio e do gás natural, representando uma melhora expressiva em relação ao modelo simples original (\(R^2 = 0{,}4937\)). Os resultados reforçam que o mercado energético, em conjunto com o ambiente cambial, exerce influência significativa sobre o custo dos fertilizantes e, portanto, deve ser considerado como variável central na análise do setor agrícola.

3.⁠ ⁠O Efeito Brasil

3.1 Ciclo agrícola e defasagem do impacto

O período de safra é o principal ciclo de cultivo do ano. Nesse momento, as condições climáticas são as mais favoráveis historicamente, permitindo o plantio das culturas de maior valor econômico e produtividade. No Brasil, o plantio começa entre os meses de setembro a dezembro, aproveitando o início da estação chuvosa. Entre janeiro e abril, por sua vez, acontece a colheita. Esse é o período de colheita da safra principal, porém, imediatamente após ela, acontece um ciclo de cultivo conhecido como ‘safrinha’, com uma produtividade consideravelmente menor.

O efeito de um choque no preço do petróleo sobre a agricultura brasileira não é imediato. Ele se propaga com uma certa defasegem, condicionado pelo calendário agrícola do país. As decisões de compra de fertilizante são tomadas em um período conhecido como entressafra, que acontece entre junho e agosto.

Quando os choques ocorrem em períodos de entressafra, o Brasil vive um momento em que a demanda por fertilizantes não é tão alta, mas caso a situação pode piorar caso ela se extenda até o segundo semestre, momento onde começa o estabelecimento das novas safras. As safras em andamento já contam com fertilizantes internalizados, assim o impacto tende a se materializar na safra seguinte.

Um aumento no preço do petróleo encarece o gás natural, que é a principal matéria-prima dos fertilizantes nitrogenados. Ao mesmo tempo, o diesel mais caro eleva o custo de frete e a operação das máquinas agrícolas no campo.

3.2 Evidências históricas de choques e seus efeitos no setor agrícola

Alguns episódios históricos ajudam a entender os efeitos dos choques do petróleo sobre o setor agrícola. O primeiro choque, ocorrido entre 1973 e 1974, quadruplicou o preço do barril em apenas cinco meses, de US$ 3 para US$ 12 (Gráfico 4), após intervenção da OPEP. Apesar do aumento significativo, a segurança alimentar não foi comprometida de forma estrutural, pois ainda não existia a conexão direta entre o preço do petróleo e o custo de produção agrícola que se observa hoje.

O segundo choque, entre 1979 e 1980, decorreu da Revolução Iraniana e da Guerra Irã-Iraque, que derrubaram a produção de ambos os países e elevaram o barril de US$ 12 para US$ 39,50 (Gráfico 4). No Brasil, a resposta à crise foi a criação do Proálcool, considerado o programa mais importante de produção e uso de combustíveis renováveis já implementado no mundo, reduzindo a dependência brasileira de combustíveis fósseis e gerando uma economia estimada de 2,5 bilhões de barris de petróleo nas últimas cinco décadas. O impacto sobre os fertilizantes, no entanto, ainda era limitado.

Em meados de julho de 2008, o barril de Brent atingiu US$ 147,50. Até o fim do mesmo ano, o preço recuou 77%, sendo negociado abaixo de US$ 40. Esse episódio ilustra como as variações do petróleo se transmitem de forma assimétrica aos custos agrícolas (Gráfico 4): os fertilizantes acompanham rapidamente as altas, mas apresentam rigidez na queda, de modo que seus preços não recuam na mesma proporção quando o petróleo cede.

A pandemia de COVID-19 provocou grande volatilidade no mercado de insumos agrícolas. Os preços dos fertilizantes subiram de forma expressiva, acompanhados de problemas logísticos graves — alguns agricultores chegaram a esperar até 90 dias para receber insumos que, antes da pandemia, levavam em média um mês. O episódio evidenciou que falhas na cadeia global de suprimentos também constituem um vetor relevante de pressão sobre os preços dos fertilizantes, mesmo na ausência de conflitos armados.

A Guerra Rússia-Ucrânia, iniciada em 2022, demonstrou de maneira ainda mais clara como os ciclos de alta do petróleo afetam as safras. Antes do conflito, o barril custava US$ 95; no primeiro mês de guerra, disparou para US$ 128, a maior cotação desde 2008 (Gráfico 4). Os fertilizantes subiram 70% desde o início da guerra, elevando significativamente o custo operacional das safras. A ureia, em específico, encareceu 32% nos dois primeiros meses do conflito. A combinação desses fatores levou a uma redução de produtividade nas safras subsequentes.

Gráfico 4:

O cenário atual, marcado pelo conflito entre EUA, Israel e Irã, fez o petróleo disparar cerca de 100%. Como já observado em episódios anteriores, os fertilizantes acompanharam a alta, com aumento de aproximadamente 50%. A ureia, no Brasil, subiu 33%. Projeções indicam que o mercado brasileiro de fertilizantes pode encolher entre 10% e 15% em 2026, em razão dos altos custos e das dificuldades logísticas decorrentes dos conflitos. O fator geopolítico é central: o bloqueio do Estreito de Ormuz compromete a passagem de 30% das exportações globais de fertilizantes, e cerca de 35% das importações brasileiras provêm de países do Golfo Pérsico (Gráfico 5).

Gráfico 5:

Mapa de importações de fertilizantes — Brasil. Fonte: ComexStat/MDIC.

Mapa de importações de fertilizantes — Brasil. Fonte: ComexStat/MDIC.

3.3 Repasse para commodities agrícolas

O bloqueio do Estreito de Ormuz, como já citado, provoca a desorganização da cadeia de fertilizantes e de insumos essenciais à produção de alimentos. Essa região é estratégica não apenas para a produção de petróleo, mas também para a produção e o fluxo de exportação de fertilizantes. Cerca de 50% da ureia exportada globalmente é produzida em regiões que dependem do Estreito para ser transportada e comercializada. Os mercados internacionais já precificam um cenário adverso: os preços da ureia e de outros fertilizantes registraram forte alta desde o início das tensões no Oriente Médio.

O encarecimento dos fertilizantes se propaga para os preços das commodities agrícolas e, em última instância, para a inflação alimentar. O efeito é amplificado pelos encadeamentos produtivos.Um aumento no preço do milho encarece as rações, pressionando toda a cadeia de proteínas animais.

No curto prazo, parte desses efeitos pode ser atenuada por fatores sazonais e pelo momento das decisões de compra de insumos. Porém, a rigidez dos preços na queda pode levar os produtores a reduzir áreas de plantio ou modificar o manejo das culturas, diminuindo consequentemente o nível de produção esperado.

A elevada dependência brasileira da importação de fertilizantes torna o país mais sensível a choques no preço do petróleo. O encarecimento dos insumos de produção se traduz, como consequência, em pressão sobre a inflação. Essa vulnerabilidade diferencia o Brasil de outras potências agrícolas que contam com maior autossuficiência em insumos. Em 2022, o governo estabeleceu a meta de, até 2050, atender à demanda interna com produção local de fertilizantes.

⁠4.Impactos Macroeconômicos

4.1 Pressões inflacionárias (IPCA)

O choque do petróleo se transfere ao IPCA de duas formas. A primeira forma, que acontece de forma mais imediata, é através de combustíveis. O encarecimento do diesel eleva os custos de transporte de mercadorias e frete, pressionando os preços de alimentos e bens industrializados. A segunda forma, mais no longo prazo, seria via o encarecimento dos fertilizantes, levando assim ao aumento do custo de produção agrícola, que se propaga para os preços ao produtor e, com uma defasagem estimada de quatro meses, atinge o consumidor final. Esse segundo canal pode ser acompanhado pelo IPA-DI (Índice de Preços ao Produtor Amplo), que capta as pressões de custo antes de chegarem ao IPCA. Como visto no Gráfico 6, o índice se manteve relativamente estável ao longo do período, sem grandes oscilações — o que sugere que, até o momento, as pressões de custo vindas do petróleo ainda não se materializaram de forma significativa nos preços ao produtor.

Gráfico 6:

A Secretaria de Política Econômica (SPE) do Ministério da Fazenda elevou a projeção do IPCA para 2026 de 3,6% para 3,7%, já refletindo impactos da instabilidade no preço do petróleo. As projeções do IGP-DI também subiram, de 4,6% para 4,9%. Como ilustrado no Gráfico 7, historicamente a Selic acompanha de perto a trajetória do IPCA acumulado - o que sugere que, caso as pressões inflacionárias se confirmem, há espaço para implicações diretas na condução da política monetária.

GRáfico 7:

4.2. Implicações para a política monetária

A Taxa Selic é o principal instrumento de política monetária do Banco Central para o controle da inflação do Brasil. Definida periodicamente pelo Copom, a Selic serve como referência para toda a estrutura de juros da economia, desde as taxas de empréstimos bancários até o rendimento de ativos financeiros. Por meio desse canal, a política monetária atua sobre as decisões de consumo e investimento, afetando o nível de demanda agregada e, consequentemente, a dinâmica dos preços. Em termos operacionais, uma Selic elevada tende a encarecer o crédito e desestimular o consumo, contribuindo para a desaceleração da inflação. Por outro lado, uma taxa mais baixa busca incentivar o consumo e a atividade econômica, como observado durante a pandemia de COVID-19. Assim, variações na Selic atuam sobre a demanda agregada como forma de conter ou estimular pressões inflacionárias.

No entanto, a natureza do choque analisado neste relatório - um aumento nos insumos energéticos - altera a forma de atuação da política monetária. Por se tratar de um choque de oferta, que eleva os custos de produção, o Banco Central não consegue agir diretamente sobre a origem dessa variação. Ainda assim, observa-se uma alteração nas expectativas para a Selic até o fim do ano, como ilustrado no Gráfico 8.

Gráfico 8:

A Selic, que iniciou o ano em 15% a.a., tinha expectativas de queda ao longo do ano, com projeção de atingir 12,25% até dezembro. O primeiro corte já ocorreu e, em abril de 2026, a taxa encontra-se em 14,75% a.a. No entanto, como observado no Gráfico 8, embora a expectativa de redução permaneça, houve uma revisão para cima da taxa esperada, passando de 12,25% para 12,50%. Esse movimento reflete o fato de que, como mencionado anteriormente, a Selic não atua diretamente sobre o aumento dos custos. Seu papel, nesse contexto, é conter os efeitos secundários desse choque, atuando para frear o repasse do aumento de preços ao restante da economia.

Dessa forma, o choque de oferta não apenas pressiona a inflação, mas também contribui para a manutenção de juros elevados por mais tempo.

5. Conclusão e perspectivas futuras

Choques dessa natureza não podem ser plenamente evitados, pois fazem parte da dinâmica de uma economia globalizada e da integração entre países por meio do comércio internacional. No entanto, a elevada dependência externa de insumos estratégicos, como fertilizantes, aumenta a vulnerabilidade da economia brasileira, intensificando o repasse de choques internacionais para os custos internos. Nesse contexto, iniciativas voltadas à redução dessa dependência tornam-se relevantes, ainda que seus efeitos ocorram no longo prazo. A decisão da Petrobras de retomar as obras da Unidade de Fertilizantes Nitrogenados III (UFN-III) vai nessa direção, ao buscar ampliar a produção nacional.

No curto prazo, o ajuste ocorre por meio da própria dinâmica econômica: aumentos de custos são repassados gradualmente ao longo das cadeias produtivas, gerando pressões inflacionárias com certa defasagem. Esse intervalo entre o choque inicial e seus efeitos sobre os preços pode dificultar a percepção imediata de suas causas. Assim, mais do que eventos isolados, esses choques reforçam a importância de entender como fatores externos se transmitem para a economia doméstica, destacando o papel da política monetária na contenção dos efeitos indiretos e na manutenção da estabilidade econômica.

LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gUGV0csOzbGVvIg0KYXV0aG9yOiAiSm/Do28gTW9yZW5vIGUgUm9iZXJ0YSBMb2JhdG8iDQpkYXRlOiAiMjAyNi0wNC0wNSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogbHVtZW4NCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHNlbGZfY29udGFpbmVkOiBmYWxzZQ0KLS0tDQpgYGBgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeSh0c2VyaWVzKQ0KbGlicmFyeShHZXRCQ0JEYXRhKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeSh6b28pDQpsaWJyYXJ5KGZvcmVjYXN0KQ0KbGlicmFyeShybmF0dXJhbGVhcnRoKQ0KbGlicmFyeShybmF0dXJhbGVhcnRoZGF0YSkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KGNvdW50cnljb2RlKQ0KbGlicmFyeShsZWFmbGV0KQ0KbGlicmFyeShodG1sdG9vbHMpDQpgYGBgYGBgDQoNCmBgYHtyIGNhbWluaG9zLCBpbmNsdWRlPUZBTFNFfQ0KcGF0aF9icmVudCA8LSAiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvcmVsYXRvcmlvL0JyZW50UC54bHN4Ig0KcGF0aF91cmVpYSA8LSAiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvcmVsYXRvcmlvL1ByZWNvVXJlaWEueGxzeCINCnBhdGhfZ2FzICAgPC0gIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL3JlbGF0b3Jpby9QcmVjb0dhc04ueGxzeCINCnBhdGhfcGliICAgPC0gIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL3JlbGF0b3Jpby9QSUJBR1JPLnhsc3giDQpwYXRoX2ZlcnQgIDwtICJDOi9Vc2Vycy9yb2Jlci9PbmVEcml2ZS9yZWxhdG9yaW8vaW1wb3J0YWNvZXNmZXJ0aWxpemFudGVzLnhsc3giDQpgYGANCg0KIyMgKioxLuKBoENvbnRleHRvIEdsb2JhbCoqDQoNCiMjIyAxLjEgQ29udGV4dG8gZ2VvcG9sw610aWNvIGUgY2hvcXVlcyBleHRlcm5vcw0KDQpBIGVjb25vbWlhIGdsb2JhbCBjb250ZW1wb3LDom5lYSDDqSBtYXJjYWRhIHBlbGEgdHJhbnNtdXRhw6fDo28gZGUgcmlzY29zLiBPIGNvbmNlaXRvIGRlIFNsb3diYWxpemF0aW9uIG1vc3RyYSBxdWUgYXMgZWNvbm9taWFzIGRvIG11bmRvIHPDo28gaW50ZWdyYWRhcywgZSB1bWEgY3Jpc2UgZW0gdW1hIHRlbmRlIGEgY2F1c2FyIHVtIGVmZWl0byBkb21pbsOzLCBhZmV0YW5kbyB0b2RvIG8gcmVzdG8gZG8gbXVuZG8uIE5lc3NlIGNvbnRleHRvLCBhY29udGVjaW1lbnRvcyBnZW9wb2zDrXRpY29zIGVtIGxvY2FpcyBkaXN0YW50ZXMgcG9kZW0gYWZldGFyIG8gQnJhc2lsLg0KDQpNYWlzIHJlY2VudGVtZW50ZSwgbyBibG9xdWVpbyBkbyBFc3RyZWl0byBkZSBPcm11eiBleGVtcGxpZmljYSBlc3NhIGZyYWdpbGlkYWRlLiBMb2NhbGl6YWRvIGVudHJlIG8gR29sZm8gT23DoyBlIG8gR29sZm8gUMOpcnNpY28sIHRyYXRhLXNlIGRlIHVtIGRvcyBwb250b3MgcHJpbmNpcGFpcyBkZSBlc2NvYW1lbnRvIGRlIHBldHLDs2xlbywgcG9yIG9uZGUgcGFzc2EgY2VyY2EgZGUgMjAlIGRhIHByb2R1w6fDo28gbXVuZGlhbCBkacOhcmlhLiBTZWd1bmRvIGEgQWfDqm5jaWEgSW50ZXJuYWNpb25hbCBkZSBFbmVyZ2lhIChBSUUpLCBvIGZlY2hhbWVudG8gZGVzc2EgcGFzc2FnZW0gaW1wZWRlIG8gdHJhbnNwb3J0ZSBkZSBjZXJjYSBkZSAxNSBtaWxow7VlcyBkZSBiYXJyaXMgZGUgcGV0csOzbGVvIGJydXRvIGUgNSBtaWxow7VlcyBkZSBiYXJyaXMgZGUgZGVyaXZhZG9zIHBvciBkaWEuIEFsw6ltIGRpc3NvLCBwYcOtc2VzIGRhIHJlZ2nDo28gZG8gZ29sZm8gdMOqbSByZWR1emlkbyBzdWEgcHJvZHXDp8OjbyBkZSBwZXRyw7NsZW8gZW0gYXByb3hpbWFkYW1lbnRlIDEwIG1pbGjDtWVzIGRlIGJhcnJpcyBwb3IgZGlhLCBqw6EgcXVlIHNldXMgdGFucXVlcyBkZSBhYmFzdGVjaW1lbnRvIGVzdMOjbyBjaGVpb3MgZSBuw6NvIGV4aXN0ZW0gbXVpdGFzIG91dHJhcyBtYW5laXJhcyBkZSB0cmFuc3BvcnRlLg0KDQpEYWRhcyB0YWlzIHJlc3RyacOnw7Vlcywgb2JzZXJ2YS1zZSB1bWEgcHJlc3PDo28gZGUgYWx0YSBzb2JyZSBvcyBwcmXDp29zIGRvIHBldHLDs2xlby4gRGlhbnRlIGRlIGFtZWHDp2FzIGNvbW8gbyBibG9xdWVpbyBkbyBFc3RyZWl0byBkZSBPcm11eiwgaW52ZXN0aWRvcmVzIGUgZW1wcmVzYXMgdGVuZGVtIGEgYXVtZW50YXIgYSBkZW1hbmRhIHBvciBjb250cmF0b3MgZnV0dXJvcywgYnVzY2FuZG8gc2UgcHJvdGVnZXIgY29udHJhIHVtYSBwb3Nzw612ZWwgZXNjYXNzZXouIEVzc2UgbW92aW1lbnRvIGVsZXZhIG9zIHByZcOnb3Mgbm8gbWVyY2FkbyBpbnRlcm5hY2lvbmFsLg0KDQpBbMOpbSBkaXNzbywgYSBpbmNlcnRlemEgaW50ZW5zaWZpY2EgYSBzZW5zaWJpbGlkYWRlIGRvIG1lcmNhZG8sIGZhemVuZG8gY29tIHF1ZSBvcyBwcmXDp29zIG9zY2lsZW0uIEVzc2Egdm9sYXRpbGlkYWRlIHByZWp1ZGljYSB0YW50byBwYcOtc2VzIGltcG9ydGFkb3JlcyBxdWFudG8gZXhwb3J0YWRvcmVzLCBhbyBkaWZpY3VsdGFyIG8gcGxhbmVqYW1lbnRvIGVjb27DtG1pY28gZSBhIHRvbWFkYSBkZSBkZWNpc8Ojby4NCg0KQ29tbyBvIHBldHLDs2xlbyDDqSBhIG1hdMOpcmlhIHByaW1hIGLDoXNpY2EsIHN1YSB2YWxvcml6YcOnw6NvIGVuY2FyZWNlIHRvZGEgYSBjYWRlaWEgcHJvZHV0aXZhIC0gZGVzZGUgb3MgY29tYnVzdMOtdmVpcywgYXTDqSBzdWJwcm9kdXRvcyBxdcOtbWljb3MgdXRpbGl6YWRvcyBuYSBwcm9kdcOnw6NvIGRlIGZlcnRpbGl6YW50ZXMuDQoNCiMjIyAxLjIgSW5jZXJ0ZXphIGdsb2JhbDogVklYIGUgcmVsYcOnw6NvIGNvbSBvIHBldHLDs2xlbw0KDQpBIGluc3RhYmlsaWRhZGUgZW0gcG9udG9zIGNvbW8gbyBFc3RyZWl0byBkZSBPcm11eiBnZXJhIGltcGFjdG9zIGbDrXNpY29zIG5hIG9mZXJ0YSBkZSBwZXRyw7NsZW8sIG1hcyB0YW1iw6ltIGFmZXRhIGEgcGVyY2Vww6fDo28gZGUgcmlzY28gcGFyYSB0b2RvcyBvcyBwYcOtc2VzLiBOZXNzZSBjb250ZXh0bywgYSBpbmNlcnRlemEgw6kgcXVhbnRpZmljYWRhIGVtIGluZGljYWRvcmVzIGRlIHZvbGF0aWxpZGFkZSwgY29tbyBvIENCT0UgVm9sYXRpbGl0eSBJbmRleCAoVklYKS4gQ29uaGVjaWRvIGNvbW8gw61uZGljZSBkbyBtZWRvLCBvIFZJWCBtZW5zdXJhIGFzIGV4cGVjdGF0aXZhcyBkZSB2b2xhdGlsaWRhZGUuIMOJIGNhbGN1bGFkbyBhIHBhcnRpciBkYXMgb3DDp8O1ZXMgZG8gUyZQIDUwMCwgdW0gw61uZGljZSBxdWUgcmXDum5lIGFzIDUwMCBtYWlvcmVzIGVtcHJlc2FzIGRlIGNhcGl0YWwgYWJlcnRvIGRvcyBFVUEgZSBzZXJ2ZSBjb21vIHVtIHRlcm3DtG1ldHJvIGRhIGVjb25vbWlhIGdsb2JhbC4gRXNzYXMgb3DDp8O1ZXMgZnVuY2lvbmFtIGNvbW8gY29udHJhdG9zIGRlIHNlZ3VybzogaW52ZXN0aWRvcmVzIG9zIGNvbXByYW0gcGFyYSBwcm90ZWdlciBzdWFzIGNhcnRlaXJhcyBjb250cmEgcXVlZGFzIGJydXNjYXMgbm8gbWVyY2Fkby4gUXVhbmRvIGEgaW5jZXJ0ZXphIGdlb3BvbMOtdGljYSBjcmVzY2UsIGEgZGVtYW5kYSBwb3IgZXNzZXMgc2VndXJvcyBkaXNwYXJhLCBlbGV2YW5kbyBzZXVzIHByZcOnb3MuIE8gVklYIHRyYWR1eiBlc3NlIGN1c3RvIGVtIHVtIG7Dum1lcm8gcXVlIHJlcHJlc2VudGEgYSB2b2xhdGlsaWRhZGUgaW1wbMOtY2l0YSAoYSB2YXJpYcOnw6NvIGVzcGVyYWRhIHBhcmEgb3MgcHLDs3hpbW9zIDMwIGRpYXMpLiBBc3NpbSwgdW0gVklYIGVsZXZhZG8gc2luYWxpemEgcXVlIG8gbWVyY2FkbyBlc3TDoSAicGFnYW5kbyBjYXJvIHBlbG8gbWVkbyIsIGFudGVjaXBhbmRvIGluc3RhYmlsaWRhZGVzIHF1ZSBhZmV0YW0gZGVzZGUgbyB2YWxvciBkYXMgYcOnw7VlcyBhdMOpIG8gcHJlw6dvIGRlIGNvbW1vZGl0aWVzIGVzdHJhdMOpZ2ljYXMgY29tbyBvIHBldHLDs2xlby4NCg0KTyBncsOhZmljbyAxIGFwcmVzZW50YSBhIGV2b2x1w6fDo28gZG8gVklYIGUgZG8gcHJlw6dvIGRvIHBldHLDs2xlbyBkZSAyMDA3IGF0w6kgb3MgZGFkb3MgbWFpcyBhdHVhaXMuDQoNCioqKkdyw6FmaWNvIDE6KioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpnZXRTeW1ib2xzKCJeVklYIiwgc3JjID0gInlhaG9vIiwgZnJvbSA9ICIyMDAwLTAxLTAxIiwgYXV0by5hc3NpZ24gPSBUUlVFKQ0KZ2V0U3ltYm9scygiQlo9RiIsIHNyYyA9ICJ5YWhvbyIsIGZyb20gPSAiMjAwMC0wMS0wMSIsIGF1dG8uYXNzaWduID0gVFJVRSkNCg0KZGZfdml4IDwtIGRhdGEuZnJhbWUoDQogIERhdGEgPSBpbmRleChWSVgpLA0KICBWSVggID0gYXMubnVtZXJpYyhDbChWSVgpKQ0KKSAlPiUgbmEub21pdCgpDQoNCmRmX2JyZW50IDwtIGRhdGEuZnJhbWUoDQogIERhdGEgID0gaW5kZXgoYEJaPUZgKSwNCiAgQnJlbnQgPSBhcy5udW1lcmljKENsKGBCWj1GYCkpDQopICU+JSBuYS5vbWl0KCkNCg0KZGYgPC0gaW5uZXJfam9pbihkZl92aXgsIGRmX2JyZW50LCBieSA9ICJEYXRhIikgJT4lIGFycmFuZ2UoRGF0YSkNCg0KY2F0KCJQZXLDrW9kbyBjb211bToiLCBmb3JtYXQobWluKGRmJERhdGEpLCAiJWQvJW0vJVkiKSwNCiAgICAiYSIsIGZvcm1hdChtYXgoZGYkRGF0YSksICIlZC8lbS8lWSIpLA0KICAgICLigJQiLCBucm93KGRmKSwgIm9ic2VydmHDp8O1ZXNcbiIpDQoNCm1zIDwtIGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5QT1NJWGN0KGRmJERhdGEpKQ0KDQpldmVudG9zX2JhbmRzIDwtIGxpc3QoDQogIGxpc3QoDQogICAgZnJvbSAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuUE9TSVhjdChhcy5EYXRlKCIyMDA4LTA5LTAxIikpKSwNCiAgICB0byAgICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5QT1NJWGN0KGFzLkRhdGUoIjIwMDktMDYtMzAiKSkpLA0KICAgIGNvbG9yID0gInJnYmEoMjMwLCA1NywgNzAsIDAuMTIpIiwNCiAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJDcmlzZSAyMDA4Iiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiNFNjM5NDYiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxMXB4IiksIHkgPSAyMCkNCiAgKSwNCiAgbGlzdCgNCiAgICBmcm9tICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5QT1NJWGN0KGFzLkRhdGUoIjIwMjAtMDEtMDEiKSkpLA0KICAgIHRvICAgID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLlBPU0lYY3QoYXMuRGF0ZSgiMjAyMC0wOS0zMCIpKSksDQogICAgY29sb3IgPSAicmdiYSgxNDIsIDY4LCAxNzMsIDAuMTIpIiwNCiAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJDT1ZJRC0xOSIsIHN0eWxlID0gbGlzdChjb2xvciA9ICIjOGU0NGFkIiwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMTFweCIpLCB5ID0gMjApDQogICksDQogIGxpc3QoDQogICAgZnJvbSAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuUE9TSVhjdChhcy5EYXRlKCIyMDIyLTAyLTI0IikpKSwNCiAgICB0byAgICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5QT1NJWGN0KGFzLkRhdGUoIjIwMjItMTItMzEiKSkpLA0KICAgIGNvbG9yID0gInJnYmEoMjMwLCAxMjYsIDM0LCAwLjEyKSIsDQogICAgbGFiZWwgPSBsaXN0KHRleHQgPSAiR3VlcnJhIFVjcsOibmlhIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiNlNjdlMjIiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxMXB4IiksIHkgPSAzNSkNCiAgKSwNCiAgbGlzdCgNCiAgICBmcm9tICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5QT1NJWGN0KGFzLkRhdGUoIjIwMjMtMTItMDEiKSkpLA0KICAgIHRvICAgID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLlBPU0lYY3QoYXMuRGF0ZSgiMjAyNC0wNi0zMCIpKSksDQogICAgY29sb3IgPSAicmdiYSg1MiwgMTUyLCAyMTksIDAuMTIpIiwNCiAgICBsYWJlbCA9IGxpc3QodGV4dCA9ICJNYXIgVmVybWVsaG8iLCBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzM0OThkYiIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGZvbnRTaXplID0gIjExcHgiKSwgeSA9IDUwKQ0KICApLA0KICBsaXN0KA0KICAgIGZyb20gID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLlBPU0lYY3QoYXMuRGF0ZSgiMjAyNS0wMS0wMSIpKSksDQogICAgdG8gICAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuUE9TSVhjdChhcy5EYXRlKCIyMDI2LTA0LTMwIikpKSwNCiAgICBjb2xvciA9ICJyZ2JhKDIzMSwgNzYsIDYwLCAwLjEyKSIsDQogICAgbGFiZWwgPSBsaXN0KHRleHQgPSAiVGVuc8OjbyBFVUEtSXLDoyIsIHN0eWxlID0gbGlzdChjb2xvciA9ICIjZTc0YzNjIiwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMTFweCIpLCB5ID0gMjApDQogICkNCikNCg0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgDQogIGhjX3RpdGxlKHRleHQgPSAiVklYIMOXIEJyZW50IE9pbCDigJQgVm9sYXRpbGlkYWRlIGUgUGV0csOzbGVvIikgJT4lDQogIA0KICBoY19zdWJ0aXRsZSh0ZXh0ID0gcGFzdGUwKA0KICAgIGZvcm1hdChtaW4oZGYkRGF0YSksICIlZC8lbS8lWSIpLCAiIGEgIiwNCiAgICBmb3JtYXQobWF4KGRmJERhdGEpLCAiJWQvJW0vJVkiKSwNCiAgICAiIHwgRm9udGU6IFlhaG9vIEZpbmFuY2UsIGVsYWJvcmHDp8OjbyBwcsOzcHJpYSBCSCINCiAgKSkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgID0gbGlzdF9wYXJzZTIoZGF0YS5mcmFtZShtcywgZGYkVklYKSksDQogICAgdHlwZSAgPSAiYXJlYSIsDQogICAgbmFtZSAgPSAiVklYIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICB5QXhpcyA9IDAsDQogICAgZmlsbENvbG9yID0gbGlzdCgNCiAgICAgIGxpbmVhckdyYWRpZW50ID0gbGlzdCh4MSA9IDAsIHkxID0gMCwgeDIgPSAwLCB5MiA9IDEpLA0KICAgICAgc3RvcHMgPSBsaXN0KA0KICAgICAgICBsaXN0KDAsICJyZ2JhKDI1NCwxNzYsMjEsMC4zMCkiKSwNCiAgICAgICAgbGlzdCgxLCAicmdiYSgyNTQsMTc2LDIxLDAuMDEpIikNCiAgICAgICkNCiAgICApLA0KICAgIGxpbmVXaWR0aCA9IDEuNSwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiBwdHMiKQ0KICApICU+JQ0KICANCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhICA9IGxpc3RfcGFyc2UyKGRhdGEuZnJhbWUobXMsIGRmJEJyZW50KSksDQogICAgdHlwZSAgPSAibGluZSIsDQogICAgbmFtZSAgPSAiQnJlbnQgT2lsIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICB5QXhpcyA9IDEsDQogICAgbGluZVdpZHRoID0gMS41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVQcmVmaXggPSAiVVMkICIsIHZhbHVlU3VmZml4ID0gIi9iYXJyaWwiKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSAgPSBsaXN0KHRleHQgPSAiVklYIChwb250b3MpIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiNGRUIwMTUiKSksDQogICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjRkVCMDE1IikpLA0KICAgICAgb3Bwb3NpdGUgPSBGQUxTRQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlICA9IGxpc3QodGV4dCA9ICJCcmVudCAoVVMkL2JhcnJpbCkiLCBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzAyMDIzQyIpKSwNCiAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMwMjAyM0MiKSwgZm9ybWF0ID0gIlVTJCB7dmFsdWV9IiksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUNCiAgICApDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICB0eXBlID0gImRhdGV0aW1lIiwNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICIiKSwNCiAgICBjcm9zc2hhaXIgPSBUUlVFLA0KICAgIHBsb3RCYW5kcyA9IGV2ZW50b3NfYmFuZHMNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBoZWFkZXJGb3JtYXQgPSAiPGI+e3BvaW50Lng6JWQvJW0vJVl9PC9iPjxicj4iDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUsIGFsaWduID0gImNlbnRlciIsIGxheW91dCA9ICJob3Jpem9udGFsIikgJT4lDQogIGhjX2NoYXJ0KHpvb21UeXBlID0gIngiKSAlPiUNCiAgDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgc2VsZWN0ZWQgPSA0LA0KICAgIGJ1dHRvbnMgPSBsaXN0KA0KICAgICAgbGlzdCh0eXBlID0gIm1vbnRoIiwgY291bnQgPSA2LCB0ZXh0ID0gIjZNIiksDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMSwgIHRleHQgPSAiMUEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAzLCAgdGV4dCA9ICIzQSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDUsICB0ZXh0ID0gIjVBIiksDQogICAgICBsaXN0KHR5cGUgPSAiYWxsIiwgICAgICAgICAgICAgIHRleHQgPSAiTcOheCIpDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogWWFob28gRmluYW5jZSB8IF5WSVggwrcgQlo9RiIpICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCmBgYA0KDQpBIHJlbGHDp8OjbyBlbnRyZSBvIG1lZG8gZG8gbWVyY2FkbyBlIG8gcHJlw6dvIGRhIGVuZXJnaWEgZGVwZW5kZSBkYSBvcmlnZW0gZGEgY3Jpc2UuIEVtIGNob3F1ZXMgZGUgZGVtYW5kYSwgY29tbyBuYSBjcmlzZSBmaW5hbmNlaXJhIGRlIDIwMDggZSBubyBpbsOtY2lvIGRhIHBhbmRlbWlhIGRlIENPVklELTE5LCBvYnNlcnZhLXNlIHVtIGNvbXBvcnRhbWVudG8gaW52ZXJzYW1lbnRlIHByb3BvcmNpb25hbDogZW5xdWFudG8gbyBWSVggYXRpbmdlIG7DrXZlaXMgZWxldmFkb3MgZGV2aWRvIGFvIHDDom5pY28gbm9zIG1lcmNhZG9zLCBvIHByZcOnbyBkbyBwZXRyw7NsZW8gcmVjdWEgZHJhc3RpY2FtZW50ZS4gRXNzZSBtb3ZpbWVudG8gcmVmbGV0ZSBvIHRlbW9yIGRlIHVtYSBwYXJhbGlzaWEgZWNvbsO0bWljYSBnbG9iYWwgcXVlLCBjb25zZXF1ZW50ZW1lbnRlLCBkZXJydWJhIG8gY29uc3VtbyBkZSBjb21idXN0w612ZWwgZSBlbmVyZ2lhLg0KDQpQb3Igb3V0cm8gbGFkbywgZW0gY2hvcXVlcyBkZSBvZmVydGEgZSB0ZW5zw7VlcyBnZW9wb2zDrXRpY2FzLCBvIGNlbsOhcmlvIHNlIGludmVydGUuIENvbW8gb2JzZXJ2YWRvIG5vIEdyw6FmaWNvIDEgZHVyYW50ZSBhIEd1ZXJyYSBuYSBVY3LDom5pYSBlIG9zIGNvbmZsaXRvcyBubyBNYXIgVmVybWVsaG8sIGFzIGR1YXMgdmFyacOhdmVpcyB0ZW5kZW0gYSBzZSBtb3ZlciBuYSBtZXNtYSBkaXJlw6fDo28uIE5lc3NlIGNhc28sIG8gYXVtZW50byBkYSBpbmNlcnRlemEgKFZJWCBhbHRvKSBlc3TDoSBkaXJldGFtZW50ZSBhc3NvY2lhZG8gYW8gcmlzY28gZGUgZmFsdGEgZGUgcHJvZHV0byBubyBtZXJjYWRvLCBvIHF1ZSBwcmVzc2lvbmEgb3MgcHJlw6dvcyBwYXJhIGNpbWEuDQoNCk1haXMgcmVjZW50ZW1lbnRlLCBhcyB0ZW5zw7VlcyBlbnRyZSBFc3RhZG9zIFVuaWRvcyBlIElyw6MgcmVmb3LDp2FtIGVzc2UgcGFkcsOjbyBkZSAiY3Jpc2UgZGUgb2ZlcnRhIiwgZXZpZGVuY2lhbmRvIHVtYSBlbGV2YcOnw6NvIHNpbXVsdMOibmVhIGRvIFZJWCBlIGRvIHBldHLDs2xlby4gRXNzZSBjb21wb3J0YW1lbnRvIGluZGljYSBxdWUgbyBtZXJjYWRvIG7Do28gdGVtZSB1bWEgZmFsdGEgZGUgY29tcHJhZG9yZXMsIG1hcyBzaW0gdW1hIHJlZHXDp8OjbyBkZSBvZmVydGEuDQoNCiMjICoqMi7igaAg4oGgRG8gUGV0csOzbGVvIGFvIENhbXBvKioNCg0KUGFyYSBjb21wcmVlbmRlciBhIG1hZ25pdHVkZSBkbyBpbXBhY3RvIGRlIHVtIGNob3F1ZSBlbmVyZ8OpdGljbyBubyBCcmFzaWwsIMOpIG5lY2Vzc8OhcmlvIGFuYWxpc2FyIGNvbW8gZXNzZSBmZW7DtG1lbm8gYXRpbmdlIG8gYWdyb25lZ8OzY2lvLCBvIHByaW5jaXBhbCBtb3RvciBkYSBlY29ub21pYSBuYWNpb25hbC4gQ29tbyBkZW1vbnN0cmFkbyBubyBHcsOhZmljbyAyLCBvIHNldG9yIG1hbnTDqW0gdW1hIHBhcnRpY2lwYcOnw6NvIHJvYnVzdGEgbmEgY29tcG9zacOnw6NvIGRvIFBJQiBicmFzaWxlaXJvIGNvbnNvbGlkYW5kbywgYW8gbG9uZ28gZGEgw7psdGltYSBkw6ljYWRhLCB1bWEgdHJhamV0w7NyaWEgZGUgcmVzaWxpw6puY2lhIHF1ZSBob2plIHN1c3RlbnRhIGFwcm94aW1hZGFtZW50ZSAzMCUgZGEgZWNvbm9taWEgbmFjaW9uYWwuDQoNCioqR3LDoWZpY28gMjoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkFaVUwgICAgPC0gIiMwMjAyM0MiDQpBTUFSRUxPIDwtICIjRkVCMDE1Ig0KQ0lOWkEgICA8LSAiIzZFNkU2RSINCg0KcGliX2JjYiA8LSBHZXRCQ0JEYXRhOjpnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDQzODAsDQogIGZpcnN0LmRhdGUgPSAiMjAxNS0wMS0wMSIsDQogIGxhc3QuZGF0ZSA9IFN5cy5EYXRlKCkNCikgfD4NCiAgcmVuYW1lKGRhdGUgPSByZWYuZGF0ZSwgdmFsb3IgPSB2YWx1ZSkgfD4NCiAgbXV0YXRlKGFubyA9IHllYXIoZGF0ZSkpIHw+DQogIGdyb3VwX2J5KGFubykgfD4NCiAgc3VtbWFyaXNlKHBpYl9icmFzaWxfYmkgPSBzdW0odmFsb3IsIG5hLnJtID0gVFJVRSkgLyAxMDAwLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQpwaWJfYWdybyA8LSByZWFkX2V4Y2VsKHBhdGhfcGliLA0KICBzaGVldCA9ICJQSUIiLA0KICBza2lwID0gOCwNCiAgY29sX25hbWVzID0gRkFMU0UNCikgfD4NCiAgc2VsZWN0KGFubyA9IDEsIHBpYl9hZ3JvX2JpID0gNikgfD4NCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoYW5vKSwNCiAgICBwaWJfYWdyb19iaSA9IGFzLm51bWVyaWMocGliX2Fncm9fYmkpIC8gMTAwMA0KICApIHw+DQogIGZpbHRlcighaXMubmEoYW5vKSwgIWlzLm5hKHBpYl9hZ3JvX2JpKSwgYW5vID49IDIwMTUpDQoNCmRmIDwtIGlubmVyX2pvaW4ocGliX2JjYiwgcGliX2Fncm8sIGJ5ID0gImFubyIpIHw+DQogIGFycmFuZ2UoYW5vKSB8Pg0KICBzbGljZV90YWlsKG4gPSAxMCkNCg0KYW5vcyA8LSBhcy5jaGFyYWN0ZXIoZGYkYW5vKQ0KDQpoYyA8LSBoaWdoY2hhcnQoKSB8Pg0KICBoY19jaGFydCh0eXBlID0gImNvbHVtbiIsIGJhY2tncm91bmRDb2xvciA9ICJ3aGl0ZSIpIHw+DQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiUElCIEJyYXNpbCB2cy4gUElCIGRvIEFncm9uZWfDs2NpbyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gQVpVTCwgZm9udFdlaWdodCA9ICJib2xkIiwgZm9udFNpemUgPSAiMThweCIpDQogICkgfD4NCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICLDmmx0aW1vcyAxMCBhbm9zIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBDSU5aQSwgZm9udFNpemUgPSAiMTNweCIpDQogICkgfD4NCiAgaGNfeEF4aXMoDQogICAgY2F0ZWdvcmllcyA9IGFub3MsDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IEFaVUwsIGZvbnRTaXplID0gIjExcHgiKSkNCiAgKSB8Pg0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJSJCBiaWxow7VlcyIsIHN0eWxlID0gbGlzdChjb2xvciA9IEFaVUwsIGZvbnRTaXplID0gIjEycHgiKSksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IEFaVUwpLA0KICAgICAgZm9ybWF0dGVyID0gSlMoImZ1bmN0aW9uKCl7IHJldHVybiAnUiQgJyArIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KHRoaXMudmFsdWUsIDAsICcsJywgJy4nKSArICcgYmknOyB9IikNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI0VDRUNFQyINCiAgKSB8Pg0KICBoY19wbG90T3B0aW9ucygNCiAgICBjb2x1bW4gPSBsaXN0KA0KICAgICAgZ3JvdXBpbmcgPSBUUlVFLA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4wOCwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMTIsDQogICAgICBib3JkZXJXaWR0aCA9IDAsDQogICAgICBkYXRhTGFiZWxzID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICAgKSwNCiAgICBzZXJpZXMgPSBsaXN0KHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkpDQogICkgfD4NCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIHVzZUhUTUwgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICJ3aGl0ZSIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgZm9ybWF0dGVyID0gSlMoDQogICAgICAiZnVuY3Rpb24oKSB7DQogICAgICAgIGxldCBzID0gJzxiPicgKyB0aGlzLnggKyAnPC9iPjxici8+JzsNCiAgICAgICAgdGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihwb2ludCkgew0KICAgICAgICAgIHMgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6JyArIHBvaW50LmNvbG9yICsgJ1wiPuKXjzwvc3Bhbj4gJyArDQogICAgICAgICAgICAgICBwb2ludC5zZXJpZXMubmFtZSArICc6IDxiPlIkICcgKw0KICAgICAgICAgICAgICAgSGlnaGNoYXJ0cy5udW1iZXJGb3JtYXQocG9pbnQueSwgMSwgJywnLCAnLicpICsNCiAgICAgICAgICAgICAgICcgYmk8L2I+PGJyLz4nOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0dXJuIHM7DQogICAgICB9Ig0KICAgICkNCiAgKSB8Pg0KICBoY19hZGRfc2VyaWVzKG5hbWUgPSAiUElCIEJyYXNpbCIsIGRhdGEgPSByb3VuZChkZiRwaWJfYnJhc2lsX2JpLCAxKSwgY29sb3IgPSBBWlVMKSB8Pg0KICBoY19hZGRfc2VyaWVzKG5hbWUgPSAiUElCIGRvIEFncm9uZWfDs2NpbyIsIGRhdGEgPSByb3VuZChkZiRwaWJfYWdyb19iaSwgMSksIGNvbG9yID0gQU1BUkVMTykgfD4NCiAgaGNfbGVnZW5kKA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJ0b3AiLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KGNvbG9yID0gQVpVTCwgZm9udFdlaWdodCA9ICJub3JtYWwiKQ0KICApIHw+DQogIGhjX2NhcHRpb24oDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKHPDqXJpZSA0MzgwKSBlIENFUEVBL0VzYWxxLVVTUCArIENOQS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIOKAkyBJQk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBDSU5aQSwgZm9udFNpemUgPSAiMTFweCIpDQogICkgfD4NCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKSB8Pg0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBGQUxTRSkNCg0KaGMNCmBgYA0KDQpEZSBhY29yZG8gY29tIG8gTWluaXN0w6lyaW8gZGEgQWdyaWN1bHR1cmEsIG8gYWdyb25lZ8OzY2lvIHJlcHJlc2VudGEgY2VyY2EgZGUgMzAlIGRlIHRvZGEgYSByaXF1ZXphIHByb2R1emlkYSBubyBwYcOtcy4gQWzDqW0gZGlzc28sIGVtIDIwMjUsIG8gUElCIGRhIGFncm9wZWN1w6FyaWEgcmVnaXN0cm91IHVtIGNyZXNjaW1lbnRvIGRlIDExLDclLCBpbXB1bHNpb25hbmRvIG8gcmVzdWx0YWRvIGdlcmFsIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEuIEEgcmlxdWV6YSBwcm9kdXppZGEgcGVsbyBzZXRvciBuZXNzZSBwZXLDrW9kbyBhdGluZ2l1IGEgbWFyY2EgZGUgUlwkIDc3NSwzIGJpbGjDtWVzLiBFc3NlcyBuw7ptZXJvcyBldmlkZW5jaWFtIHF1ZSBxdWFscXVlciBmYXRvciBxdWUgZGVzZXN0YWJpbGl6ZSBvcyBjdXN0b3MgZGUgcHJvZHXDp8OjbyBubyBjYW1wbyBuw6NvIGFmZXRhIGFwZW5hcyBvIHByb2R1dG9yIHJ1cmFsLCBtYXMgY29tcHJvbWV0ZSBhIGVzdGFiaWxpZGFkZSBlY29uw7RtaWNhIGRlIHRvZG8gbyBwYcOtcy4gRGlhbnRlIGRlc3NhIGRlcGVuZMOqbmNpYSwgZW50ZW5kZXIgY29tbyBvIHBldHLDs2xlbyBhZmV0YSBvIGFncm9uZWfDs2NpbyDDqSBmdW5kYW1lbnRhbCBwYXJhIGNvbXByZWVuZGVyIG9zIHJ1bW9zIGRhIG5vc3NhIGVjb25vbWlhLg0KDQojIyMgMi4xIERlcGVuZMOqbmNpYSBicmFzaWxlaXJhIGUgbyBwYXBlbCBkb3MgZmVydGlsaXphbnRlcw0KDQpQYXJhIG1hbnRlciBhIHByb2R1dGl2aWRhZGUgcmVjb3JkZSBtZW5jaW9uYWRhIGFudGVyaW9ybWVudGUsIG8gc29sbyBicmFzaWxlaXJvIGRlcGVuZGUgbWFzc2l2YW1lbnRlIGRlIGZlcnRpbGl6YW50ZXMgbml0cm9nZW5hZG9zLCBzZW5kbyBhIHVyZWlhIG8gcHJpbmNpcGFsIGRlbGVzLiBPIHByb2Nlc3NvIGRlIGZhYnJpY2HDp8OjbyBkZXNzZSBpbnN1bW8gw6kgbyBwb250byBvbmRlIG8gY2FtcG8gZSBvIHNldG9yIGVuZXJnw6l0aWNvIHNlIGZ1bmRlbTogYSB1cmVpYSDDqSBwcm9kdXppZGEgYSBwYXJ0aXIgZGEgYW3DtG5pYSwgcXVlIHBvciBzdWEgdmV6IGV4aWdlIGdyYW5kZXMgdm9sdW1lcyBkZSBoaWRyb2fDqm5pbyBlIGVuZXJnaWEuIE5hIGluZMO6c3RyaWEgZ2xvYmFsLCBlc3NlIGhpZHJvZ8OqbmlvIMOpIGV4dHJhw61kbyBtYWpvcml0YXJpYW1lbnRlIGRvIGfDoXMgbmF0dXJhbCAoY3VqbyBwcmXDp28gw6kgZGlyZXRhbWVudGUgaW5kZXhhZG8gYW8gcGV0csOzbGVvIGJydXRvKS4gTyBwcm9ibGVtYSBwYXJhIG8gQnJhc2lsIMOpIHF1ZSBlc3NhIHRyYW5zZm9ybWHDp8OjbyBhY29udGVjZSBmb3JhIGRlIG5vc3NhcyBmcm9udGVpcmFzLiBBcGVzYXIgZGUgc2VybW9zIHVtYSBwb3TDqm5jaWEgYWdyw61jb2xhLCBzb21vcyBleHRyZW1hbWVudGUgZGVwZW5kZW50ZXMgZG8gbWVyY2FkbyBleHRlcm5vIHBhcmEgc3VwcmlyIGVzc2EgZGVtYW5kYSBxdcOtbWljYS4gRGUgYWNvcmRvIGNvbSBvIGVjb25vbWlzdGEgQW5kcsOpIEJyYXosIGRvIEZHViBJYnJlLCBvIEJyYXNpbCBpbXBvcnRhIGhvamUgY2VyY2EgZGUgODUlIGRvcyBmZXJ0aWxpemFudGVzIHF1ZSBjb25zb21lLCBjb20gZGVzdGFxdWUgYWJzb2x1dG8gcGFyYSBhIHVyZWlhLiBFc3NhIGNvbmZpZ3VyYcOnw6NvIGNvbG9jYSBvIHByb2R1dG9yIGJyYXNpbGVpcm8gZW0gdW1hIHBvc2nDp8OjbyB2dWxuZXLDoXZlbDogZWxlIGRlcGVuZGUgZGUgdW0gaW5zdW1vIGN1am8gY3VzdG8gZGUgZmFicmljYcOnw6NvIMOpIGRpdGFkbyBwZWxvIG1lcmNhZG8gaW50ZXJuYWNpb25hbCBkZSBlbmVyZ2lhLiBFbSBjb250ZXh0b3MgZGUgdGVuc8O1ZXMgZ2xvYmFpcywgZWxldmHDp8O1ZXMgbm8gcHJlw6dvIGRvIHBldHLDs2xlbyB0ZW5kZW0gYSBwcmVzc2lvbmFyIG8gY3VzdG8gZGUgcHJvZHXDp8OjbyBkYSB1cmVpYSBuYXMgcHJpbmNpcGFpcyByZWdpw7VlcyBwcm9kdXRvcmFzLCBjb21vIEV1cm9wYSwgw4FzaWEgZSBPcmllbnRlIE3DqWRpby4gRGlhbnRlIGRlc3NhIHJlYWxpZGFkZSwgc3VyZ2UgdW1hIHF1ZXN0w6NvIGZ1bmRhbWVudGFsOiBhdMOpIHF1ZSBwb250byBhIHZhcmlhw6fDo28gZG8gcGV0csOzbGVvIHJlYWxtZW50ZSBkaXRhIG8gcHJlw6dvIGRhIHVyZWlhIG5vIG1lcmNhZG8/DQoNCiMjIyAyLjIgRXZpZMOqbmNpYSBlbXDDrXJpY2E6IHJlbGHDp8OjbyBlbnRyZSBwZXRyw7NsZW8gZSB1cmVpYQ0KDQpEaWFudGUgZGEgcmVsYcOnw6NvIHRlw7NyaWNhIGVzdGFiZWxlY2lkYSBhbnRlcmlvcm1lbnRlIGVudHJlIG8gc2V0b3IgZW5lcmfDqXRpY28gZSBhIHByb2R1w6fDo28gZGUgZmVydGlsaXphbnRlcywgdG9ybmEtc2UgcmVsZXZhbnRlIGludmVzdGlnYXIgYXTDqSBxdWUgcG9udG8gdmFyaWHDp8O1ZXMgbm8gcHJlw6dvIGRvIHBldHLDs2xlbyBzZSB0cmFuc21pdGVtIGFvcyBwcmXDp29zIGRhIHVyZWlhLiBQYXJhIGlzc28sIGZvaSBlc3RpbWFkbyB1bSBtb2RlbG8gZWNvbm9tw6l0cmljbyBjb20gYmFzZSBlbSBkYWRvcyBkacOhcmlvcyBkZSBtZXJjYWRvLCBjb25mb3JtZSBhcHJlc2VudGFkbyBubyBHcsOhZmljbyAzLg0KDQoqKipHcsOhZmljbyAzOioqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9DQpicmVudCA8LSByZWFkX2V4Y2VsKHBhdGhfYnJlbnQpDQp1cmVpYSA8LSByZWFkX2V4Y2VsKHBhdGhfdXJlaWEpDQpnYXMgICA8LSByZWFkX2V4Y2VsKHBhdGhfZ2FzKQ0KDQpicmVudCA8LSBicmVudCAlPiUNCiAgbXV0YXRlKERhdGUgPSBhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlbS8lZC8lWSIpLCBCcmVudCA9IGFzLm51bWVyaWMoUHJpY2UpKSAlPiUNCiAgc2VsZWN0KERhdGUsIEJyZW50KSAlPiUgZmlsdGVyKCFpcy5uYShEYXRlKSwgIWlzLm5hKEJyZW50KSkNCg0KdXJlaWEgPC0gdXJlaWEgJT4lDQogIG11dGF0ZShEYXRlID0gYXMuRGF0ZShEYXRlLCBmb3JtYXQgPSAiJW0vJWQvJVkiKSwgVXJlaWEgPSBhcy5udW1lcmljKFByaWNlKSkgJT4lDQogIHNlbGVjdChEYXRlLCBVcmVpYSkgJT4lIGZpbHRlcighaXMubmEoRGF0ZSksICFpcy5uYShVcmVpYSkpDQoNCmNhbWJpbyA8LSBnYmNiZF9nZXRfc2VyaWVzKDEwODEzLCBmaXJzdC5kYXRlID0gIjIwMTUtMDEtMDEiKSAlPiUNCiAgcmVuYW1lKERhdGUgPSByZWYuZGF0ZSwgQ2FtYmlvID0gdmFsdWUpICU+JQ0KICBzZWxlY3QoRGF0ZSwgQ2FtYmlvKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShDYW1iaW8pKQ0KDQpnYXMgPC0gZ2FzICU+JQ0KICBtdXRhdGUoRGF0ZSA9IGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVtLyVkLyVZIiksIEdhcyA9IGFzLm51bWVyaWMoUHJpY2UpKSAlPiUNCiAgc2VsZWN0KERhdGUsIEdhcykgJT4lIGZpbHRlcighaXMubmEoRGF0ZSksICFpcy5uYShHYXMpKQ0KDQpkYWRvcyA8LSBpbm5lcl9qb2luKGJyZW50LCB1cmVpYSwgYnkgPSAiRGF0ZSIpICU+JQ0KICBpbm5lcl9qb2luKGNhbWJpbywgYnkgPSAiRGF0ZSIpICU+JQ0KICBpbm5lcl9qb2luKGdhcywgYnkgPSAiRGF0ZSIpICU+JQ0KICBhcnJhbmdlKERhdGUpICU+JQ0KICBtdXRhdGUoDQogICAgbG9nX2JyZW50ID0gbG9nKEJyZW50KSwNCiAgICBsb2dfdXJlaWEgPSBsb2coVXJlaWEpLA0KICAgIGxvZ19jYW1iaW8gPSBsb2coQ2FtYmlvKSwNCiAgICBsb2dfZ2FzID0gbG9nKEdhcykNCiAgKQ0KDQptb2RlbG8gPC0gbG0obG9nX3VyZWlhIH4gbG9nX2JyZW50ICsgbG9nX2NhbWJpbyArIGxvZ19nYXMsIGRhdGEgPSBkYWRvcykNCnJlcyA8LSBzdW1tYXJ5KG1vZGVsbykNCmNvZWZzIDwtIGNvZWYobW9kZWxvKQ0KYjAgPC0gY29lZnNbMV07IGIxIDwtIGNvZWZzWzJdOyBiMiA8LSBjb2Vmc1szXTsgYjMgPC0gY29lZnNbNF0NCnIyIDwtIHJlcyRyLnNxdWFyZWQNCg0KIyBlZmVpdG8gcGFyY2lhbCBkbyBCcmVudCAocmVzw61kdW9zIHBhcmNpYWlzKQ0KbW9kZWxvX3NlbV9icmVudCA8LSBsbShsb2dfdXJlaWEgfiBsb2dfY2FtYmlvICsgbG9nX2dhcywgZGF0YSA9IGRhZG9zKQ0KbW9kZWxvX2JyZW50ICAgICA8LSBsbShsb2dfYnJlbnQgfiBsb2dfY2FtYmlvICsgbG9nX2dhcywgZGF0YSA9IGRhZG9zKQ0KDQpyZXNfeSA8LSByZXNpZHVhbHMobW9kZWxvX3NlbV9icmVudCkgKyBtZWFuKGRhZG9zJGxvZ191cmVpYSkNCnJlc194IDwtIHJlc2lkdWFscyhtb2RlbG9fYnJlbnQpICAgICArIG1lYW4oZGFkb3MkbG9nX2JyZW50KQ0KDQpzY2F0dGVyIDwtIGRhdGEuZnJhbWUoeCA9IHJvdW5kKHJlc194LCA0KSwgeSA9IHJvdW5kKHJlc195LCA0KSkNCnhfc2VxICAgPC0gc2VxKG1pbihyZXNfeCksIG1heChyZXNfeCksIGxlbmd0aC5vdXQgPSAyMDApDQpyZXRhICAgIDwtIGRhdGEuZnJhbWUoeCA9IHJvdW5kKHhfc2VxLCA0KSwgeSA9IHJvdW5kKG1lYW4oZGFkb3MkbG9nX3VyZWlhKSArIGIxICogKHhfc2VxIC0gbWVhbihyZXNfeCkgKyBtZWFuKGRhZG9zJGxvZ19icmVudCkgLSBtZWFuKGRhZG9zJGxvZ19icmVudCkpLCA0KSkNCg0KIyB2ZXJzw6NvIHNpbXBsZXMgZGEgcmV0YQ0KcmV0YSA8LSBkYXRhLmZyYW1lKA0KICB4ID0gcm91bmQoeF9zZXEsIDQpLA0KICB5ID0gcm91bmQoY29lZihsbShyZXNfeSB+IHJlc194KSlbMV0gKyBjb2VmKGxtKHJlc195IH4gcmVzX3gpKVsyXSAqIHhfc2VxLCA0KQ0KKQ0KDQpoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoem9vbVR5cGUgPSAieHkiKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJFZmVpdG8gUGFyY2lhbCBkbyBCcmVudCBzb2JyZSBhIFVyZWlhIikgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSBzcHJpbnRmKA0KICAgICAgImxuKMW2KSA9ICUuNGYgKyAlLjRmwrdsbihCcmVudCkgKyAlLjRmwrdsbihDw6JtYmlvKSArICUuNGbCt2xuKEfDoXMpIHwgUsKyID0gJS40ZiB8IG4gPSAlZCIsDQogICAgICBiMCwgYjEsIGIyLCBiMywgcjIsIG5yb3coZGFkb3MpDQogICAgKQ0KICApICU+JQ0KICBoY194QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJsbihQcmXDp28gZG8gQnJlbnQpIikpICU+JQ0KICBoY195QXhpcyh0aXRsZSA9IGxpc3QodGV4dCA9ICJSZXPDrWR1byBQYXJjaWFsIOKAlCBsbihVcmVpYSkiKSkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKHNjYXR0ZXIpLCB0eXBlID0gInNjYXR0ZXIiLCBuYW1lID0gIk9ic2VydmHDp8O1ZXMiLA0KICAgIGNvbG9yID0gInJnYmEoNTYsIDEzOCwgMjIxLCAwLjQwKSIsIG1hcmtlciA9IGxpc3QocmFkaXVzID0gMywgc3ltYm9sID0gImNpcmNsZSIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKHJldGEpLCB0eXBlID0gImxpbmUiLCBuYW1lID0gIlJldGEgT0xTIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwgZW5hYmxlTW91c2VUcmFja2luZyA9IEZBTFNFDQogICkgJT4lDQogIGhjX3Rvb2x0aXAocG9pbnRGb3JtYXQgPSAibG4oQnJlbnQpOiA8Yj57cG9pbnQueH08L2I+PGJyPmxuKFVyZWlhKTogPGI+e3BvaW50Lnl9PC9iPiIpICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUsIGFsaWduID0gImNlbnRlciIsIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIikgJT4lDQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsIHRleHQgPSAiRm9udGU6IEludmVzdGluZy5jb20uIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvIEJIIikgJT4lDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkNCmBgYA0KDQpPIEdyw6FmaWNvIDMgYXByZXNlbnRhIGEgcmVsYcOnw6NvIGVudHJlIG9zIHByZcOnb3MgZGEgdXJlaWEgZSBkbyBwZXRyw7NsZW8sIGFtYm9zIGVtIGxvZ2FyaXRtbyBuYXR1cmFsLCBqdW50YW1lbnRlIGNvbSBhIHJldGEgZGUgcmVncmVzc8OjbyBlc3RpbWFkYS4gT2JzZXJ2YS1zZSB1bWEgcmVsYcOnw6NvIHBvc2l0aXZhIGVudHJlIGFzIHZhcmnDoXZlaXMsIGluZGljYW5kbyBxdWUgYXVtZW50b3Mgbm8gcHJlw6dvIGRvIHBldHLDs2xlbyBlc3TDo28gYXNzb2NpYWRvcyBhIGVsZXZhw6fDtWVzIG5vIHByZcOnbyBkYSB1cmVpYS4gTm90YS1zZSBxdWUgYSBhbW9zdHJhIGNvbnRhIGNvbSA5MTQgb2JzZXJ2YcOnw7VlcywgbyBxdWUgcmVwcmVzZW50YSB1bSBuw7ptZXJvIGVsZXZhZG8gZSBwZXJtaXRlIGlkZW50aWZpY2FyIHBhZHLDtWVzIGRlIGZvcm1hIG1haXMgY29uZmnDoXZlbC4NCg0KQSBlc3RpbWF0aXZhIMOpIGFwcmVzZW50YWRhIG5hIGVxdWHDp8OjbyAxOg0KDQoqKkVxdWHDp8OjbyAxOioqDQoNCiQkXGxuKFx0ZXh0e1VyZWlhfSkgPSAtMHssfTc4MTAgKyAweyx9NDk1MCBcY2RvdCBcbG4oXHRleHR7QnJlbnR9KSArIDB7LH02MjQxIFxjZG90IFxsbihcdGV4dHtDw6JtYmlvfSkgKyAweyx9NDUwNiBcY2RvdCBcbG4oXHRleHR7R8Ohc30pJCQNClRyYXRhLXNlIGRlIHVtIG1vZGVsbyBsb2ctbG9nIG11bHRpdmFyaWFkbywgbm8gcXVhbCBvcyBjb2VmaWNpZW50ZXMgYXNzb2NpYWRvcyBhIGNhZGEgdmFyacOhdmVsIHBvZGVtIHNlciBpbnRlcnByZXRhZG9zIGNvbW8gZWxhc3RpY2lkYWRlcy4gQ29tbyBvcyBwcmXDp29zIHPDo28gbWVkaWRvcyBlbSB1bmlkYWRlcyBkaXN0aW50YXMg4oCUIHBldHLDs2xlbyBlbSBkw7NsYXJlcyBwb3IgYmFycmlsLCB1cmVpYSBlbSBkw7NsYXJlcyBwb3IgdG9uZWxhZGEsIGPDom1iaW8gZW0gcmVhaXMgcG9yIGTDs2xhciBlIGfDoXMgbmF0dXJhbCBlbSBkw7NsYXJlcyBwb3IgTU1CdHUgLSBhIGVzcGVjaWZpY2HDp8OjbyBlbSBsb2dhcml0bW9zIHBlcm1pdGUgY29tcGFyYXIgdmFyaWHDp8O1ZXMgcGVyY2VudHVhaXMgZW50cmUgYXMgdmFyacOhdmVpcy4gDQpOZXNzZSBjb250ZXh0bywgbyBjb2VmaWNpZW50ZSAkXGJldGFfMSA9IDB7LH00OTUwJCBpbmRpY2EgcXVlIHVtIGF1bWVudG8gZGUgMSUgbm8gcHJlw6dvIGRvIHBldHLDs2xlbyBlc3TDoSBhc3NvY2lhZG8sIGVtIG3DqWRpYSwgYSB1bSBhdW1lbnRvIGRlIGFwcm94aW1hZGFtZW50ZSAwLDUwJSBubyBwcmXDp28gZGEgdXJlaWEuIE8gY29lZmljaWVudGUgJFxiZXRhXzIgPSAweyx9NjI0MSQgaW5kaWNhIHF1ZSB1bWEgZGVzdmFsb3JpemHDp8OjbyBkZSAxJSBkbyByZWFsIGZyZW50ZSBhbyBkw7NsYXIgZXN0w6EgYXNzb2NpYWRhIGEgdW0gYXVtZW50byBkZSBhcHJveGltYWRhbWVudGUgMCw2MiUgbm8gcHJlw6dvIGRhIHVyZWlhIGVtIHJlYWlzLCBvIHF1ZSByZWZsZXRlIG8gY2Fyw6F0ZXIgaW1wb3J0YWRvIGRvIGluc3Vtby4gUG9yIGZpbSwgbyBjb2VmaWNpZW50ZSAkXGJldGFfMyA9IDB7LH00NTA2JCBpbmRpY2EgcXVlIHVtIGF1bWVudG8gZGUgMSUgbm8gcHJlw6dvIGRvIGfDoXMgbmF0dXJhbCBlc3TDoSBhc3NvY2lhZG8gYSB1bSBhdW1lbnRvIGRlIGFwcm94aW1hZGFtZW50ZSAwLDQ1JSBubyBwcmXDp28gZGEgdXJlaWEuDQoNCk8gY29lZmljaWVudGUgZGUgZGV0ZXJtaW5hw6fDo28gKCRSXjIgPSAweyx9NzU1NSQpIGluZGljYSBxdWUgY2VyY2EgZGUgNzYlIGRhIHZhcmlhw6fDo28gbm8gcHJlw6dvIGRhIHVyZWlhIMOpIGV4cGxpY2FkYSBjb25qdW50YW1lbnRlIHBlbGFzIHZhcmlhw6fDtWVzIG5vIHByZcOnbyBkbyBwZXRyw7NsZW8sIGRvIGPDom1iaW8gZSBkbyBnw6FzIG5hdHVyYWwsIHJlcHJlc2VudGFuZG8gdW1hIG1lbGhvcmEgZXhwcmVzc2l2YSBlbSByZWxhw6fDo28gYW8gbW9kZWxvIHNpbXBsZXMgb3JpZ2luYWwgKCRSXjIgPSAweyx9NDkzNyQpLiBPcyByZXN1bHRhZG9zIHJlZm9yw6dhbSBxdWUgbyBtZXJjYWRvIGVuZXJnw6l0aWNvLCBlbSBjb25qdW50byBjb20gbyBhbWJpZW50ZSBjYW1iaWFsLCBleGVyY2UgaW5mbHXDqm5jaWEgc2lnbmlmaWNhdGl2YSBzb2JyZSBvIGN1c3RvIGRvcyBmZXJ0aWxpemFudGVzIGUsIHBvcnRhbnRvLCBkZXZlIHNlciBjb25zaWRlcmFkbyBjb21vIHZhcmnDoXZlbCBjZW50cmFsIG5hIGFuw6FsaXNlIGRvIHNldG9yIGFncsOtY29sYS4NCg0KDQojIyAqKjMu4oGgIOKBoE8gRWZlaXRvIEJyYXNpbCoqDQoNCiMjIyAzLjEgQ2ljbG8gYWdyw61jb2xhIGUgZGVmYXNhZ2VtIGRvIGltcGFjdG8NCg0KTyBwZXLDrW9kbyBkZSBzYWZyYSDDqSBvIHByaW5jaXBhbCBjaWNsbyBkZSBjdWx0aXZvIGRvIGFuby4gTmVzc2UgbW9tZW50bywgYXMgY29uZGnDp8O1ZXMgY2xpbcOhdGljYXMgc8OjbyBhcyBtYWlzIGZhdm9yw6F2ZWlzIGhpc3RvcmljYW1lbnRlLCBwZXJtaXRpbmRvIG8gcGxhbnRpbyBkYXMgY3VsdHVyYXMgZGUgbWFpb3IgdmFsb3IgZWNvbsO0bWljbyBlIHByb2R1dGl2aWRhZGUuIE5vIEJyYXNpbCwgbyBwbGFudGlvIGNvbWXDp2EgZW50cmUgb3MgbWVzZXMgZGUgc2V0ZW1icm8gYSBkZXplbWJybywgYXByb3ZlaXRhbmRvIG8gaW7DrWNpbyBkYSBlc3Rhw6fDo28gY2h1dm9zYS4gRW50cmUgamFuZWlybyBlIGFicmlsLCBwb3Igc3VhIHZleiwgYWNvbnRlY2UgYSBjb2xoZWl0YS4gRXNzZSDDqSBvIHBlcsOtb2RvIGRlIGNvbGhlaXRhIGRhIHNhZnJhIHByaW5jaXBhbCwgcG9yw6ltLCBpbWVkaWF0YW1lbnRlIGFww7NzIGVsYSwgYWNvbnRlY2UgdW0gY2ljbG8gZGUgY3VsdGl2byBjb25oZWNpZG8gY29tbyAnc2FmcmluaGEnLCBjb20gdW1hIHByb2R1dGl2aWRhZGUgY29uc2lkZXJhdmVsbWVudGUgbWVub3IuDQoNCk8gZWZlaXRvIGRlIHVtIGNob3F1ZSBubyBwcmXDp28gZG8gcGV0csOzbGVvIHNvYnJlIGEgYWdyaWN1bHR1cmEgYnJhc2lsZWlyYSBuw6NvIMOpIGltZWRpYXRvLiBFbGUgc2UgcHJvcGFnYSBjb20gdW1hIGNlcnRhIGRlZmFzZWdlbSwgY29uZGljaW9uYWRvIHBlbG8gY2FsZW5kw6FyaW8gYWdyw61jb2xhIGRvIHBhw61zLiBBcyBkZWNpc8O1ZXMgZGUgY29tcHJhIGRlIGZlcnRpbGl6YW50ZSBzw6NvIHRvbWFkYXMgZW0gdW0gcGVyw61vZG8gY29uaGVjaWRvIGNvbW8gZW50cmVzc2FmcmEsIHF1ZSBhY29udGVjZSBlbnRyZSBqdW5obyBlIGFnb3N0by4NCg0KUXVhbmRvIG9zIGNob3F1ZXMgb2NvcnJlbSBlbSBwZXLDrW9kb3MgZGUgZW50cmVzc2FmcmEsIG8gQnJhc2lsIHZpdmUgdW0gbW9tZW50byBlbSBxdWUgYSBkZW1hbmRhIHBvciBmZXJ0aWxpemFudGVzIG7Do28gw6kgdMOjbyBhbHRhLCBtYXMgY2FzbyBhIHNpdHVhw6fDo28gcG9kZSBwaW9yYXIgY2FzbyBlbGEgc2UgZXh0ZW5kYSBhdMOpIG8gc2VndW5kbyBzZW1lc3RyZSwgbW9tZW50byBvbmRlIGNvbWXDp2EgbyBlc3RhYmVsZWNpbWVudG8gZGFzIG5vdmFzIHNhZnJhcy4gQXMgc2FmcmFzIGVtIGFuZGFtZW50byBqw6EgY29udGFtIGNvbSBmZXJ0aWxpemFudGVzIGludGVybmFsaXphZG9zLCBhc3NpbSBvIGltcGFjdG8gdGVuZGUgYSBzZSBtYXRlcmlhbGl6YXIgbmEgc2FmcmEgc2VndWludGUuDQoNClVtIGF1bWVudG8gbm8gcHJlw6dvIGRvIHBldHLDs2xlbyBlbmNhcmVjZSBvIGfDoXMgbmF0dXJhbCwgcXVlIMOpIGEgcHJpbmNpcGFsIG1hdMOpcmlhLXByaW1hIGRvcyBmZXJ0aWxpemFudGVzIG5pdHJvZ2VuYWRvcy4gQW8gbWVzbW8gdGVtcG8sIG8gZGllc2VsIG1haXMgY2FybyBlbGV2YSBvIGN1c3RvIGRlIGZyZXRlIGUgYSBvcGVyYcOnw6NvIGRhcyBtw6FxdWluYXMgYWdyw61jb2xhcyBubyBjYW1wby4NCg0KIyMjIDMuMiBFdmlkw6puY2lhcyBoaXN0w7NyaWNhcyBkZSBjaG9xdWVzIGUgc2V1cyBlZmVpdG9zIG5vIHNldG9yIGFncsOtY29sYQ0KDQpBbGd1bnMgZXBpc8OzZGlvcyBoaXN0w7NyaWNvcyBhanVkYW0gYSBlbnRlbmRlciBvcyBlZmVpdG9zIGRvcyBjaG9xdWVzIGRvIHBldHLDs2xlbyBzb2JyZSBvIHNldG9yIGFncsOtY29sYS4gTyBwcmltZWlybyBjaG9xdWUsIG9jb3JyaWRvIGVudHJlIDE5NzMgZSAxOTc0LCBxdWFkcnVwbGljb3UgbyBwcmXDp28gZG8gYmFycmlsIGVtIGFwZW5hcyBjaW5jbyBtZXNlcywgZGUgVVNcJCAzIHBhcmEgVVNcJCAxMiAoR3LDoWZpY28gNCksIGFww7NzIGludGVydmVuw6fDo28gZGEgT1BFUC4gQXBlc2FyIGRvIGF1bWVudG8gc2lnbmlmaWNhdGl2bywgYSBzZWd1cmFuw6dhIGFsaW1lbnRhciBuw6NvIGZvaSBjb21wcm9tZXRpZGEgZGUgZm9ybWEgZXN0cnV0dXJhbCwgcG9pcyBhaW5kYSBuw6NvIGV4aXN0aWEgYSBjb25leMOjbyBkaXJldGEgZW50cmUgbyBwcmXDp28gZG8gcGV0csOzbGVvIGUgbyBjdXN0byBkZSBwcm9kdcOnw6NvIGFncsOtY29sYSBxdWUgc2Ugb2JzZXJ2YSBob2plLg0KDQpPIHNlZ3VuZG8gY2hvcXVlLCBlbnRyZSAxOTc5IGUgMTk4MCwgZGVjb3JyZXUgZGEgUmV2b2x1w6fDo28gSXJhbmlhbmEgZSBkYSBHdWVycmEgSXLDoy1JcmFxdWUsIHF1ZSBkZXJydWJhcmFtIGEgcHJvZHXDp8OjbyBkZSBhbWJvcyBvcyBwYcOtc2VzIGUgZWxldmFyYW0gbyBiYXJyaWwgZGUgVVNcJCAxMiBwYXJhIFVTXCQgMzksNTAgKEdyw6FmaWNvIDQpLiBObyBCcmFzaWwsIGEgcmVzcG9zdGEgw6AgY3Jpc2UgZm9pIGEgY3JpYcOnw6NvIGRvIFByb8OhbGNvb2wsIGNvbnNpZGVyYWRvIG8gcHJvZ3JhbWEgbWFpcyBpbXBvcnRhbnRlIGRlIHByb2R1w6fDo28gZSB1c28gZGUgY29tYnVzdMOtdmVpcyByZW5vdsOhdmVpcyBqw6EgaW1wbGVtZW50YWRvIG5vIG11bmRvLCByZWR1emluZG8gYSBkZXBlbmTDqm5jaWEgYnJhc2lsZWlyYSBkZSBjb21idXN0w612ZWlzIGbDs3NzZWlzIGUgZ2VyYW5kbyB1bWEgZWNvbm9taWEgZXN0aW1hZGEgZGUgMiw1IGJpbGjDtWVzIGRlIGJhcnJpcyBkZSBwZXRyw7NsZW8gbmFzIMO6bHRpbWFzIGNpbmNvIGTDqWNhZGFzLiBPIGltcGFjdG8gc29icmUgb3MgZmVydGlsaXphbnRlcywgbm8gZW50YW50bywgYWluZGEgZXJhIGxpbWl0YWRvLg0KDQpFbSBtZWFkb3MgZGUganVsaG8gZGUgMjAwOCwgbyBiYXJyaWwgZGUgQnJlbnQgYXRpbmdpdSBVU1wkIDE0Nyw1MC4gQXTDqSBvIGZpbSBkbyBtZXNtbyBhbm8sIG8gcHJlw6dvIHJlY3VvdSA3NyUsIHNlbmRvIG5lZ29jaWFkbyBhYmFpeG8gZGUgVVNcJCA0MC4gRXNzZSBlcGlzw7NkaW8gaWx1c3RyYSBjb21vIGFzIHZhcmlhw6fDtWVzIGRvIHBldHLDs2xlbyBzZSB0cmFuc21pdGVtIGRlIGZvcm1hIGFzc2ltw6l0cmljYSBhb3MgY3VzdG9zIGFncsOtY29sYXMgKEdyw6FmaWNvIDQpOiBvcyBmZXJ0aWxpemFudGVzIGFjb21wYW5oYW0gcmFwaWRhbWVudGUgYXMgYWx0YXMsIG1hcyBhcHJlc2VudGFtIHJpZ2lkZXogbmEgcXVlZGEsIGRlIG1vZG8gcXVlIHNldXMgcHJlw6dvcyBuw6NvIHJlY3VhbSBuYSBtZXNtYSBwcm9wb3LDp8OjbyBxdWFuZG8gbyBwZXRyw7NsZW8gY2VkZS4NCg0KQSBwYW5kZW1pYSBkZSBDT1ZJRC0xOSBwcm92b2NvdSBncmFuZGUgdm9sYXRpbGlkYWRlIG5vIG1lcmNhZG8gZGUgaW5zdW1vcyBhZ3LDrWNvbGFzLiBPcyBwcmXDp29zIGRvcyBmZXJ0aWxpemFudGVzIHN1YmlyYW0gZGUgZm9ybWEgZXhwcmVzc2l2YSwgYWNvbXBhbmhhZG9zIGRlIHByb2JsZW1hcyBsb2fDrXN0aWNvcyBncmF2ZXMg4oCUIGFsZ3VucyBhZ3JpY3VsdG9yZXMgY2hlZ2FyYW0gYSBlc3BlcmFyIGF0w6kgOTAgZGlhcyBwYXJhIHJlY2ViZXIgaW5zdW1vcyBxdWUsIGFudGVzIGRhIHBhbmRlbWlhLCBsZXZhdmFtIGVtIG3DqWRpYSB1bSBtw6pzLiBPIGVwaXPDs2RpbyBldmlkZW5jaW91IHF1ZSBmYWxoYXMgbmEgY2FkZWlhIGdsb2JhbCBkZSBzdXByaW1lbnRvcyB0YW1iw6ltIGNvbnN0aXR1ZW0gdW0gdmV0b3IgcmVsZXZhbnRlIGRlIHByZXNzw6NvIHNvYnJlIG9zIHByZcOnb3MgZG9zIGZlcnRpbGl6YW50ZXMsIG1lc21vIG5hIGF1c8OqbmNpYSBkZSBjb25mbGl0b3MgYXJtYWRvcy4NCg0KQSBHdWVycmEgUsO6c3NpYS1VY3LDom5pYSwgaW5pY2lhZGEgZW0gMjAyMiwgZGVtb25zdHJvdSBkZSBtYW5laXJhIGFpbmRhIG1haXMgY2xhcmEgY29tbyBvcyBjaWNsb3MgZGUgYWx0YSBkbyBwZXRyw7NsZW8gYWZldGFtIGFzIHNhZnJhcy4gQW50ZXMgZG8gY29uZmxpdG8sIG8gYmFycmlsIGN1c3RhdmEgVVNcJCA5NTsgbm8gcHJpbWVpcm8gbcOqcyBkZSBndWVycmEsIGRpc3Bhcm91IHBhcmEgVVNcJCAxMjgsIGEgbWFpb3IgY290YcOnw6NvIGRlc2RlIDIwMDggKEdyw6FmaWNvIDQpLiBPcyBmZXJ0aWxpemFudGVzIHN1YmlyYW0gNzAlIGRlc2RlIG8gaW7DrWNpbyBkYSBndWVycmEsIGVsZXZhbmRvIHNpZ25pZmljYXRpdmFtZW50ZSBvIGN1c3RvIG9wZXJhY2lvbmFsIGRhcyBzYWZyYXMuIEEgdXJlaWEsIGVtIGVzcGVjw61maWNvLCBlbmNhcmVjZXUgMzIlIG5vcyBkb2lzIHByaW1laXJvcyBtZXNlcyBkbyBjb25mbGl0by4gQSBjb21iaW5hw6fDo28gZGVzc2VzIGZhdG9yZXMgbGV2b3UgYSB1bWEgcmVkdcOnw6NvIGRlIHByb2R1dGl2aWRhZGUgbmFzIHNhZnJhcyBzdWJzZXF1ZW50ZXMuDQoNCioqKkdyw6FmaWNvIDQ6KioqDQpgYGB7ciBzZXR1cC1wZXRyb2xlbywgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocXVhbnRtb2QpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShkcGx5cikNCg0KZ2V0U3ltYm9scygiTUNPSUxXVElDTyIsIHNyYyA9ICJGUkVEIikNCm9pbCA8LSBNQ09JTFdUSUNPWyIxOTcwLyJdDQoNCg0KZXZlbnRvcyA8LSBsaXN0KA0KICBsaXN0KA0KICAgIGZyb20gID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLkRhdGUoIjE5NzMtMTAtMDEiKSksDQogICAgdG8gICAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuRGF0ZSgiMTk3NC0wNi0wMSIpKSwNCiAgICBjb2xvciA9ICJyZ2JhKDI1NCwgMTgzLCAxOCwgMC4xMykiLA0KICAgIGxhYmVsID0gbGlzdCgNCiAgICAgIHRleHQgID0gIjFcdTAwQkEgQ2hvcXVlIChPUEVQKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzNhM2EzYSIsIGZvbnRTaXplID0gIjExcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiKQ0KICAgICkNCiAgKSwNCiAgbGlzdCgNCiAgICBmcm9tICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5EYXRlKCIxOTc5LTAxLTAxIikpLA0KICAgIHRvICAgID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLkRhdGUoIjE5ODEtMDEtMDEiKSksDQogICAgY29sb3IgPSAicmdiYSgyNTQsIDE4MywgMTgsIDAuMTMpIiwNCiAgICBsYWJlbCA9IGxpc3QoDQogICAgICB0ZXh0ICA9ICIyXHUwMEJBIENob3F1ZSAoUmV2LiBJcmFuaWFuYSkiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMzYTNhM2EiLCBmb250U2l6ZSA9ICIxMXB4IiwgZm9udFdlaWdodCA9ICJib2xkIikNCiAgICApDQogICksDQogIGxpc3QoDQogICAgZnJvbSAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuRGF0ZSgiMjAwNy0wMS0wMSIpKSwNCiAgICB0byAgICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5EYXRlKCIyMDA5LTAxLTAxIikpLA0KICAgIGNvbG9yID0gInJnYmEoMjU0LCAxODMsIDE4LCAwLjEzKSIsDQogICAgbGFiZWwgPSBsaXN0KA0KICAgICAgdGV4dCAgPSAiUGljbyAyMDA4IChVUyQgMTQ3KSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzNhM2EzYSIsIGZvbnRTaXplID0gIjExcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiKQ0KICAgICkNCiAgKSwNCiAgbGlzdCgNCiAgICBmcm9tICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5EYXRlKCIyMDIwLTAxLTAxIikpLA0KICAgIHRvICAgID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLkRhdGUoIjIwMjEtMDYtMDEiKSksDQogICAgY29sb3IgPSAicmdiYSgyNTQsIDE4MywgMTgsIDAuMTMpIiwNCiAgICBsYWJlbCA9IGxpc3QoDQogICAgICB0ZXh0ICA9ICJQYW5kZW1pYSBDT1ZJRC0xOSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzNhM2EzYSIsIGZvbnRTaXplID0gIjExcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiKQ0KICAgICkNCiAgKSwNCiAgbGlzdCgNCiAgICBmcm9tICA9IGRhdGV0aW1lX3RvX3RpbWVzdGFtcChhcy5EYXRlKCIyMDIyLTAyLTAxIikpLA0KICAgIHRvICAgID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLkRhdGUoIjIwMjItMTItMDEiKSksDQogICAgY29sb3IgPSAicmdiYSgyNTQsIDE4MywgMTgsIDAuMTMpIiwNCiAgICBsYWJlbCA9IGxpc3QoDQogICAgICB0ZXh0ICA9ICJHdWVycmEgUlx1MDBGQXNzaWEtVWNyXHUwMEUybmlhIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjM2EzYTNhIiwgZm9udFNpemUgPSAiMTFweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICAgKQ0KICApLA0KICBsaXN0KA0KICAgIGZyb20gID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGFzLkRhdGUoIjIwMjUtMDMtMDEiKSksDQogICAgdG8gICAgPSBkYXRldGltZV90b190aW1lc3RhbXAoYXMuRGF0ZSgiMjAyNi0wNC0wMSIpKSwNCiAgICBjb2xvciA9ICJyZ2JhKDI1NCwgMTgzLCAxOCwgMC4xMykiLA0KICAgIGxhYmVsID0gbGlzdCgNCiAgICAgIHRleHQgID0gIkNvbmZsaXRvIEVVQS1Jc3JhZWwtSXJcdTAwRTMiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMzYTNhM2EiLCBmb250U2l6ZSA9ICIxMXB4IiwgZm9udFdlaWdodCA9ICJib2xkIikNCiAgICApDQogICkNCikNCg0KIyAtLS0gSGlnaGNoYXJ0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KZ3JhZl9wZXRyb2xlbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpIHw+DQoNCiAgIyBTw6lyaWUgcHJpbmNpcGFsDQogIGhjX2FkZF9zZXJpZXMoDQogICAgb2lsLA0KICAgIG5hbWUgID0gIlBldHJcdTAwRjNsZW8gYnJ1dG8gKFdUSSkiLA0KICAgIGNvbG9yID0gIiNmZWI3MTIiLA0KICAgIGxpbmVXaWR0aCA9IDIsDQogICAgZmlsbE9wYWNpdHkgPSAwLjA1LA0KICAgIHR5cGUgID0gImFyZWFzcGxpbmUiDQogICkgfD4NCg0KICAjIEZhaXhhcyBkb3MgZXZlbnRvcyBubyBlaXhvIFgNCiAgaGNfeEF4aXMoDQogICAgcGxvdEJhbmRzID0gZXZlbnRvcw0KICApIHw+DQoNCiAgIyBFaXhvIFkNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgID0gbGlzdCh0ZXh0ID0gIlVTJC9iYXJyaWwiLCBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzNhM2EzYSIpKSwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgZm9ybWF0ID0gIlVTJCB7dmFsdWV9IiwNCiAgICAgIHN0eWxlICA9IGxpc3QoY29sb3IgPSAiIzNhM2EzYSIpDQogICAgKSwNCiAgICBvcHBvc2l0ZSA9IEZBTFNFDQogICkgfD4NCg0KICAjIFRvb2x0aXANCiAgaGNfdG9vbHRpcCgNCiAgICBwb2ludEZvcm1hdCA9ICI8Yj5VUyQge3BvaW50Lnk6LjFmfTwvYj4vYmFycmlsIiwNCiAgICB2YWx1ZURlY2ltYWxzID0gMQ0KICApIHw+DQoNCiAgIyBUw610dWxvcw0KICBoY190aXRsZSgNCiAgICB0ZXh0ICA9ICJQcmVcdTAwRTdvIGRvIHBldHJcdTAwRjNsZW8gYnJ1dG8gKDE5NzBcdTIwMTMyMDI2KSIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMwMjAyM2MiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBmb250U2l6ZSA9ICIxNnB4IikNCiAgKSB8Pg0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ICA9ICIiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjM2EzYTNhIiwgZm9udFNpemUgPSAiMTJweCIpDQogICkgfD4NCiAgaGNfY2FwdGlvbigNCiAgICB0ZXh0ICA9ICJGb250ZTogRUlBL0ZSRUQgKHNcdTAwRTlyaWUgTUNPSUxXVElDTykuIEVsYWJvcmFcdTAwRTdcdTAwRTNvIHByXHUwMEYzcHJpYS4iLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjYTZhNmE2IiwgZm9udFNpemUgPSAiMTBweCIpDQogICkgfD4NCg0KICAjIE5hdmVnYWRvciBpbmZlcmlvciAocmFuZ2Ugc2VsZWN0b3IpDQogIGhjX3JhbmdlU2VsZWN0b3IoDQogICAgc2VsZWN0ZWQgPSA1LA0KICAgIGJ1dHRvbnMgPSBsaXN0KA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCAgY291bnQgPSA1LCAgdGV4dCA9ICI1YSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCAgY291bnQgPSAxMCwgdGV4dCA9ICIxMGEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgIGNvdW50ID0gMjAsIHRleHQgPSAiMjBhIiksDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsICBjb3VudCA9IDMwLCB0ZXh0ID0gIjMwYSIpLA0KICAgICAgbGlzdCh0eXBlID0gImFsbCIsICAgICAgICAgICAgICAgdGV4dCA9ICJUdWRvIikNCiAgICApDQogICkgfD4NCg0KICAjIFRlbWENCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJzYW5zLXNlcmlmIikNCiAgKSB8Pg0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IFRSVUUpIHw+DQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IEZBTFNFKSB8Pg0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQpgYGANCg0KYGBge3IgZ3JhZmljby1wZXRyb2xlbywgZWNobz1GQUxTRSwgb3V0LndpZHRoPSIxMDAlIn0NCmdyYWZfcGV0cm9sZW8NCmBgYA0KDQoNCk8gY2Vuw6FyaW8gYXR1YWwsIG1hcmNhZG8gcGVsbyBjb25mbGl0byBlbnRyZSBFVUEsIElzcmFlbCBlIElyw6MsIGZleiBvIHBldHLDs2xlbyBkaXNwYXJhciBjZXJjYSBkZSAxMDAlLiBDb21vIGrDoSBvYnNlcnZhZG8gZW0gZXBpc8OzZGlvcyBhbnRlcmlvcmVzLCBvcyBmZXJ0aWxpemFudGVzIGFjb21wYW5oYXJhbSBhIGFsdGEsIGNvbSBhdW1lbnRvIGRlIGFwcm94aW1hZGFtZW50ZSA1MCUuIEEgdXJlaWEsIG5vIEJyYXNpbCwgc3ViaXUgMzMlLiBQcm9qZcOnw7VlcyBpbmRpY2FtIHF1ZSBvIG1lcmNhZG8gYnJhc2lsZWlybyBkZSBmZXJ0aWxpemFudGVzIHBvZGUgZW5jb2xoZXIgZW50cmUgMTAlIGUgMTUlIGVtIDIwMjYsIGVtIHJhesOjbyBkb3MgYWx0b3MgY3VzdG9zIGUgZGFzIGRpZmljdWxkYWRlcyBsb2fDrXN0aWNhcyBkZWNvcnJlbnRlcyBkb3MgY29uZmxpdG9zLiBPIGZhdG9yIGdlb3BvbMOtdGljbyDDqSBjZW50cmFsOiBvIGJsb3F1ZWlvIGRvIEVzdHJlaXRvIGRlIE9ybXV6IGNvbXByb21ldGUgYSBwYXNzYWdlbSBkZSAzMCUgZGFzIGV4cG9ydGHDp8O1ZXMgZ2xvYmFpcyBkZSBmZXJ0aWxpemFudGVzLCBlIGNlcmNhIGRlIDM1JSBkYXMgaW1wb3J0YcOnw7VlcyBicmFzaWxlaXJhcyBwcm92w6ptIGRlIHBhw61zZXMgZG8gR29sZm8gUMOpcnNpY28gKEdyw6FmaWNvIDUpLg0KDQoqKipHcsOhZmljbyA1OioqKg0KYGBge3Igc2V0dXAtbWFwYS1mZXJ0LCBpbmNsdWRlPUZBTFNFfQ0KZGYgPC0gcmVhZF9leGNlbChwYXRoX2ZlcnQpDQpuYW1lcyhkZikgPC0gYygiY291bnRyeSIsICJuY21fY29kZSIsICJuY21fZGVzYyIsDQogICAgICAgICAgICAgICAiZm9iXzIwMjYiLCAiZm9iXzIwMjUiLCAiZm9iXzIwMjQiLCAiZm9iXzIwMjMiKQ0KDQpkZl9hZ2cgPC0gZGYgfD4NCiAgZ3JvdXBfYnkoY291bnRyeSkgfD4NCiAgc3VtbWFyaXNlKGZvYl90b3RhbCA9IHN1bShmb2JfMjAyNSwgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikgfD4NCiAgZmlsdGVyKGZvYl90b3RhbCA+IDApIHw+DQogIGFycmFuZ2UoZGVzYyhmb2JfdG90YWwpKSB8Pg0KICBtdXRhdGUoDQogICAgZm9iX21pID0gZm9iX3RvdGFsIC8gMWU2LA0KICAgIHNoYXJlICA9IGZvYl90b3RhbCAvIHN1bShmb2JfdG90YWwpICogMTAwDQogICkNCg0KZGZfYWdnIDwtIGRmX2FnZyB8Pg0KICBtdXRhdGUoDQogICAgY291bnRyeV9jbGVhbiA9IGNhc2Vfd2hlbigNCiAgICAgIGNvdW50cnkgPT0gIkJhaHJlaW4iICAgICB+ICJCYWhyYWluIiwNCiAgICAgIGNvdW50cnkgPT0gIlNvdXRoIEtvcmVhIiB+ICJSZXB1YmxpYyBvZiBLb3JlYSIsDQogICAgICBjb3VudHJ5ID09ICJSdXNzaWEiICAgICAgfiAiUnVzc2lhbiBGZWRlcmF0aW9uIiwNCiAgICAgIGNvdW50cnkgPT0gIkJvbGl2aWEiICAgICB+ICJCb2xpdmlhIChQbHVyaW5hdGlvbmFsIFN0YXRlIG9mKSIsDQogICAgICBjb3VudHJ5ID09ICJWZW5lenVlbGEiICAgfiAiVmVuZXp1ZWxhIChCb2xpdmFyaWFuIFJlcHVibGljIG9mKSIsDQogICAgICBjb3VudHJ5ID09ICJJcmFuIiAgICAgICAgfiAiSXJhbiAoSXNsYW1pYyBSZXB1YmxpYyBvZikiLA0KICAgICAgY291bnRyeSA9PSAiVGFpd2FuIiAgICAgIH4gIlRhaXdhbiIsDQogICAgICBjb3VudHJ5ID09ICJIb25nIEtvbmciICAgfiAiSG9uZyBLb25nIiwNCiAgICAgIFRSVUUgICAgICAgICAgICAgICAgICAgICB+IGNvdW50cnkNCiAgICApLA0KICAgIGlzb19hMyA9IGNvdW50cnljb2RlKGNvdW50cnlfY2xlYW4sICJjb3VudHJ5Lm5hbWUiLCAiaXNvM2MiLCB3YXJuID0gRkFMU0UpDQogICkNCg0Kd29ybGQgPC0gbmVfY291bnRyaWVzKHNjYWxlID0gIm1lZGl1bSIsIHJldHVybmNsYXNzID0gInNmIikgfD4NCiAgc2VsZWN0KGlzb19hMywgbmFtZSwgZ2VvbWV0cnkpDQoNCndvcmxkX21hcCA8LSB3b3JsZCB8Pg0KICBsZWZ0X2pvaW4oZGZfYWdnLCBieSA9ICJpc29fYTMiKSB8Pg0KICBtdXRhdGUoDQogICAgZm9iX2NhdCA9IGN1dCgNCiAgICAgIGZvYl9taSwNCiAgICAgIGJyZWFrcyA9IGMoMCwgMTAsIDUwLCAxMDAsIDI1MCwgNTAwLCBJbmYpLA0KICAgICAgbGFiZWxzID0gYygiPCAxMCIsICIxMCDigJMgNTAiLCAiNTAg4oCTIDEwMCIsDQogICAgICAgICAgICAgICAgICIxMDAg4oCTIDI1MCIsICIyNTAg4oCTIDUwMCIsICI+IDUwMCIpLA0KICAgICAgcmlnaHQgPSBGQUxTRSwgaW5jbHVkZS5sb3dlc3QgPSBUUlVFDQogICAgKQ0KICApDQoNCmNvcmVzIDwtIGMoDQogICI8IDEwIiAgICAgID0gIiNmZWYwYzciLA0KICAiMTAg4oCTIDUwIiAgID0gIiNmZWQ4NTYiLA0KICAiNTAg4oCTIDEwMCIgID0gIiNmZWI3MTIiLA0KICAiMTAwIOKAkyAyNTAiID0gIiM0NmIxZTEiLA0KICAiMjUwIOKAkyA1MDAiID0gIiMxYTRmOGEiLA0KICAiPiA1MDAiICAgICA9ICIjMDIwMjNjIg0KKQ0KDQptYXBhX2ZlcnQgPC0gZ2dwbG90KHdvcmxkX21hcCkgKw0KICBnZW9tX3NmKGFlcyhmaWxsID0gZm9iX2NhdCksIGNvbG9yID0gIiNhNmE2YTYiLCBsaW5ld2lkdGggPSAwLjE1KSArDQogIGdlb21fc2YoDQogICAgZGF0YSA9IHdvcmxkX21hcCB8PiBmaWx0ZXIoaXNvX2EzID09ICJCUkEiKSwNCiAgICBmaWxsID0gIiMzYTMiLCBjb2xvciA9ICIjMDIwMjNjIiwgbGluZXdpZHRoID0gMC4xDQogICkgKw0KICBzY2FsZV9maWxsX21hbnVhbCgNCiAgICB2YWx1ZXMgICAgICAgPSBjb3JlcywNCiAgICBuYS52YWx1ZSAgICAgPSAiI2ViZWJlYiIsDQogICAgbmFtZSAgICAgICAgID0gIlVTXFwkIEZPQiAobWlsaMO1ZXMpIiwNCiAgICBuYS50cmFuc2xhdGUgPSBGQUxTRQ0KICApICsNCiAgY29vcmRfc2YoeGxpbSA9IGMoLTE3MCwgMTgwKSwgeWxpbSA9IGMoLTYwLCA4NSksIGV4cGFuZCA9IEZBTFNFKSArDQogIGxhYnMoDQogICAgdGl0bGUgICAgPSAiTWFwYSBkZSBpbXBvcnRhw6fDtWVzIGRlIGZlcnRpbGl6YW50ZXMg4oCUIEJyYXNpbCIsDQogICAgc3VidGl0bGUgPSAiTkNNIDMxMDIgKHVyZWlhKSwgMzEwNCAocG90w6Fzc2lvKSBlIDMxMDUgKE5QSykg4oCUIFVTXFwkIEZPQiAoMjAyNSkiLA0KICAgIGNhcHRpb24gID0gIkZvbnRlOiBDb21leFN0YXQvTURJQy4gRWxhYm9yYcOnw6NvIHByw7NwcmlhLiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTEpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSAgICAgICA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTQsIGhqdXN0ID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiMwMjAyM2MiKSwNCiAgICBwbG90LnN1YnRpdGxlICAgID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgY29sb3IgPSAiIzNhM2EzYSIsIGhqdXN0ID0gMCksDQogICAgcGxvdC5jYXB0aW9uICAgICA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgY29sb3IgPSAiI2E2YTZhNiIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiAgPSAiYm90dG9tIiwNCiAgICBsZWdlbmQudGl0bGUgICAgID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjM2EzYTNhIiksDQogICAgbGVnZW5kLnRleHQgICAgICA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgY29sb3IgPSAiIzNhM2EzYSIpLA0KICAgIHBhbmVsLmdyaWQgICAgICAgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI2U4ZThlOCIsIGxpbmV3aWR0aCA9IDAuMiksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSksDQogICAgcGxvdC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSksDQogICAgcGxvdC5tYXJnaW4gICAgICA9IG1hcmdpbigxMCwgMTAsIDEwLCAxMCkNCiAgKSArDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKG5yb3cgPSAxLCBvdmVycmlkZS5hZXMgPSBsaXN0KGNvbG9yID0gIiNhNmE2YTYiKSkpDQpgYGANCg0KYGBge3IgbWFwYS1mZXJ0aWxpemFudGVzLCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9Ni41LCBmaWcuY2FwPSJNYXBhIGRlIGltcG9ydGHDp8O1ZXMgZGUgZmVydGlsaXphbnRlcyDigJQgQnJhc2lsLiBGb250ZTogQ29tZXhTdGF0L01ESUMuIn0NCm1hcGFfZmVydA0KYGBgDQoNCiMjIyAzLjMgUmVwYXNzZSBwYXJhIGNvbW1vZGl0aWVzIGFncsOtY29sYXMNCg0KTyBibG9xdWVpbyBkbyBFc3RyZWl0byBkZSBPcm11eiwgY29tbyBqw6EgY2l0YWRvLCBwcm92b2NhIGEgZGVzb3JnYW5pemHDp8OjbyBkYSBjYWRlaWEgZGUgZmVydGlsaXphbnRlcyBlIGRlIGluc3Vtb3MgZXNzZW5jaWFpcyDDoCBwcm9kdcOnw6NvIGRlIGFsaW1lbnRvcy4gRXNzYSByZWdpw6NvIMOpIGVzdHJhdMOpZ2ljYSBuw6NvIGFwZW5hcyBwYXJhIGEgcHJvZHXDp8OjbyBkZSBwZXRyw7NsZW8sIG1hcyB0YW1iw6ltIHBhcmEgYSBwcm9kdcOnw6NvIGUgbyBmbHV4byBkZSBleHBvcnRhw6fDo28gZGUgZmVydGlsaXphbnRlcy4gQ2VyY2EgZGUgNTAlIGRhIHVyZWlhIGV4cG9ydGFkYSBnbG9iYWxtZW50ZSDDqSBwcm9kdXppZGEgZW0gcmVnacO1ZXMgcXVlIGRlcGVuZGVtIGRvIEVzdHJlaXRvIHBhcmEgc2VyIHRyYW5zcG9ydGFkYSBlIGNvbWVyY2lhbGl6YWRhLiBPcyBtZXJjYWRvcyBpbnRlcm5hY2lvbmFpcyBqw6EgcHJlY2lmaWNhbSB1bSBjZW7DoXJpbyBhZHZlcnNvOiBvcyBwcmXDp29zIGRhIHVyZWlhIGUgZGUgb3V0cm9zIGZlcnRpbGl6YW50ZXMgcmVnaXN0cmFyYW0gZm9ydGUgYWx0YSBkZXNkZSBvIGluw61jaW8gZGFzIHRlbnPDtWVzIG5vIE9yaWVudGUgTcOpZGlvLg0KDQpPIGVuY2FyZWNpbWVudG8gZG9zIGZlcnRpbGl6YW50ZXMgc2UgcHJvcGFnYSBwYXJhIG9zIHByZcOnb3MgZGFzIGNvbW1vZGl0aWVzIGFncsOtY29sYXMgZSwgZW0gw7psdGltYSBpbnN0w6JuY2lhLCBwYXJhIGEgaW5mbGHDp8OjbyBhbGltZW50YXIuIE8gZWZlaXRvIMOpIGFtcGxpZmljYWRvIHBlbG9zIGVuY2FkZWFtZW50b3MgcHJvZHV0aXZvcy5VbSBhdW1lbnRvIG5vIHByZcOnbyBkbyBtaWxobyBlbmNhcmVjZSBhcyByYcOnw7VlcywgcHJlc3Npb25hbmRvIHRvZGEgYSBjYWRlaWEgZGUgcHJvdGXDrW5hcyBhbmltYWlzLg0KDQpObyBjdXJ0byBwcmF6bywgcGFydGUgZGVzc2VzIGVmZWl0b3MgcG9kZSBzZXIgYXRlbnVhZGEgcG9yIGZhdG9yZXMgc2F6b25haXMgZSBwZWxvIG1vbWVudG8gZGFzIGRlY2lzw7VlcyBkZSBjb21wcmEgZGUgaW5zdW1vcy4gUG9yw6ltLCBhIHJpZ2lkZXogZG9zIHByZcOnb3MgbmEgcXVlZGEgcG9kZSBsZXZhciBvcyBwcm9kdXRvcmVzIGEgcmVkdXppciDDoXJlYXMgZGUgcGxhbnRpbyBvdSBtb2RpZmljYXIgbyBtYW5lam8gZGFzIGN1bHR1cmFzLCBkaW1pbnVpbmRvIGNvbnNlcXVlbnRlbWVudGUgbyBuw612ZWwgZGUgcHJvZHXDp8OjbyBlc3BlcmFkby4NCg0KQSBlbGV2YWRhIGRlcGVuZMOqbmNpYSBicmFzaWxlaXJhIGRhIGltcG9ydGHDp8OjbyBkZSBmZXJ0aWxpemFudGVzIHRvcm5hIG8gcGHDrXMgbWFpcyBzZW5zw612ZWwgYSBjaG9xdWVzIG5vIHByZcOnbyBkbyBwZXRyw7NsZW8uIE8gZW5jYXJlY2ltZW50byBkb3MgaW5zdW1vcyBkZSBwcm9kdcOnw6NvIHNlIHRyYWR1eiwgY29tbyBjb25zZXF1w6puY2lhLCBlbSBwcmVzc8OjbyBzb2JyZSBhIGluZmxhw6fDo28uIEVzc2EgdnVsbmVyYWJpbGlkYWRlIGRpZmVyZW5jaWEgbyBCcmFzaWwgZGUgb3V0cmFzIHBvdMOqbmNpYXMgYWdyw61jb2xhcyBxdWUgY29udGFtIGNvbSBtYWlvciBhdXRvc3N1ZmljacOqbmNpYSBlbSBpbnN1bW9zLiBFbSAyMDIyLCBvIGdvdmVybm8gZXN0YWJlbGVjZXUgYSBtZXRhIGRlLCBhdMOpIDIwNTAsIGF0ZW5kZXIgw6AgZGVtYW5kYSBpbnRlcm5hIGNvbSBwcm9kdcOnw6NvIGxvY2FsIGRlIGZlcnRpbGl6YW50ZXMuDQoNCiMjIOKBoCoq4oGgNC5JbXBhY3RvcyBNYWNyb2Vjb27DtG1pY29zKioNCg0KIyMjIDQuMSBQcmVzc8O1ZXMgaW5mbGFjaW9uw6FyaWFzIChJUENBKQ0KDQpPIGNob3F1ZSBkbyBwZXRyw7NsZW8gc2UgdHJhbnNmZXJlIGFvIElQQ0EgZGUgZHVhcyBmb3JtYXMuIEEgcHJpbWVpcmEgZm9ybWEsIHF1ZSBhY29udGVjZSBkZSBmb3JtYSBtYWlzIGltZWRpYXRhLCDDqSBhdHJhdsOpcyBkZSBjb21idXN0w612ZWlzLiBPIGVuY2FyZWNpbWVudG8gZG8gZGllc2VsIGVsZXZhIG9zIGN1c3RvcyBkZSB0cmFuc3BvcnRlIGRlIG1lcmNhZG9yaWFzIGUgZnJldGUsIHByZXNzaW9uYW5kbyBvcyBwcmXDp29zIGRlIGFsaW1lbnRvcyBlIGJlbnMgaW5kdXN0cmlhbGl6YWRvcy4gQSBzZWd1bmRhIGZvcm1hLCBtYWlzIG5vIGxvbmdvIHByYXpvLCBzZXJpYSB2aWEgbyBlbmNhcmVjaW1lbnRvIGRvcyBmZXJ0aWxpemFudGVzLCBsZXZhbmRvIGFzc2ltIGFvIGF1bWVudG8gZG8gY3VzdG8gZGUgcHJvZHXDp8OjbyBhZ3LDrWNvbGEsIHF1ZSBzZSBwcm9wYWdhIHBhcmEgb3MgcHJlw6dvcyBhbyBwcm9kdXRvciBlLCBjb20gdW1hIGRlZmFzYWdlbSBlc3RpbWFkYSBkZSBxdWF0cm8gbWVzZXMsIGF0aW5nZSBvIGNvbnN1bWlkb3IgZmluYWwuDQpFc3NlIHNlZ3VuZG8gY2FuYWwgcG9kZSBzZXIgYWNvbXBhbmhhZG8gcGVsbyBJUEEtREkgKMONbmRpY2UgZGUgUHJlw6dvcyBhbyBQcm9kdXRvciBBbXBsbyksIHF1ZSBjYXB0YSBhcyBwcmVzc8O1ZXMgZGUgY3VzdG8gYW50ZXMgZGUgY2hlZ2FyZW0gYW8gSVBDQS4gQ29tbyB2aXN0byBubyBHcsOhZmljbyA2LCBvIMOtbmRpY2Ugc2UgbWFudGV2ZSByZWxhdGl2YW1lbnRlIGVzdMOhdmVsIGFvIGxvbmdvIGRvIHBlcsOtb2RvLCBzZW0gZ3JhbmRlcyBvc2NpbGHDp8O1ZXMg4oCUIG8gcXVlIHN1Z2VyZSBxdWUsIGF0w6kgbyBtb21lbnRvLCBhcyBwcmVzc8O1ZXMgZGUgY3VzdG8gdmluZGFzIGRvIHBldHLDs2xlbyBhaW5kYSBuw6NvIHNlIG1hdGVyaWFsaXphcmFtIGRlIGZvcm1hIHNpZ25pZmljYXRpdmEgbm9zIHByZcOnb3MgYW8gcHJvZHV0b3IuDQoNCioqKkdyw6FmaWNvIDY6KioqDQpgYGB7ciwgaW5jbHVkZSA9VFJVRX0NCmxpYnJhcnkoR2V0QkNCRGF0YSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGRwbHlyKQ0KDQpkZl9pcGFfc29sbyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDE5MSwNCiAgZmlyc3QuZGF0ZSA9ICIyMDEwLTAxLTAxIiwNCiAgbGFzdC5kYXRlID0gU3lzLkRhdGUoKQ0KKSAlPiUNCiAgcmVuYW1lKElQQSA9IHZhbHVlKQ0KDQoNCmhjX2lwYV91bmljbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIklQQS1ESTogw41uZGljZSBkZSBQcmXDp29zIGFvIFByb2R1dG9yIEFtcGxvIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzJjM2U1MCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiVmFyaWHDp8OjbyBtZW5zYWwgKCUpIC0gRm9udGU6IEZHViAvIEJhbmNvIENlbnRyYWwiKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGRmX2lwYV9zb2xvLA0KICAgIHR5cGUgPSAiYXJlYXNwbGluZSIsDQogICAgaGNhZXMoeCA9IHJlZi5kYXRlLCB5ID0gSVBBKSwNCiAgICBuYW1lID0gIlZhcmlhw6fDo28gTWVuc2FsIElQQS1ESSIsDQogICAgY29sb3IgPSAiIzI5ODBiOSIsDQogICAgZmlsbENvbG9yID0gbGlzdCgNCiAgICAgIGxpbmVhckdyYWRpZW50ID0gbGlzdCh4MSA9IDAsIHkxID0gMCwgeDIgPSAwLCB5MiA9IDEpLA0KICAgICAgc3RvcHMgPSBsaXN0KA0KICAgICAgICBsaXN0KDAsICJyZ2JhKDQxLCAxMjgsIDE4NSwgMC41KSIpLA0KICAgICAgICBsaXN0KDEsICJyZ2JhKDQxLCAxMjgsIDE4NSwgMCkiKQ0KICAgICAgKQ0KICAgICksDQogICAgbGluZVdpZHRoID0gMg0KICApICU+JQ0KICANCiAgIyBDb25maWd1cmHDp8OjbyBkbyBFaXhvIFkgKGNvbSBsaW5oYSBkZSB6ZXJvIGRlc3RhY2FkYSkNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVmFyaWHDp8OjbyAoJSkiKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCh2YWx1ZSA9IDAsIHdpZHRoID0gMiwgY29sb3IgPSAiI2MwMzkyYiIsIGRhc2hTdHlsZSA9ICJkYXNoIikNCiAgICApLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0lIikNCiAgKSAlPiUNCiAgDQogICMgVG9vbHRpcCBjdXN0b21pemFkbw0KICBoY190b29sdGlwKA0KICAgIHBvaW50Rm9ybWF0ID0gIlZhcmlhw6fDo286IDxiPntwb2ludC55Oi4yZn0lPC9iPiIsDQogICAgc2hhcmVkID0gVFJVRQ0KICApICU+JQ0KICANCiAgIyBFc3TDqXRpY2EgR2VyYWwNCiAgaGNfcmFuZ2VTZWxlY3RvcihzZWxlY3RlZCA9IDQpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLCB0ZXh0ID0gIkVsYWJvcmHDp8OjbyBjb20gZGFkb3MgZG8gU0dTIChTw6lyaWUgMTkxKSIpICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpDQoNCiMgRXhpYmlyDQpoY19pcGFfdW5pY28NCmBgYA0KQSBTZWNyZXRhcmlhIGRlIFBvbMOtdGljYSBFY29uw7RtaWNhIChTUEUpIGRvIE1pbmlzdMOpcmlvIGRhIEZhemVuZGEgZWxldm91IGEgcHJvamXDp8OjbyBkbyBJUENBIHBhcmEgMjAyNiBkZSAzLDYlIHBhcmEgMyw3JSwgasOhIHJlZmxldGluZG8gaW1wYWN0b3MgZGEgaW5zdGFiaWxpZGFkZSBubyBwcmXDp28gZG8gcGV0csOzbGVvLiBBcyBwcm9qZcOnw7VlcyBkbyBJR1AtREkgdGFtYsOpbSBzdWJpcmFtLCBkZSA0LDYlIHBhcmEgNCw5JS4gQ29tbyBpbHVzdHJhZG8gbm8gR3LDoWZpY28gNywgaGlzdG9yaWNhbWVudGUgYSBTZWxpYyBhY29tcGFuaGEgZGUgcGVydG8gYSB0cmFqZXTDs3JpYSBkbyBJUENBIGFjdW11bGFkbyAtIG8gcXVlIHN1Z2VyZSBxdWUsIGNhc28gYXMgcHJlc3PDtWVzIGluZmxhY2lvbsOhcmlhcyBzZSBjb25maXJtZW0sIGjDoSBlc3Bhw6dvIHBhcmEgaW1wbGljYcOnw7VlcyBkaXJldGFzIG5hIGNvbmR1w6fDo28gZGEgcG9sw610aWNhIG1vbmV0w6FyaWEuDQoNCg0KKipHUsOhZmljbyA3OioqDQoNCmBgYHtyfQ0Kc2VsaWMgPC0gZ2JjYmRfZ2V0X3NlcmllcygNCiAgaWQgPSBjKCJzZWxpYyIgPSA0MzIpLA0KICBmaXJzdC5kYXRlID0gIjIwMTUtMDEtMDEiLA0KICBmb3JtYXQuZGF0YSA9ICJ3aWRlIg0KKSAlPiUNCiAgcmVuYW1lKGRhdGUgPSByZWYuZGF0ZSkgJT4lDQogIG11dGF0ZShhbm9fbWVzID0gZmxvb3JfZGF0ZShkYXRlLCAibW9udGgiKSkgJT4lDQogIGdyb3VwX2J5KGFub19tZXMpICU+JQ0KICBzbGljZV9tYXgob3JkZXJfYnkgPSBkYXRlLCBuID0gMSwgd2l0aF90aWVzID0gRkFMU0UpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIHNlbGVjdChhbm9fbWVzLCBzZWxpYykNCg0KaXBjYSA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoImlwY2EiID0gNDMzKSwNCiAgZmlyc3QuZGF0ZSA9ICIyMDE1LTAxLTAxIiwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikgJT4lDQogIHJlbmFtZShhbm9fbWVzID0gcmVmLmRhdGUpICU+JQ0KICBhcnJhbmdlKGFub19tZXMpICU+JQ0KICBtdXRhdGUoZmF0b3IgPSAxICsgaXBjYS8xMDAsDQogICAgICAgICBpcGNhXzEybSA9IChyb2xsYXBwbHkoZmF0b3IsIDEyLCBwcm9kLCBmaWxsID0gTkEsIGFsaWduID0gInJpZ2h0IikgLSAxKSAqIDEwMCkgJT4lDQogIHNlbGVjdChhbm9fbWVzLCBpcGNhXzEybSkNCg0KZmluYWwgPC0gbGVmdF9qb2luKHNlbGljLCBpcGNhLCBieSA9ICJhbm9fbWVzIikNCg0KZ3JhZmljbyA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gZmluYWwsDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBoY2Flcyh4ID0gYW5vX21lcywgeSA9IHNlbGljKSwNCiAgICBuYW1lID0gIlNFTElDIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIg0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBmaW5hbCwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBhbm9fbWVzLCB5ID0gaXBjYV8xMm0pLA0KICAgIG5hbWUgPSAiSVBDQSBhY3VtdWxhZG8gZW0gMTIgbWVzZXMiLA0KICAgIGNvbG9yID0gIiNGRUIwMTUiDQogICkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiU0VMSUMgZSBJUENBIGFjdW11bGFkbyBlbSAxMiBtZXNlcyIpICU+JQ0KICBoY194QXhpcyh0eXBlID0gImRhdGV0aW1lIikgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIiUiKSkgJT4lDQogIGhjX2NhcHRpb24oDQogICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCAoU0dTIHPDqXJpZXMgNDMyIGUgNDMzKS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm8gQkguIg0KICApDQoNCmdyYWZpY28NCmBgYA0KDQojIyMgNC4yLiBJbXBsaWNhw6fDtWVzIHBhcmEgYSBwb2zDrXRpY2EgbW9uZXTDoXJpYQ0KQSBUYXhhIFNlbGljIMOpIG8gcHJpbmNpcGFsIGluc3RydW1lbnRvIGRlIHBvbMOtdGljYSBtb25ldMOhcmlhIGRvIEJhbmNvIENlbnRyYWwgcGFyYSBvIGNvbnRyb2xlIGRhIGluZmxhw6fDo28gZG8gQnJhc2lsLiBEZWZpbmlkYSBwZXJpb2RpY2FtZW50ZSBwZWxvIENvcG9tLCBhIFNlbGljIHNlcnZlIGNvbW8gcmVmZXLDqm5jaWEgcGFyYSB0b2RhIGEgZXN0cnV0dXJhIGRlIGp1cm9zIGRhIGVjb25vbWlhLCBkZXNkZSBhcyB0YXhhcyBkZSBlbXByw6lzdGltb3MgYmFuY8OhcmlvcyBhdMOpIG8gcmVuZGltZW50byBkZSBhdGl2b3MgZmluYW5jZWlyb3MuIFBvciBtZWlvIGRlc3NlIGNhbmFsLCBhIHBvbMOtdGljYSBtb25ldMOhcmlhIGF0dWEgc29icmUgYXMgZGVjaXPDtWVzIGRlIGNvbnN1bW8gZSBpbnZlc3RpbWVudG8sIGFmZXRhbmRvIG8gbsOtdmVsIGRlIGRlbWFuZGEgYWdyZWdhZGEgZSwgY29uc2VxdWVudGVtZW50ZSwgYSBkaW7Dom1pY2EgZG9zIHByZcOnb3MuIEVtIHRlcm1vcyBvcGVyYWNpb25haXMsIHVtYSBTZWxpYyBlbGV2YWRhIHRlbmRlIGEgZW5jYXJlY2VyIG8gY3LDqWRpdG8gZSBkZXNlc3RpbXVsYXIgbyBjb25zdW1vLCBjb250cmlidWluZG8gcGFyYSBhIGRlc2FjZWxlcmHDp8OjbyBkYSBpbmZsYcOnw6NvLiBQb3Igb3V0cm8gbGFkbywgdW1hIHRheGEgbWFpcyBiYWl4YSBidXNjYSBpbmNlbnRpdmFyIG8gY29uc3VtbyBlIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EsIGNvbW8gb2JzZXJ2YWRvIGR1cmFudGUgYSBwYW5kZW1pYSBkZSBDT1ZJRC0xOS4gQXNzaW0sIHZhcmlhw6fDtWVzIG5hIFNlbGljIGF0dWFtIHNvYnJlIGEgZGVtYW5kYSBhZ3JlZ2FkYSBjb21vIGZvcm1hIGRlIGNvbnRlciBvdSBlc3RpbXVsYXIgcHJlc3PDtWVzIGluZmxhY2lvbsOhcmlhcy4NCg0KTm8gZW50YW50bywgYSBuYXR1cmV6YSBkbyBjaG9xdWUgYW5hbGlzYWRvIG5lc3RlIHJlbGF0w7NyaW8gLSB1bSBhdW1lbnRvIG5vcyBpbnN1bW9zIGVuZXJnw6l0aWNvcyAtIGFsdGVyYSBhIGZvcm1hIGRlIGF0dWHDp8OjbyBkYSBwb2zDrXRpY2EgbW9uZXTDoXJpYS4gUG9yIHNlIHRyYXRhciBkZSB1bSBjaG9xdWUgZGUgb2ZlcnRhLCBxdWUgZWxldmEgb3MgY3VzdG9zIGRlIHByb2R1w6fDo28sIG8gQmFuY28gQ2VudHJhbCBuw6NvIGNvbnNlZ3VlIGFnaXIgZGlyZXRhbWVudGUgc29icmUgYSBvcmlnZW0gZGVzc2EgdmFyaWHDp8Ojby4gQWluZGEgYXNzaW0sIG9ic2VydmEtc2UgdW1hIGFsdGVyYcOnw6NvIG5hcyBleHBlY3RhdGl2YXMgcGFyYSBhIFNlbGljIGF0w6kgbyBmaW0gZG8gYW5vLCBjb21vIGlsdXN0cmFkbyBubyBHcsOhZmljbyA4Lg0KDQoqKkdyw6FmaWNvIDg6KioNCg0KYGBge3J9DQpBWlVMX0VTQ1VSTyA8LSAiIzAyMDIzQyINCkFaVUxfTUVESU8gIDwtICIjMDIyNjVFIg0KQU1BUkVMTyAgICAgPC0gIiNGRUIwMTUiDQpURVhUTyAgICAgICA8LSAiIzMzMzMzMyINCg0KZGFkb3MgPC0gZGF0YS5mcmFtZSgNCiAgeCA9IGMoMSwgMiksDQogIHkgPSBjKDEyLjI1LCAxMi41MCksDQogIGxhYmVsID0gYygiRm9jdXMgYW50ZXJpb3IiLCAiRm9jdXMgYXR1YWwiKSwNCiAgdmFsID0gYygiMTIsMjUlIiwgIjEyLDUwJSIpDQopDQoNCmdncGxvdChkYWRvcywgYWVzKHgsIHkpKSArDQogIA0KICBnZW9tX3NlZ21lbnQoDQogICAgYWVzKHggPSAxLCB4ZW5kID0gMiwgeSA9IDEyLjI1LCB5ZW5kID0gMTIuNTApLA0KICAgIGxpbmV3aWR0aCA9IDEuNSwNCiAgICBjb2xvciA9IEFaVUxfTUVESU8NCiAgKSArDQogIA0KICBnZW9tX3BvaW50KA0KICAgIHNpemUgPSA0LA0KICAgIGNvbG9yID0gQVpVTF9FU0NVUk8NCiAgKSArDQogIA0KICBnZW9tX3RleHQoDQogICAgYWVzKGxhYmVsID0gdmFsKSwNCiAgICB2anVzdCA9IC0xLjIsDQogICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBmb250ZmFjZSA9ICJib2xkIiwNCiAgICBzaXplID0gNC41DQogICkgKw0KICANCiAgYW5ub3RhdGUoDQogICAgInRleHQiLA0KICAgIHggPSAxLjUsDQogICAgeSA9IDEyLjA4LA0KICAgIGxhYmVsID0gIiswLDI1IHAucC4iLA0KICAgIGNvbG9yID0gQU1BUkVMTywNCiAgICBmb250ZmFjZSA9ICJib2xkIiwNCiAgICBzaXplID0gNQ0KICApICsNCiAgDQogIHNjYWxlX3hfY29udGludW91cygNCiAgICBicmVha3MgPSBjKDEsIDIpLA0KICAgIGxhYmVscyA9IGRhZG9zJGxhYmVsLA0KICAgIGxpbWl0cyA9IGMoMC43LCAyLjMpDQogICkgKw0KICANCiAgc2NhbGVfeV9jb250aW51b3VzKA0KICAgIGxpbWl0cyA9IGMoMTIuMCwgMTIuOCksDQogICAgYnJlYWtzID0gc2VxKDEyLjAsIDEyLjgsIDAuMiksDQogICAgbGFiZWxzID0gZnVuY3Rpb24oeCkgcGFzdGUwKGZvcm1hdCh4LCBuc21hbGwgPSAyKSwgIiUiKQ0KICApICsNCiAgDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUmV2aXPDo28gZGFzIGV4cGVjdGF0aXZhcyBwYXJhIGEgU2VsaWMgbm8gZmltIGRlIDIwMjYiLA0KICAgIGNhcHRpb24gPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgKFJlbGF0w7NyaW8gRm9jdXMpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNybyBCSC4iDQogICkgKw0KICANCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNSwgY29sb3IgPSBBWlVMX0VTQ1VSTyksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTEsIGNvbG9yID0gIiM2NjY2NjYiLCBtYXJnaW4gPSBtYXJnaW4oYiA9IDEyKSksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LjUsIGNvbG9yID0gIiM2NjY2NjYiLCBoanVzdCA9IDApLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExLCBjb2xvciA9IFRFWFRPKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGNvbG9yID0gVEVYVE8pLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjRjJGMkYyIiwgbGluZXdpZHRoID0gMC40KSwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkNCg0KYGBgDQoNCkEgU2VsaWMsIHF1ZSBpbmljaW91IG8gYW5vIGVtIDE1JSBhLmEuLCB0aW5oYSBleHBlY3RhdGl2YXMgZGUgcXVlZGEgYW8gbG9uZ28gZG8gYW5vLCBjb20gcHJvamXDp8OjbyBkZSBhdGluZ2lyIDEyLDI1JSBhdMOpIGRlemVtYnJvLiBPIHByaW1laXJvIGNvcnRlIGrDoSBvY29ycmV1IGUsIGVtIGFicmlsIGRlIDIwMjYsIGEgdGF4YSBlbmNvbnRyYS1zZSBlbSAxNCw3NSUgYS5hLiBObyBlbnRhbnRvLCBjb21vIG9ic2VydmFkbyBubyBHcsOhZmljbyA4LCBlbWJvcmEgYSBleHBlY3RhdGl2YSBkZSByZWR1w6fDo28gcGVybWFuZcOnYSwgaG91dmUgdW1hIHJldmlzw6NvIHBhcmEgY2ltYSBkYSB0YXhhIGVzcGVyYWRhLCBwYXNzYW5kbyBkZSAxMiwyNSUgcGFyYSAxMiw1MCUuIEVzc2UgbW92aW1lbnRvIHJlZmxldGUgbyBmYXRvIGRlIHF1ZSwgY29tbyBtZW5jaW9uYWRvIGFudGVyaW9ybWVudGUsIGEgU2VsaWMgbsOjbyBhdHVhIGRpcmV0YW1lbnRlIHNvYnJlIG8gYXVtZW50byBkb3MgY3VzdG9zLiBTZXUgcGFwZWwsIG5lc3NlIGNvbnRleHRvLCDDqSBjb250ZXIgb3MgZWZlaXRvcyBzZWN1bmTDoXJpb3MgZGVzc2UgY2hvcXVlLCBhdHVhbmRvIHBhcmEgZnJlYXIgbyByZXBhc3NlIGRvIGF1bWVudG8gZGUgcHJlw6dvcyBhbyByZXN0YW50ZSBkYSBlY29ub21pYS4gDQoNCkRlc3NhIGZvcm1hLCBvIGNob3F1ZSBkZSBvZmVydGEgbsOjbyBhcGVuYXMgcHJlc3Npb25hIGEgaW5mbGHDp8OjbywgbWFzIHRhbWLDqW0gY29udHJpYnVpIHBhcmEgYSBtYW51dGVuw6fDo28gZGUganVyb3MgZWxldmFkb3MgcG9yIG1haXMgdGVtcG8uDQoNCiMjICoqNS4gQ29uY2x1c8OjbyBlIHBlcnNwZWN0aXZhcyBmdXR1cmFzKioNCg0KQ2hvcXVlcyBkZXNzYSBuYXR1cmV6YSBuw6NvIHBvZGVtIHNlciBwbGVuYW1lbnRlIGV2aXRhZG9zLCBwb2lzIGZhemVtIHBhcnRlIGRhIGRpbsOibWljYSBkZSB1bWEgZWNvbm9taWEgZ2xvYmFsaXphZGEgZSBkYSBpbnRlZ3Jhw6fDo28gZW50cmUgcGHDrXNlcyBwb3IgbWVpbyBkbyBjb23DqXJjaW8gaW50ZXJuYWNpb25hbC4gTm8gZW50YW50bywgYSBlbGV2YWRhIGRlcGVuZMOqbmNpYSBleHRlcm5hIGRlIGluc3Vtb3MgZXN0cmF0w6lnaWNvcywgY29tbyBmZXJ0aWxpemFudGVzLCBhdW1lbnRhIGEgdnVsbmVyYWJpbGlkYWRlIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEsIGludGVuc2lmaWNhbmRvIG8gcmVwYXNzZSBkZSBjaG9xdWVzIGludGVybmFjaW9uYWlzIHBhcmEgb3MgY3VzdG9zIGludGVybm9zLg0KTmVzc2UgY29udGV4dG8sIGluaWNpYXRpdmFzIHZvbHRhZGFzIMOgIHJlZHXDp8OjbyBkZXNzYSBkZXBlbmTDqm5jaWEgdG9ybmFtLXNlIHJlbGV2YW50ZXMsIGFpbmRhIHF1ZSBzZXVzIGVmZWl0b3Mgb2NvcnJhbSBubyBsb25nbyBwcmF6by4gQSBkZWNpc8OjbyBkYSBQZXRyb2JyYXMgZGUgcmV0b21hciBhcyBvYnJhcyBkYSBVbmlkYWRlIGRlIEZlcnRpbGl6YW50ZXMgTml0cm9nZW5hZG9zIElJSSAoVUZOLUlJSSkgdmFpIG5lc3NhIGRpcmXDp8OjbywgYW8gYnVzY2FyIGFtcGxpYXIgYSBwcm9kdcOnw6NvIG5hY2lvbmFsLiANCg0KTm8gY3VydG8gcHJhem8sIG8gYWp1c3RlIG9jb3JyZSBwb3IgbWVpbyBkYSBwcsOzcHJpYSBkaW7Dom1pY2EgZWNvbsO0bWljYTogYXVtZW50b3MgZGUgY3VzdG9zIHPDo28gcmVwYXNzYWRvcyBncmFkdWFsbWVudGUgYW8gbG9uZ28gZGFzIGNhZGVpYXMgcHJvZHV0aXZhcywgZ2VyYW5kbyBwcmVzc8O1ZXMgaW5mbGFjaW9uw6FyaWFzIGNvbSBjZXJ0YSBkZWZhc2FnZW0uIEVzc2UgaW50ZXJ2YWxvIGVudHJlIG8gY2hvcXVlIGluaWNpYWwgZSBzZXVzIGVmZWl0b3Mgc29icmUgb3MgcHJlw6dvcyBwb2RlIGRpZmljdWx0YXIgYSBwZXJjZXDDp8OjbyBpbWVkaWF0YSBkZSBzdWFzIGNhdXNhcy4NCkFzc2ltLCBtYWlzIGRvIHF1ZSBldmVudG9zIGlzb2xhZG9zLCBlc3NlcyBjaG9xdWVzIHJlZm9yw6dhbSBhIGltcG9ydMOibmNpYSBkZSBlbnRlbmRlciBjb21vIGZhdG9yZXMgZXh0ZXJub3Mgc2UgdHJhbnNtaXRlbSBwYXJhIGEgZWNvbm9taWEgZG9tw6lzdGljYSwgZGVzdGFjYW5kbyBvIHBhcGVsIGRhIHBvbMOtdGljYSBtb25ldMOhcmlhIG5hIGNvbnRlbsOnw6NvIGRvcyBlZmVpdG9zIGluZGlyZXRvcyBlIG5hIG1hbnV0ZW7Dp8OjbyBkYSBlc3RhYmlsaWRhZGUgZWNvbsO0bWljYS4NCg0KIyMgKipGb250ZXMqKg0KDQo8aHR0cHM6Ly93d3cuc2lhY29uLmNvbS5ici9zYWZyYS1lLXNhZnJpbmhhLyNTYWZyYV9vX2NpY2xvX3ByaW5jaXBhbF9kYV9wcm9kdWNhb19hZ3JpY29sYV9icmFzaWxlaXJhPg0KDQo8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9tZXJjYWRvcy9ndWVycmEtbm8taXJhLWphLXRlbS1pbXBhY3RvLWVtLWZlcnRpbGl6YW50ZXMtZS1wcmVjby1kb3MtYWxpbWVudG9zLXBvZGUtc3ViaXIvPg0KDQo8aHR0cHM6Ly9qb3JuYWwudXNwLmJyL2F0dWFsaWRhZGVzL25vLWJyYXNpbC1hLWltcG9ydGFjYW8tZGUtZmVydGlsaXphbnRlcy1kby1vcmllbnRlLW1lZGlvLWFpbmRhLW5hby1mb2ktYWZldGFkYS1wZWxhLWd1ZXJyYS8+DQoNCjxodHRwczovL2ludmVzdG5ld3MuY29tLmJyL25lZ29jaW9zL3BldHJvYnJhcy1pbnZlc3RlLWZlcnRpbGl6YW50ZXMtYWdyby8+DQoNCjxodHRwczovL3d3dy5nb3YuYnIvbW1lL3B0LWJyL2Fzc3VudG9zL25vdGljaWFzL3Byb2dyYW1hLW5hY2lvbmFsLWRvLWFsY29vbC1jb21wbGV0YS00OS1hbm9zLWNvbS1pbXBhY3Rvcy1wb3NpdGl2b3MtbmEtZWNvbm9taWEtZS1uby1tZWlvLWFtYmllbnRlPg0KDQo8aHR0cHM6Ly93d3cuYWxpY2UuY25wdGlhLmVtYnJhcGEuYnIvYWxpY2UvYml0c3RyZWFtL2RvYy8xMDQzNTY3LzEvUGV0cm9sZW9hZXJhZGFzY29tbW9kaXRpZXMucGRmPg0KDQo8aHR0cHM6Ly9mb2xoYWFncmljb2xhLmNvbS5ici8yMDI2LzAzLzMxL3NldG9yLWRlLWZlcnRpbGl6YW50ZXMtY29icmEtbWVkaWRhcy1mZWRlcmFpcy1wYXJhLWNvbnRlci1kaXNwYXJhZGEtZGUtcHJlY29zLW5vLWFncm8vPg0KDQo8aHR0cHM6Ly9ibG9nZG9pYnJlLmZndi5ici9wb3N0cy9hbGVtLWRvLXBldHJvbGVvLWNvbW8tZGlzcnVwY2FvLWxvZ2lzdGljYS1kZS1mZXJ0aWxpemFudGVzLWFtZWFjYS1vLWlwYS1lbS0yMDI2Pg0KDQo8aHR0cHM6Ly93d3cuaW5mb21vbmV5LmNvbS5ici9lY29ub21pYS9jb21vLXBldHJvbGVvLWVtLWFsdGEtYWZldGEtcmVjZWl0YXMtZXhwb3J0YWNhby1lLWluZmxhY2FvLWRvLWJyYXNpbC14cC1leHBsaWNhLz4NCg0KPGh0dHBzOi8vb2VzcGVjaWFsaXN0YS5zYWZyYS5jb20uYnIvcGV0cm9sZW8tYWx0YS1icmFzaWwtc2V0b3ItZXh0ZXJuby1pcGNhLXNlbGljLTIwMi8+DQoNCjxodHRwczovL2FnZW5jaWFicmFzaWwuZWJjLmNvbS5ici9lY29ub21pYS9ub3RpY2lhLzIwMjYtMDMvZmF6ZW5kYS1lbGV2YS1wcm9qZWNhby1kZS1pbmZsYWNhby1wYXJhLTIwMjYtY29tLWFsdGEtZG8tcGV0cm9sZW8+DQo=