Tag dos arquivos: história

A história do ASP 3.0

Postado em 11. out, 2009 por Chiavegatti.

0

A tecnologia ASP nos permite gerar conteúdo neutro para o browser cliente usando scripts no lado-servidor (server-side) dinamicamente.

O código que acompanham estes scripts podem ser escritos em quaisquer idiomas e embutidos em Tags especiais dentro do HTML tradicional, em arquivos de inclusão para simular um (Code-behind) ou cima de todo o conteúdo HTML.

Este script é heterogêneo , sendo que a página quem o cotem é apenas interpretada pelo servidor de rede no momento que é executada a requisição no lado cliente.
O ASP clássico não é compilado é interpretado! (por isso ame-o ou deixe-o!)

Para entender a evolução e surgimento do ASP e suas capacidades,é preciso saber um pouco da história de aplicações voltadas para web…

A internet estática

Nos primórdios da web toda a informação era provida diretamente ao Browser do cliente e por sua vez era completamente estática.

Sendo que todo conteúdo requistado pelo cliente “A” no web-server seria exatamente igual ao requistado pelo cliente “B”.

O web-server não gerava absolutamente nenhuma parte do conteúdo de forma dinâmica, executando apenas a requisição do http do documento nele armazenado, hospedado , hosteado, guardado…

Ele ( o web-server) recebia a requisição e entregava integralmente o documento ao Browser cliente.

Não existindo assim nenhum laço de interatividade entre o cliente e o servidor.

Embora a evolução atual da web seja fantástica, mesmo naquela época sua evolução era na velocidade da luz, rapidamente as páginas estáticas evoluíram, tendo imagens e sons (mesmo que mids nojentos) mas eram sons!.Mesmo que caveirinhas piscando (mas eram imagens!)

Apesar disso ela continuava estática e com pouca interatividade, e fracamente funcional podendo apenas prover links e mais links….

A internet Dinâmica…engatinhando! Aplicações CGI

Uma das primeiras extensões da internet estática foi o CGI (common Gateway Interface), o CGI então provia o mecanismo no qual o Browser cliente poderia enviar uma requisição de excussão de aplicação ao web-server . Então o resultado dessa aplicação seria convertido e formatado em HTML legível pelo Browser cliente, a CGI foi rapidamente incorporada para efetiva utilização na world wide web(www), sendo ela um caminho fácil para compartilhar informações viabilizando uma plataforma de processamento de dados (server-side)….

A resposta para essa considerável evolução na web, foi o rápido e crescente interesse em si desenvolver aplicações comerciais na web pelo paralelo mundo empresarial.

Diante desse interesse $$ começou a era da criação de scripts client-side, que permitiam ao cliente (browser) assumir parte das tarefas de processamento. Então começou a explodir soluções client-side mundo à fora, nascendo assim o javascript da finada Netscape e o VBScript da onipresente Microsoft.

E nesse período como não podia deixar de ser… Tio Bill sagaz e perneta! Liberou a sua primeira versão do IIS (internet information server), o que seria de fácil utilização, escalonável, portátil, seguro(?) e totalmente integrado ao também finado Windows NT. Tornando-se um (“webserver”) popular com rapidez astronômica…

A internet Dinâmica…querendo falar ! Aplicações ISAPI

Além de apoiar, bajular e aplaudir as especificações da CGI, a Microsoft apresentou uma alternativa à CGI, denominada Internet Server Application Programming Interface (ISAPI). Resumidamente o ISAPI iria suprir uma limitação do CGI que toda vez que o cliente requisitava a execução de uma aplicação CGI, o web-server executava uma instância da aplicação CGI, em seguida enviava ao Browser cliente a informação requisitada, proveniente do resultado da aplicação CGI que era finalmente processada no Cliente.

Mas esse processo de trabalhar instâncias da CGI teria um preço um pouco alto, cada requisição a CGI era instanciada.Uma nova CGI criada era instânciada e assim sucessivamente e novamente, e novamente e novamente, Com isso o pomposo Server ia miando, ia miando….miando…e miando….Até mijar no dedão e travar.

A CGI tinha o poder de sugar o web-server ( na época com recursos muito pequenos diga-se de passagem) , vampirizando os recursos do servidor de modo silencioso.

O ISAPI aliviava esse problema porque relacionava os processos em (DLLs) (dynamic link libraries) Cada aplicação ISAPI em forma de uma simples dll era carregada em um espaço de memória no web-server, imediatamente na primeira requisição de processo de execução do aplicativo.

Uma vez lá !(na memória), a DLL continuaria lá e lá ficaria enquanto o usuário (browser -cliente) permanecesse executando pedidos e só seria descarregada de lá (da memória) com um pedido explícito (..Tipo: Vamos sai daí já!).
Isto aumentou a performance e otimizou a tarefa de gerenciamento da memória. Todo o ISAPI DLLs deve estar em um thread seguro de forma que as múltiplas linhas podem ser instanciadas na DLL sem causar problemas com a função da aplicação atual ou standby.

As aplicações de ISAPI normalmente são mais rápidas que as aplicações de CGI equivalentes porque o web-server não tem que instanciar uma aplicação nova toda vez que um pedido era feito. Uma vez a aplicação de ISAPI DLL está na memória, ela fica na memória. E o web-server não precisa carregá-la novamente.

Além de aplicações de ISAPI, o ISAPI permitiu a criação de filtros ISAPI.

Um filtro ISAPI é nada mais do que uma DLL customizada que está no mesmo espaço de memória web-server e é chamado pelo web-server em resposta a todo http requisitado. Em deste modo, o filtro ISAPI trata as mudanças e a maneira na qual o próprio web-server irá se comporta.
Os filtros ISAPI então instruem o web-server como controlar as requisições. Os filtros ISAPI permitem personalizar a resposta de um web-server para tipos específicos de requisições dos Clientes.
Para diferenciar um filtro ISAPI e aplicações de ISAPI (e aplicações de CGI)de maneira mais clara, um filtro ISAPI oferece três tipos de funcionalidade que os separa de uma aplicação ISAPI (ou CGI):

Um filtro de ISAPI permite a você fornecer uma form no seu site ou uma página segura através de inserção em uma camada entre o cliente e o web-server.

Um filtro de ISAPI permite a você localizar mais informação sobre as requisições ao web-server e o conteúdo provido por quem o requisita um documento sobre o HTTP padrão ao web-server. Estas informações são armazenadas separadamente em outro formato de arquivos, txt na maioria das vezes, criando um Logging das funções do web-server

Um filtro de ISAPI fornecia informação aos clientes de uma maneira diferente que o web-server pode por si só não poderia fazer.

Aqui são alguns do filtros de ISAPI:

Uma camada Segura entre o cliente e o web-server (SSL). Esta camada de segurança pode prover para uma blindagem mais completa durante a requisição pelo cliente e possibilitou a utilização de Login e senha, criando ambientes de autenticação.

Um filtro ISAPI customizado, pode interpretar o fluxo de informações do servidor e, baseado naquela interpretação, apresentar o fluxo de texto em um formato diferente daquele que web-server possui originalmente.
O ASP.DLL é um exemplo deste tipo de filtro de ISAPI. Interpreta o código do servidor em um manuscrito requisitado pelo cliente e, dependendo de sua interpretação, provê ao cliente um conteúdo personalizado de acordo com sua requisição.

Um filtro ISAPI customizado pode traçar a requisição de um cliente a um local físico diferente no servidor.
Isto poderia ser usado em locais e volumes de alta capacidade onde você poderia querer movimentar o cliente sobre um servidor diferente.

Um filtro ISAPI desenvolvido de maneira profissional pode originar novas formas ou até linguagens de programação para web.

A internet Dinâmica… Voando baixo

Nos mirrados anos do IIS 2.0, a Microsoft começou a testar o beta de uma tecnologia com o codinome Daneli (a Microsoft adora batizar seus betas com codinomes), hoje chamamos essa tecnologia de ASP – Active Server Pages isso foi um marco na estratégia da Microsoft de alavancar o IIS 2.0. O ASP é encapsulada dentro um único e pequeno arquivo dll de (~300K) chamado ASP.DLL.

Esta DLL é um filtro de ISAPI que reside no mesmo espaço de memória do IIS. Sempre que um usuário pede um arquivo cuja extensão é. ASP, o (ASP filtro ISAPI) criam as instâncias de interpretação.

O ASP carrega qualquer linguagem de criação de scripts que possam ser interpretadas pelas DLLs na memória, executa qualquer código server-side encontrado na página ASP, e passa esse resultado para um HTML, isso ainda no lado servidor, então envia isto ao Browser – Cliente (Client- side).

Só para reafirmar, a produto ASP gerando no servidor é puramente HTML ou um conjundo de códigos cliente-side que são ou já estão inseridos no fluxo de texto que o Browser – Cliente enviou…

Então para finalizar….

O ASP não surgiu para tapar buracos, é apenas mais um filtro, não veio para fazer coisas extraordinárias, veio de uma cronologia evolutiva normal e obrigatória como todo e qualquer sistema ou linguagem, e dele agora temos o ASP.Net que na teoria seria a evolução do ASP, faz o que o ASP faz e ainda lava, passa, cozinha, e assa 500 mil lingüiças em segundos!

  • Share/Bookmark

Continue Lendo

A diferença entre a arte e o Design

Postado em 11. out, 2009 por Chiavegatti.

0

 

O assunto "O que separa a arte do design" é algo muito confuso e debatido a muito tempo.
Artistas e Designers ambos criam composições visuais compartilhando bases de conhecimento, no entanto as reações geradas através de seus trabalhos são totalmente diferentes.
Alguns designers consideram-se Artistas enquanto poucos artistas consideram-se designers.
Mas o qual é exatamente o divisor de águas entre a arte e o Design? Nesse post, vamos examinar e comprar alguns dos princípios fundamentais entre cada um.
Este é um assunto no qual as pessoas tem fortes opiniões, estou ansioso para ler os diferentes pontos de vista nos comentários.

Este post pode ser considerado um ponto de partida para uma discussão, não é uma verdade estabelecida. Portanto mente aberta!

A Boa arte Inspira. O bom Design motiva.

Talvez a maior das diferenças entre a arte e o design que todos nós podemos concordar é relacionada com seus propósitos. Normalmente, o início de todo o processo de criação e trabalho artístico começa com nada, uma tela em branco, uma bola de argila sem nenhuma expressão. Uma obra de arte é resultado de uma visão de um ponto de vista, opinião ou sentimento que o artista tem.

Nesse aspecto a arte é criada para compartilhar o sentido de sí mesma e do artista com as outras pessoas e para que as pessoas tenham uma relação com essa obro, para que elas aprendam com ela ou sejam inspiradas por ela. Hoje as mais famosas (e bem sucedias) obras de arte são aquelas que estabelecem um forte vínculo emocional entre o artista e seu público.

Contra essa maré, quando um designer pretende criar uma peça, quase sempre partem de um princípio, uma mensagem, uma imagem, uma idéia, uma ação.
O trabalho do Designer não é inventar algo novo, mas o de comunicar algo que já existe, para uma determinado objetivo.

Esse objetivo na grande maioria das vezes é o de motivar sua audiência a fazer alguma coisa: comprar um produto, usar um serviço, visitar um local, saber de alguma informação. Os projetos de design mais bem sucedidos são aqueles que conseguem de forma eficaz transmitir sua mensagem e fazer com que o público realize uma tarefa.

A Boa arte é interpretada. O bom design é Entendido.

Outra grande diferença entre Arte e Design é a forma como as mensagens de cada um são interpretadas pelas suas respectivas audiências. Apesar da proposição dos Artistas de transmitires emoções, pontos de vista e sentimentos, isso não quer dizer que essa mensagem deva ter um único significado.

A Arte conecta as pessoas de formas diferentes, justamente por ser interpretada de formas diferentes.

A Mona Lisa de Leornardo Da Vinci’s tem sido interpretada e discutida por muitos e muitos anos. Apenas porque ela está sorrindo? Os cientistas dizem que é uma ilusão criada pela nossa visão periférica. Românticos dizem que ela está apaixonada. Céticos afirmam que não há motivo. O mais interessante é que ninguém está errado.

Já o Design é o oposto disso. Muitos dirão que, se um projeto puder ser interpretado em todos os seus aspectos, ele falhou em seu propósito.

O Objetivo fundamental do projeto de design é o de comunicar uma mensagem e motivar a audiência a fazer alguma coisa.

Se o design transmite uma mensagem diferente do seu objetivo e sua audiência vai e faz alguma coisa com base no que uma outra mensagem transmite, então ela não cumpriu sua obrigação. Uma boa peça de design, deve fazer com que sua mensagem seja absorvida e entendida pela sua audiência.

A boa Arte é gosto. O Bom design é opinião.

Wall3[1]

A arte é julgada pela opinião e opinião é regida por gosto.

Para um entusiasta da arte moderna, visionário do futuro a indicação da peça "My Bed" de Tracey Emin para o prêmio Turner em 1999, pode ser considerado o ápice da expressão artística.

Já para um seguidor mais conservador que admira a arte mais tradicional, tal indicação pode significar um insulto para todo o meio artístico. Nisso voltamos ao ponto sobre a interpretação. O gosto como critério é algo muito pessoal, diferente também do gosto por uma mensagem interpretada do objeto de desing.

O Design tem algum elemento de gosto, mas a grande diferença entre uma peça de design de qualidade e uma ruim e essencialmente uma questão de opnião.

Uma peça de design pode muito bem ser bem sucedida mesmo que sua opinião sobre ela seja negativa e ela não atenda seu gosto. Se ela cumpre seu objetivo de ser compreendida e motiva as pessoas a fazerem algo, então se é bom ou não já é uma questão de opnião.

Esse tópico poderia ser prolongado e discutido mais a fundo, mas espero que os princípios do assunto estejam claros.

A boa Arte é Talento. O bom design é habilidade.

Wall4[1]

E sobre as habilidades do criador?

É muito frequente e natural um artista ter habilidade natural. Claro que desde pequeno ele crescer desenhando, pintando , esculpindo e desenvolvendo cada vez mais sua habilidades naturais.

O verdadeiro valor de um artista é realmente seu talento e sua habilidade natural que nasce junto com ele. Com algumas sobreposições: bons artistas certamente possuem grandes habilidades, mas habilidade artística sem talento é, provavelmente, inútil.

O Design porém é realmente uma habilidade que você desenvolve aprendendo através de estudo. Não é preciso ser um grande Artista para ser um grande Designer, você só precisa realmente alcançar os objetivos de um dado projeto.

Alguns dos Designers mais respeitados do mundo são mais conhecidos pelo seu estilo minimalista. Perceba que eles não usam muitas cores nem texturas, mas prestam muita atenção ao tamanho, posicionamento e espaçamento dos elementos, detalhes e complementos que podem tranquilamente serem aprendidos sem a necessidade do mínimo de talento inato.

Este post foi criado originalmente por John O’Nolan, um grande web designer do Reino Unido e dono da Lyrical Media.

Recursos e referências do texto

Related Posts with Thumbnails
  • Share/Bookmark

Continue Lendo

PHVsPjxsaT48c3Ryb25nPndvb19hZHNfcm90YXRlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19hZF8yNTBfYWRzZW5zZTwvc3Ryb25nPiAtIDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwhLS0NCmdvb2dsZV9hZF9jbGllbnQgPSBcInB1Yi0zNTE4NDExMjE1MjQzNjQwXCI7DQovKiAyNTB4MjUwLCBjcmlhZG8gMjkvMDkvMDkgKi8NCmdvb2dsZV9hZF9zbG90ID0gXCI1ODgyNDQ1ODE0XCI7DQpnb29nbGVfYWRfd2lkdGggPSAyNTA7DQpnb29nbGVfYWRfaGVpZ2h0ID0gMjUwOw0KLy8tLT4NCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCINCnNyYz1cImh0dHA6Ly9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvc2hvd19hZHMuanNcIj4NCjwvc2NyaXB0PjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzI1MF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTI1MHgyNTAuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfMjUwX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfYWRzZW5zZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfZGlzYWJsZTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtNDY4eDYwLTIuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3LmNoaWF2ZWdhdHRpLmNvbS5ici9ibG9nLzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzE8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTEuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtMi5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8zPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS0zLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzQ8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTQuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtNC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV82PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS00LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2Rpc2FibGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtNDY4eDYwLTIuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cuY2hpYXZlZ2F0dGkuY29tLmJyL2Jsb2cvPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzE8L3N0cm9uZz4gLSBodHRwOi8vd3d3LmNoaWF2ZWdhdHRpLmNvbS5ici9ibG9nLzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8yPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5jaGlhdmVnYXR0aS5jb20uYnIvYmxvZy88L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cuY2hpYXZlZ2F0dGkuY29tLmJyL2Jsb2cvPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzQ8L3N0cm9uZz4gLSBodHRwOi8vd3d3LmNoaWF2ZWdhdHRpLmNvbS5ici9ibG9nLzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF81PC9zdHJvbmc+IC0gaHR0cDovL3d3dy5jaGlhdmVnYXR0aS5jb20uYnIvYmxvZy88L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfNjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cuY2hpYXZlZ2F0dGkuY29tLmJyL2Jsb2cvPC9saT48bGk+PHN0cm9uZz53b29fYWx0X3N0eWxlc2hlZXQ8L3N0cm9uZz4gLSBibHVlLmNzczwvbGk+PGxpPjxzdHJvbmc+d29vX2F1dG9faW1nPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfZXg8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jb21tZW50X3Bvc3RzPC9zdHJvbmc+IC0gU2VsZWN0IGEgbnVtYmVyOjwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnQ8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnRfYXJjaGl2ZXM8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbnRlbnRfZmVhdDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Zhdmljb248L3N0cm9uZz4gLSAvZmF2aWNvbi9mYXZpY29uLnBuZzwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlYXR1cmVkX3Bvc3RzPC9zdHJvbmc+IC0gMzwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfaWQ8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19mZWVkYnVybmVyX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly9mZWVkcy5mZWVkYnVybmVyLmNvbS9DaGlhdmVnYXR0aTwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4gDQp2YXIgZ2FKc0hvc3QgPSAoKFwiaHR0cHM6XCIgPT0gZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpID8gXCJodHRwczovL3NzbC5cIiA6IFwiaHR0cDovL3d3dy5cIik7DQpkb2N1bWVudC53cml0ZSh1bmVzY2FwZShcIiUzQ3NjcmlwdCBzcmM9XCdcIiArIGdhSnNIb3N0ICsgXCJnb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qc1wnIHR5cGU9XCd0ZXh0L2phdmFzY3JpcHRcJyUzRSUzQy9zY3JpcHQlM0VcIikpOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4NCnRyeSB7DQp2YXIgcGFnZVRyYWNrZXIgPSBfZ2F0Ll9nZXRUcmFja2VyKFwiVUEtNjE3NDExMS0xXCIpOw0KcGFnZVRyYWNrZXIuX3RyYWNrUGFnZXZpZXcoKTsNCn0gY2F0Y2goZXJyKSB7fTwvc2NyaXB0PjwvbGk+PGxpPjxzdHJvbmc+d29vX2hvbWVfYXJjPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbms8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9saW5rX2Rlc2M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbmtfdGV4dDwvc3Ryb25nPiAtIEhvbWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDkyPC9saT48bGk+PHN0cm9uZz53b29faG9tZV90aHVtYl93aWR0aDwvc3Ryb25nPiAtIDI0NzwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX2hlaWdodDwvc3Ryb25nPiAtIDIxMDwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX3NpbmdsZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfd2lkdGg8L3N0cm9uZz4gLSA1NDA8L2xpPjxsaT48c3Ryb25nPndvb19sb2dvPC9zdHJvbmc+IC0gL2ltYWdlbnMvd3Bsb2dvLnBuZzwvbGk+PGxpPjxzdHJvbmc+d29vX21hbnVhbDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9zdXBwb3J0L3RoZW1lLWRvY3VtZW50YXRpb24vYnVzeS1iZWUvPC9saT48bGk+PHN0cm9uZz53b29fcG9wdWxhcl9wb3N0czwvc3Ryb25nPiAtIDI8L2xpPjxsaT48c3Ryb25nPndvb19yZXNpemU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fc2hvcnRuYW1lPC9zdHJvbmc+IC0gd29vPC9saT48bGk+PHN0cm9uZz53b29fc2luZ2xlX2hlaWdodDwvc3Ryb25nPiAtIDEyMDwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV93aWR0aDwvc3Ryb25nPiAtIDE4MDwvbGk+PGxpPjxzdHJvbmc+d29vX3RhYnM8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RoZW1lbmFtZTwvc3Ryb25nPiAtIEJ1c3kgQmVlPC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gODg8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl93aWR0aDwvc3Ryb25nPiAtIDg4PC9saT48bGk+PHN0cm9uZz53b29fdHdpdHRlcjwvc3Ryb25nPiAtIGNoaWF2ZWdhdHRpPC9saT48bGk+PHN0cm9uZz53b29fdmlkZW9fY2F0ZWdvcnk8L3N0cm9uZz4gLSBTZWxlY3QgYSBjYXRlZ29yeTo8L2xpPjwvdWw+