Пожалуйста, обратите внимание, что пользователь заблокирован
Как раз пару дней назад пришлось на скорую руку придумать нечто подобное. Задача, точнее ее часть, очень близко совпадала со словом "клоака"... Слово так себе конечно, приходтся использовать) а то
Думаю самые внимательные уже оценили логику скриптов баш и догадались что нужно сделать)))) Подедем итог:
1) При создании или "реверта" впски (я юзаю опенстак, дело 3 минут) заходим в веб-консоль и вставляем результат работы скрипта
2) можете отдыхать, 15 минут, и вы получаете
0x01) ССЛ сертификаты LetsEncrypt конечно же первым делом))
а) блокировку по айпи ВСЕХ известных песочниц
б) парсинг ЮА, Заголовков, других узнаваемых сигнатур и занос в блок. Посредством IPTABLES, это значит, что мы не только заблокировали на уровне реверсивного прокси, но и вообще перекрыли кислород, т.е запретили любле взаимедойствия с любым портом нашего сервера
в) гугладвордс и другие "белые" боты допущены и получают необходимоеь (ведь это и был смысл настройки подобной штуки, в противном случае и они лишаются привелегии узреть Ваш Чудесный Ресурс всего парой росчерков '###' <- пера =)))
г) естественно настройка Вашей ВПС с нуля до уровня "лучше-не-бывает". Оке) мб и бывает, я не спорю. Но для меня - это был оптимальный вариант. Если есть конструктивные добавки - буду рад услышать их где-бы-то-ни-было)
д) еще по-мелочи, как говорит неплохой парень "кто не понял - тот поймет" ;-)
Happy Hacking... Ну или чем Вы там заняты)
ЗЫ::: ОКЕ! юзать так:
modrewrite и ipset попудярностью пользуются гораздо меньше)))) Как всегда POC в студию (и как обычно это линукс, debian линукс..):
Bash:
mkdir /tmp/CLOACKa ; cd /tmp/CLOACKa
cat > pack.sh << 'CLOACKEr'
#!/bin/bash
[[ -z "$(type makeself)" ]] && apt-get -y install makeself #очень удобно паковать как раз "сервера"
makeself --nox11 --needroot "$(pwd)" dolanding _unknw0wn_dolanding ./init.sh "$1"
curl -s --upload-file /tmp/CLOACKa/dolanding https://x4k.sh/token\="$(openssl rand -hex 12)" | sed 's+p:+ps:+g' > /tmp/cmd ж echo 'wget -O /tmp/0cmd URLHERE && chmod +x /tmp/0cmd && /tmp/0cmd && rm /tmp/0cmd' | sed "s+URLHERE+$(cat /tmp/cmd)+g" | curl -s -F 'f:1=<-' ix.io | sed 's+http://++g' > /tmp/ccc
printf "\n\033[1;37m Do this on your VPS:\033[1;31m bash <(wget -qO- $(cat /tmp/ccc))\n" # выдаст ссылку, вам ее просто остается вставить в терминал VPS
EOF
chmod +x pack.sh
cat<<'EOF'>init.sh
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive ; home="$(pwd)" ; hname="$1" ; hostname "$hname" ; echo "$hname" > /etc/hostname ; echo 127.0.0.1 localhost > /etc/hosts ; echo "$(wget -qO- ifconfig.me)" "$hname" >> /etc/hosts
#//// swap ////
dd if=/dev/zero of=/swapfile2 bs=1G count=2
mkswap /swapfile2
chmod 600 /swapfile2
swapon /swapfile2
echo '/swapfile2 none swap sw,pri=10 0 0' >> /etc/fstab ; rm /etc/motd &>/dev/null
#//// install ////
apt-get update && apt-get -y dist-upgrade ; apt-get -y purge dnsmasq &> /dev/null ; systemctl disable systemd-resolved ; systemctl stop systemd-resolved openresolv
apt-get -y install git curl sudo wget nginx python-certbot-nginx python2 python3 python-pip python-dev python3-dev dnsutils unzip ipset shc npm nodejs jq
npm i -g bash-obfuscate
#//// .zsh shell ////
#//// .zsh //// мой любимый и с моим конфигом)) делюсь самым приватом)
apt-get -y install zsh perl golang fzf -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
cd /root ; mkdir /tmp/LS_COLORS && curl -sL https://api.github.com/repos/trapd00r/LS_COLORS/tarball/master | tar xzf - --directory=/tmp/LS_COLORS --strip=1 &> /dev/null ; ( cd /tmp/LS_COLORS && sh install.sh ) &> /dev/null
git clone https://github.com/jotyGill/quickz-sh.git ; cd quickz-sh ; ./quickz.sh ; rm -r ../quickz-sh
wget -O /tmp/bat.deb $(curl -sL https://api.github.com/repos/sharkdp/bat/releases/latest | grep amd64.deb | grep -v musl | grep browser_download_url | head -1 | cut -d \" -f 4) && dpkg -i /tmp/bat.deb
wget -nv --show-progress https://raw.githubusercontent.com/macvk/dnsleaktest/master/dnsleaktest.sh && mv dnsleaktest.sh /usr/bin/dnsleak && chmod +x /usr/bin/dnsleak
cd /root ; curl -L https://cpanmin.us/ -o /usr/bin/cpanm ; chmod +x /usr/bin/cpanm ; alias cpan=cpanm
yes | cpan Term::ExtendedColor
yes | cpan File::LsColor
git clone git://github.com/trapd00r/ls--.git ; cd ls-- ; perl Makefile.PL ; make && make install ; cp ls++.conf $HOME/.ls++.conf
wget -nv --show-progress $(curl -sL https://api.github.com/repos/phiresky/ripgrep-all/releases/latest | grep x86_64-unknown-linux-musl.tar.gz | grep browser_download_url | head -1 | cut -d \" -f 4) && tar xf *x86_64-unknown-linux-musl.tar.gz && mv ripgrep*/* /usr/local/bin/
#//// nginx ////
cat<<EOF>/etc/nginx/sites-available/"$hname"
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html;
server_name $hname;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl reload nginx ; sleep 10 ; certbot --nginx -d "$hname" --non-interactive --agree-tos -m webmaster@"$hname" ; service nginx reload ; systemctl restart nginx
#///// ОСНОВНАЯ ЧАСТЬ - КАК РАЗ БАН ПЕСКА И реврайт ботов. Гугл причем не трогает - адвордс - ауе -чичигага
#//// bad bot blocker ////
wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -O /usr/local/sbin/install-ngxblocker
chmod +x /usr/local/sbin/install-ngxblocker ; cd /usr/local/sbin ; ./install-ngxblocker -x ; chmod +x /usr/local/sbin/setup-ngxblocker ; chmod +x /usr/local/sbin/update-ngxblocker ; cd /usr/local/sbin/ ; printf "Y" | ./setup-ngxblocker -x
sed -i "s+server_name _\;+server_name _\;\n return 301 https://\$host\$request_uri\;+g" /etc/nginx/sites-available/default ; systemctl restart nginx
(crontab -l | grep . ; echo -e "00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -n") | crontab -
cat<<'EOF'>/usr/local/bin/goodboyz
#!/bin/bash
ipset -q flush goodboyz ; ipset -q create goodboyz nethash
for ip in $(curl -s https://gist.githubusercontent.com/curi0usJack/971385e8334e189d93a6cb4671238b10/raw | \
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"); \
do ipset add goodboyz $ip ; done
iptables -A INPUT -m set --match-set goodboyz src -j DROP
iptables -A FORWARD -m set --match-set goodboyz src -j DROP
curl -s https://gist.githubusercontent.com/curi0usJack/971385e8334e189d93a6cb4671238b10/raw | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" > /tmp/goodboyz
echo "" > /etc/nginx/bots.d/blacklist-ips.conf ; while read in ; do echo "$in 1;" >> /etc/nginx/bots.d/blacklist-ips.conf ; done < /tmp/goodboyz
service nginx reload ; systemctl restart nginx
EOF
chmod +x /usr/local/bin/goodboyz ; echo 'sudo goodboyz' >> /etc/rc.local ; echo exit 0 >> /etc/rc.local ; chmod +x /etc/rc.local
(crontab -l | grep . ; echo -e "00 */8 * * * sudo /usr/local/bin/goodboyz") | crontab -
#//////// мой конфиг зсхрц и приятное приведение, встречающее Вас при вхоже на сервер. мелочь, а приятно)))
#//// THE END ////
echo "Iy8vLy8vLy8vLy8vLy8gX3Vua24wd24gLnpzaHJjIGZpbGUgLy8vLy8vLy8vLy8vLy8KCmV4cG9ydCBQQVRIPS9zYmluOi9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovcm9vdC8ubG9jYWwvYmluOi9yb290L2dvL2Jpbi86CmV4cG9ydCBURVJNPSJ4dGVybS0yNTZjb2xvciIKZXhwb3J0IFpTSD0kSE9NRS8ub2gtbXktenNoCmV4cG9ydCBMQ19BTEw9ZW5fVVMuVVRGLTgKClpTSF9USEVNRT0icG93ZXJsZXZlbDEway9wb3dlcmxldmVsMTBrIgpQT1dFUkxFVkVMOUtfTU9ERT0nbmVyZGZvbnQtY29tcGxldGUnCkNPTVBMRVRJT05fV0FJVElOR19ET1RTPSJ0cnVlIgoKcGx1Z2lucz0oCiAgICBnaXQKICAgIHpzaC1jb21wbGV0aW9ucwogICAgenNoLWF1dG9zdWdnZXN0aW9ucwogICAgenNoLXN5bnRheC1oaWdobGlnaHRpbmcKICAgIGhpc3Rvcnktc3Vic3RyaW5nLXNlYXJjaAogICAgcHl0aG9uCiAgICBodHRwaWUKICAgIGRvY2tlcgogICAgcHllbnYKICAgIHN5c3RlbWQKICAgIGsKICAgIGZ6ZgogICAgKQoKc291cmNlICRaU0gvb2gtbXktenNoLnNoCnNvdXJjZSAiL3Jvb3QvLmxvY2FsL3NoYXJlL2xzY29sb3JzLnNoIgoKZXhwb3J0IEZaRl9ERUZBVUxUX09QUz0iLS1leHRlbmRlZCIKZXhwb3J0IE1BUktFUl9LRVlfTkVYVF9QTEFDRUhPTERFUj0iXEMtYiIKCmF1dG9sb2FkIC1VIGNvbXBpbml0ICYmIGNvbXBpbml0Ck5QTV9QQUNLQUdFUz0iJHtIT01FfS8ubnBtIgpTQVZFSElTVD01MDAwMDAKClsgLWYgfi8uZnpmLnpzaCBdICYmIHNvdXJjZSB+Ly5memYuenNoCltbIC1zICIkSE9NRS8ubG9jYWwvc2hhcmUvbWFya2VyL21hcmtlci5zaCIgXV0gJiYgc291cmNlICIkSE9NRS8ubG9jYWwvc2hhcmUvbWFya2VyL21hcmtlci5zaCIgOyBbWyAhIC1mIH4vLnAxMGsuenNoIF1dIHx8IHNvdXJjZSB+Ly5wMTBrLnpzaAoKCiMvLy8vLy8vLy8vLy8vIEFMSUFTRVMgLy8vLy8vLy8vLy8vLy8vLwojLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmFsaWFzIGNhdD0iYmF0IC0tcGFnaW5nIG5ldmVyIC1wIC0tdGhlbWUgJ01vbm9rYWkgRXh0ZW5kZWQgT3JpZ2luJyIKYWxpYXMgbD0ibHMrKyAtLXBvdHNmIgphbGlhcyBsYT0ibHMrKyAtYSAtLXBvdHNmIgoKIy8vLy8vLy8vLy8vLyBGVU5DVElPTlMgLy8vLy8vLy8vLy8vLy8vCiMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKZnVuY3Rpb24ganFpcG9ydCgpIHsKY2F0ICQxIHwganEgLXIgJy5wcm94aWVzIHwgbWFwKFsuaXAsIC5wb3J0XSB8IGpvaW4oIjoiKSkgfCBqb2luKCJcbiIpJwp9CgpmdW5jdGlvbiBybmQoKSB7CmVjaG8gJCh0ciAtZGMgJ0EtWjAtOWEteicgPCAvZGV2L3VyYW5kb20gfCBoZWFkIC1jICQxKQp9CgpmdW5jdGlvbiBpeHgoKSB7CnBhc3M9IiQob3BlbnNzbCByYW5kIC1oZXggMykiCnByaW50ICIkKiIgfCBvcGVuc3NsIGVuYyAtZSAtYmFzZTY0IC1hZXMtMTI4LWN0ciAtcGJrZGYyIC1ub3NhbHQgLWsgJHBhc3MgfCBjdXJsIC1zIC1GIGY6MT0nPC0nIGl4LmlvICY+IC90bXAvLml4ZgpwcmludGYgIlwwMzNbMTszMW1peGQgJChjYXQgL3RtcC8uaXhmIHwgc2VkICdzK2h0dHA6Ly9peC5pby8rK2cnKSAkcGFzc1xuIgpwcmludGYgIlwwMzNbMG0iCn0KCmZ1bmN0aW9uIGlwZ3JlcCgpIHsKZ3JlcCAtRSAtbyAiKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLigyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXC4oMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKDI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcOioiICQxIAp9CgpmdW5jdGlvbiBnaSgpIHsKCXdnZXQgJDEKCWxhc3R6aXA9JChscyAtMXQgfCBoZWFkIC1uIDEpCglsYXN0ZGlyPSQodW56aXAgLWxxICRsYXN0emlwIHwgZ3JlcCAnLycgfCBoZWFkIC1uIDEgfCBhd2sgJ3twcmludGYgJDR9JykKCXVuemlwICRsYXN0emlwCglybSAkbGFzdHppcAoJc2xlZXAgMC41CgljZCAkbGFzdGRpcgp9CgpmdW5jdGlvbiBtZDVwYXNzKCkgewoJZWNobyAtbiAkMSB8IG1kNXN1bQp9CgpmdW5jdGlvbiBpcHNjYW4oKSB7CglydXN0c2NhbiAkMSAtYiAxMDAwIC0tIC12diAtUG4gLXNWIC1BIC1UNSAtLXNjcmlwdCB2dWxuIC1vTiBubWFwLSQxCn0KCmZ1bmN0aW9uIGNlbnN5cygpIHsKZXhwb3J0IENFTlNZU19BUElfSUQ9YzExODEzZTAtNWQwZi00M2U4LWI4NTMtYWZiZmI4NzhhYjI0OyBleHBvcnQgQ0VOU1lTX0FQSV9TRUNSRVQ9aFMxQ09zbHhEMnppUTdzaWQ5WHJISlZKdHZLbnc3eEYKL3Vzci9sb2NhbC9iaW4vY2Vuc3lzIHNlYXJjaCAtcSAkMSAtLWZpZWxkcyBpcHY0IHwganEgfCBzZWQgJ3MrXFsrK2cnIHwgc2VkICdzK1xdKytnJyB8IHNlZCAncyt7KytnJyB8IHNlZCAncyt9KytnJyB8IHNlZCAncytcLCsrZycgfCBjY2F0Cn0KCmZ1bmN0aW9uIHVwbCgpewppZiBbICQjIC1lcSAwIF0gOyB0aGVuIGVjaG8gIk5vIGFyZ3VtZW50cyBzcGVjaWZpZWQuXG5Vc2FnZTpcbiAgdHJhbnNmZXIgPGZpbGV8ZGlyZWN0b3J5PlxuICAuLi4gfCB0cmFuc2ZlciA8ZmlsZV9uYW1lPiI+JjIgOyByZXR1cm4gMSA7IGZpCiAgaWYgdHR5IC1zIDsgdGhlbiBmaWxlPSIkMSIgOyBmaWxlX25hbWU9JChiYXNlbmFtZSAiJGZpbGUiKSA7IGlmIFsgISAtZSAiJGZpbGUiIF0gOyB0aGVuIGVjaG8gIiRmaWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ij4mMiA7IHJldHVybiAxIDsgZmkgOwogICAgaWYgWyAtZCAiJGZpbGUiIF0gOyB0aGVuIGZpbGVfbmFtZT0iJGZpbGVfbmFtZS56aXAiICwgOyAoY2QgIiRmaWxlIiYmemlwIC1yIC1xIC0gLikgfCBjdXJsIC0tcHJvZ3Jlc3MtYmFyIC0tdXBsb2FkLWZpbGUgIi0iICJodHRwczovL3g0ay5zaC8kZmlsZV9uYW1lIiB8IHNlZCAncytzaC8rc2gvZ2V0LytnJyB8IHNlZCAncytodHRwOi8vKytnJyAmJiBlY2hvICIiIHwgdGVlIC9kZXYvbnVsbCwKICBlbHNlIGNhdCAiJGZpbGUiIHwgY3VybCAtLXByb2dyZXNzLWJhciAtLXVwbG9hZC1maWxlICItIiAiaHR0cHM6Ly94NGsuc2gvLyRmaWxlX25hbWUiIHwgIHNlZCAncytzaC8rc2gvZ2V0LytnJyB8IHNlZCAncytodHRwOi8vKytnJyAmJiBlY2hvICIiIHwgdGVlIC9kZXYvbnVsbCA7IGZpCmVsc2UgZmlsZV9uYW1lPSQxIDsgY3VybCAtLXByb2dyZXNzLWJhciAtLXVwbG9hZC1maWxlICItIiAiaHR0cHM6Ly94NGsuc2gvLyRmaWxlX25hbWUiIHwgIHNlZCAncytzaC8rc2gvZ2V0LytnJyB8IHNlZCAncytodHRwOi8vKytnJyAmJiBlY2hvICIiIHwgdGVlIC9kZXYvbnVsbCA7IGZpCn0KCmZ1bmN0aW9uIHNlZHIoKSB7CglmaW5kIC4gLXR5cGUgZiAtcHJpbnQwIHwgeGFyZ3MgLTAgc2VkIC1pICJzKyQxKyQyK2ciCn0KCmxnKCkgewogICAgZ2l0IGFkZCAuCiAgICBnaXQgY29tbWl0IC1hIC1tICJ4IgogICAgZ2l0IHB1c2gKfQoKc3BlZWR0ZXN0KCkgewogICAgY3VybCAtcyBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc2l2ZWwvc3BlZWR0ZXN0LWNsaS9tYXN0ZXIvc3BlZWR0ZXN0LnB5IHwgcHl0aG9uMyAtCn0KCmNsZWFyIDsgY2F0IC91c3Ivc2hhcmUvbG9nbwo=" | base64 -d -w 0 > /root/.zshrc
echo "IyBHZW5lcmF0ZWQgYnkgUG93ZXJsZXZlbDEwayBjb25maWd1cmF0aW9uIHdpemFyZCBvbiAyMDIwLTA2LTEyIGF0IDEzOjIwIENFU1QuCiMgQmFzZWQgb24gcm9ta2F0di9wb3dlcmxldmVsMTBrL2NvbmZpZy9wMTBrLXB1cmUuenNoLCBjaGVja3N1bSAwMDY4Mi4KIyBXaXphcmQgb3B0aW9uczogbmVyZGZvbnQtY29tcGxldGUgKyBwb3dlcmxpbmUsIGxhcmdlIGljb25zLCBwdXJlLCAyNGggdGltZSwgMiBsaW5lcywKIyBzcGFyc2UsIGluc3RhbnRfcHJvbXB0PW9mZi4KIyBUeXBlIGBwMTBrIGNvbmZpZ3VyZWAgdG8gZ2VuZXJhdGUgYW5vdGhlciBjb25maWcuCiMKIyBDb25maWcgZmlsZSBmb3IgUG93ZXJsZXZlbDEwayB3aXRoIHRoZSBzdHlsZSBvZiBQdXJlIChodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3B1cmUpLgojCiMgRGlmZmVyZW5jZXMgZnJvbSBQdXJlOgojCiMgICAtIEdpdDoKIyAgICAgLSBgQGM0ZDNlYzJjYCBpbnN0ZWFkIG9mIHNvbWV0aGluZyBsaWtlIGB2MS40LjB+MTFgIHdoZW4gaW4gZGV0YWNoZWQgSEVBRCBzdGF0ZS4KIyAgICAgLSBObyBhdXRvbWF0aWMgYGdpdCBmZXRjaGAgKHRoZSBzYW1lIGFzIGluIFB1cmUgd2l0aCBgUFVSRV9HSVRfUFVMTD0wYCkuCiMKIyBBcGFydCBmcm9tIHRoZSBkaWZmZXJlbmNlcyBsaXN0ZWQgYWJvdmUsIHRoZSByZXBsaWNhdGlvbiBvZiBQdXJlIHByb21wdCBpcyBleGFjdC4gVGhpcyBpbmNsdWRlcwojIGV2ZW4gdGhlIHF1ZXN0aW9uYWJsZSBwYXJ0cy4gRm9yIGV4YW1wbGUsIGp1c3QgbGlrZSBpbiBQdXJlLCB0aGVyZSBpcyBubyBpbmRpY2F0aW9uIG9mIEdpdCBzdGF0dXMKIyBiZWluZyBzdGFsZTsgcHJvbXB0IHN5bWJvbCBpcyB0aGUgc2FtZSBpbiBjb21tYW5kLCB2aXN1YWwgYW5kIG92ZXJ3cml0ZSB2aSBtb2Rlczsgd2hlbiBwcm9tcHQKIyBkb2Vzbid0IGZpdCBvbiBvbmUgbGluZSwgaXQgd3JhcHMgYXJvdW5kIHdpdGggbm8gYXR0ZW1wdCB0byBzaG9ydGVuIGl0LgojCiMgSWYgeW91IGxpa2UgdGhlIGdlbmVyYWwgc3R5bGUgb2YgUHVyZSBidXQgbm90IHBhcnRpY3VsYXJseSBhdHRhY2hlZCB0byBhbGwgaXRzIHF1aXJrcywgdHlwZQojIGBwMTBrIGNvbmZpZ3VyZWAgYW5kIHBpY2sgIkxlYW4iIHN0eWxlLiBUaGlzIHdpbGwgZ2l2ZSB5b3Ugc2xpY2sgbWluaW1hbGlzdCBwcm9tcHQgd2hpbGUgdGFraW5nCiMgYWR2YW50YWdlIG9mIFBvd2VybGV2ZWwxMGsgZmVhdHVyZXMgdGhhdCBhcmVuJ3QgcHJlc2VudCBpbiBQdXJlLgoKIyBUZW1wb3JhcmlseSBjaGFuZ2Ugb3B0aW9ucy4KJ2J1aWx0aW4nICdsb2NhbCcgJy1hJyAncDEwa19jb25maWdfb3B0cycKW1sgISAtbyAnYWxpYXNlcycgICAgICAgICBdXSB8fCBwMTBrX2NvbmZpZ19vcHRzKz0oJ2FsaWFzZXMnKQpbWyAhIC1vICdzaF9nbG9iJyAgICAgICAgIF1dIHx8IHAxMGtfY29uZmlnX29wdHMrPSgnc2hfZ2xvYicpCltbICEgLW8gJ25vX2JyYWNlX2V4cGFuZCcgXV0gfHwgcDEwa19jb25maWdfb3B0cys9KCdub19icmFjZV9leHBhbmQnKQonYnVpbHRpbicgJ3NldG9wdCcgJ25vX2FsaWFzZXMnICdub19zaF9nbG9iJyAnYnJhY2VfZXhwYW5kJwoKKCkgewogIGVtdWxhdGUgLUwgenNoCgogICMgVW5zZXQgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICB1bnNldCAtbSAnUE9XRVJMRVZFTDlLXyp8REVGQVVMVF9VU0VSJwoKICAjIFpzaCA+PSA1LjEgaXMgcmVxdWlyZWQuCiAgYXV0b2xvYWQgLVV6IGlzLWF0LWxlYXN0ICYmIGlzLWF0LWxlYXN0IDUuMSB8fCByZXR1cm4KCiAgIyBQcm9tcHQgY29sb3JzLgogIGxvY2FsIGdyZXk9JzI0MicKICBsb2NhbCByZWQ9JzEnCiAgbG9jYWwgeWVsbG93PSczJwogIGxvY2FsIGJsdWU9JzQnCiAgbG9jYWwgbWFnZW50YT0nNScKICBsb2NhbCBjeWFuPSc2JwogIGxvY2FsIHdoaXRlPSc3JwoKICAjIExlZnQgcHJvbXB0IHNlZ21lbnRzLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX0xFRlRfUFJPTVBUX0VMRU1FTlRTPSgKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PVsgTGluZSAjMSBdPT09PT09PT09PT09PT09PT09PT09PT09PQogICAgY29udGV4dCAgICAgICAgICAgICAgICAgICAjIHVzZXJAaG9zdAogICAgZGlyICAgICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgZGlyZWN0b3J5CiMgICAgdmNzICAgICAgICAgICAgICAgICAgICAgICAjIGdpdCBzdGF0dXMKICAgIGNvbW1hbmRfZXhlY3V0aW9uX3RpbWUgICAgIyBwcmV2aW91cyBjb21tYW5kIGR1cmF0aW9uCiAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT1bIExpbmUgIzIgXT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgbmV3bGluZSAgICAgICAgICAgICAgICAgICAjIFxuCiAgICB2aXJ0dWFsZW52ICAgICAgICAgICAgICAgICMgcHl0aG9uIHZpcnR1YWwgZW52aXJvbm1lbnQKICAgIHByb21wdF9jaGFyICAgICAgICAgICAgICAgIyBwcm9tcHQgc3ltYm9sCiAgKQoKICAjIFJpZ2h0IHByb21wdCBzZWdtZW50cy4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19SSUdIVF9QUk9NUFRfRUxFTUVOVFM9KAogICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09WyBMaW5lICMxIF09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAjIGNvbW1hbmRfZXhlY3V0aW9uX3RpbWUgICMgcHJldmlvdXMgY29tbWFuZCBkdXJhdGlvbgogICAgIyB2aXJ0dWFsZW52ICAgICAgICAgICAgICAjIHB5dGhvbiB2aXJ0dWFsIGVudmlyb25tZW50CiAgICAjIGNvbnRleHQgICAgICAgICAgICAgICAgICMgdXNlckBob3N0CiAgICBwdWJsaWNfaXAKIyAgICB0aW1lICAgICAgICAgICAgICAgICAgICAgICMgY3VycmVudCB0aW1lCiAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT1bIExpbmUgIzIgXT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIG5ld2xpbmUgICAgICAgICAgICAgICAgICAgIyBcbgogICkKCiAgIyBCYXNpYyBzdHlsZSBvcHRpb25zIHRoYXQgZGVmaW5lIHRoZSBvdmVyYWxsIHByb21wdCBsb29rLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX0JBQ0tHUk9VTkQ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhbnNwYXJlbnQgYmFja2dyb3VuZAogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX3tMRUZULFJJR0hUfV97TEVGVCxSSUdIVH1fV0hJVEVTUEFDRT0gICMgbm8gc3Vycm91bmRpbmcgd2hpdGVzcGFjZQogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX3tMRUZULFJJR0hUfV9TVUJTRUdNRU5UX1NFUEFSQVRPUj0nICcgICMgc2VwYXJhdGUgc2VnbWVudHMgd2l0aCBhIHNwYWNlCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfe0xFRlQsUklHSFR9X1NFR01FTlRfU0VQQVJBVE9SPSAgICAgICAgIyBubyBlbmQtb2YtbGluZSBzeW1ib2wKICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WSVNVQUxfSURFTlRJRklFUl9FWFBBTlNJT049ICAgICAgICAgICAjIG5vIHNlZ21lbnQgaWNvbnMKCiAgIyBBZGQgYW4gZW1wdHkgbGluZSBiZWZvcmUgZWFjaCBwcm9tcHQgZXhjZXB0IHRoZSBmaXJzdC4gVGhpcyBkb2Vzbid0IGVtdWxhdGUgdGhlIGJ1ZwogICMgaW4gUHVyZSB0aGF0IG1ha2VzIHByb21wdCBkcmlmdCBkb3duIHdoZW5ldmVyIHlvdSB1c2UgdGhlIEFsdC1DIGJpbmRpbmcgZnJvbSBmemYgb3Igc2ltaWxhci4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19QUk9NUFRfQUREX05FV0xJTkU9dHJ1ZQoKICAjIE1hZ2VudGEgcHJvbXB0IHN5bWJvbCBpZiB0aGUgbGFzdCBjb21tYW5kIHN1Y2NlZWRlZC4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19QUk9NUFRfQ0hBUl9PS197VklJTlMsVklDTUQsVklWSVN9X0ZPUkVHUk9VTkQ9JG1hZ2VudGEKICAjIFJlZCBwcm9tcHQgc3ltYm9sIGlmIHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1BST01QVF9DSEFSX0VSUk9SX3tWSUlOUyxWSUNNRCxWSVZJU31fRk9SRUdST1VORD0kcmVkCiAgIyBEZWZhdWx0IHByb21wdCBzeW1ib2wuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfUFJPTVBUX0NIQVJfe09LLEVSUk9SfV9WSUlOU19DT05URU5UX0VYUEFOU0lPTj0n4p2vJwogICMgUHJvbXB0IHN5bWJvbCBpbiBjb21tYW5kIHZpIG1vZGUuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfUFJPTVBUX0NIQVJfe09LLEVSUk9SfV9WSUNNRF9DT05URU5UX0VYUEFOU0lPTj0n4p2uJwogICMgUHJvbXB0IHN5bWJvbCBpbiB2aXN1YWwgdmkgbW9kZSBpcyB0aGUgc2FtZSBhcyBpbiBjb21tYW5kIG1vZGUuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfUFJPTVBUX0NIQVJfe09LLEVSUk9SfV9WSVZJU19DT05URU5UX0VYUEFOU0lPTj0n4p2uJwogICMgUHJvbXB0IHN5bWJvbCBpbiBvdmVyd3JpdGUgdmkgbW9kZSBpcyB0aGUgc2FtZSBhcyBpbiBjb21tYW5kIG1vZGUuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfUFJPTVBUX0NIQVJfT1ZFUldSSVRFX1NUQVRFPWZhbHNlCgogICMgR3JleSBQeXRob24gVmlydHVhbCBFbnZpcm9ubWVudC4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WSVJUVUFMRU5WX0ZPUkVHUk9VTkQ9JGdyZXkKICAjIERvbid0IHNob3cgUHl0aG9uIHZlcnNpb24uCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVklSVFVBTEVOVl9TSE9XX1BZVEhPTl9WRVJTSU9OPWZhbHNlCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVklSVFVBTEVOVl97TEVGVCxSSUdIVH1fREVMSU1JVEVSPQoKICAjIEJsdWUgY3VycmVudCBkaXJlY3RvcnkuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfRElSX0ZPUkVHUk9VTkQ9JGJsdWUKCiAgIyBDb250ZXh0IGZvcm1hdCB3aGVuIHJvb3Q6IHVzZXJAaG9zdC4gVGhlIGZpcnN0IHBhcnQgd2hpdGUsIHRoZSByZXN0IGdyZXkuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfQ09OVEVYVF9ST09UX1RFTVBMQVRFPSIlRnskd2hpdGV9JW4lZiVGeyRncmV5fUAlbSVmIgogICMgQ29udGV4dCBmb3JtYXQgd2hlbiBub3Qgcm9vdDogdXNlckBob3N0LiBUaGUgd2hvbGUgdGhpbmcgZ3JleS4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19DT05URVhUX1RFTVBMQVRFPSIlRnskZ3JleX0lbkAlbSVmIgogICMgRG9uJ3Qgc2hvdyBjb250ZXh0IHVubGVzcyByb290IG9yIGluIFNTSC4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19DT05URVhUX3tERUZBVUxULFNVRE99X0NPTlRFTlRfRVhQQU5TSU9OPQoKICAjIFNob3cgcHJldmlvdXMgY29tbWFuZCBkdXJhdGlvbiBvbmx5IGlmIGl0J3MgPj0gNXMuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfQ09NTUFORF9FWEVDVVRJT05fVElNRV9USFJFU0hPTEQ9NQogICMgRG9uJ3Qgc2hvdyBmcmFjdGlvbmFsIHNlY29uZHMuIFRodXMsIDdzIHJhdGhlciB0aGFuIDcuM3MuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfQ09NTUFORF9FWEVDVVRJT05fVElNRV9QUkVDSVNJT049MAogICMgRHVyYXRpb24gZm9ybWF0OiAxZCAyaCAzbSA0cy4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19DT01NQU5EX0VYRUNVVElPTl9USU1FX0ZPUk1BVD0nZCBoIG0gcycKICAjIFllbGxvdyBwcmV2aW91cyBjb21tYW5kIGR1cmF0aW9uLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX0NPTU1BTkRfRVhFQ1VUSU9OX1RJTUVfRk9SRUdST1VORD0keWVsbG93CgogICMgR3JleSBHaXQgcHJvbXB0LiBUaGlzIG1ha2VzIHN0YWxlIHByb21wdHMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB1cC10by1kYXRlIG9uZXMuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVkNTX0ZPUkVHUk9VTkQ9JGdyZXkKCiAgIyBEaXNhYmxlIGFzeW5jIGxvYWRpbmcgaW5kaWNhdG9yIHRvIG1ha2UgZGlyZWN0b3JpZXMgdGhhdCBhcmVuJ3QgR2l0IHJlcG9zaXRvcmllcwogICMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBsYXJnZSBHaXQgcmVwb3NpdG9yaWVzIHdpdGhvdXQga25vd24gc3RhdGUuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVkNTX0xPQURJTkdfVEVYVD0KCiAgIyBEb24ndCB3YWl0IGZvciBHaXQgc3RhdHVzIGV2ZW4gZm9yIGEgbWlsbGlzZWNvbmQsIHNvIHRoYXQgcHJvbXB0IGFsd2F5cyB1cGRhdGVzCiAgIyBhc3luY2hyb25vdXNseSB3aGVuIEdpdCBzdGF0ZSBjaGFuZ2VzLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1ZDU19NQVhfU1lOQ19MQVRFTkNZX1NFQ09ORFM9MAoKICAjIEN5YW4gYWhlYWQvYmVoaW5kIGFycm93cy4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WQ1Nfe0lOQ09NSU5HLE9VVEdPSU5HfV9DSEFOR0VTRk9STUFUX0ZPUkVHUk9VTkQ9JGN5YW4KICAjIERvbid0IHNob3cgcmVtb3RlIGJyYW5jaCwgY3VycmVudCB0YWcgb3Igc3Rhc2hlcy4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WQ1NfR0lUX0hPT0tTPSh2Y3MtZGV0ZWN0LWNoYW5nZXMgZ2l0LXVudHJhY2tlZCBnaXQtYWhlYWRiZWhpbmQpCiAgIyBEb24ndCBzaG93IHRoZSBicmFuY2ggaWNvbi4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WQ1NfQlJBTkNIX0lDT049CiAgIyBXaGVuIGluIGRldGFjaGVkIEhFQUQgc3RhdGUsIHNob3cgQGNvbW1pdCB3aGVyZSBicmFuY2ggbm9ybWFsbHkgZ29lcy4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WQ1NfQ09NTUlUX0lDT049J0AnCiAgIyBEb24ndCBzaG93IHN0YWdlZCwgdW5zdGFnZWQsIHVudHJhY2tlZCBpbmRpY2F0b3JzLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1ZDU197U1RBR0VELFVOU1RBR0VELFVOVFJBQ0tFRH1fSUNPTj0KICAjIFNob3cgJyonIHdoZW4gdGhlcmUgYXJlIHN0YWdlZCwgdW5zdGFnZWQgb3IgdW50cmFja2VkIGZpbGVzLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1ZDU19ESVJUWV9JQ09OPScqJwogICMgU2hvdyAn4oejJyBpZiBsb2NhbCBicmFuY2ggaXMgYmVoaW5kIHJlbW90ZS4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19WQ1NfSU5DT01JTkdfQ0hBTkdFU19JQ09OPSc64oejJwogICMgU2hvdyAn4oehJyBpZiBsb2NhbCBicmFuY2ggaXMgYWhlYWQgb2YgcmVtb3RlLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1ZDU19PVVRHT0lOR19DSEFOR0VTX0lDT049Jzrih6EnCiAgIyBEb24ndCBzaG93IHRoZSBudW1iZXIgb2YgY29tbWl0cyBuZXh0IHRvIHRoZSBhaGVhZC9iZWhpbmQgYXJyb3dzLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1ZDU197Q09NTUlUU19BSEVBRCxDT01NSVRTX0JFSElORH1fTUFYX05VTT0xCiAgIyBSZW1vdmUgc3BhY2UgYmV0d2VlbiAn4oejJyBhbmQgJ+KHoScgYW5kIGFsbCB0cmFpbGluZyBzcGFjZXMuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVkNTX0NPTlRFTlRfRVhQQU5TSU9OPSckeyR7JHtQOUtfQ09OVEVOVC/ih6MqIDrih6Ev4oej4oehfS8vIH0vLzovIH0nCgogICMgR3JleSBjdXJyZW50IHRpbWUuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVElNRV9GT1JFR1JPVU5EPSRncmV5CiAgIyBGb3JtYXQgZm9yIHRoZSBjdXJyZW50IHRpbWU6IDA5OjUxOjAyLiBTZWUgYG1hbiAzIHN0cmZ0aW1lYC4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19USU1FX0ZPUk1BVD0nJUR7JUg6JU06JVN9JwogICMgSWYgc2V0IHRvIHRydWUsIHRpbWUgd2lsbCB1cGRhdGUgd2hlbiB5b3UgaGl0IGVudGVyLiBUaGlzIHdheSBwcm9tcHRzIGZvciB0aGUgcGFzdAogICMgY29tbWFuZHMgd2lsbCBjb250YWluIHRoZSBzdGFydCB0aW1lcyBvZiB0aGVpciBjb21tYW5kcyByYXRoZXIgdGhhbiB0aGUgZW5kIHRpbWVzIG9mCiAgIyB0aGVpciBwcmVjZWRpbmcgY29tbWFuZHMuCiAgdHlwZXNldCAtZyBQT1dFUkxFVkVMOUtfVElNRV9VUERBVEVfT05fQ09NTUFORD1mYWxzZQoKICAjIFRyYW5zaWVudCBwcm9tcHQgd29ya3Mgc2ltaWxhcmx5IHRvIHRoZSBidWlsdGluIHRyYW5zaWVudF9ycHJvbXB0IG9wdGlvbi4gSXQgdHJpbXMgZG93biBwcm9tcHQKICAjIHdoZW4gYWNjZXB0aW5nIGEgY29tbWFuZCBsaW5lLiBTdXBwb3J0ZWQgdmFsdWVzOgogICMKICAjICAgLSBvZmY6ICAgICAgRG9uJ3QgY2hhbmdlIHByb21wdCB3aGVuIGFjY2VwdGluZyBhIGNvbW1hbmQgbGluZS4KICAjICAgLSBhbHdheXM6ICAgVHJpbSBkb3duIHByb21wdCB3aGVuIGFjY2VwdGluZyBhIGNvbW1hbmQgbGluZS4KICAjICAgLSBzYW1lLWRpcjogVHJpbSBkb3duIHByb21wdCB3aGVuIGFjY2VwdGluZyBhIGNvbW1hbmQgbGluZSB1bmxlc3MgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWFuZAogICMgICAgICAgICAgICAgICB0eXBlZCBhZnRlciBjaGFuZ2luZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX1RSQU5TSUVOVF9QUk9NUFQ9b2ZmCgogICMgSW5zdGFudCBwcm9tcHQgbW9kZS4KICAjCiAgIyAgIC0gb2ZmOiAgICAgRGlzYWJsZSBpbnN0YW50IHByb21wdC4gQ2hvb3NlIHRoaXMgaWYgeW91J3ZlIHRyaWVkIGluc3RhbnQgcHJvbXB0IGFuZCBmb3VuZAogICMgICAgICAgICAgICAgIGl0IGluY29tcGF0aWJsZSB3aXRoIHlvdXIgenNoIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAgIyAgIC0gcXVpZXQ6ICAgRW5hYmxlIGluc3RhbnQgcHJvbXB0IGFuZCBkb24ndCBwcmludCB3YXJuaW5ncyB3aGVuIGRldGVjdGluZyBjb25zb2xlIG91dHB1dAogICMgICAgICAgICAgICAgIGR1cmluZyB6c2ggaW5pdGlhbGl6YXRpb24uIENob29zZSB0aGlzIGlmIHlvdSd2ZSByZWFkIGFuZCB1bmRlcnN0b29kCiAgIyAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JvbWthdHYvcG93ZXJsZXZlbDEway9ibG9iL21hc3Rlci9SRUFETUUubWQjaW5zdGFudC1wcm9tcHQuCiAgIyAgIC0gdmVyYm9zZTogRW5hYmxlIGluc3RhbnQgcHJvbXB0IGFuZCBwcmludCBhIHdhcm5pbmcgd2hlbiBkZXRlY3RpbmcgY29uc29sZSBvdXRwdXQgZHVyaW5nCiAgIyAgICAgICAgICAgICAgenNoIGluaXRpYWxpemF0aW9uLiBDaG9vc2UgdGhpcyBpZiB5b3UndmUgbmV2ZXIgdHJpZWQgaW5zdGFudCBwcm9tcHQsIGhhdmVuJ3QKICAjICAgICAgICAgICAgICBzZWVuIHRoZSB3YXJuaW5nLCBvciBpZiB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgYWxsIG1lYW5zLgogIHR5cGVzZXQgLWcgUE9XRVJMRVZFTDlLX0lOU1RBTlRfUFJPTVBUPW9mZgoKICAjIEhvdCByZWxvYWQgYWxsb3dzIHlvdSB0byBjaGFuZ2UgUE9XRVJMRVZFTDlLIG9wdGlvbnMgYWZ0ZXIgUG93ZXJsZXZlbDEwayBoYXMgYmVlbiBpbml0aWFsaXplZC4KICAjIEZvciBleGFtcGxlLCB5b3UgY2FuIHR5cGUgUE9XRVJMRVZFTDlLX0JBQ0tHUk9VTkQ9cmVkIGFuZCBzZWUgeW91ciBwcm9tcHQgdHVybiByZWQuIEhvdCByZWxvYWQKICAjIGNhbiBzbG93IGRvd24gcHJvbXB0IGJ5IDEtMiBtaWxsaXNlY29uZHMsIHNvIGl0J3MgYmV0dGVyIHRvIGtlZXAgaXQgdHVybmVkIG9mZiB1bmxlc3MgeW91CiAgIyByZWFsbHkgbmVlZCBpdC4KICB0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19ESVNBQkxFX0hPVF9SRUxPQUQ9dHJ1ZQoKICAjIElmIHAxMGsgaXMgYWxyZWFkeSBsb2FkZWQsIHJlbG9hZCBjb25maWd1cmF0aW9uLgogICMgVGhpcyB3b3JrcyBldmVuIHdpdGggUE9XRVJMRVZFTDlLX0RJU0FCTEVfSE9UX1JFTE9BRD10cnVlLgogICgoICEgJCtmdW5jdGlvbnNbcDEwa10gKSkgfHwgcDEwayByZWxvYWQKfQoKIyBUZWxsIGBwMTBrIGNvbmZpZ3VyZWAgd2hpY2ggZmlsZSBpdCBzaG91bGQgb3ZlcndyaXRlLgp0eXBlc2V0IC1nIFBPV0VSTEVWRUw5S19DT05GSUdfRklMRT0keyR7KCUpOi0leH06YX0KCigoICR7I3AxMGtfY29uZmlnX29wdHN9ICkpICYmIHNldG9wdCAke3AxMGtfY29uZmlnX29wdHNbQF19CididWlsdGluJyAndW5zZXQnICdwMTBrX2NvbmZpZ19vcHRzJwo=" | base64 -d -w 0 > /root/.p10k.zsh
echo "CiAgICAgICAgICAgICAgICAgICAgIBtbMzg7NTsyMzVt4paEG1szODs1OzU5beKWhBtbMzg7NTsyNDht4paEG1s0ODs1OzIzNTszODs1OzI1MW3iloQbWzQ4OzU7MjM1OzM4OzU7MjUybeKWhBtbNDg7NTsyMzg7Mzg7NTsyNTNt4paEG1s0ODs1OzI0MzszODs1OzI1NG3iloQbWzQ4OzU7MjQ2OzM4OzU7MjU0beKWhBtbNDg7NTsyNDc7Mzg7NTsyNTRt4paEG1s0ODs1OzI0NzszODs1OzI1NG3iloQbWzQ4OzU7MjQ3beKWhBtbNDg7NTsyNDc7Mzg7NTsyNTRt4paEG1s0ODs1OzI0NjszODs1OzI1NG3iloQbWzQ4OzU7MjQyOzM4OzU7MjUzbeKWhBtbNDg7NTsyMzg7Mzg7NTsxODht4paEG1s0ODs1OzIzNTszODs1OzI1MW3iloQbWzQ4OzU7MjM1OzM4OzU7MjQ5beKWhBtbNDk7Mzg7NTsyNDZt4paEG1szODs1OzI0MG3iloQbWzM4OzU7MjM1beKWhBtbMzltICAgICAgICAgICAgICAgICAgG1swMG0KICAgICAgICAgICAgICAgICAbWzM4OzU7MjM1beKWhBtbNDg7NTsyMzU7Mzg7NTsyNDht4paEG1s0ODs1OzIzNjszODs1OzE4OG3iloQbWzQ4OzU7MjQ3OzM4OzU7MjU0beKWhBtbNDg7NTsyNTE7Mzg7NTsyNTRt4paEG1s0ODs1OzI1MzszODs1OzI1NW3iloQbWzQ4OzU7MjU0OzM4OzU7MjU1beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTVt4paE4paEG1s0ODs1OzI1NW3iloTiloTiloTiloQbWzQ4OzU7MjU1beKWhOKWhBtbNDg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3iloQbWzQ4OzU7MjU0beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1MjszODs1OzI1NW3iloQbWzQ4OzU7MjUwOzM4OzU7MjU0beKWhBtbNDg7NTsyNDU7Mzg7NTsyNTNt4paEG1s0ODs1OzIzNTszODs1OzI1MW3iloQbWzQ4OzU7MjM1OzM4OzU7MjQ2beKWhBtbNDk7Mzg7NTsyMzVt4paEG1szOW0gICAgICAgICAgICAgIBtbMDBtCiAgICAgICAgICAgICAgG1szODs1OzIzNW3iloQbWzQ4OzU7MjM1OzM4OzU7MjUwbeKWhBtbNDg7NTsyNDY7Mzg7NTsyNTRt4paEG1s0ODs1OzI1MjszODs1OzI1NW3iloQbWzQ4OzU7MjU0OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3iloQbWzQ4OzU7MjU1beKWhBtbNDg7NTsyNTVt4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIG1s0ODs1OzI1NW3iloQbWzQ4OzU7MjU1beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1MzszODs1OzI1NW3iloQbWzQ4OzU7MjUwOzM4OzU7MjU0beKWhBtbNDg7NTsyNDQ7Mzg7NTsyNTJt4paEG1s0ODs1OzIzNTszODs1OzI0OG3iloQbWzQ5OzM4OzU7MjM2beKWhBtbMzltICAgICAgICAgICAbWzAwbQogICAgICAgICAgIBtbMzg7NTsyMzVt4paEG1szODs1OzEwMm3iloQbWzQ4OzU7MjQyOzM4OzU7MjUzbeKWhBtbNDg7NTsyNTI7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NDszODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTVt4paEG1s0ODs1OzI1NW3ilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogbWzQ4OzU7MjU1beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1MzszODs1OzI1NW3iloQbWzQ4OzU7MjUwOzM4OzU7MjU0beKWhBtbNDg7NTs1OTszODs1OzI1MG3iloQbWzQ5OzM4OzU7MjQybeKWhBtbMzg7NTsyMzVt4paEG1szOW0gICAgICAgIBtbMDBtCiAgICAgICAgICAbWzQ4OzU7MjM1OzM4OzU7MTAybeKWhBtbNDg7NTsyNDU7Mzg7NTsyNTNt4paEG1s0ODs1OzI1MzszODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NW3ilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogbWzQ4OzU7MjU1beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1MTszODs1OzI1NG3iloQbWzQ4OzU7MjQzOzM4OzU7MjUxbeKWhBtbNDk7Mzg7NTsyNDJt4paEG1szOW0gICAgICAgG1swMG0KICAgICAgICAbWzM4OzU7MjM1beKWhBtbNDg7NTsyMzk7Mzg7NTsyNTJt4paEG1s0ODs1OzI1MzszODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NW3ilojilojilojilojilogbWzM4OzU7MjU1beKWhOKWhOKWhBtbMzg7NTsyNTVt4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIG1szODs1OzI1NW3iloQbWzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiBtbNDg7NTsyNTVt4paEG1s0ODs1OzI1NDszODs1OzI1NW3iloQbWzQ4OzU7MjUwOzM4OzU7MjUzbeKWhBtbNDg7NTsyMzg7Mzg7NTsyNDht4paEG1s0OTszODs1OzIzNW3iloQbWzM5bSAgICAgG1swMG0KICAgICAgIBtbNDg7NTsyMzU7Mzg7NTsyNDJt4paEG1s0ODs1OzI0OTszODs1OzI1NG3iloQbWzQ4OzU7MjU0OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3ilojilogbWzM4OzU7MjU1beKWhBtbMzg7NTsyNTFt4paEG1s0ODs1OzI1NDszODs1OzU5beKW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OzU7MjMzOzM4OzU7MjMzbeKWhBtbNDg7NTsyMzM7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3iloQbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1szODs1OzIzNW3iloQbWzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3iloQbWzQ4OzU7MjMzOzM4OzU7MjM0beKWhBtbNDg7NTsyNDY7Mzg7NTsyNDRt4paEG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI0NjszODs1OzI0NG3iloQbWzQ4OzU7MjMzOzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3iloQbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzVt4paEG1szODs1OzIzNG3iloQbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzMzszODs1OzIzNG3iloQbWzQ4OzU7MjMzOzM4OzU7MjMzbeKWhBtbNDg7NTsyMzM7Mzg7NTsyMzNt4paEG1s0ODs1OzIzNjszODs1OzIzNG3iloQbWzQ4OzU7MjM4OzM4OzU7MjM5beKWhOKWhBtbNDg7NTsyNTI7Mzg7NTsyNDht4paEG1s0ODs1OzI1NTszODs1OzI1NW3ilojilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTM7Mzg7NTsyNTRt4paEG1s0ODs1OzI0NjszODs1OzI0OW3iloQbWzQ5OzM4OzU7MjM1beKWhBtbMzltIBtbMDBtCiAgICAbWzQ4OzU7MjQ1OzM4OzU7MjUwbeKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiBtbMzg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjQ1OzM4OzU7MjQzbeKWhBtbNDg7NTsyMzk7Mzg7NTsyNDBt4paEG1s0ODs1OzIzOTszODs1OzIzOW3iloQbWzQ4OzU7MjMzOzM4OzU7MjMzbeKWhBtbNDg7NTsyMzM7Mzg7NTsyMzNt4paEG1s0ODs1OzIzMzszODs1OzIzM23ilogbWzQ4OzU7MjM0OzM4OzU7MjM0beKWiBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paIG1s0ODs1OzIzNDszODs1OzIzNG3iloQbWzQ4OzU7MjM1OzM4OzU7MjM0beKWhBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paEG1s0ODs1OzIzNTszODs1OzIzNG3iloQbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3iloQbWzQ4OzU7MjQ2OzM4OzU7MjQ4beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NW3ilojilojilojilojilojilojilojilojilogbWzQ4OzU7MjQ2OzM4OzU7MjQ4beKWhBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3ilogbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paIG1s0ODs1OzIzNTszODs1OzIzNW3ilogbWzQ4OzU7MjM1OzM4OzU7MjM1beKWiBtbNDg7NTsyMzQ7Mzg7NTsyMzRt4paEG1s0ODs1OzIzNDszODs1OzIzNG3ilogbWzQ4OzU7MjM0OzM4OzU7MjM0beKWhBtbNDg7NTsyMzM7Mzg7NTsyMzNt4paEG1s0ODs1OzIzMzszODs1OzIzM23ilogbWzQ4OzU7MjMzOzM4OzU7MjMzbeKWhBtbNDg7NTsyMzk7Mzg7NTsyMzlt4paEG1s0ODs1OzIzOTszODs1OzI0MG3iloQbWzQ4OzU7MjQ1OzM4OzU7MjQzbeKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTQ7Mzg7NTsy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G1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NDszODs1OzI1NG3ilogbWzQ4OzU7MjUxOzM4OzU7MjUxbeKWiBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paIG1s0OTszOW0bWzAwbQogICAbWzQ4OzU7MjM1OzM4OzU7MjM1beKWhBtbNDg7NTsyNTQ7Mzg7NTsyNTRt4paEG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU0OzM4OzU7MjU0beKWiBtbNDg7NTsyNTE7Mzg7NTsyNTFt4paIG1s0ODs1OzIzNTszODs1OzIzNW3ilogbWzQ5OzM5bRtbMDBtCiAgIBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paEG1s0ODs1OzI1NDszODs1OzI1M23iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiBtbNDg7NTsyNTQ7Mzg7NTsyNTRt4paIG1s0ODs1OzI1MTszODs1OzI1MW3ilogbWzQ4OzU7MjM1OzM4OzU7MjM1beKWiBtbNDk7MzltG1swMG0KICAgG1s0ODs1OzIzNTszODs1OzIzNW3iloQbWzQ4OzU7MjUzOzM4OzU7MjUzbeKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NDszODs1OzI1NG3ilogbWzQ4OzU7MjUxOzM4OzU7MjUxbeKWiBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paIG1s0OTszOW0bWzAwbQogICAbWzQ4OzU7MjM1OzM4OzU7MjM1beKWiBtbNDg7NTsyNTM7Mzg7NTsyNTNt4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilogbWzQ4OzU7MjU0OzM4OzU7MjU0beKWiBtbNDg7NTsyNTE7Mzg7NTsyNTFt4paIG1s0ODs1OzIzNTszODs1OzIzNW3ilogbWzQ5OzM5bRtbMDBtCiAgIBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paIG1s0ODs1OzI1MzszODs1OzI1M23iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NTszODs1OzI1NW3ilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiBtbNDg7NTsyNTQ7Mzg7NTsyNTRt4paIG1s0ODs1OzI1MTszODs1OzI1MW3ilogbWzQ4OzU7MjM1OzM4OzU7MjM1beKWiBtbNDk7MzltG1swMG0KICAgG1s0ODs1OzIzNTszODs1OzIzNW3iloQbWzQ4OzU7MTg4OzM4OzU7MjUybeKWhBtbNDg7NTsyNTU7Mzg7NTsyNTRt4paEG1s0ODs1OzI1NTszODs1OzI1NW3iloQbWzQ4OzU7MjU1OzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paIG1s0ODs1OzI1NDszODs1OzI1NG3iloQbWzQ4OzU7MjUxOzM4OzU7MjUxbeKWhBtbNDg7NTsyMzU7Mzg7NTsyMzVt4paEG1s0OTszOW0bWzAwbQogICAgG1s0ODs1OzI0ODszODs1OzIzNG3iloQbWzQ4OzU7MjU0OzM4OzU7MjU0beKWhBtbNDg7NTsyNTU7Mzg7NTsyNTVt4paEG1s0ODs1OzI1NTszODs1OzI1NW3iloQbWzM4OzU7MjU1beKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKW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" | base64 -d -w 0 > /usr/share/logo
#//// твики ядра и настроек стека. кто не понял - тот не поймет (с)
#//// wintcp ////
cat<<'EOF'>/usr/local/bin/wininit
echo 1 > /sys/kernel/mm/ksm/run
echo 10 > /proc/sys/vm/swappiness
echo 50 > /proc/sys/vm/vfs_cache_pressure
echo 1000000 > /proc/sys/fs/file-max
echo 3240000 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 3240000 > /proc/sys/net/core/somaxconn
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 128 > /proc/sys/net/ipv4/ip_default_ttl
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 16384 > /proc/sys/net/ipv4/udp_rmem_min
echo 16384 > /proc/sys/net/ipv4/udp_wmem_min
echo 40960 > /proc/sys/net/core/optmem_max
echo 16777216 > /proc/sys/net/core/rmem_default
echo 16777216 > /proc/sys/net/core/rmem_max
echo 5000 > /proc/sys/net/core/somaxconn
echo 16777216 > /proc/sys/net/core/wmem_default
echo 16777216 > /proc/sys/net/core/wmem_max
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control
echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 3000 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 40960 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 4096 87380 16777216 > /proc/sys/net/ipv4/tcp_rmem
echo 0 > /proc/sys/net/ipv4/tcp_slow_start_after_idle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 4096 65536 16777216 > /proc/sys/net/ipv4/tcp_wmem
EOF
chmod +x /usr/local/bin/wininit
cat<<'EOF'>/etc/init.d/wintcp
#!/bin/bash
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
sudo /usr/local/bin/wininit
EOF
chmod +x /etc/init.d/wintcp ; /etc/init.d/wintcp start ; systemctl enable wintcp ; systemctl start wintcp
#ребутим
cd /root ; rm -r ls-- rip* ; apt-get -y autoremove ; apt-get autoclean ; sudo -u root reboot
CLOACKEr
chmod +x init.sh
Думаю самые внимательные уже оценили логику скриптов баш и догадались что нужно сделать)))) Подедем итог:
1) При создании или "реверта" впски (я юзаю опенстак, дело 3 минут) заходим в веб-консоль и вставляем результат работы скрипта
2) можете отдыхать, 15 минут, и вы получаете
0x01) ССЛ сертификаты LetsEncrypt конечно же первым делом))
а) блокировку по айпи ВСЕХ известных песочниц
б) парсинг ЮА, Заголовков, других узнаваемых сигнатур и занос в блок. Посредством IPTABLES, это значит, что мы не только заблокировали на уровне реверсивного прокси, но и вообще перекрыли кислород, т.е запретили любле взаимедойствия с любым портом нашего сервера
в) гугладвордс и другие "белые" боты допущены и получают необходимоеь (ведь это и был смысл настройки подобной штуки, в противном случае и они лишаются привелегии узреть Ваш Чудесный Ресурс всего парой росчерков '###' <- пера =)))
г) естественно настройка Вашей ВПС с нуля до уровня "лучше-не-бывает". Оке) мб и бывает, я не спорю. Но для меня - это был оптимальный вариант. Если есть конструктивные добавки - буду рад услышать их где-бы-то-ни-было)
д) еще по-мелочи, как говорит неплохой парень "кто не понял - тот поймет" ;-)
Happy Hacking... Ну или чем Вы там заняты)
ЗЫ::: ОКЕ! юзать так:
[B] cd /tmp/CLOACKa ; chmod +x *.sh ; ./pack.sh ВАШ_ДОМЕН [/B]
Последнее редактирование: