Content-Type: multipart/related; start=; boundary=----------LUOOrkTQxGoY8i6culjXjN Content-Location: http://www.netsago.org/ru/docs/2/5 Subject: =?utf-8?Q?NetSago=20IT=20Research=20Project=20=E2=80=94=20=D0=A1=D1=82=D0=B0=D1=82=D1=8C=D0=B8=20=E2=80=94=20=D0=9F=D0=BE=D1=88=D0=B0=D0=B3=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B0=20SSL=20=D0=B4=D0=BB=D1=8F=20Apache.?= MIME-Version: 1.0 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=5.htm Content-Type: text/html; charset=windows-1251; name=5.htm Content-ID: Content-Location: http://www.netsago.org/ru/docs/2/5 Content-Transfer-Encoding: 8bit NetSago IT Research Project — Статьи — Пошаговая настройка SSL для Apache.
NetSago
Вход
Войти

Как присоединиться?
Меню
Главная
События
Заметки
 Статьи
Теги
Поиск
О Проекте
Ссылки
Наше
NetSago Paste
NetSago Phrack
RSS События по RSS
RSS Заметки по RSS
netsago NetSago
Популярное
Веб-сервер lighttpd. by n0xi0uzz

5 способов сделать использование bash более продуктивным by n0xi0uzz

[AD]
Статьи — Пошаговая настройка SSL для Apache.
СтатьиАдминистрирование

Пошаговая настройка SSL для Apache.
n0xi0uzz
06 марта 2008 09:24



Теги: ssl, apache, web-servers

Версия для печати (откроется в новом окне)

[AD]

Перевод статьи «Step by Step: Configuring SSL Under Apache» автора Juliet Kemp.


Вступление

Если у вас безопасный веб-сервер, пользователи, волнующиеся за безопасность своих данных, могут быть уверены, что запросы зашифрованы, поэтому их данные в безопасности. Лучшим путем для этого является использование Apache 2, лидирующего веб-сервера под Linux и Secure Sockets Layer, протокол безопасной передачи данных. Transport Layer Security (TLS) является развитием SSL, но они работают практически одинаково. Я буду ссылаться только на SSL.

SSL — протокол для безопасной передачи зашифрованных данных между веб-браузером и веб-сервером. В большинстве случаев, аутентификацию проходит сервер, что позволяет клиенту быть уверенным в том, что сервер является требуемым ему, а не наоборот. Как бы то ни было, когда соединение устанавливается, обе стороны находятся в безопасности, так как только клиент и сервер имеют доступ к ключу. Это работает в течении многих запросов, сервер не интересует, кем является клиент так долго, сколько он остается тем же клиентом на протяжении запроса. Если вас волнует аутентификация клиента, есть возможность использовать клиентские SSL сертификаты (или htaccess, Kerberos или другие, близкие к ним методы), но это не будет рассматриваться в этой статье.

Будучи на стороне клиента, вас волнует, тому ли человеку (серверу) вы посылаете какие-либо личные данные, которые хотите зашифровать. Поэтому сервер, а не клиент, аутентифицируется. Вас также беспокоит участие третей стороны в доступе к вашим данным в том виде, каком вы их посылаете. SSL предоставляет оба этих вида безопасности.

Протокол SSL работает следующим образом:
1. Клиент подключается к веб-серверу и дает список доступных кодов.
2. Сервер берет наиболее устойчивый код, который поддерживает и он, и клиент, и посылает сертификат со своим именем и ключ кодирования, подписанный доверенным Удостоверяющим Центром (Certificate Authority, далее — CA), таким как Verisign.
3. Клиент проверяет сертификат с помощью CA. На практике, хранят набор CA локально, поэтому это может быть сделано без контакта в реальном времени с CA, и поэтому более быстро.
4. Клиент посылает назад случайное число, зашифрованное с помощью публичного ключа сервера. Только клиент знает это число, и только сервер может его расшифровать (используя личный ключ); вот где реализуется безопасность от участия третей стороны.
5. Сервер и клиент используют случайное число для генерирования содержимого ключа, который используется на протяжении передачи данных.

Мы хотим сделать это на стороне клиента настолько прозрачным, насколько это возможно, чтобы сделать передачу данных настолько легкой, насколько возможно.

Настройка Apache для работы с SSL проста, но есть несколько необходимых шагов. Эта статья рассказывает, как получить сертификат, подписанный CA и как скомпилировать и настроить Apache для работы с SSL. Я использую Apache 2 с mod_ssl. ApacheSSL (реализация Apache с возможностями SSL) также доступен, но сейчас он уже устарел; mod_ssl намного лучше.


Создание сертификата.

Первый шаг — создание сертификата. Вы можете создать сертификат с паролем или без него. Главным неудобством использования пароля является тот факт, что он должен быть введен каждый раз при старте сервера. Поэтому он не может запускаться без присмотра или автоматически при загрузке, например, после выключения электричества. В зависимости от ваших установок, это может быть значимым фактом для вас, или нет.

Теоретически, преимуществом использования пароля являтся повышение защиты. Хотя, на практике пароли не дает такой большой защиты. Если кто-то сможет прочитать или скопировать приватный ключ, значит, у него уже есть доступ к системе и возможность получить пароль, например, используя такую программу, как кейлоггер. Пароль защитит от скрипт-кидди, но не от серьезного взломщика. Возможно, для большинства людей нет смысла его использовать.

Для тестовых целей, или для небольшой локальной сети, вы можете создать сертификат, подписанный вами. Вы можете сделать это, выполнив команду:
openssl req -new -x509 -days 365 -sha1 -newkey rsa:1024 \
-nodes -keyout server.key -out server.crt \
-subj '/O=Company/OU=Department/CN=www.example.com'

Давайте рассмотрим опции более подробно:
— -x509 означает, что сертификат обязателен, правильнее, чем просто запрос сертификата (смотри ниже)
— -days 365 устанавливает время истечения сертификата, равное году. Вы можете увеличить этот срок. Запомните дату истечения срока, чтобы обновить её при необходимости.
— -sha1 указывает, что будет использован SHA1 для шифрования.
— rsa:1024 делает ключ 1024 битным RSA.
— -nodes указывает отсутствие пароля.
— -keyout и -out указывают, где хранить сертификат и ключ. Ключ должен быть доступен для чтения только для root; сертификат может быть доступен для чтения для world, но должен быть доступным для чтения пользователю, который запускает Apache.
— -subj устанавливает имя компании, имя отделения компании и адрес веб-сайта. Если вы это пропустите, вас попросят это сделать. CN должен совпадать с адресом сайта, иначе сертификат не будет соответствовать, и пользователи будут получать предупреждение при подключении. Убедитесь, что вы не запрашиваете пароль.

Проблема с использованием сертификата, подписанного самостоятельно для сервера, работающего в реальном времени, заключается в том, что любой браузер, работающий с сайтом, не будет признавать сертификат правильным. Это значит, что пользователя будут запрашивать о подтверждении сертификата. Очевидно, что в большинстве случаев это не является оптимальным решением. Хотя, это нормально для целей теста, а для небольших локальных сетей было бы плохим вариантом платить за сертификат от CA.

Не смотря на это, безусловно, лучше использовать сертификат, подписанный доверенным Удостоверяющим Центром, таким как Verisign (который имеет наибольший охват рынка), или меньшей организацией. Большинство браузеров уже имеют набор предустановленных сертификатов, заверенных CA, которые верифицируют сертификат вашего веб-сервера при подключении клиента. Это уменьшает количество трудностей для конечного пользователя и удостоверяет законность вашего сайта.

Чтобы получить сертификат, подписанный CA, прежде всего вы должны создать криптографическую пару и запрос сертификата:
openssl req -new -sha1 -newkey rsa:1024 -nodes \ 
-keyout server.key -out www.example.com.csr \ 
-subj '/O=Company/OU=Department/CN=www.example.com'

Этот пример работает так же, как и предыдущий, но на этот раз мы не используем опцию -x509. Выполнение этой команды приведет к генерации ключа и запроса сертификата, но не самого сертификата. Если вы ввели CN и так далее, вы не должны вводить адрес e-mail или пароль.

Ключ сервера (файл server.key, который, опять же, должен быть доступен для чтения только для root) остается на вашем веб-сервере; запрос (файл www.example.com.csr) отправляется в CA. Вы можете назвать файл запроса так, как вам вздумается, но назвав его по своему доменному имени, вы упростите задачу для CA.

Следующей стадией будет послать этот файл www.example.com.csr в CA, с вашей оплатой. Они должны вернуть его достаточно быстро, если вы предоставили всю требуемую информацию в вашем запросе. Выбранный вами CA объяснит их действия на своем сайте. Вам может понадобиться поменять формат файла на PEM, но, в случае Verisign, этого делать не придется.

Когда вы получите файл назад в PEM формате, переименуйте его в server.crt (это не является строгой необходимостью, но соответствует условиям Apache) и проверьте его:
    openssl verify -CAfile /path/to/trusted_ca.crt \
		-purpose sslserver server.crt

Затем проверьте, что результат выполнения этих двух команд одинаков, т.е., что сертификат соответствует приватному ключу:
    openssl x509 -noout -modulus -in server.pem | openssl sha1
    openssl rsa -noout -modulus -in server.key | openssl sha1

Теперь установите ваш ключ (сгенерированный выше как server.key) и сертификат (server.crt) в /etc/apache2/ssl или предпочитаемый вами каталог настроек, если он другой. Как указано выше, очень важно убедиться, что server.key доступен для чтения только для root, в то время как сертификат сервера может быть доступен для чтения для world, но принадлежать и быть доступным для записи только для root.


Компиляция Apache с SSL.

Итак, ваш сертификат сгенерирован. Теперь вам надо настроить свой сервер для его использования.

Для подавляющего большинства людей, лучшим способом установить и управлять Apache2 — модули, полученные через менеджер пакетов вашего дистрибутива. Apache2 из Debian идет вместе с модулем SSL, но он не включен по умолчанию. Для его включения вы должны выполнить команду: a2enmod ssl и перезапустить веб-сервер.

Чтобы сделать это, добавьте строчку
    Include /etc/apache2/mod_ssl.conf

в ваш /etc/apache2/apache2.conf (этот файл может также называться httpd.conf). Вы должны исправить её, обозначив соответствующее расположение файла mod_ssl.conf. Затем перезапустите веб-сервер.

Если вы хотите скомпилировать Apache2 из исходных кодов, в зависимости от того, какие установки вы до этого использовали, вы можете уже иметь или не иметь поддержку SSL. Проверьте это командой apache2 -l. Если перекомпиляция понадобится, запустите ./configure со всеми опциями, которые вы использовали до этого, добавив к ним --enable-ssl и --enable-setenvif (последняя нужна для совместимости с капризами Internet Explorer). Затем установите его как обычно, с помощью make;make install и проверьте правильность прав доступа.


Настройка Apache с SSL.

Следующим шагом будет настройка Apache2. Следующие инструкции приведут к запуску сервера как безопасного (порт 443) и как обычного веб-сервера (порт 80). Прежде всего, вам надо настроить сервер на принятие запросов на оба порта. Или отредактируйте /etc/apache2/ports.conf (в Debian, это входит в apache2.conf), или отредактируйте /etc/apache2/apache2.conf, включив строки:
Listen 80
Listen 443

Затем отредактируйте /etc/apache2/sites-enabled/yoursite для использования настроек SSL. Разделение настроек обычного и безопасного сервера с помощью VirtualHost — простейший способ из соображений условий эксплуатации. Любые настройки вне секций VirtualHost (например, установка ServerAdmin) будут применяться для обоих (и любых других) VirtualHost. Добавьте следующий текст в файл конфигурации:
# =================================================
# SSL/TLS settings
# =================================================
NameVirtualHost *:443



    DocumentRoot "/local/www/ssl_html"

    SSLEngine on
    SSLOptions +StrictRequire

    
        SSLRequireSSL
    

    SSLProtocol -all +TLSv1 +SSLv3
    SSLCipherSuite HIGH:MEDIUM:!aNULL:+SHA1:+MD5:+HIGH:+MEDIUM

    SSLRandomSeed startup file:/dev/urandom 1024
    SSLRandomSeed connect file:/dev/urandom 1024

    SSLSessionCache shm:/usr/local/apache2/logs/ssl_cache_shm
    SSLSessionCacheTimeout 600    

    SSLCertificateFile /etc/apache2/ssl/server.crt
    SSLCertificateKeyFile /etc/apache2/ssl/server.key

    SSLVerifyClient none
    SSLProxyEngine off

    
        AddType application/x-x509-ca-cert      .crt
        AddType application/x-pkcs7-crl         .crl
    

    SetEnvIf User-Agent ".*MSIE.*" \  
      nokeepalive ssl-unclean-shutdown \  
      downgrade-1.0 force-response-1.0


Несколько замечаний об этой конфигурации:
— SSLEngine должен быть включен, обозначая, что сервер использует SSL.
— DocumentRoot устанавливает корневой каталог виртуального хоста. Это значит, что вы можете отделять безопасное содержимое от обычного.
— SSLRequireSSL запрашивает использование SSL (на этом виртуальном сервере), то есть, пользователь не может подключиться к этому виртуальному хосту с помощью обычного HTTP-запроса. Вот зачем мы разделили безопасное и обычное содержимое.
— SSLProtocol отключает все протоколы, отличные от TLS v1.0 и SSL v3.0. Для современных браузеров все будет работать хорошо.
— SSLCipherSuite устанавливает использование только HIGH и MEDIUM шифров. SHA1 считается более безопасным, чем MD5, поэтому выбран он.
— SSLCertificateFile и SSLCertificateKeyFile указывают расположение файлов сертификата и ключа.
— SSLVerifyClient должна быть установлена как 'none', если не используется аутентификация примера.

Чтобы запускать обычный сервер на 80 порту, добавьте следующий текст в конфигурационный файл:
NameVirtualHost: *.80


    DocumentRoot "/local/www/html"


После сохранения отредактированного конфигурационного файла, перезапустите сервер. Если вы использовали пароль при генерации сертификата, вам понадобится ввести его при запросе.


Тестирование.

Создайте базовую страницу index.html в корневой директории вашего сервера, если у вас ещё нет содержимого там.

Затем направьте свой браузер на https://yoursite.com. Вы должны увидеть открытие SSL-соединения и загрузку страницы. Если вы используете сертификат, подписанный вами, ваш браузер даст предупреждение о том, что подлинность сервера не может быть проверена. Вы можете выбрать просмотр сертификата и принять его. Если вы используете внешний сертификат, все должно пройти без проблем.

Убедитесь, что не можете получить доступ к безопасному содержимому, используя http://. Если вы попробуете, вы должны получить сообщение об ошибке.


Устранение проблем.

Если это работает не так, как ожидалось, прежде всего, проверьте, что ваш сервер вообще запущен с помощью команды ps -a | grep apache. Если она не вернет результата, попробуйте перезапустить сервер и проверьте сообщения об ошибке в консоли.

Также проверьте, что права доступа к файлам сертификата и ключа установлены правильно (см. выше), также, как и права к тестовому HTML-файлу и директории, в которой он находится.

Затем, проверьте логи. Вы должны проверить как логи сервера, так и логи SSL, которые вы настроили в конфигурационном файле выше. Если вы не нашли там ничего полезного, попробуйте поменять значение LogLevel в файле конфигурации Apache2 на 'debug', перезапустите Apache2 и протестируйте снова. Это должно дать больше данных в логах.

Если вы запускаете веб-сервер на 80 порту, попробуйте запросить страницу с помощью http://, вместо https://, чтобы понять, заключается ли проблема в веб-сервере или в SSL-соединении. Учтите, что в приведенных выше установках, корневые каталоги веб-сервера разные для http:// и https://, так что вы не можете (или не должны!) получить доступ к тому же содержимому. Если ваша тестовая страница в корневом каталоге http:// работает, в то время, как тестовая страница в корневом каталоге https:// не работает, это поможет вам более точно указать на проблему.

Если проблема в SSL соединении, удобным инструментом будет s_client, который является диагностической утилитой для решения проблем в TLS/SSL-соединениях. Обычное его использование: /usr/bin/openssl s_client -connect localhost:443. Также существует множество других опций, которые вы можете узнать из документации. Если вы получили сообщения об ошибках, это должно вам помочь в определении проблемы.


Заключение.

Поздравляю! Теперь у вас есть рабочий безопасный сервер, с сертификатом, автоматически проверяемым большинством современных браузеров.




[AD]


Теги: ssl, apache, web-servers

Статьи с такими же тегами:

Кеширование динамического контента с помощью Apache httpd.
Отправка логов Apache в Syslog
Веб-сервер lighttpd.
Делаем веб-сервер легче вместе с thttpd.
Ускоряем время загрузки страницы для мобильных устройств с помощью Ziproxy

Последние комментарии:

Онанимус (10 апреля 2010 17:17) :
Видео установки и настройки Apache + PHP + MySQL на Windows7
http://www.sysbox.ru
http://www.youtube.com/sysbox1

Онанимус (06 марта 2008 16:43) :
Еще бы для полноты картины про верификацию клиентского сертификата

n0xi0uzz (06 марта 2008 09:25) :
>> Transport Layer Security (LTS)

> Незначимо, но TLS вернее.

Исправлено, спасибо :-).

Онанимус (06 марта 2008 09:18) :
>Transport Layer Security (LTS)

Незначимо, но TLS вернее.

n0xi0uzz (06 марта 2008 01:47) :
> наверное ps -a | grep apache ?

Спасибо, исправлено.

Онанимус (05 марта 2008 17:55) :
Да и не всегда бинарник называется apache. Может и httpd называться.

Онанимус (05 марта 2008 17:54) :
> с помощью команды -a | grep apache
наверное ps -a | grep apache ?

Добавить комментарий:

Введите текст с изображения:


И комментарий:

Язык
English/Английский
Поиск
Расширенный Поиск
Ошиблись?
Если вы обнаружили ошибку на сайте, пожалуйста, сообщите нам о ней.
Посчитали
59 / 3737
К нам сегодня зашли 128 роботов. Они хотят убить всех человеков.

Зарегистрированных пользователей: 6
Онлайн: 0

Время генерации: 0.060 с
NetSago.v2.β © [2006;∞)  Neunica
------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline Content-Type: image/gif Content-Location: http://netsago.org/design/zm.gif Content-Transfer-Encoding: Base64 R0lGODlhBQAZAJEAALfCv8DHxa68uAAAACH5BAAAAAAALAAAAAAFABkAAAINjI+g Ku0Po5y02oszLAA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline Content-Type: image/gif Content-Location: http://netsago.org/design/zcm.gif Content-Transfer-Encoding: Base64 R0lGODlhBQAZAJEAALbGwsHMyazBuwAAACH5BAAAAAAALAAAAAAFABkAAAINjI+g Ku0Po5y02oszLAA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline Content-Type: image/gif Content-Location: http://netsago.org/design/zc.gif Content-Transfer-Encoding: Base64 R0lGODlhBQAZAJEAAMHMycjRzrjGwgAAACH5BAAAAAAALAAAAAAFABkAAAINjI+g Ku0Po5y02oszLAA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://netsago.org/design/bender.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgEASABIAAD/7Qd+UGhvdG9zaG9wIDMuMAA4QklNA+0KUmVz b2x1dGlvbgAAAAAQAEgAAAABAAIASAAAAAEAAjhCSU0EDRhGWCBHbG9iYWwgTGln aHRpbmcgQW5nbGUAAAAABAAAAB44QklNBBkSRlggR2xvYmFsIEFsdGl0dWRlAAAA AAQAAAAeOEJJTQPzC1ByaW50IEZsYWdzAAAACQAAAAAAAAAAAQA4QklNBAoOQ29w eXJpZ2h0IEZsYWcAAAAAAQAAOEJJTScQFEphcGFuZXNlIFByaW50IEZsYWdzAAAA AAoAAQAAAAAAAAACOEJJTQP1F0NvbG9yIEhhbGZ0b25lIFNldHRpbmdzAAAASAAv ZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAA AAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+BdDb2xvciBUcmFuc2ZlciBTZXR0 aW5ncwAAAHAAAP////////////////////////////8D6AAAAAD///////////// ////////////////A+gAAAAA/////////////////////////////wPoAAAAAP// //////////////////////////8D6AAAOEJJTQQIBkd1aWRlcwAAAAAQAAAAAQAA AkAAAAJAAAAAADhCSU0EHg1VUkwgb3ZlcnJpZGVzAAAABAAAAAA4QklNBBoGU2xp Y2VzAAAAAG0AAAAGAAAAAAAAAAAAAABGAAAALQAAAAYAYgBlAG4AZABlAHIAAAAB AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAC0AAABGAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADhCSU0EERFJQ0MgVW50YWdnZWQgRmxhZwAA AAEBADhCSU0EFBdMYXllciBJRCBHZW5lcmF0b3IgQmFzZQAAAAQAAAADOEJJTQQM FU5ldyBXaW5kb3dzIFRodW1ibmFpbAAAA94AAAABAAAALQAAAEYAAACIAAAlMAAA A8IAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAM CAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwM DAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwM DAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABGAC0DASIAAhEB AxEB/90ABAAD/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCES MQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRF wqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dX Z3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRSh sUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD 03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMB AAIRAxEAPwDs0kkkmNhvO8AxDiQNdZH7wU0BsDJcY1dpPwAKOkpSSSSSn//Q7NRc 8NgQS48NHJUlGnVgefpP1Pw/NCQY0TWy7dLvUEu27dNxG3bu/dUw9wgWt2E6AgyJ +KKkQHAg6g6EI0pZJQrnbBMlpLZ+Cmgp/9HsbP5t/wDVP5E4IbWCeAAmeJY4eIIT A+2kniWz9yIY2Z3gS4Bo8yAmLj2LPm8JnOcLHRV6z9wZtn6LCP5yChZfSMGwh+zY 4uEhmgd5QhxappmCWSS5jwST7SJE/wDVKe5u3dOniqubVjfslzn0/Z9k+k06ODgY br/LVX1Lv2WbJO+AZ78fSStVP//S7JRrANDQ7jaAZU0BzZqrLm+o1rvc3iYJ939l yIY2VgrdG6wwNATBj+1CiaajqbTLdZnhJ1zDUB7wfUHDgfzv6yd1zd9waHuJ2gDc P/Je5C/BNMWY1b/c/wDSQTt3a6eKL6bNu2NOfOVJrg4Bw4KdJD//0+zQgGkn03Oa Z12zE/8AUr58SSDG/QhaRo97CfFwbKbY46tshvhWBP8A0ZcvnxJFT9DV7Njdn0Y0 Ul87pIKf/9k4QklNBCEaVmVyc2lvbiBjb21wYXRpYmlsaXR5IGluZm8AAAAAVQAA AAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8A YgBlACAAUABoAG8AdABvAHMAaABvAHAAIAA2AC4AMAAAAAEAOEJJTQQGDEpQRUcg UXVhbGl0eQAAAAAHAAgAAAABAQD/7gAOQWRvYmUAZEAAAAAB/9sAhAABAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgID AwMDAwMDAwMDAQEBAQEBAQEBAQECAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCABGAC0DAREAAhEBAxEB/90A BAAG/8QBogAAAAYCAwEAAAAAAAAAAAAABwgGBQQJAwoCAQALAQAABgMBAQEAAAAA AAAAAAAGBQQDBwIIAQkACgsQAAIBAwQBAwMCAwMDAgYJdQECAwQRBRIGIQcTIgAI MRRBMiMVCVFCFmEkMxdScYEYYpElQ6Gx8CY0cgoZwdE1J+FTNoLxkqJEVHNFRjdH YyhVVlcassLS4vJkg3SThGWjs8PT4yk4ZvN1Kjk6SElKWFlaZ2hpanZ3eHl6hYaH iImKlJWWl5iZmqSlpqeoqaq0tba3uLm6xMXGx8jJytTV1tfY2drk5ebn6Onq9PX2 9/j5+hEAAgEDAgQEAwUEBAQGBgVtAQIDEQQhEgUxBgAiE0FRBzJhFHEIQoEjkRVS oWIWMwmxJMHRQ3LwF+GCNCWSUxhjRPGisiY1GVQ2RWQnCnODk0Z0wtLi8lVldVY3 hIWjs8PT4/MpGpSktMTU5PSVpbXF1eX1KEdXZjh2hpamtsbW5vZnd4eXp7fH1+f3 SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIR AxEAPwDZg9+6CXXR+n/Gr/71z7917pNrmphlqOilTG/aZOqylDj1p69Zs1FU4aBq msnyuOA1UePqEUiB7ktdSeHX3YqQoavHrdMVr0owPza3H+2/P/E+69a65e/de697 917r/9DZg9+6CXXR+nv3DrR+zoMMcaSDsbLTJBTpV5Oeox01UIo/uZxQbfxGQWAz qnlZY1sdJNvagr/iyNT8VP2Dqi/EVBqKf5ehPv8A7x7T9Odd+/de697917r/0dl/ 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 1XuB7SGtTXj1fz6efeut9f/Z ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=new.css Content-Type: text/css; name=new.css Content-Location: http://netsago.org/design/new.css Content-Transfer-Encoding: 8bit body { background-color : #ecf0ef; font-weight: normal; font-size : 14px; height : 100%; margin : 0; padding : 0; } a.menu { font-size: 13px; text-decoration : none; color : #191818; } a { color : #191818; } a:hover { color : #2f5c63; } .zm { font-weight: bold; font-size : 14px; margin-top : 5px; background-image : url(zm.gif); background-color : #aebcb8; } .zcm { font-weight : bold; font-size : 14px; margin-top : 5px; background-image : url(zcm.gif); background-color : #acc1bb; } .zc { font-weight: bold; font-size : 14px; margin-top : 5px; background-image : url(zc.gif); background-color : #b8c6c2; } .cm { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 14px; padding-left : 5px; background-color : #c3d0cc; } .counter { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 14px; padding-left : 5px; background-color : #c3d0cc; BackGround-Image: url(bender.jpg); BackGround-position: center top; BackGround-Repeat: no-repeat; } .ccm { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 12px; padding-left : 5px; background-color : #c3d0cc; } .cc { font-family: Times New Roman, Times, serif; font-weight: normal; font-size : 14px; padding-left : 5px; background-color : #c3d0cc; } .niztab { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-weight : bold; font-size : 11px; color : white; background-color : black; } input { border : 1px solid #4d5d6d; } #topper { position : relative; height : 100%; } html > body #topper { height : auto; min-height : 100%; } .f00t { position : absolute; bottom : 0; width : 100%; } .wtext { color : white; } .ctext { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 15px; } textarea { border : 1px solid #4d5d6d; } TABLE.form { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 11px; } FONT.norm { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 11px; } A.norm { font-family : Verdana, Arial, Clean, Helvetica, sans-serif; font-size : 11px; } font.text { font-family: Lucida Console, Courier New, Geneva, Courier, Clean; font-size: 12px; } table.norm { font-family: Verdana, Arial, Clean, Helvetica, sans-serif; font-size: 11px; } table.doc { font-family: Lucida Console, Courier New, Geneva, Courier, Clean; font-size: 13px; background-color: #F1F2EC; } pre { width:500px; overflow:auto; } ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=favicon.ico Content-Type: image/x-icon; name=favicon.ico Content-Location: http://netsago.org/favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv 8Ozv8Ozv8Ozv8Ozv8OzKzcLBxLjv8Ozv8Ozv8Ozv8Ozv8Ozv8Oy4u66vsqOvsqPm 5+Lv8Ozv8Ozv8Ozv8OyvsqNlbFDm5+Lv8Ozv8Ozv8Ozm5+KTmIRlbFBlbFBlbFCv sqPv8Ozv8Ozv8Ozv8OzKzcJlbFDBxLjv8Ozv8Ozm5+KBhm9lbFBlbFBlbFBlbFCT mITv8Ozv8Ozv8Ozv8Ozm5+JlbFClqpnv8OzT1s1udVplbFCcoY7BxLhlbFBlbFBl bFDv8Ozv8Ozv8Ozv8Ozv8OyBhm+Bhm/T1s1udVplbFCvsqPv8Ozv8OxlbFBlbFBl bFDKzcLv8Ozv8Ozv8Ozv8OylqpllbFBudVpudVrKzcLv8Ozv8Ozv8OyKj3plbFBl bFCvsqPv8Ozv8Ozv8Ozv8OzKzcJlbFCKj3rd3tfv8Ozv8Ozv8Ozv8OyvsqNlbFBl bFCKj3rv8Ozv8Ozv8Ozv8Ozv8OzT1s3v8Ozv8Ozv8Ozv8Ozv8Ozv8OzBxLhlbFBl bFBlbFDv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozm5+JlbFBl bFBlbFDT1s3v8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8OyBhm9l bFBlbFCvsqPv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8OycoY5l bFBlbFCcoY7v8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Oy4u65l bFBlbFBudVrd3tfv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozd3tdl bFBlbFBlbFBlbFClqpnv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8OzB xLivsqOvsqOvsqPBxLjv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv8Ozv 8Ozv8Ozv8Ozv8Ozv8OwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=main.js Content-Type: text/javascript; charset=windows-1251; name=main.js Content-Location: http://www.netsago.org/javascript/main.js Content-Transfer-Encoding: 8bit function showBlock(id) { if (document.getElementById(id).style.display == 'none') { document.getElementById(id).style.display='inline'; } else { document.getElementById(id).style.display = 'none'; } } ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=logo.gif Content-Type: image/gif; name=logo.gif Content-Location: http://netsago.org/design/logo.gif Content-Transfer-Encoding: Base64 R0lGODlhxgFGAOYAAOnu7efs6+vv7uLp5+Tq6L3Jxuru7cLNyp2uqqOyr+Xr6ujt 63eNh3qPiuXr6brHxOPq6Ojt7Obs6sXPzNfg3Vp0bmN9dm2Ff8TPzIqemae2suLn 5niOiYCVkLG/u5Smodfe3W+GgVp1bs7X1YSYk83W07jEwY6hnJ+vq667uGV+d7bD wMDLyZ6vqrvIxNXd25mqpXmPicnS0JaopJ6vq3uRi2+GgJeppGR9d73Kxt/l5MTO zM/X1YKXkt3j4ldybL3IxZeopKKxrsrU0tPb2b/Kx7G/vMLMyWN8dsHMyay6t4GW kW6FgL3Jx4yfm6GxrKu5tcHLyYyfmr/LyGeAeouemaGwrMDMydDZ17fDwKOyrlBs ZeHo5uzw7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADGAUYAAAf/gF2Cg4SFhoeIiYqLjI2O j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+ v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXWnAYB2tvc3dsCwgIAC97l5ufm1+rrvQYE XPDx8vPyEr8ACgP0+/z9/lwB2AkcKAvAv3/geCk4yLDhvIAEI0pEtdAhPQC8JFjc eDDCxI8gQenjGI+XQZIo5xEIybLlJQMpudi7dNLfJQcxYzpI6LKnT0YBUEKASPOg JQE5hXr8ybSpIQgWByhYwBNTzX6WgiYlcG4BgK9gqzod+xOpQwliM13lZwlnUi47 /8nKnYsowllEAsgR2LtXG0ZGVzF02EK4sGEVGyCN9PcgAwPDkCNL3mLCUrYAfPcq CED1kYAACvgGWKrJgN7MEgIASEu3dcWDA8R+XsxP6l9DX7VyoVBhsuEUj2D+0+C7 uOQEkwTkgx2A9SAB7/YNWCBIeL/bhWYfdEC9tfcutP0pKBQg/D8Cael5ME64siO7 /kawn79FBIhIAjRGJVrIgPl5CuT3D3aDlBcVgd81ZRZD3XUBHUkDkCYIPR+wFwIk uvFTIX3FNVBCJAZARdJ4TzFEwH/yIPjaRjMl6FSGCA0iIkoNdkHPBb5ZgIAMkcDX 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 mI3auI3c2I3eKAiBAAA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=go.gif Content-Type: image/gif; name=go.gif Content-Location: http://netsago.org/design/go.gif Content-Transfer-Encoding: Base64 R0lGODdhCwALAKU3AKm2saq2sqm3s6q3s6q4s6u4tKy4tK25tq66tq66t6+6t667 t7C7uLC8uK+9uLG8uLC9ubO+urO+u7TAvLXAvLbAvLbAvbbBvLbBvbbBvrfBvbfC v7jCvrnDv7nDwLrEwLrEwbzGw73Gw73GxL3HxL7HxL7Ixb/Ixb/Ixr/JxcDJxsDJ x8HJx8HKx8LKyMLMycbNy8bOy8bOzMfOzMfPzMfPzcjPzf////////////////// /////////////////ywAAAAACwALAAAGYECb0Eaj1YbDmStlOr2OQtgJlLlsQi0o CxRZIBqU0MsWI2UWhkHh0UHVYqEJQgAIJDgnmkxkYQwABBAcKEYqHhIKBw4VHy5C MiUeGhgcHygzQzIrIyIkLDBINjUyMTFIQQA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=rus_small.gif Content-Type: image/gif; name=rus_small.gif Content-Location: http://netsago.org/design/rus_small.gif Content-Transfer-Encoding: Base64 R0lGODlhEgAMAKIAAAAAAP///0RJyerv7ehJR////wAAAAAAACH5BAEAAAUALAAA AAASAAwAAAMZOLrc/jDK6YS9OOvNu/8aIY5kaZ5oqq5mAgA7 ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=rss.gif Content-Type: image/gif; name=rss.gif Content-Location: http://netsago.org/design/rss.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAMQAAAAAAP///+rv7err5urn3+ni2Oje0ejXw+fPtefTvOjayuW7 keXCoOOufeSyhOS2i+W+mebGp+fKrv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAABMALAAAAAAQABAAAAVr4DQ5TWmejjierJmSD4Iw ZNvUkKAPx2OXCwNBJxhEfqbHgXhs5QwSx6Kga55yOxp14ENJFETGQnf4LQZFR0JX MyUMi7EA8ahedYbGstCgIk51AgoNEToNBgJ5N0ARMDKECEcpSCwqbTYpEyEAOw== ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=community.gif Content-Type: image/gif; name=community.gif Content-Location: http://www.livejournal.com/img/community.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQALMAACcdGFM/N39gUoyGgu4pIf88J+t9M9KHaf/SFP/xBv/KU//N rv/m3//38///7////yH5BAEAAA8ALAAAAAAQABAAAARQ8Mn5jKV4ijEEyNjWfdlR SBwyBNIpEYUxIQkyGQXxwORD26jcQ1DocQSTQYG1oRwpANZjgKFCM5bsBTQteL1I bodABoS5G4KH6+ywq++4JAIAOw== ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=button1-share.gif Content-Type: image/gif; name=button1-share.gif Content-Location: http://s7.addthis.com/button1-share.gif Content-Transfer-Encoding: Base64 R0lGODlhfQAQAMQfAF+25dvZ12SsPeexZ5KSkh0g/7DP4/zIBOaymvrLUviSEba1 tairpurq6sPGyBqS0+BKCqDGX/DHnsbVqPz8/PPz8/9pOvb29vr6+u/v7+zs7Ojo 6MDAwAAAAP///////yH5BAEAAB8ALAAAAAB9ABAAAAX/4PdxZGmeaKqubOu+cMyJ Y+DdeK7vfO//wKBwOAzMODaicslsOolGDs5CrVKf2OZluy14vb4FY7zgBRCSCpF0 s7ot2fiQ2/0WdIu8p3zj5wIQgQMbQ2weVm1VQB2MOB2Ojo03jJIelI9MdBd2dzgE OGM3AQR+NwgQCgoIERECAkCGiIeKPpiWk5C3uLq6tlp0nDmfHhsEAQEOycNTqQoT rK6wUrM7V7U7tpjZu71YmsGeHg0cBBfJDsU5FwsGDhLPrQzSFBTWOVT0+fr0lPmX HfwuBWTkj+C+gwgp/Duxj4BDEhkqaBijz8ADAAACvHsWIGE+EhgwyLISsqTJkx1C 2qZUybJlypUtT8qcqfLSCZkEQnLIkCEAg5MALmZMQDQBTZMktoysoklTBy5PL0SV umVq1KtQm2rdKtWmCU0cGHC4sHNBgAWaHqgFIIHogQFcuZCoUOGNFbp489KlhLdD 371/K/gFLJiv3sOIF5rQK4VDhbJn9ToIYMBAggMHFKRBnBciT7sWeIoeTbq06dOo U59WXIK0QwIZXjtEHWCAbdIdMuTOzZNEANUaggsfTry48ePIkytfzrw5cSM1Nkif Tr269evYs2vfzr27d+/QRcgYT768+fMsRIQAADs= ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=addthis_widget.js Content-Type: application/x-javascript; name=addthis_widget.js Content-Location: http://s7.addthis.com/js/152/addthis_widget.js Content-Transfer-Encoding: Base64 LyogKGMpIDIwMDgsIDIwMDksIDIwMTAgQWRkIFRoaXMsIExMQyAqLwp2YXIgYWRk dGhpc19jb25mPXt2ZXI6MTUyfTtmdW5jdGlvbiBhZGR0aGlzX29ubW91c2VvdmVy KGIsZixkLGMsaCxhLGcpe2lmKGgpe2FkZHRoaXNfY29uZmlnLnVzZXJuYW1lPWh9 aWYoYSl7YWRkdGhpc19sYW5ndWFnZT1hfWFkZHRoaXNfY29udGVudD1nfHwiIjty ZXR1cm4gYWRkdGhpc19vcGVuKGIsInNoYXJlIixkLGMpfWZ1bmN0aW9uIGFkZHRo aXNfb25tb3VzZW91dCgpe2FkZHRoaXNfY2xvc2UoKX1mdW5jdGlvbiBhZGR0aGlz X3RvKGEpe3JldHVybiBhZGR0aGlzX3NlbmR0byhhKX1mdW5jdGlvbiBhZGR0aGlz X2ludm9rZShlLGMsZCxmKXthZGR0aGlzX2NvbmZpZy51c2VybmFtZT1mfHxfYXRl LnB1YigpO2FkZHRoaXNfc2hhcmUudXJsPShjfHxiLmFkZHRoaXNfdXJsKTthZGR0 aGlzX3NoYXJlLnRpdGxlPShkfHxiLmFkZHRoaXNfdGl0bGUpO3ZhciBiPXdpbmRv dyxnPWFkZHRoaXNfc2hhcmUudXJsLnRvTG93ZXJDYXNlKCksYT1hZGR0aGlzX3No YXJlLnRpdGxlLnRvTG93ZXJDYXNlKCk7aWYoZz09PSIifHxnPT09Ilt1cmxdIil7 YWRkdGhpc19zaGFyZS51cmw9bG9jYXRpb24uaHJlZn1pZihhPT09IiJ8fGE9PT0i W3RpdGxlXSIpe2FkZHRoaXNfc2hhcmUudGl0bGU9ZG9jdW1lbnQudGl0bGV9X2F0 ZS5hcyhlKTtyZXR1cm4gZmFsc2V9O2lmKCF3aW5kb3cuX2F0ZSl7dmFyIF9hdGQ9 Ind3dy5hZGR0aGlzLmNvbS8iLF9hdHI9Ii8vczcuYWRkdGhpcy5jb20vIixfYXRu PSIvL2wuYWRkdGhpc2Nkbi5jb20vIixfZXVjPWVuY29kZVVSSUNvbXBvbmVudCxf ZHVjPWRlY29kZVVSSUNvbXBvbmVudCxfYXRjPXtkcjowLHZlcjoyNTAsbG9jOjAs ZW5vdGU6IiIsY3dhaXQ6NTAwLHRhbXA6LTEseGFtcDowLGNhbXA6MSx2YW1wOjEs ZmFtcDowLjAyLHBhbXA6MC4yLGRhbXA6MSxhYmY6ISF3aW5kb3cuYWRkdGhpc19k b19hYn07KGZ1bmN0aW9uKCl7dHJ5e3ZhciBGPXdpbmRvdy5sb2NhdGlvbjtpZihG LnByb3RvY29sLmluZGV4T2YoImZpbGUiKT09PTApe19hdHI9Imh0dHA6IitfYXRy fWlmKEYuaG9zdG5hbWUuaW5kZXhPZigibG9jYWxob3N0IikhPS0xKXtfYXRjLmxv Yz0xfX1jYXRjaChMKXt9dmFyIEo9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2Vy Q2FzZSgpLE09ZG9jdW1lbnQsdD13aW5kb3csSD1NLmxvY2F0aW9uLE89e3dpbjov d2luZG93cy8udGVzdChKKSx4cDovd2luZG93cyBudCA1LjEvLnRlc3QoSil8fC93 aW5kb3dzIG50IDUuMi8udGVzdChKKSxvc3g6L29zIHgvLnRlc3QoSiksY2hyOi9j aHJvbWUvLnRlc3QoSiksaXBoOi9pcGhvbmUvLnRlc3QoSiksaXBhOi9pcGFkLy50 ZXN0KEopLHNhZjovc2FmYXJpLy50ZXN0KEopLHdlYjovd2Via2l0Ly50ZXN0KEop LG9wcjovb3BlcmEvLnRlc3QoSiksbXNpOigvbXNpZS8udGVzdChKKSkmJiEoL29w ZXJhLy50ZXN0KEopKSxmZng6L2ZpcmVmb3gvLnRlc3QoSiksZmYyOi9maXJlZm94 XC8yLy50ZXN0KEopLGllNjovbXNpZSA2LjAvLnRlc3QoSiksaWU3Oi9tc2llIDcu MC8udGVzdChKKSxtb2Q6LTF9LGY9e3ZzdDpbXSxyZXY6Ijc5MjkyIixicm86Tyxz aG93OjEsZGw6SCx1cG06ISF0LnBvc3RNZXNzYWdlJiYoIiIrdC5wb3N0TWVzc2Fn ZSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikhPT0tMSxj YW1wOl9hdGMuY2FtcC1NYXRoLnJhbmRvbSgpLHhhbXA6X2F0Yy54YW1wLU1hdGgu cmFuZG9tKCksdmFtcDpfYXRjLnZhbXAtTWF0aC5yYW5kb20oKSxwYW1wOl9hdGMu cGFtcC1NYXRoLnJhbmRvbSgpLGFmYW1wOl9hdGMuYWZhbXAtTWF0aC5yYW5kb20o KSxhYjoiLSIsc2VxOjEsaW5zdDoxLHdhaXQ6NTAwLHRtbzpudWxsLGN2dDpbXSxh dnQ6bnVsbCxzdHRtOm5ldyBEYXRlKCkuZ2V0VGltZSgpLG1heDo0Mjk0OTY3Mjk1 LHNpZDowLHN1YjohIXdpbmRvdy5hdF9zdWIsZGJtOjAsdWlkOm51bGwsc3B0OiJz dGF0aWMvcjA3L3dpZGdldDIxLnBuZyIsYXBpOnt9LGltZ3o6W10saGFzaDp3aW5k b3cubG9jYXRpb24uaGFzaH07TS5jZT1NLmNyZWF0ZUVsZW1lbnQ7TS5nbj1NLmdl dEVsZW1lbnRzQnlUYWdOYW1lO3dpbmRvdy5fYXRlPWY7dmFyIHU9ZnVuY3Rpb24o cixwLHEsZCl7aWYoIXIpe3JldHVybiBxfWlmKHIgaW5zdGFuY2VvZiBBcnJheXx8 KHIubGVuZ3RoJiYodHlwZW9mIHIhPT0iZnVuY3Rpb24iKSkpe2Zvcih2YXIgbD0w LGE9ci5sZW5ndGgsYj1yWzBdO2w8YTtiPXJbKytsXSl7cT1wLmNhbGwoZHx8cixx LGIsbCxyKX19ZWxzZXtmb3IodmFyIGUgaW4gcil7cT1wLmNhbGwoZHx8cixxLHJb ZV0sZSxyKX19cmV0dXJuIHF9LEE9QXJyYXkucHJvdG90eXBlLnNsaWNlLEM9ZnVu Y3Rpb24oYil7cmV0dXJuIEEuYXBwbHkoYixBLmNhbGwoYXJndW1lbnRzLDEpKX0s Qj1mdW5jdGlvbihhKXtyZXR1cm4oIiIrYSkucmVwbGFjZSgvKF5ccyt8XHMrJCkv ZywiIil9LEs9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdShDKGFyZ3VtZW50cywxKSxm dW5jdGlvbihlLGQpe3JldHVybiB1KGQsZnVuY3Rpb24ocCxsLGkpe2lmKHApe3Bb aV09bH1yZXR1cm4gcH0sZSl9LGEpfSxtPWZ1bmN0aW9uKGIsYSl7cmV0dXJuIHUo YixmdW5jdGlvbihpLGUsZCl7ZD1CKGQpO2lmKGQpe2kucHVzaChfZXVjKGQpKyI9 IitfZXVjKEIoZSkpKX1yZXR1cm4gaX0sW10pLmpvaW4oYXx8IiYiKX0saj1mdW5j dGlvbihiLGEpe3JldHVybiB1KChifHwiIikuc3BsaXQoYXx8IiYiKSxmdW5jdGlv bihwLHIpe3RyeXt2YXIgbD1yLnNwbGl0KCI9IiksaT1CKF9kdWMobFswXSkpLGQ9 QihfZHVjKGwuc2xpY2UoMSkuam9pbigiPSIpKSk7aWYoaSl7cFtpXT1kfX1jYXRj aChxKXt9cmV0dXJuIHB9LHt9KX0sUT1mdW5jdGlvbigpe3ZhciBhPUMoYXJndW1l bnRzLDApLGQ9YS5zaGlmdCgpLGI9YS5zaGlmdCgpO3JldHVybiBmdW5jdGlvbigp e3JldHVybiBkLmFwcGx5KGIsYS5jb25jYXQoQyhhcmd1bWVudHMsMCkpKX19LEc9 ZnVuY3Rpb24oYixlLGEsZCl7aWYoIWUpe3JldHVybn1pZih3ZSl7ZVsoYj8iZGV0 YWNoIjoiYXR0YWNoIikrIkV2ZW50Il0oIm9uIithLGQpfWVsc2V7ZVsoYj8icmVt b3ZlIjoiYWRkIikrIkV2ZW50TGlzdGVuZXIiXShhLGQsZmFsc2UpfX0saz1mdW5j dGlvbihkLGEsYil7RygwLGQsYSxiKX0sZz1mdW5jdGlvbihkLGEsYil7RygxLGQs YSxiKX0sYz17cmVkdWNlOnUsc2xpY2U6QyxzdHJpcDpCLGV4dGVuZDpLLHRvS1Y6 bSxmcm9tS1Y6aixiaW5kOlEsbGlzdGVuOmssdW5saXN0ZW46Z307Zi51dGlsPWM7 SyhmLGMpOyhmdW5jdGlvbihyLHcsUil7dmFyIHAsVD1yLnV0aWw7ZnVuY3Rpb24g cyhXLFYsWSxVLFgpe3RoaXMudHlwZT1XO3RoaXMudHJpZ2dlclR5cGU9Vnx8Vzt0 aGlzLnRhcmdldD1ZfHxVO3RoaXMudHJpZ2dlclRhcmdldD1VfHxZO3RoaXMuZGF0 YT1YfHx7fX1ULmV4dGVuZChzLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6cyxidWJi bGVzOmZhbHNlLHByZXZlbnREZWZhdWx0OlQubm9vcCxzdG9wUHJvcGFnYXRpb246 VC5ub29wLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVj dG9yKHRoaXMudHlwZSx0aGlzLnRyaWdnZXJUeXBlLHRoaXMudGFyZ2V0LHRoaXMu dHJpZ2dlclRhcmdldCxULmV4dGVuZCh7fSx0aGlzLmRhdGEpKX19KTtmdW5jdGlv biBpKFUsVil7dGhpcy50YXJnZXQ9VTt0aGlzLnF1ZXVlcz17fTt0aGlzLmRlZmF1 bHRFdmVudFR5cGU9Vnx8c31mdW5jdGlvbiBhKFUpe3ZhciBWPXRoaXMucXVldWVz O2lmKCFWW1VdKXtWW1VdPVtdfXJldHVybiBWW1VdfWZ1bmN0aW9uIHEoVSxWKXt0 aGlzLmdldFF1ZXVlKFUpLnB1c2goVil9ZnVuY3Rpb24gZShWLFcpe3ZhciBYPXRo aXMuZ2V0UXVldWUoViksVT1YLmluZGV4T2YoVyk7aWYoVSE9PS0xKXtYLnNwbGlj ZShVLDEpfX1mdW5jdGlvbiBiKFUsWSxYLFcpe3ZhciBWPXRoaXM7aWYoIVcpe3Nl dFRpbWVvdXQoZnVuY3Rpb24oKXtWLmRpc3BhdGNoRXZlbnQobmV3IFYuZGVmYXVs dEV2ZW50VHlwZShVLFUsWSxWLnRhcmdldCxYKSl9LDEwKX1lbHNle1YuZGlzcGF0 Y2hFdmVudChuZXcgVi5kZWZhdWx0RXZlbnRUeXBlKFUsVSxZLFYudGFyZ2V0LFgp KX19ZnVuY3Rpb24gUyhWKXtmb3IodmFyIFc9MCxZPVYudGFyZ2V0LFg9dGhpcy5n ZXRRdWV1ZShWLnR5cGUpLFU9WC5sZW5ndGg7VzxVO1crKyl7WFtXXS5jYWxsKFks Vi5jbG9uZSgpKX19ZnVuY3Rpb24gZChWKXtpZighVil7cmV0dXJufWZvcih2YXIg VSBpbiBsKXtWW1VdPVQuYmluZChsW1VdLHRoaXMpfXJldHVybiBWfXZhciBsPXtj b25zdHJ1Y3RvcjppLGdldFF1ZXVlOmEsYWRkRXZlbnRMaXN0ZW5lcjpxLHJlbW92 ZUV2ZW50TGlzdGVuZXI6ZSxkaXNwYXRjaEV2ZW50OlMsZmlyZTpiLGRlY29yYXRl OmR9O1QuZXh0ZW5kKGkucHJvdG90eXBlLGwpO3IuZXZlbnQ9e1BvbHlFdmVudDpz LEV2ZW50RGlzcGF0Y2hlcjppfX0pKGYsZi5hcGksZik7Zi5lZD1uZXcgZi5ldmVu dC5FdmVudERpc3BhdGNoZXIoZik7dmFyIG49e2lzQm91bmQ6MCxpc1JlYWR5OjAs cmVhZHlMaXN0OltdLG9uUmVhZHk6ZnVuY3Rpb24oKXtpZighbi5pc1JlYWR5KXtu LmlzUmVhZHk9MTt2YXIgYT1uLnJlYWR5TGlzdC5jb25jYXQod2luZG93LmFkZHRo aXNfb25sb2FkfHxbXSk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe2FbYl0u Y2FsbCh3aW5kb3cpfW4ucmVhZHlMaXN0PVtdfX0sYWRkTG9hZDpmdW5jdGlvbihh KXt2YXIgYj10Lm9ubG9hZDtpZih0eXBlb2YgdC5vbmxvYWQhPSJmdW5jdGlvbiIp e3Qub25sb2FkPWF9ZWxzZXt0Lm9ubG9hZD1mdW5jdGlvbigpe2lmKGIpe2IoKX1h KCl9fX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoeC5pc0JvdW5kfHxfYXRjLnhv bCl7cmV0dXJufXguaXNCb3VuZD0xO2lmKE0uYWRkRXZlbnRMaXN0ZW5lciYmIU8u b3ByKXtNLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHgub25S ZWFkeSxmYWxzZSl9dmFyIGE9d2luZG93LmFkZHRoaXNfcHJvZHVjdDtpZihhJiZh LmluZGV4T2YoImYiKT4tMSl7eC5vblJlYWR5KCk7cmV0dXJufWlmKE8ubXNpJiZ3 aW5kb3c9PXRvcCl7KGZ1bmN0aW9uKCl7aWYoeC5pc1JlYWR5KXtyZXR1cm59dHJ5 e00uZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goZCl7c2V0 VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn14Lm9uUmVhZHkoKX0p KCl9aWYoTy5vcHIpe00uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRl ZCIsZnVuY3Rpb24oKXtpZih4LmlzUmVhZHkpe3JldHVybn1mb3IodmFyIGQ9MDtk PE0uc3R5bGVTaGVldHMubGVuZ3RoO2QrKyl7aWYoTS5zdHlsZVNoZWV0c1tkXS5k aXNhYmxlZCl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn19 eC5vblJlYWR5KCl9LGZhbHNlKX1pZihPLnNhZil7dmFyIGI7KGZ1bmN0aW9uKCl7 aWYoeC5pc1JlYWR5KXtyZXR1cm59aWYoTS5yZWFkeVN0YXRlIT0ibG9hZGVkIiYm TS5yZWFkeVN0YXRlIT0iY29tcGxldGUiKXtzZXRUaW1lb3V0KGFyZ3VtZW50cy5j YWxsZWUsMCk7cmV0dXJufWlmKGI9PT11bmRlZmluZWQpe3ZhciBkPU0uZ24oImxp bmsiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7aWYoZFtlXS5nZXRBdHRy aWJ1dGUoInJlbCIpPT0ic3R5bGVzaGVldCIpe2IrK319dmFyIGw9TS5nbigic3R5 bGUiKTtiKz1sLmxlbmd0aH1pZihNLnN0eWxlU2hlZXRzLmxlbmd0aCE9Yil7c2V0 VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn14Lm9uUmVhZHkoKX0p KCl9eC5hZGRMb2FkKHgub25SZWFkeSl9LGFwcGVuZDpmdW5jdGlvbihiLGEpe3gu YmluZFJlYWR5KCk7aWYoeC5pc1JlYWR5KXtiLmNhbGwod2luZG93LFtdKX1lbHNl e3gucmVhZHlMaXN0LnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYi5jYWxsKHdpbmRv dyxbXSl9KX19fSx4PW4sUD1mO0soZix7cGxvOltdLGxhZDpmdW5jdGlvbihhKXtm LnBsby5wdXNoKGEpfX0pO0soZix7cHViOmZ1bmN0aW9uKCl7cmV0dXJuIF9ldWMo KHdpbmRvdy5hZGR0aGlzX2NvbmZpZ3x8e30pLnVzZXJuYW1lfHx3aW5kb3cuYWRk dGhpc19wdWJ8fCIiKX0saWd2OmZ1bmN0aW9uKGEsYil7aWYoIXQuYWRkdGhpc19z aGFyZSl7dC5hZGR0aGlzX3NoYXJlPXt9fWlmKCFhZGR0aGlzX3NoYXJlLnVybCl7 YWRkdGhpc19zaGFyZS51cmw9KHQuYWRkdGhpc191cmx8fGF8fCIiKS5zcGxpdCgi I3siKS5zaGlmdCgpfWlmKCFhZGR0aGlzX3NoYXJlLnRpdGxlKXthZGR0aGlzX3No YXJlLnRpdGxlPSh0LmFkZHRoaXNfdGl0bGV8fGJ8fCIiKS5zcGxpdCgiI3siKS5z aGlmdCgpfWlmKCF0LmFkZHRoaXNfY29uZmlnKXt0LmFkZHRoaXNfY29uZmlnPXt1 c2VybmFtZTp0LmFkZHRoaXNfcHVifX1lbHNle2lmKGFkZHRoaXNfY29uZmlnLmRh dGFfdXNlX2Nvb2tpZXM9PT1mYWxzZSl7X2F0Yy54Y2s9MX19fX0pO2lmKCFfYXRj Lm9zdCl7aWYoIXQuYWRkdGhpc19jb25mKXt0LmFkZHRoaXNfY29uZj17fX1mb3Io dmFyIEkgaW4gYWRkdGhpc19jb25mKXtfYXRjW0ldPWFkZHRoaXNfY29uZltJXX1f YXRjLm9zdD0xfShmdW5jdGlvbihiLGwsZSl7dmFyIHEscD1kb2N1bWVudCxhPWIu dXRpbDtiLmNrdj1hLmZyb21LVihwLmNvb2tpZSwiOyIpO2Z1bmN0aW9uIGkoZCl7 cmV0dXJuIGEuZnJvbUtWKHAuY29va2llLCI7IilbZF19aWYoIWIuY29va2llKXti LmNvb2tpZT17fX1iLmNvb2tpZS5yY2s9aX0pKGYsZi5hcGksZik7SyhmLHtxdHA6 W10seHRwOmZ1bmN0aW9uKCl7dmFyIGI9ZixkO3doaWxlKGQ9Yi5xdHAucG9wKCkp e2IudHJrKGQpfX0scGNzOltdLGFwYzpmdW5jdGlvbihiKXtiPWIuc3BsaXQoIi0i KS5zaGlmdCgpO2Zvcih2YXIgYT0wO2E8Zi5wY3MubGVuZ3RoO2ErKyl7aWYoZi5w Y3NbYV09PWIpe3JldHVybn19Zi5wY3MucHVzaChiKX0sZ2F0OmZ1bmN0aW9uKCl7 fSxhdGY6bnVsbCxnZXRfYXRzc2g6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudCxi PWYsaT1lLmdldEVsZW1lbnRCeUlkKCJfYXRzc2giKTtpZighaSl7aT1lLmNlKCJk aXYiKTtpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7aS5pZD0iX2F0c3NoIjti Lm9wcChpLnN0eWxlKTtlLmJvZHkuaW5zZXJ0QmVmb3JlKGksZS5ib2R5LmZpcnN0 Q2hpbGQpfXJldHVybiBpfSxjdGY6ZnVuY3Rpb24oaSl7dmFyIHA9ZG9jdW1lbnQs ZT13aW5kb3csYj1mLHMsbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMCks cT1iLmdldF9hdHNzaCgpO2lmKCFiLmJyby5tc2kpe3M9cC5jZSgiaWZyYW1lIik7 cy5pZD0iX2F0c3NoIitsfWVsc2V7aWYoYi5icm8uaWU2JiYhaSYmcC5sb2NhdGlv bi5wcm90b2NvbC5pbmRleE9mKCJodHRwcyIpPT0wKXtpPSJqYXZhc2NyaXB0Oicn In1xLmlubmVySFRNTD0nPGlmcmFtZSBpZD0iX2F0c3NoJytsKyciIHdpZHRoPSIx IiBoZWlnaHQ9IjEiIG5hbWU9Il9hdHNzaCcrbCsnIiAnKyhpPydzcmM9IicraSsn Iic6IiIpKyI+IjtzPXAuZ2V0RWxlbWVudEJ5SWQoIl9hdHNzaCIrbCl9Yi5vcHAo cy5zdHlsZSk7cy5mcmFtZWJvcmRlcj1zLnN0eWxlLmJvcmRlcj0wO3Muc3R5bGUu dG9wPXMuc3R5bGUubGVmdD0wO3JldHVybiBzfSxvZmY6ZnVuY3Rpb24oKXtyZXR1 cm4gTWF0aC5mbG9vcigobmV3IERhdGUoKS5nZXRUaW1lKCktZi5zdHRtKS8xMDAp LnRvU3RyaW5nKDE2KX0sb21zOmZ1bmN0aW9uKGQpe3ZhciBiPWY7aWYoZCYmZC5k YXRhJiZkLmRhdGEuc2VydmljZSl7aWYoIWIudXBtKXtpZihiLmRjcCl7cmV0dXJu fWIuZGNwPTF9Yi50cmsoe2dlbjozMDAsc2g6ZC5kYXRhLnNlcnZpY2V9KX19LG9t cDpmdW5jdGlvbihiLGQsZSl7dmFyIGE9e307aWYoYil7YS5zaD1ifWlmKGQpe2Eu Y209ZH1pZihlKXthLmNzPWV9Zi5pbWcoInNoIiwiMyIsbnVsbCxhKX0sdHJrOmZ1 bmN0aW9uKGUpe3ZhciBkPWYsaT1kLmRyLGI9KGQucmV2fHwiIik7aWYoIWUpe3Jl dHVybn1pZihpKXtpPWkuc3BsaXQoImh0dHA6Ly8iKS5wb3AoKX1lLnhjaz1fYXRj Lnhjaz8xOjA7ZS54eGw9MTtlLnNpZD1kLnNzaWQoKTtlLnB1Yj1kLnB1YigpO2Uu c3NsPWQuc3NsfHwwO2UuZHU9ZC50cnUoZC5kdXx8ZC5kbC5ocmVmKTtpZihkLmR0 KXtlLmR0PWQuZHR9aWYoZC5jYil7ZS5jYj1kLmNifWUubG5nPWQubG5nKCk7ZS52 ZXI9X2F0Yy52ZXI7aWYoIWQudXBtJiZkLnVpZCl7ZS51aWQ9ZC51aWR9ZS5wYz1k LnBjcy5qb2luKCIsIik7aWYoaSl7ZS5kcj1kLnRydShpKX1pZihkLmRoKXtlLmRo PWQuZGh9aWYoYil7ZS5yZXY9Yn1pZihkLnhmcil7aWYoZC51cG0pe2lmKGQuYXRm KXtkLmF0Zi5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKG0oZSksIioiKX19ZWxz ZXt2YXIgbD1kLmdldF9hdHNzaCgpO2Jhc2U9InN0YXRpYy9yMDcvc2gyMS5odG1s IisoZmFsc2U/Ij90PSIrbmV3IERhdGUoKS5nZXRUaW1lKCk6IiIpO2lmKGQuYXRm KXtsLnJlbW92ZUNoaWxkKGwuZmlyc3RDaGlsZCl9ZC5hdGY9ZC5jdGYoKTtkLmF0 Zi5zcmM9X2F0citiYXNlKyIjIittKGUpO2wuYXBwZW5kQ2hpbGQoZC5hdGYpfX1l bHNle2YucXRwLnB1c2goZSl9fSxpbWc6ZnVuY3Rpb24obCxyLGIscCxxKXtpZigh d2luZG93LmF0X3N1YiYmIV9hdGMueHRyKXt2YXIgZD1mLGU9cHx8e307ZS5ldnQ9 bDtpZihiKXtlLmV4dD1ifWQuYXZ0PWU7aWYocT09PTEpe2QueG1pKHRydWUpfWVs c2V7ZC5zeG0odHJ1ZSl9fX0sY3VpZDpmdW5jdGlvbigpe3JldHVybigoZi5zdHRt LzEwMDApJmYubWF4KS50b1N0cmluZygxNikrKCIwMDAwMDAwMCIrKE1hdGguZmxv b3IoTWF0aC5yYW5kb20oKSooZi5tYXgrMSkpKS50b1N0cmluZygxNikpLnNsaWNl KC04KX0sc3NpZDpmdW5jdGlvbigpe2lmKGYuc2lkPT09MCl7Zi5zaWQ9Zi5jdWlk KCl9cmV0dXJuIGYuc2lkfSxzdGE6ZnVuY3Rpb24oKXt2YXIgYj1mO3JldHVybiJB VC0iKyhiLnB1YigpP2IucHViKCk6InVua25vd24iKSsiLy0vIitiLmFiKyIvIiti LnNzaWQoKSsiLyIrKGIuc2VxKyspKyhiLnVpZCE9PW51bGw/Ii8iK2IudWlkOiIi KX0sY3N0OmZ1bmN0aW9uKGEpe3JldHVybiJDWE5JRD0yMDAwMDAxLjUyMTU0NTYw ODA1NDA0MzkwNyIrKGF8fDIpKyJOWEMifSxmY3Y6ZnVuY3Rpb24oYixhKXtyZXR1 cm4gX2V1YyhiKSsiPSIrX2V1YyhhKSsiOyIrZi5vZmYoKX0sY2V2OmZ1bmN0aW9u KGIsYSl7Zi5jdnQucHVzaChmLmZjdihiLGEpKTtmLnN4bSh0cnVlKX0sc3htOmZ1 bmN0aW9uKGEpe2lmKGYudG1vIT09bnVsbCl7Y2xlYXJUaW1lb3V0KGYudG1vKX1p ZihhKXtmLnRtbz1mLnN0bygiX2F0ZS54bWkoZmFsc2UpIixmLndhaXQpfX0seG1p OmZ1bmN0aW9uKHIpe3ZhciBiPWYscD1iLmRsP2IuZGwuaG9zdG5hbWU6IiI7aWYo Yi5jdnQubGVuZ3RoPjB8fGIuYXZ0KXtiLnN4bShmYWxzZSk7aWYoX2F0Yy54dHIp e3JldHVybn12YXIgbD1iLmF2dHx8e307bC5jZT1iLmN2dC5qb2luKCIsIik7Yi5j dnQ9W107Yi5hdnQ9bnVsbDtiLnRyayhsKTtpZihyKXt2YXIgcT1kb2N1bWVudCxl PXEuY2UoImlmcmFtZSIpO2UuaWQ9Il9hdGYiO2Yub3BwKGUuc3R5bGUpO3EuYm9k eS5hcHBlbmRDaGlsZChlKTtlPXEuZ2V0RWxlbWVudEJ5SWQoIl9hdGYiKX19fX0p O0soZix7X3JlYzpbXSxyZWM6ZnVuY3Rpb24oZSl7aWYoIWUpe3JldHVybn12YXIg cT1qKGUpLGI9ZixkPWIuYXRmLGw9Yi5fcmVjLHc7aWYocS5zc2gpe2Iuc3NoKHEu c3NoKX1pZihxLnVpZCl7Yi51aWQ9cS51aWR9aWYocS5kYm0pe2IuZGJtPXEuZGJt fWlmKHEucmR5KXtiLnhmcj0xO2IueHRwKCk7cmV0dXJufWZvcih2YXIgUj0wO1I8 bC5sZW5ndGg7UisrKXtsW1JdKHEpfX0seGZyOiFmLnVwbXx8IWYuYnJvLmZmeCxz c2g6ZnVuY3Rpb24oYil7Zi5nc3NoPTE7dmFyIGE9d2luZG93LmFkZHRoaXNfc3No PV9kdWMoYik7Zi5fc3NoPWEuc3BsaXQoIiwiKX0sY29tOmZ1bmN0aW9uKGEpe2lm KHdpbmRvdy5wYXJlbnQmJndpbmRvdy5wb3N0TWVzc2FnZSl7d2luZG93LnBhcmVu dC5wb3N0TWVzc2FnZShhLCIqIil9ZWxzZXtmLmlmbShhKX19LGlmbTpmdW5jdGlv bihiKXtpZihhZGR0aGlzX3dwbCl7dmFyIGQ9KGFkZHRoaXNfd3BsLnNwbGl0KCIj IikpWzBdO3dpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZj1kKyIjYXQiK2J9cmV0 dXJuIGZhbHNlfSxwbWg6ZnVuY3Rpb24oYSl7aWYoYS5vcmlnaW4uc2xpY2UoLTEy KT09Ii5hZGR0aGlzLmNvbSIpe2YucmVjKGEuZGF0YSl9fX0pO0soZix7bG5nOmZ1 bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGR0aGlzX2xhbmd1YWdlfHwod2luZG93 LmFkZHRoaXNfY29uZmlnfHx7fSkudWlfbGFuZ3VhZ2V8fChmLmJyby5tc2k/bmF2 aWdhdG9yLnVzZXJMYW5ndWFnZTpuYXZpZ2F0b3IubGFuZ3VhZ2UpfSxpd2I6ZnVu Y3Rpb24oYSl7dmFyIGI9e3RoOjEscGw6MSxzbDoxLGdsOjEsaHU6MSxpczoxLG5i OjEsc2U6MSxzdToxfTtyZXR1cm4gISFiW2FdfSxpdmw6ZnVuY3Rpb24oYSl7dmFy IGI9e2FmOjEsYWZyOiJhZiIsYXI6MSxhcmE6ImFyIixhejoxLGF6ZToiYXoiLGJl OjEsYnllOiJiZSIsYmc6MSxidWw6ImJnIixibjoxLGJlbjoiYm4iLGJzOjEsYm9z OiJicyIsY2E6MSxjYXQ6ImNhIixjczoxLGNlczoiY3MiLGN6ZToiY3MiLGN5OjEs Y3ltOiJjeSIsZGE6MSxkYW46ImRhIixkZToxLGRldToiZGUiLGdlcjoiZGUiLGVs OjEsZ3JlOiJlbCIsZWxsOiJlbGwiLGVzOjEsZXNsOiJlcyIsc3BhOiJzcGEiLGV0 OjEsZXN0OiJldCIsZXU6MSxmYToxLGZhczoiZmEiLHBlcjoiZmEiLGZpOjEsZmlu OiJmaSIsZm86MSxmYW86ImZvIixmcjoxLGZyYToiZnIiLGZyZToiZnIiLGdhOjEs Z2FlOiJnYSIsZ2RoOiJnYSIsZ2w6MSxnbGc6ImdsIixoZToxLGhlYjoiaGUiLGhp OjEsaGluOiJoaW4iLGhyOjEsY3JvOiJociIsaHU6MSxodW46Imh1IixpZDoxLGlu ZDoiaWQiLGlzOjEsaWNlOiJpcyIsaXQ6MSxpdGE6Iml0IixqYToxLGpwbjoiamEi LGtvOjEsa29yOiJrbyIsa3U6MSxsYjoxLGx0ejoibGIiLGx0OjEsbGl0OiJsdCIs bHY6MSxsYXY6Imx2IixtazoxLG1hYzoibWsiLG1hazoibWsiLG1uOjEsbWw6MSxt czoxLG1zYToibXMiLG1heToibXMiLG5iOjEsbmw6MSxubGE6Im5sIixkdXQ6Im5s IixubzoxLG5uOjEsbm5vOiJubyIsb2M6MSxvY2k6Im9jIixwbDoxLHBvbDoicGwi LHB0OjEscG9yOiJwdCIscm86MSxyb246InJvIixydW06InJvIixydToxLHJ1czoi cnUiLHNrOjEsc2xrOiJzayIsc2xvOiJzayIsc2w6MSxzbHY6InNsIixzcToxLGFs Yjoic3EiLHNyOjEsc2U6MSxzZXI6InNyIixzdToxLHN2OjEsc3ZlOiJzdiIsc3c6 MSxzd2U6InN2Iix0YToxLHRhbToidGEiLHRlOjEsdGVnOiJ0ZSIsdGg6MSx0aGE6 InRoIix0bDoxLHRnbDoidGwiLHRyOjEsdHVyOiJ0ciIsdWs6MSx1a3I6InVrIix1 cjoxLHVyZDoidXIiLHZpOjEsdmllOiJ2aSIsInpoLWhrIjoxLCJjaGktaGsiOiJ6 aC1oayIsInpoby1oayI6InpoLWhrIiwiemgtdHIiOjEsImNoaS10ciI6InpoLXRy IiwiemhvLXRyIjoiemgtdHIiLCJ6aC10dyI6MSwiY2hpLXR3IjoiemgtdHciLCJ6 aG8tdHciOiJ6aC10dyIsemg6MSxjaGk6InpoIix6aG86InpoIn07aWYoYlthXSl7 cmV0dXJuIGJbYV19YT1hLnNwbGl0KCItIikuc2hpZnQoKTtpZihiW2FdKXtpZihi W2FdPT09MSl7cmV0dXJuIGF9ZWxzZXtyZXR1cm4gYlthXX19cmV0dXJuIDB9LGd2 bDpmdW5jdGlvbihhKXt2YXIgYj1mLml2bChhKXx8ImVuIjtpZihiPT09MSl7Yj1h fXJldHVybiBifSxhbGc6ZnVuY3Rpb24oZSxkKXt2YXIgYT0oZXx8Zi5sbmcoKXx8 ImVuIikudG9Mb3dlckNhc2UoKSxiPWYuaXZsKGEpO2lmKGEuaW5kZXhPZigiZW4i KSE9PTAmJighZi5wbGx8fGQpKXtpZihiKXtpZihiIT09MSl7YT1ifWYucGxsPWYu YWpzKCJzdGF0aWMvcjA3L2xhbmcwMy8iK2ErIi5qcyIpfX19fSk7SyhmLHt0cmlt OmZ1bmN0aW9uKGEsYil7dHJ5e2E9YS5yZXBsYWNlKC9eW1xzXHUzMDAwXSt8W1xz XHUzMDAwXSskL2csIiIpO2lmKGIpe2E9X2V1YyhhKX19Y2F0Y2goYil7fXJldHVy biBhfHwiIn0sdHJsOltdLHRydTpmdW5jdGlvbihiLGEpe3ZhciBkPSIiO2lmKGIp e2Q9Yi5zdWJzdHIoMCwzMDApO2lmKGQhPWIpe2YudHJsLnB1c2goYSl9fXJldHVy biBkfSxzdG86ZnVuY3Rpb24oYixhKXtyZXR1cm4gc2V0VGltZW91dChiLGEpfSxv cHA6ZnVuY3Rpb24oYSl7YS53aWR0aD1hLmhlaWdodD0iMXB4IjthLnBvc2l0aW9u PSJhYnNvbHV0ZSI7YS56SW5kZXg9MTAwMDAwfSxqbHI6e30sYWpzOmZ1bmN0aW9u KGIsYSl7aWYoIWYuamxyW2JdKXt2YXIgZT1NLmNlKCJzY3JpcHQiKSxkPU0uZ24o ImhlYWQiKVswXXx8TS5kb2N1bWVudEVsZW1lbnQ7ZS5zcmM9KGE/IiI6X2F0cikr YjtkLmluc2VydEJlZm9yZShlLGQuZmlyc3RDaGlsZCk7Zi5qbHJbYl09MTtyZXR1 cm4gZX1yZXR1cm4gMX0samxvOmZ1bmN0aW9uKCl7dHJ5e3ZhciBxPWRvY3VtZW50 LGI9ZixwPWIubG5nKCksaT1mdW5jdGlvbihkKXt2YXIgYT1uZXcgSW1hZ2UoKTtm LmltZ3oucHVzaChhKTthLnNyYz1kfTtiLmFsZyhwKTtpZighYi5wbGQpe2lmKGIu YnJvLmllNil7aShfYXRyK2Iuc3B0KTtpKF9hdHIrInN0YXRpYy90MDAvbG9nbzE0 MTQuZ2lmIik7aShfYXRyKyJzdGF0aWMvdDAwL2xvZ284OC5naWYiKTtpZih3aW5k b3cuYWRkdGhpc19mZWVkKXtpKCJzdGF0aWMvcjA1L2ZlZWQwMC5naWYiLDEpfX1p ZihiLnBsbCYmIXdpbmRvdy5hZGR0aGlzX3RyYW5zbGF0aW9ucyl7Yi5zdG8oZnVu Y3Rpb24oKXtiLnBsZD1iLmFqcygic3RhdGljL3IwNy9tZW51NTguanMiKX0sMTAp fWVsc2V7Yi5wbGQ9Yi5hanMoInN0YXRpYy9yMDcvbWVudTU4LmpzIil9fX1jYXRj aChsKXt9fSxhbzpmdW5jdGlvbihiLGwsaSxkLGUsYSl7Zi5sYWQoWyJvcGVuIixi LGwsaSxkLGUsYV0pO2YuamxvKCk7cmV0dXJuIGZhbHNlfSxhYzpmdW5jdGlvbigp e30sYXM6ZnVuY3Rpb24oYixkLGEpe2YubGFkKFsic2VuZCIsYixkLGFdKTtmLmps bygpfX0pOyhmdW5jdGlvbihlLGwscSl7dmFyIHc9ZG9jdW1lbnQscj0xLGE9WyJj YmVhIiwia2trIiwienZ5cyIsInBoeiJdO2Z1bmN0aW9uIGIoZCl7cmV0dXJuIGQu cmVwbGFjZSgvW2EtekEtWl0vZyxmdW5jdGlvbihpKXtyZXR1cm4gU3RyaW5nLmZy b21DaGFyQ29kZSgoaTw9IloiPzkwOjEyMik+PShpPWkuY2hhckNvZGVBdCgwKSsx Myk/aTppLTI2KX0pfWZvcih2YXIgcD0wO3A8YS5sZW5ndGg7cCsrKXthW3BdPSIg IitiKGFbcF0pKyIgIn1mdW5jdGlvbiBzKGkpe3ZhciBUPTAsUztpPShpfHwiIiku dG9Mb3dlckNhc2UoKSsiICI7aWYoIWkpe3JldHVybiBUfWZvcih2YXIgZD0wO2Q8 YS5sZW5ndGg7ZCsrKXtTPWFbZF07aWYoaT09Uy5yZXBsYWNlKC8gL2csIiIpfHxp LmluZGV4T2YoUyk+LTF8fGkuaW5kZXhPZihTLnJlcGxhY2UoL14gL2csIiIpKT09 PTApe1R8PXJ9fXJldHVybiBUfWZ1bmN0aW9uIFIoKXt2YXIgVj0odC5hZGR0aGlz X3RpdGxlfHx3LnRpdGxlKSxTPXMoViksVT13LmFsbD93LmFsbC50YWdzKCJNRVRB Iik6dy5nZXRFbGVtZW50c0J5VGFnTmFtZT93LmdldEVsZW1lbnRzQnlUYWdOYW1l KCJNRVRBIik6bmV3IEFycmF5KCk7aWYoVSYmVS5sZW5ndGgpe2Zvcih2YXIgVD0w O1Q8VS5sZW5ndGg7VCsrKXt2YXIgZD1VW1RdfHx7fSxYPShkLm5hbWV8fCIiKS50 b0xvd2VyQ2FzZSgpLFc9ZC5jb250ZW50O2lmKFg9PSJkZXNjcmlwdGlvbiJ8fFg9 PSJrZXl3b3JkcyIpe1N8PXMoVyl9fX1yZXR1cm4gU31pZighZS5hZCl7ZS5hZD17 fX1lLmFkLmNsYT1SfSkoZixmLmFwaSxmKTsoZnVuY3Rpb24obCxwLHEpe3ZhciBl LHM9ZG9jdW1lbnQsUz1sLnV0aWwsYj1sLmV2ZW50LkV2ZW50RGlzcGF0Y2hlcix3 PTI1LGk9W107ZnVuY3Rpb24gcihWLFgsVSl7dmFyIGQ9W107ZnVuY3Rpb24gZCgp e2QucHVzaChhcmd1bWVudHMpfWZ1bmN0aW9uIFcoKXtVW1ZdPVg7d2hpbGUoZC5s ZW5ndGgpe1guYXBwbHkoVSxkLnNoaWZ0KCkpfX1kLnJlYWR5PVc7cmV0dXJuIGR9 ZnVuY3Rpb24gUihWKXtpZihWJiZWIGluc3RhbmNlb2YgYSl7aS5wdXNoKFYpfWZv cih2YXIgZD0wO2Q8aS5sZW5ndGg7KXt2YXIgVT1pW2RdO2lmKFUmJlUudGVzdCgp KXtpLnNwbGljZShkLDEpO2EuZmlyZSgibG9hZCIsVSx7cmVzb3VyY2U6VX0pfWVs c2V7ZCsrfX1pZihpLmxlbmd0aCl7c2V0VGltZW91dChSLHcpfX1mdW5jdGlvbiBh KFgsVSxXKXt2YXIgZD10aGlzLFY9bmV3IGIoZCk7Vi5kZWNvcmF0ZShWKS5kZWNv cmF0ZShkKTt0aGlzLnJlYWR5PWZhbHNlO3RoaXMubG9hZGluZz1mYWxzZTt0aGlz LmlkPVg7dGhpcy51cmw9VTtpZih0eXBlb2YoVyk9PT0iZnVuY3Rpb24iKXt0aGlz LnRlc3Q9V31lbHNle3RoaXMudGVzdD1mdW5jdGlvbigpe3JldHVybighIV93aW5k b3dbV10pfX1hLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKFkpe3Zh ciBaPVkucmVzb3VyY2U7aWYoIVp8fFouaWQhPT1kLmlkKXtyZXR1cm59ZC5sb2Fk aW5nPWZhbHNlO2QucmVhZHk9dHJ1ZTtWLmZpcmUoWS50eXBlLFose3Jlc291cmNl Olp9KX0pfVMuZXh0ZW5kKGEucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKCl7aWYo dGhpcy51cmwuc3Vic3RyKHRoaXMudXJsLmxlbmd0aC00KT09Ii5jc3MiKXt2YXIg ZD1zLmNlKCJsaW5rIiksVT0ocy5nbigiaGVhZCIpWzBdfHxzLmRvY3VtZW50RWxl bWVudCk7ZC5yZWw9InN0eWxlc2hlZXQiO2QudHlwZT0idGV4dC9jc3MiO2QuaHJl Zj10aGlzLnVybDtkLm1lZGlhPSJhbGwiO1UuaW5zZXJ0QmVmb3JlKGQsVS5maXJz dENoaWxkKX1lbHNle2YuYWpzKHRoaXMudXJsLDEpfXRoaXMubG9hZGluZz10cnVl O2EubW9uaXRvcih0aGlzKX19KTt2YXIgVD1uZXcgYihhKTtULmRlY29yYXRlKFQp LmRlY29yYXRlKGEpO1MuZXh0ZW5kKGEse2tub3duOntqcXVlcnk6bmV3IGEoImpx dWVyeSIsIi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEu NC4yL2pxdWVyeS5taW4uanMiLCJqUXVlcnkiKSxnYTpuZXcgYSgiZ2EiLCIvL3d3 dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyIsZnVuY3Rpb24oKXt2YXIgZD1f d2luZG93Ll9nYXQ7cmV0dXJuICEhKGQmJih0eXBlb2YoZC5fZ2V0VHJhY2tlcik9 PT0iZnVuY3Rpb24iKSl9KX0sbG9hZGluZzppLG1vbml0b3I6Un0pO2wucmVzb3Vy Y2U9e1Jlc291cmNlOmEsQXBpUXVldWVGYWN0b3J5OnJ9fSkoZixmLmFwaSxmKTt2 YXIgdD13aW5kb3csTj10LmFkZHRoaXNfY29uZmlnfHx7fSxvPW5ldyBmLnJlc291 cmNlLlJlc291cmNlKCJ3aWRnZXRjc3MiLF9hdHIrInN0YXRpYy9yMDcvd2lkZ2V0 NDEuY3NzIixmdW5jdGlvbigpe3JldHVybiB0cnVlfSk7ZnVuY3Rpb24gaCgpe3Ry eXtpZihfYXRjLnhvbCYmIV9hdGMueGNzKXtvLmxvYWQoKX12YXIgYWU9ZixxPWFl LmJyby5tc2ksYj0wLFQ9TS50aXRsZSxVPU0ucmVmZXJlcnx8TS5yZWZlcnJlcnx8 IiIsUz1IP0guaHJlZjpudWxsLHI9UyxhYj1ILmhvc3RuYW1lLGFkPVM/Uy5pbmRl eE9mKCJzbXNfc3MiKTotMSxYPShmLmxuZygpLnNwbGl0KCItIikpLnNoaWZ0KCks cD0oSC5ocmVmLmluZGV4T2YoX2F0cik9PS0xJiYhYWUuc3ViKSxZPU0uZ24oImxp bmsiKSxkPV9hdHIrInN0YXRpYy9yMDcvc2gyMS5odG1sIyIsVj1TJiZTLmluZGV4 T2YoImh0dHBzIik9PT0wPzE6MCxzLGFmLFI9ZnVuY3Rpb24oKXtpZighZi5wY3Mu bGVuZ3RoKXt2YXIgYT13aW5kb3cuYWRkdGhpc19wcm9kdWN0fHwoIm1lbi0iK19h dGMudmVyKTtmLnBjcy5wdXNoKGEpfWFmLnBjPWYucGNzLmpvaW4oIiwiKX07aWYo d2luZG93LmFkZHRoaXNfcHJvZHVjdCl7Zi5wY3MucHVzaChhZGR0aGlzX3Byb2R1 Y3QpfWZvcih2YXIgWj0wO1o8WS5sZW5ndGg7WisrKXt2YXIgVz1ZW1pdO2lmKFcu cmVsJiZXLnJlbD09ImNhbm9uaWNhbCImJlcuaHJlZil7cj1XLmhyZWZ9fXI9ci5z cGxpdCgiI3siKS5zaGlmdCgpO2FlLmlndihyLE0udGl0bGV8fCIiKTthZS5kcj1h ZS50cnUoVSwiZnIiKTthZS5kdT1hZS50cnUociwiZnAiKTthZS5kdD1UPXQuYWRk dGhpc19zaGFyZS50aXRsZTthZS5jYj1hZS5hZC5jbGEoKTthZS5kaD1ILmhvc3Ru YW1lO2FlLnNzbD1WO2FmPXtjYjphZS5jYixhYjphZS5hYixkaDphZS5kaCxkcjph ZS5kcixkdTphZS5kdSxkdDpULGluc3Q6YWUuaW5zdCxsbmc6YWUubG5nKCkscGM6 dC5hZGR0aGlzX3Byb2R1Y3R8fCJtZW4iLHB1YjphZS5wdWIoKSxzc2w6VixzaWQ6 Zi5zc2lkKCksc3JkOl9hdGMuZGFtcCxzcmY6X2F0Yy5mYW1wLHNycDpfYXRjLnBh bXAsc3J4Ol9hdGMueGFtcCx2ZXI6X2F0Yy52ZXIseGNrOl9hdGMueGNrfHwwfTtp ZihhZS50cmwubGVuZ3RoKXthZi50cmw9YWUudHJsLmpvaW4oIiwiKX1pZihhZS5y ZXYpe2FmLnJldj1hZS5yZXZ9aWYoYWQ+LTEmJlMuaW5kZXhPZihfYXRkKyJib29r Iik9PS0xKXt2YXIgdz1bXTt2YXIgYWE9Uy5zdWJzdHIoYWQpO2FhPWFhLnNwbGl0 KCImIikuc2hpZnQoKS5zcGxpdCgiIyIpLnNoaWZ0KCkuc3BsaXQoIj0iKS5wb3Ao KTthZi5zcj1hYTtpZihhZS52YW1wPj0wJiYhYWUuc3ViJiZhYS5sZW5ndGgpe3cu cHVzaChhZS5mY3YoInBsdiIsTWF0aC5yb3VuZCgxL19hdGMudmFtcCkpKTt3LnB1 c2goYWUuZmN2KCJyc2MiLGFhKSk7YWYuY2U9dy5qb2luKCIsIil9fWlmKGFlLnVw bSl7YWYueGQ9MTtpZihmLmJyby5mZngpe2FmLnhsZD0xfX1pZihwKXtpZihhZS51 cG0pe2lmKHEpe2Yuc3RvKGZ1bmN0aW9uKCl7UigpO2FlLmF0Zj1zPWFlLmN0Zihk K20oYWYpKX0sZi53YWl0KTt0LmF0dGFjaEV2ZW50KCJvbm1lc3NhZ2UiLGFlLnBt aCl9ZWxzZXtzPWFlLmN0ZigpO3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIs YWUucG1oLGZhbHNlKX1pZihmLmJyby5mZngpe3Muc3JjPWQ7Zi5xdHAucHVzaChh Zil9ZWxzZXtpZighcSl7Zi5zdG8oZnVuY3Rpb24oKXtSKCk7cy5zcmM9ZCttKGFm KX0sZi53YWl0KX19fWVsc2V7cz1hZS5jdGYoKTtmLnN0byhmdW5jdGlvbigpe1Io KTtzLnNyYz1kK20oYWYpfSxmLndhaXQpfWlmKHMpe2FlLmF0Zj1zPWFlLmdldF9h dHNzaCgpLmFwcGVuZENoaWxkKHMpfX1pZih0LmFkZHRoaXNfbGFuZ3VhZ2V8fE4u dWlfbGFuZ3VhZ2Upe2FlLmFsZygpfWlmKGFlLnBsby5sZW5ndGg+MCl7YWUuamxv KCl9fWNhdGNoKGFjKXt9fWYuZWQuYWRkRXZlbnRMaXN0ZW5lcigiYWRkdGhpcy5t ZW51LnNoYXJlIixmLm9tcyk7dC5fYXRlPVA7dC5fYWRyPXg7dHJ5e3ZhciBFPU0u Z24oInNjcmlwdCIpLHY9RVtFLmxlbmd0aC0xXSx5PXYuc3JjLmluZGV4T2YoIiMi KT4tMT92LnNyYy5yZXBsYWNlKC9eW15cI10rXCM/LywiIik6di5zcmMucmVwbGFj ZSgvXlteXD9dK1w/Py8sIiIpLHo9aih5KTtpZih6LnB1Ynx8ei51c2VybmFtZSl7 dC5hZGR0aGlzX3B1Yj1fZHVjKHoucHViP3oucHViOnoudXNlcm5hbWUpfWlmKHQu YWRkdGhpc19wdWImJnQuYWRkdGhpc19jb25maWcpe3QuYWRkdGhpc19jb25maWcu dXNlcm5hbWU9dC5hZGR0aGlzX3B1Yn1pZih6LmRvbXJlYWR5KXtfYXRjLmRyPTF9 aWYoei5hc3luYyl7X2F0Yy54b2w9MX1pZihfYXRjLnZlcj09PTEyMCl7dmFyIEQ9 ImF0YiIrZi5jdWlkKCk7TS53cml0ZSgnPHNwYW4gaWQ9IicrRCsnIj48L3NwYW4+ Jyk7Zi5pZ3YoKTtmLmxhZChbInNwYW4iLEQsYWRkdGhpc19zaGFyZS51cmx8fCJb dXJsXSIsYWRkdGhpc19zaGFyZS50aXRsZXx8Ilt0aXRsZV0iXSl9aWYodC5hZGR0 aGlzX2NsaWNrb3V0KXtmLmxhZChbImNvdXQiXSl9aWYoIV9hdGMueG9sJiYhX2F0 Yy54Y3MmJk4udWlfdXNlX2NzcyE9PWZhbHNlKXtvLmxvYWQoKX19Y2F0Y2goTCl7 aWYod2luZG93LmNvbnNvbGUpe2NvbnNvbGUubG9nKCJtYWluIixMKX19bi5iaW5k UmVhZHkoKTtuLmFwcGVuZChoKTsoZnVuY3Rpb24oaSxwLHEpe3ZhciByPWRvY3Vt ZW50LFU9ZnVuY3Rpb24oKXt2YXIgVj1yLmduKCJsaW5rIiksWD17fTtmb3IodmFy IFc9MDtXPFYubGVuZ3RoO1crKyl7dmFyIGQ9VltXXTtpZihkLmhyZWYmJmQucmVs KXtYW2QucmVsXT1kLmhyZWZ9fXJldHVybiBYfSxSPVUoKSxlPWZ1bmN0aW9uKCl7 dmFyIGQ9ci5sb2NhdGlvbi5wcm90b2NvbDtpZihkPT0iZmlsZToiKXtkPSJodHRw OiJ9cmV0dXJuIGQrIi8vIitfYXRkfSxUPWZ1bmN0aW9uKCl7aWYoZi5kcil7cmV0 dXJuIiZwcmU9IitfZXVjKGYuZHIpfWVsc2V7cmV0dXJuIiJ9fSxiPWZ1bmN0aW9u KFcsWCxWLGQpe3JldHVybiBlKCkrKFg/ImZlZWQucGhwIjoiYm9va21hcmsucGhw IikrIj92PSIrKF9hdGMudmVyKSsiJndpbm5hbWU9YWRkdGhpcyYiK2woVyxYLFYs ZCkrIiYiK2YuY3N0KDQpK1QoKSsiJnR0PTAifSxsPWZ1bmN0aW9uKGFlLFgsYWgs YW0pe3ZhciBhYj1mLnRyaW0sYWo9d2luZG93LGFmPWYucHViKCksWj13aW5kb3cu X2F0d3x8e30sYWE9YWIoKGFoJiZhaC51cmw/YWgudXJsOihaLnNoYXJlJiZaLnNo YXJlLnVybD9aLnNoYXJlLnVybDphZGR0aGlzX3VybCkpLDEpLGFsLFc9ZnVuY3Rp b24oYW4pe2lmKGFhJiZhYSE9IiIpe3ZhciBkPWFhLmluZGV4T2YoIiUyM2F0Iith bik7aWYoZD4tMSl7YWE9YWEuc3Vic3RyKDAsZCl9fX07aWYoIWFtKXthbT1aLmNv bmZ8fHt9fWVsc2V7Zm9yKHZhciBhZyBpbiBaLmNvbmYpe2lmKCEoYW1bYWddKSl7 YW1bYWddPVouY29uZlthZ119fX1pZighYWgpe2FoPVouc2hhcmV9ZWxzZXtmb3Io dmFyIGFnIGluIFouc2hhcmUpe2lmKCEoYWhbYWddKSl7YWhbYWddPVouc2hhcmVb YWddfX19YWw9YW0uc2VydmljZXNfY3VzdG9tO1coInBybyIpO1coIm9wcCIpO1co ImNsZSIpO1coImNsYiIpO1coImFiYyIpO2lmKGFhLmluZGV4T2YoImFkZHRoaXMu Y29tL3N0YXRpYy9yMDcvYWIiKT4tMSl7YWE9X2R1YyhhYSk7YWE9YWEuc3BsaXQo IiYiKTtmb3IodmFyIGFpPTA7YWk8YWEubGVuZ3RoO2FpKyspe3ZhciBhYz1hYVth aV0uc3BsaXQoIj0iKTtpZihhYy5sZW5ndGg9PTIpe2lmKGFjWzBdPT0idXJsIil7 YWE9YWIoYWNbMV0sMSk7YnJlYWt9fX19aWYoYWwgaW5zdGFuY2VvZiBBcnJheSl7 Zm9yKHZhciBhaT0wO2FpPGFsLmxlbmd0aDthaSsrKXtpZihhbFthaV0uY29kZT09 YWUpe2FsPWFsW2FpXTticmVha319fXZhciBhaz0oKGFoJiZhaC50ZW1wbGF0ZXMm JmFoLnRlbXBsYXRlc1thZV0pP2FoLnRlbXBsYXRlc1thZV06IiIpLFY9KChhaCYm YWgubW9kdWxlcyYmYWgubW9kdWxlc1thZV0pP2FoLm1vZHVsZXNbYWVdOiIiKSxh ZD0oYW0ucHJvZHVjdHx8YWouYWRkdGhpc19wcm9kdWN0fHwoIm1lbi0iK19hdGMu dmVyKSksWT0iIjtpZihhaC5lbWFpbF92YXJzKXtmb3IodmFyIGFnIGluIGFoLmVt YWlsX3ZhcnMpe1krPShZPT0iIj8iIjoiJiIpK19ldWMoYWcpKyI9IitfZXVjKGFo LmVtYWlsX3ZhcnNbYWddKX19aWYoWi5tY2s+MXx8KFoubWNrPT0xJiZhZSE9PSJl Iikpe2FkPWFkLnJlcGxhY2UoIm1lbiIsIm1heCIpfXJldHVybiJwdWI9IithZisi JnNvdXJjZT0iK2FkKyImbG5nPSIrKGYubG5nKCl8fCJ4eCIpKyImcz0iK2FlKyhh bS51aV81MDhfY29tcGxpYW50PyImdTUwOD0xIjoiIikrKFg/IiZoMT0iK2FiKChh aC5mZWVkfHxhaC51cmwpLnJlcGxhY2UoImZlZWQ6Ly8iLCIiKSwxKSsiJnQxPSI6 IiZ1cmw9IithYSsiJnRpdGxlPSIpK2FiKGFoLnRpdGxlfHxhai5hZGR0aGlzX3Rp dGxlLDEpKyhfYXRjLnZlcjwyMDA/IiZsb2dvPSIrYWIoYWouYWRkdGhpc19sb2dv LDEpKyImbG9nb2JnPSIrYWIoYWouYWRkdGhpc19sb2dvX2JhY2tncm91bmQsMSkr IiZsb2dvY29sb3I9IithYihhai5hZGR0aGlzX2xvZ29fY29sb3IsMSk6IiIpKyIm YXRlPSIrZi5zdGEoKSsod2luZG93LmFkZHRoaXNfc3NoJiZhZGR0aGlzX3NzaC5p bmRleE9mKGFlKT4tMT8iJmlwcz0xIjoiIikrKGYudWlkPyImdWlkPSIrX2V1Yyhm LnVpZCk6IiIpKyhhaC5lbWFpbF90ZW1wbGF0ZT8iJmVtYWlsX3RlbXBsYXRlPSIr X2V1YyhhaC5lbWFpbF90ZW1wbGF0ZSk6IiIpKyhZPyImZW1haWxfdmFycz0iK19l dWMoWSk6IiIpKyhhaC5kZXNjcmlwdGlvbj8iJmRlc2NyaXB0aW9uPSIrYWIoYWgu ZGVzY3JpcHRpb24sMSk6IiIpKyhhaC5odG1sPyImaHRtbD0iK2FiKGFoLmh0bWws MSk6KGFoLmNvbnRlbnQ/IiZodG1sPSIrYWIoYWguY29udGVudCwxKToiIikpKyhh aC5zY3JlZW5zaG90PyImc2NyZWVuc2hvdD0iK2FiKGFoLnNjcmVlbnNob3QsMSk6 IiIpKyhhaC5zd2Z1cmw/IiZzd2Z1cmw9IithYihhaC5zd2Z1cmwsMSk6IiIpKyhh aC5pZnJhbWV1cmw/IiZpZnJhbWV1cmw9IithYihhaC5pZnJhbWV1cmwsMSk6IiIp KyhhaC53aWR0aD8iJndpZHRoPSIrYWgud2lkdGg6IiIpKyhhaC5oZWlnaHQ/IiZo ZWlnaHQ9IithaC5oZWlnaHQ6IiIpKyhhbS5kYXRhX3RyYWNrX3AzMj8iJnAzMj0i K2FtLmRhdGFfdHJhY2tfcDMyOiIiKSsoYW0uZGF0YV90cmFja19jbGlja2JhY2t8 fGFtLmRhdGFfdHJhY2tfbGlua2JhY2t8fCFhZnx8YWY9PSJBZGRUaGlzIj8iJnNt c19zcz0xIjoiIikrKChhbCYmYWwudXJsKT8iJmFjbj0iK19ldWMoYWwubmFtZSkr IiZhY2M9IitfZXVjKGFsLmNvZGUpKyImYWN1PSIrX2V1YyhhbC51cmwpOiIiKSso YWs/IiZ0ZW1wbGF0ZT0iK2FiKGFrLDEpOiIiKSsoVj8iJm1vZHVsZT0iK2FiKFYs MSk6IiIpKyhhbS51aV9jb2JyYW5kPyImdWlfY29icmFuZD0iK2FiKGFtLnVpX2Nv YnJhbmQsMSk6IiIpKyhhbS51aV9oZWFkZXJfY29sb3I/IiZ1aV9oZWFkZXJfY29s b3I9IithYihhbS51aV9oZWFkZXJfY29sb3IsMSk6IiIpKyhhbS51aV9oZWFkZXJf YmFja2dyb3VuZD8iJnVpX2hlYWRlcl9iYWNrZ3JvdW5kPSIrYWIoYW0udWlfaGVh ZGVyX2JhY2tncm91bmQsMSk6IiIpfSxzPWZ1bmN0aW9uKFcsZCl7dmFyIFY9Zi5w dWIoKTtyZXR1cm4ibWFpbHRvOj9zdWJqZWN0PSIrX2V1YyhXLnRpdGxlP1cudGl0 bGU6Vy51cmwpKyImYm9keT0iK19ldWMoVy50aXRsZT9XLnRpdGxlOiIiKSsoVy50 aXRsZT8iJTBEJTBBIjoiIikrX2V1YyhXLnVybCsoZC5kYXRhX3RyYWNrX2NsaWNr YmFja3x8ZC5kYXRhX3RyYWNrX2xpbmtiYWNrfHwhVnx8Vj09IkFkZFRoaXMiPygo Vy51cmwuaW5kZXhPZigiPyIpPi0xKT8iJiI6Ij8iKSsic21zX3NzPW1haWx0byI6 IiIpKSsiJTBEJTBBJTBEJTBBU2hhcmVkIHZpYSBBZGRUaGlzLmNvbSJ9LFM9W10s YT1mdW5jdGlvbihYLFksVyxWKXt2YXIgZDtpZihYPT0iZW1haWwiKXtkPWIoVyxW KX1lbHNle2Q9YihYLFksVyxWKX1TLnB1c2goZi5hanMoZCwxKSl9LHc9ZnVuY3Rp b24oVixkKXtyZXR1cm4gZSgpKyJ0ZWxsZnJpZW5kLnBocD8mZnJvbW5hbWU9YWFh JmZyb21lbWFpbD0iK19ldWMoZC5mcm9tKSsiJmZyb21tZW51PTEmdG9mcmllbmQ9 IitfZXVjKGQudG8pKyhWLmVtYWlsX3RlbXBsYXRlPyImdGVtcGxhdGU9IitfZXVj KFYuZW1haWxfdGVtcGxhdGUpOiIiKSsoZC52YXJzPyImdmFycz0iK19ldWMoZC52 YXJzKToiIikrKHdpbmRvdy5hZGR0aGlzX3NzaC5pbmRleE9mKCJlbWFpbCIpPi0x PyImaXBzPTEiOiIiKSsiJmxuZz0iKyhmLmxuZygpfHwieHgiKSsiJm5vdGU9Iitf ZXVjKGQubm90ZSkrIiYiK2woImUiKX07aS5zaGFyZT17dWFkZDpsLGdlbnVybDpi LGdlbmV1cmw6dyxnZW5pZXU6cyxzdmN1cmw6ZSx0cmFjazphLGxpbmtzOlJ9fSko ZixmLmFwaSxmKX0pKCk7ZnVuY3Rpb24gYWRkdGhpc19vcGVuKCl7aWYodHlwZW9m IGljb25mPT0ic3RyaW5nIil7aWNvbmY9bnVsbH1yZXR1cm4gX2F0ZS5hby5hcHBs eShfYXRlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYWRkdGhpc19jbG9zZSgpe19hdGUu YWMoKX1mdW5jdGlvbiBhZGR0aGlzX3NlbmR0bygpe19hdGUuYXMuYXBwbHkoX2F0 ZSxhcmd1bWVudHMpO3JldHVybiBmYWxzZX1pZihfYXRjLmRyKXtfYWRyLm9uUmVh ZHkoKX19ZWxzZXtfYXRlLmluc3QrK31pZihfYXRjLmFiZil7YWRkdGhpc19vcGVu KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhYiIpLCJlbWFpbGFiIix3aW5kb3cu YWRkdGhpc191cmx8fCJbVVJMXSIsd2luZG93LmFkZHRoaXNfdGl0bGV8fCJbVElU TEVdIil9Ow== ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=eng.png Content-Type: image/png; name=eng.png Content-Location: http://netsago.org/design/eng.png Content-Transfer-Encoding: Base64 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 AAAASUVORK5CYII= ------------LUOOrkTQxGoY8i6culjXjN Content-Disposition: inline; filename=small_bug.png Content-Type: image/png; name=small_bug.png Content-Location: http://netsago.org/design/small_bug.png Content-Transfer-Encoding: Base64 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 ------------LUOOrkTQxGoY8i6culjXjN--