Files
site-plata-upravleniya-rf/backup/240700/search/index.html
2024-07-24 17:12:33 +03:00

43 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/svg+xml" href="/favicon/favicon.ico"><meta name="generator" content="Astro v4.7.1"><link rel="preload" href="/fonts/atkinson-regular.woff" as="font" type="font/woff" crossorigin><link rel="preload" href="/fonts/atkinson-bold.woff" as="font" type="font/woff" crossorigin><!-- Canonical URL --><link rel="canonical" href="https://astro-sphere-demo.vercel.app/search/"><!-- Primary Meta Tags --><title>Поиск | Плата Управления РФ</title><meta name="title" content="Поиск | Плата Управления РФ"><meta name="description" content="Поиск постов во вкладке проекты."><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://astro-sphere-demo.vercel.app/search/"><meta property="og:title" content="Поиск | Плата Управления РФ"><meta property="og:description" content="Поиск постов во вкладке проекты."><meta property="og:image" content="https://astro-sphere-demo.vercel.app/img04.jpg"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://astro-sphere-demo.vercel.app/search/"><meta property="twitter:title" content="Поиск | Плата Управления РФ"><meta property="twitter:description" content="Поиск постов во вкладке проекты."><meta property="twitter:image" content="https://astro-sphere-demo.vercel.app/img04.jpg"><!-- Sitemap --><link rel="sitemap" href="/sitemap-index.xml"><!-- RSS Feed --><link rel="alternate" type="application/rss+xml" title="Поиск | Плата Управления РФ" href="https://astro-sphere-demo.vercel.app/rss.xml"><!-- Global Scripts --><script src="/js/theme.js"></script><script src="/js/scroll.js"></script><script src="/js/animate.js"></script><!-- <ViewTransitions /> --><link rel="stylesheet" href="/_astro/_slug_.0h5GVtX4.css"><script type="module" src="/_astro/hoisted.BGfjo5mV.js"></script></head> <body> <header id="header" class="fixed top-0 w-full h-16 z-50 " data-astro-cid-3ef6ksr2> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="relative h-full w-full" data-astro-cid-3ef6ksr2> <div class="absolute left-0 top-1/2 -translate-y-1/2 flex gap-1 font-semibold" data-astro-cid-3ef6ksr2> <a href="/" class="flex gap-1 text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-6 fill-current" data-astro-cid-3ef6ksr2> <use href="/static/logo.svg" data-astro-cid-3ef6ksr2></use> </svg> <div data-astro-cid-3ef6ksr2> Плата Управления РФ </div> </a> </div> <div class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2" data-astro-cid-3ef6ksr2> <nav class="hidden md:flex items-center justify-center text-sm gap-1" data-astro-cid-3ef6ksr2> <a href="/" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Главная </a><a href="/work" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Работа </a><a href="/blog" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Блог </a><a href="/projects" class="h-8 rounded-full px-3 text-current flex items-center justify-center transition-colors duration-300 ease-in-out hover:bg-black/5 dark:hover:bg-white/20 hover:text-black dark:hover:text-white" data-astro-cid-3ef6ksr2> Проекты </a> </nav> </div> <div class="buttons absolute right-0 top-1/2 -translate-y-1/2 flex gap-1" data-astro-cid-3ef6ksr2> <a href="/search" aria-label="Search blog posts and projects on Плата Управления РФ" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out pointer-events-none bg-black dark:bg-white text-white dark:text-black" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#search" data-astro-cid-3ef6ksr2></use> </svg> </a> <a href="/rss.xml" target="_blank" aria-label="Rss feed for Плата Управления РФ" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#rss" data-astro-cid-3ef6ksr2></use> </svg> </a> <button id="header-theme-button" aria-label="Toggle light and dark theme" class="hidden md:flex size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg class="size-full block dark:hidden" data-astro-cid-3ef6ksr2> <use href="/ui.svg#sun" data-astro-cid-3ef6ksr2></use> </svg> <svg class="size-full hidden dark:block" data-astro-cid-3ef6ksr2> <use href="/ui.svg#moon" data-astro-cid-3ef6ksr2></use> </svg> </button> <button id="header-drawer-button" aria-label="Toggle drawer open and closed" class="flex md:hidden size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-3ef6ksr2> <svg id="drawer-open" class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#menu" data-astro-cid-3ef6ksr2></use> </svg> <svg id="drawer-close" class="size-full" data-astro-cid-3ef6ksr2> <use href="/ui.svg#x" data-astro-cid-3ef6ksr2></use> </svg> </button> </div> </div> </div> </header> <script>
function toggleDrawer() {
const drawer = document.getElementById("drawer")
const drawerButton = document.getElementById("header-drawer-button")
drawer?.classList.toggle("open")
drawerButton?.classList.toggle("open")
}
function initializeDrawerButton() {
const drawerButton = document.getElementById("header-drawer-button")
drawerButton?.addEventListener("click", toggleDrawer)
}
document.addEventListener("astro:after-swap", initializeDrawerButton)
initializeDrawerButton()
</script> <div id="drawer" class="fixed inset-0 h-0 z-40 overflow-hidden flex flex-col items-center justify-center md:hidden bg-neutral-100 dark:bg-neutral-900 transition-[height] duration-300 ease-in-out" data-astro-cid-hxtyo74s> <nav class="flex flex-col items-center space-y-2" data-astro-cid-hxtyo74s> <a href="/" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Главная </a><a href="/work" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Работа </a><a href="/blog" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Блог </a><a href="/projects" class="flex items-center justify-center px-3 py-1 rounded-full text-current hover:text-black dark:hover:text-white hover:bg-black/5 dark:hover:bg-white/20 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> Проекты </a> </nav> <div class="flex gap-1 mt-5" data-astro-cid-hxtyo74s> <a href="/search" aria-label="Search blog posts and projects on Плата Управления РФ" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#search" data-astro-cid-hxtyo74s></use> </svg> </a> <a href="/rss.xml" target="_blank" aria-label="Rss feed for Плата Управления РФ" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#rss" data-astro-cid-hxtyo74s></use> </svg> </a> <button id="drawer-theme-button" aria-label="Toggle light and dark theme" class="size-9 rounded-full p-2 items-center justify-center bg-transparent hover:bg-black/5 dark:hover:bg-white/20 stroke-current hover:stroke-black hover:dark:stroke-white border border-black/10 dark:border-white/25 transition-colors duration-300 ease-in-out" data-astro-cid-hxtyo74s> <svg class="block dark:hidden size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#sun" data-astro-cid-hxtyo74s></use> </svg> <svg class="hidden dark:block size-full" data-astro-cid-hxtyo74s> <use href="/ui.svg#moon" data-astro-cid-hxtyo74s></use> </svg> </button> </div> </div> <main> <div class="pt-36 pb-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="animate page-heading"> Поиск </div> </div> </div> <div class="flex-1 py-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="animate"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();;(()=>{var A=Object.defineProperty;var g=(a,o,i)=>o in a?A(a,o,{enumerable:!0,configurable:!0,writable:!0,value:i}):a[o]=i;var d=(a,o,i)=>(g(a,typeof o!="symbol"?o+"":o,i),i);{let a={0:t=>m(t),1:t=>i(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(i(t)),5:t=>new Set(i(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t)},o=t=>{let[l,e]=t;return l in a?a[l](e):void 0},i=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><script>window._$HY||(e=>{let t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host.nodeType?e.host:e.parentNode));["click", "input"].forEach((o=>document.addEventListener(o,(o=>{let a=o.composedPath&&o.composedPath()[0]||o.target,s=t(a);s&&!e.completed.has(s)&&e.events.push([s,o])}))))})(_$HY={events:[],completed:new WeakSet,r:{},fe(){}});</script><!--xs--><astro-island uid="KktJd" data-solid-render-id="s0" component-url="/_astro/Search.DL7TElMc.js" component-export="default" renderer-url="/_astro/client.BfvbX4EV.js" props="{&quot;data&quot;:[1,[[0,{&quot;id&quot;:[0,&quot;01-driver-amentmen-x99-a4-update-w11/index.md&quot;],&quot;slug&quot;:[0,&quot;01-driver-amentmen-x99-a4-update-w11&quot;],&quot;body&quot;:[0,&quot;\r\nЕсть много способов установить и обновить Windows 11 на материнской плате Amentmen X99-A4, даже если она не поддерживается. Ниже приведен пример одного из способов:\r\n\r\n1. Перейдите на официальный сайт и скачайте MediaCreationTool_Win11_23H2 (https://go.microsoft.com/fwlink/?linkid=2156295). Установите программу, загрузите образ и сохраните его в файл формата .iso.\r\n\r\n2. Скачайте архив с GitHub по ссылке https://github.com/AveYo/MediaCreationTool.bat и распакуйте. Перейдите в папку bypass11 и запустите файл Skip_TPM_Check_on_Dynamic_Update.cmd от имени администратора. Дождитесь завершения процесса.\r\n\r\n3. Затем монтируйте скачанный образ Windows 11 (щелкните правой кнопкой мыши =&gt; Монтировать), затем откройте \&quot;Этот компьютер\&quot; =&gt; \&quot;Смонтированный образ\&quot; =&gt; setup.exe и выполните обновление системы.\r\n\r\nСсылки на архивы с драйверами:\r\n-\tДрайвер на сетевую карту: https://disk.yandex.ru/d/gvl5SqdGy7ZUiQ\r\n-\tДрайвер на аудио карту: https://disk.yandex.ru/d/mybkjx8jN7R1IQ\r\n-\tДрайвер на чипсет: https://disk.yandex.ru/d/Jloa3jtzhkSyAg&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Драйвера Amentmen X99-A4 + обновление до Windows 11&quot;],&quot;summary&quot;:[0,&quot;Техподдержка через WhatsApp предоставила драйверы для аудио и сетевой карты, которые были автоматически обновлены с Microsoft, а драйвер для чипсета загружен с официального сайта Intel.&quot;],&quot;date&quot;:[3,&quot;2024-05-22T21:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;Amentmen&quot;],[0,&quot;Windows 11&quot;],[0,&quot;driver&quot;]]],&quot;draft&quot;:[0,false]}],&quot;render&quot;:[0,null]}],[0,{&quot;id&quot;:[0,&quot;02-KMS-service.md&quot;],&quot;slug&quot;:[0,&quot;02-kms-service&quot;],&quot;body&quot;:[0,&quot;&gt; Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.\r\n\r\nВ данной статье будет описан процесс настройки сервера активации продуктов Microsoft в небольшой корпоративной сети с использованием дистрибутива от @Wind4, доступного на GitHub по ссылке &lt;https://github.com/Wind4/vlmcsd&gt;. Для этого потребуется операционная система Debian/Ubuntu, CentOS/Fedora или любая другая по вашему усмотрению, включая даже BusyBox, если вы имеете достаточные навыки для работы с ним.\r\n# Установка\r\n### Система требований\r\n| \t\t\t\t\t| \t\t\t\t\t\t\t\t\t|\r\n| --------- | ----------------- |\r\n| Процессор | 1 ядро / &gt; 2 Ггц\t|\r\n| Озу \t\t\t| &gt; 1Гб\t\t\t \t\t\t\t|\r\n\r\nЭтого достаточно для создания только KMS-сервера, но ничто не мешает использовать этот сервер для размещения ботов и других полезных инструментов, не забудьте увеличить мощность по потребности.\r\n\r\n- Далее все делаем из под **root** прав.\r\n\r\n## Шаг первый, подготовка\r\n### CentOS\\Fedora\\RHEL\r\n``` sh\r\ndnf update\r\ndnf install git gcc make netstat \r\n```\r\n### debian\\Ubuntu\r\n``` sh\r\napt update\r\napt install git gcc make netstat\r\n```\r\n#### Установки сетевого экрана (firewall)\r\n``` sh\r\napt install iptables\r\n```\r\n\r\nили \r\n\r\n``` sh\r\napt install firewalld\r\n```\r\n\r\nсмотря кому что нравиться, **можно и без него**.\r\n\r\n## Шаг второй\r\n``` sh\r\ngit clone https://github.com/Wind4/vlmcsd\r\ncd vlmcsd\r\nmake\r\ncd bin\r\n./vlmcsd\r\n```\r\nДалее наблюдаем ответ сервера\r\n&gt;Connecting to 127.0.0.1:1688 ... successful\r\n&gt;Sending activation request (KMS V6) 1 of 1 -&gt; 55041-00206-559-475403-03-1076-6002.0000-1482020 (3A1C049600B60076)\r\n\r\nПо умолчанию vlmcsd слушает на стандартном порту KMS — TCP/1688. \r\n\r\n## Шаг третий firewall\r\n\r\nЕсли вы не хотите затруднять себя настройкой firewalld\\iptables, можно пропустить этот шаг. Однако, если вам необходимо разрешить подключения клиентов к серверу через firewalld\\iptables, вам нужно выполнить следующие команды:\r\n\r\n**firewall-cmd**\r\n``` sh\r\nfirewall-cmd --list-port\r\nfirewall-cmd --zone=public --add-port=1688/tcp\r\nfirewall-cmd --reload\r\nnetstat -ntlp | grep LISTEN\r\n```\r\n**iptables**\r\n``` sh\r\niptables -A INPUT -p tcp --dport 1688 -j ACCEPT\r\nservice iptables save\r\nservice iptables restart\r\nnetstat -ntlp | grep LISTEN\r\n```\r\n\r\n## Шаг четвертый Автозапуск демона\r\n\r\nДелаем автоматический старт при запуске сервера\r\n``` sh\r\ncp vlmcsd /usr/bin\r\ncp vlmcs /usr/bin\r\ntouch /etc/systemd/system/kms-autostart.service\r\nchmod 664 /etc/systemd/system/kms-autostart.service\r\nnano /etc/systemd/system/kms-autostart.service\r\n```\r\n\r\nДобавляем в файл следущие параметры\r\n``` sh\r\n[Unit]\r\nDescription=Microsoft KMS Server\r\nAfter=network.target\r\nAfter=network-online.target\r\nWants=network-online.target\r\n \r\n[Service]\r\nType=oneshot\r\nExecStart=/usr/bin/vlmcsd\r\nRemainAfterExit=yes\r\nLimitNOFILE=65536\r\n \r\n[Install]\r\nWantedBy=multi-user.target\r\n```\r\n\r\nВыпускаем демона\r\n``` sh\r\nsystemctl daemon-reload\r\nsystemctl start kms-autostart.service\r\nsystemctl status kms-autostart.service\r\nsystemctl enable kms-autostart.service\r\n```\r\n## Шаг пятый, запись на DNS сервер в доменной сети\r\n\r\nКоманада для **PowerShell**\r\n``` ps1\r\nAdd-DnsServerResourceRecord -Srv -Name \&quot;_VLMCS._tcp\&quot; -ZoneName \&quot;fipi.pro\&quot; -DomainName \&quot;192.168.0.2\&quot; -Priority 0 -Weight 0 -Port 1688\r\n```\r\nРедактируйте под себя. \r\n- ZoneName \&quot;fipi.pro\&quot; Зона в вашей доменной сети. \r\n- 192.168.0.2 IP адрес вашего Linux сервера со службой KMS.\r\n\r\nТеперь все хосты Windows (и Office) в домене будут автоматически активироваться на KMS сервере, если на них установлен публичный ключ корпоративной активации (GVLK). \r\n\r\n### Вот краткий список часто исполбзуюмых ключей.\r\n| Operating system edition\t\t\t\t| KMS Client Product Key\t\t\t\t|\r\n| ------------------------------- | -----------------------------\t|\r\n| Windows Server 2022 Standard \t\t| VDYBN-27WPP-V4HQT-9VMD4-VMK7H |\r\n| Windows Server 2022 Datacenter\t| WX4NM-KYWYW-QJJR4-XV3QB-6VM33\t|\r\n| Windows 11 \\ 10 Pro\t\t\t\t\t\t\t| W269N-WFGWX-YVC9B-4J6C9-T83GX\t|\r\n| Windows 8.1 Pro\t\t\t\t\t\t\t\t\t| GCRJD-8NW9H-F2CDX-CCM8D-9D6T9\t|\r\n| Windows 7 Professional\t\t\t\t\t| FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4\t|\r\n\r\nВ для остальных версий ключи подбирайте здесь:\r\n&gt; &lt;https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys&gt;\r\n## Шаг активации клинтов\r\n\r\nДля ручной активации Windows нужно задать GVLK ключ для вашей версии Windows, адрес сервера KMS активации и выполнить команду активации. Используются следующие команды (например, для Windows Server 2022 Std):\r\n\r\nКоманада для **PowerShell** от ***прав Администратора***\r\n``` ps1\r\nslmgr.vbs -ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H\r\nslmgr.vbs -skms 192.168.0.2\r\nslmgr.vbs -ato\r\n```\r\nДля Активации Microsoft Office 2021/2019\r\n\r\n``` ps1\r\ncd C:\\Program Files\\Microsoft Office\\Office16\r\ncscript ospp.vbs /sethst: 192.168.0.2\r\ncscript ospp.vbs /act\r\n```\r\n\r\nВ некоторых версия windows команда будет такая \r\n\r\n``` ps1\r\ncd &#39;C:\\Program Files\\Microsoft Office\\Office16\\&#39;\r\ncscript ospp.vbs /sethst: 192.168.0.2\r\ncscript ospp.vbs /act\r\n```\r\n\r\nДля Активации Microsoft Office 2016\r\n\r\n``` ps1\r\ncd C:\\Program Files\\Microsoft Office\\Office15\r\ncscript ospp.vbs /sethst: 192.168.0.2\r\ncscript ospp.vbs /act\r\n```\r\n\r\n## Шаг активации Windows server 2022 \r\n\r\nКачаем оригинальную версию Winodws Server 2022\r\n&gt; &lt;https://www.microsoft.com/ru-ru/evalcenter/evaluate-windows-server-2022&gt;\r\n\r\nИ до ввода ключа активации получаем ServerStandardEval\r\n\r\nПроверяем возможные версии для обновления:\r\n``` ps1\r\nDISM /online /Get-TargetEditions\r\n```\r\nВ данном случае мы хотим выполнить апгрейд Eval редакции до Retail версии Windows Server 2022 Standard. Найдите и скопируйте GVLK ключ для этой версии и редакции Windows Server из таблицы и выполните команду:\r\n``` ps1\r\ndism /online /set-edition:ServerStandard /productkey:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx /accepteula\r\n```\r\nПерезагружаемся и деалем активацию как было описанно выше.\r\n``` ps1\r\nslmgr /skms 192.168.0.2:1688\r\nslmgr /ato\r\n```\r\n\r\n#### Вдруг пригодиться\r\n\r\nУдалите текущий GVLK ключ:\r\n``` ps1\r\nslmgr.vbs /upk\r\nslmgr.vbs /cpky\r\n```\r\n\r\nПроверьте, что Windows активирована:\r\n``` ps1\r\nGet-CimInstance SoftwareLicensingProduct -Filter \&quot;Name like &#39;Windows%&#39;\&quot; | where { $_.PartialProductKey } | select Description, LicenseStatus\r\n```\r\n&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Активация Windows в организации через KMS server&quot;],&quot;summary&quot;:[0,&quot;Небольшой гайд об активации операционной windows 7/8/10/11 server без установки crack и отключения антивируса.&quot;],&quot;date&quot;:[3,&quot;2024-06-10T21:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;Windows 11&quot;],[0,&quot;Windows 10&quot;],[0,&quot;Windows server&quot;],[0,&quot;KMS&quot;],[0,&quot;Активация windows&quot;]]],&quot;draft&quot;:[0,false]}],&quot;render&quot;:[0,null]}],[0,{&quot;id&quot;:[0,&quot;03-BOT-Support.md&quot;],&quot;slug&quot;:[0,&quot;03-bot-support&quot;],&quot;body&quot;:[0,&quot;# Бот техподдержки пользователя\r\n \r\nПользователи пишут свои вопросы боту компании, бот пересылает эти сообщения в чат поддержки, сотрудники поддержки отвечают на эти сообщения через reply. Основной плюс - анонимизация сотрудников поддержки.\r\n\r\nБот работает в режиме webhook, но может работать и в режиме polling.\r\n\r\nДля обхода запрета на пересылку сообщений у пользователя, бот копирует содержимое и уже затем отправляет его в чат поддержки.\r\n\r\nПо умолчанию бот отправляет сообщения в один чат поддержки с id, указанным в переменных окружения .env.\r\n\r\n## Бот умеет\r\n\r\n- Пересылать сообщения, документы, аудио и видео от пользователя в группу к администраторам и обратно\r\n- Выдавать информацию о пользователе из Telegram\r\n- Выдавать месячный отчет и отчет за указанный интервал дат по количеству обращений и общему числу сообщений и ответов\r\n- Банить и разбанивать пользователей\r\n\r\n## Типы контента, которые может пересылать бот\r\n\r\n- Текстовые сообщения\r\n- Фотографии\r\n- Группы фотографий (пересылаются по одной)\r\n- Видео\r\n- Аудиозаписи\r\n- Файлы\r\n\r\n## Разворачивание образа на личном или vps сервере\r\n\r\n### Настройка Nignx\r\n\r\nПредполагается, что у вас есть готовый настроенный VPS сервер с установленным nginx.\r\n\r\n1. Перейти в каталог nginx `sites-available`:\r\n\r\n``` sh\r\ncd /etc/nginx/sites-available/\r\n```\r\n\r\n2. Создайте файл с именем вашего домена:\r\n\r\n``` sh\r\nnano domain.example.com\r\n```\r\n\r\n3. Внутри файла напишите:\r\n\r\n``` sh\r\nserver {\r\n listen 80;\r\n\r\n server_name domain.example.com;\r\n\r\n location /telegram/ {\r\n proxy_set_header Host $http_host;\r\n proxy_set_header X-Real-IP $remote_addr;\r\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n proxy_set_header X-Forwarded-Proto $scheme;\r\n proxy_pass http://127.0.0.1:7772;\r\n }\r\n}\r\n```\r\n\r\n`server_name` - ваш домен с подключенным SSL сертификатом (например, Let&#39;s Encrypt). Вместо `/telegram/` можно написать любой путь, на который должны приниматься данные. Этот же путь нужно указать в `.env` файле.\r\n\r\n4. Создайте символическую ссылку в каталоге `sites-enabled`\r\n\r\n```sh\r\nsudo ln -s /etc/nginx/sites-available/domain.example.com /etc/nginx/sites-enabled/\r\n```\r\n5. Проверьте конфигурацию nginx на ошибки:\r\n```sh\r\nsudo nginx -t\r\n```\r\n\r\n6. Перезапустить службу nginx:\r\n```sh\r\nsudo systemctl restart nginx\r\n```\r\n\r\n7. Установить certbot:\r\n``` sh\r\nsudo apt install -y certbot python3-certbot-nginx\r\n```\r\n\r\n8. Установите HTTPS соединение, выпустив SSL сертификат с помощью certbot для вашего домена:\r\n```sh\r\nsudo certbot --nginx \r\n```\r\n9. Добавить автоматическое обновление сертификата:\r\n```sh\r\nsudo certbot renew --dry-run\r\n```\r\n\r\nМожно на всякий случай еще раз перезапустить nginx.\r\n\r\n### Запуск бота\r\n\r\n1. Создайте бота через BotFather (см. ниже), добавьте бота в группу с сотрудниками поддержки, дайте боту права администратора, узнайте id группы (см. ниже).\r\n2. Скопируйте этот репозиторий на сервер любым удобным способом.\r\n3. Создайте .env файл в корне со следующим содержанием:\r\n```sh\r\nTELEGRAM_TOKEN=&lt;телеграм_токен_вашего_бота&gt;\r\nGROUP_ID=&lt;id_группы_или_супергруппы_в_телеграме&gt;\r\nWEBHOOK_DOMAIN=domain.example.com\r\nWEBHOOK_PATH=/telegram/\r\nAPP_HOST=0.0.0.0\r\nAPP_PORT=7772\r\nDATABASE_URL=postgresql+asyncpg://&lt;postgres_user&gt;:&lt;postgres_password&gt;@&lt;postgres_container_name&gt;:5432/support_bot_db\r\nDB_HOST=&lt;имя_контейнера_с_БД&gt;\r\nDB_PORT=5432\r\nPOSTGRES_USER=&lt;postgres_user&gt;\r\nPOSTGRES_PASSWORD=&lt;postgres_password&gt;\r\nSTART_MESSAGE=&lt;Приветственное сообщение бота, когда клиент нажимает кнопку start&gt;\r\n```\r\nВ качестве теста логин пользователя БД, пароль и название БД можно указать postgres. Только для теста, не для продакшена!\r\n\r\n4. Запустить сборку docker-образа и его запуск из файла `docker-compose`:\r\n```sh\r\nsudo docker-compose up -d --build\r\n```\r\nКлюч `-d` для того чтобы контейнер запустился в фоне.\r\n\r\n5. Зайдите в контейнер с базой данных, создайте базу данных, выдайте права на нее пользователю (в данном случае postgres):\r\n```sh\r\ndocker exec -it support-bot-db psql -U postgres\r\n\\l #убеждаемся, что базы данных нет\r\ncreate database support_bot_db;\r\ngrant all privileges on database support_bot_db to postgres;\r\n\\q #выходим из psql\r\n```\r\n\r\n6. Применить миграции:\r\n```sh\r\ndocker exec -it support-bot alembic upgrade head\r\n```\r\n\r\n### Где что брать\r\n1. `WEBHOOK_DOMAIN` - домен с подключенным ssl сертификатом\r\n2. `WEBHOOK_PATH` - URL путь после домена. В данном случае `WEBHOOK_DOMAIN` + `WEBHOOK_PATH` будет `domain.example.com/telegram/`.\r\n3. Token получаем при создании бота через BotFather [BotFather](https://t.me/BotFather).\r\n4. Свой личный id или id группы можно узнать через бота [myidbot](https://t.me/myidbot). Узнать свой id - написать боту в личку, узнать id группы - добавить бота в чат группы (например группы поддержки), затем ввести команду `/getgroupid`.\r\n5. `APP_HOST` - IP, на котором будет работать приложение (по умолчанию на хосте `127.0.0.1`, `localhost` или можно указать `0.0.0.0`).\r\n6. `APP_PORT` - порт, который приложение будет использовать. Порт должен быть уникальным и не дублировать порты других приложений, работающих на сервере или в Docker.\r\n\r\n## Запуск в режиме polling (на локальном компьютере)\r\n1. Скопируйте репозиторий на локальный компьютер.\r\n2. Создайте файл `.env` (см. выше).\r\n3. В файле `.env` удалить (закомментировать) `WEBHOOK_DOMAIN`. Пропишите свои переменные окружения. Так же пропишите переменные окружения в файле `docker-compose-postgres-localhost.yaml`\r\n4. Установить виртуальное окружение, активировать его, \r\n установить зависимости из `requirements.txt`:\r\n```sh\r\npython -m venv venv\r\npip install -r requirements.txt\r\n```\r\n5. В докере запустить контейнер с базой данных из файла `docker-compose-postgres-localhost.yaml`: \r\n```sh\r\ndocker-compose -f docker-compose-postgres-localhost up -d\r\n```\r\n6. Применить миграцию.\r\n```sh\r\nalembic upgrade head\r\n```\r\n7. Если alembic ругается, что базы данных не существует, создайте ее вручную и выйдите из psql. Затем попробуйте выполнить миграцию повторно:\r\n```sh\r\ndocker exec -it postgres psql -U postgres\r\n# далее в psql\r\ncreate database support_bot_db;\r\ngrant all privileges on database support_bot_db to postgres;\r\n```\r\n8. Запустить `main.py`:\r\n```sh\r\npython main.py\r\n```\r\nДля запуска необходим python 3.9 или выше.\r\n \r\n## Команды бота\r\nВ **чате поддержки** доступны следующие команды:\r\n\r\n`/info` - Команда вводится через reply на вопрос пользователя и выдает информацию о нем (имя, фамилия, id, никнейм, а также количество сообщений от пользователя и ответов пользователю. Последние два берутся из созданной базы данных).\r\n\r\n`/report` - Отчет по количеству клиентов за месяц, сообщений от них и количество ответов администраторов.\r\n\r\n`/report 01.01.2020 15.06.2024` - Отчет за выбранный период. Две любые даты через пробел, по шаблону.\r\n\r\n`/ban` - Команда вводится через reply на вопрос пользователя. Банит пользователя. Сообщения от него будут игнорироваться ботом.\r\n`/unban` - Команда вводится через reply на вопрос пользователя. Разбанивает пользователя.\r\n\r\n`/banlist` - Список забаненных пользователей. Выводит список пользователей в формате `id - имя_фамилия`.\r\n\r\n`/registeradmin` - Регистрирует нового администратора в чате поддержки. Также администратор регистрируется автоматически, если ответит на сообщение клиента через reply. Это сделано на случай, если забыли зарегистрировать администратора, а он уже отвечает на сообщения.\r\n\r\n`/deleteadmin` - Удаляет права администратора у пользователя в чате поддержки. После удаления прав администратора нужно вручную удалить пользователя из группы Telegram.\r\n\r\n## Автозапуск бота \r\n1. Создание службы:\r\nСоздайте файл службы для вашего бота, например `my_bot.service`:\r\n```sh\r\nsudo nano /etc/systemd/system/my_bot.service\r\n```\r\n2. Редактирование службы:\r\nВнесите следующие настройки в файл службы:\r\n```sh\r\n[Unit]\r\nDescription=My Python Telegram Bot\r\nAfter=network.target\r\n\r\n[Service]\r\nUser=your_username\r\nGroup=your_groupname\r\nWorkingDirectory=/path/to/your/bot\r\nExecStart=/path/to/your/python /path/to/your/bot/main.py\r\nRestart=always\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n```\r\nЗамените `your_username`, `your_groupname`, `/path/to/your/bot`, и `/path/to/your/python` на соответствующие значения для вашей среды. Убедитесь, что `ExecStart` указывает на правильный путь к вашему скрипту Python бота.\r\n\r\n3. Перезагрузка systemd:\r\nПосле того как вы сохранили изменения, перезагрузите systemd для применения новой службы:\r\n```sh\r\nsudo systemctl daemon-reload\r\n```\r\n4. Управление службой:\r\nТеперь вы можете управлять вашим ботом как службой. Например, чтобы запустить его и настроить автозапуск при загрузке системы, выполните следующие команды:\r\n```sh\r\nsudo systemctl start my_bot\r\nsudo systemctl enable my_bot\r\n```\r\nЧтобы проверить статус вашей службы, выполните:\r\n```sh\r\nsudo systemctl status my_bot\r\n```&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Хватит терять заявки пользователей&quot;],&quot;summary&quot;:[0,&quot;Пора сделать бота для принятия заявок от пользователей всем IT отделом.&quot;],&quot;date&quot;:[3,&quot;2024-06-11T21:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;Python&quot;],[0,&quot;Telegram&quot;],[0,&quot;BOT&quot;]]],&quot;draft&quot;:[0,false]}],&quot;render&quot;:[0,null]}],[0,{&quot;id&quot;:[0,&quot;04-office-2021.md&quot;],&quot;slug&quot;:[0,&quot;04-office-2021&quot;],&quot;body&quot;:[0,&quot;&gt; Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.\r\n\r\n# Качаем\r\n\r\nСкачайте Microsoft Office Deployment Tool \r\n\r\n&gt; &lt;https://www.microsoft.com/en-us/download/details.aspx?id=49117&gt;\r\n\r\nЗапускаем файл **officedeploymenttool_17531-20046.exe** и распакуйте содержимое Office Click-to-Run Administrator Tool в локальный каталог на компьютере.\r\n\r\nВ каталоге установки находятся четыре XML файла с образцами конфигурации: __configuration-Office365-x64.xml__, __configuration-Office365-x86.xml__, __configuration-Office2021Enterprise.xml__ и __configuration-Office2021Enterprise.xml__. Программа setup.exe используется для загрузки дистрибутива и установки пакета Office на клиенте.\r\n\r\nПример конфигурационного файла *.xml:\r\n``` xml\r\n&lt;Configuration&gt;\r\n\t&lt;Add OfficeClientEdition=\&quot;64\&quot; Channel=\&quot;PerpetualVL2021\&quot;&gt;\r\n\t\t&lt;Product ID=\&quot;ProPlus2021Volume\&quot;&gt;\r\n\t\t\t&lt;Language ID=\&quot;en-us\&quot; /&gt;\r\n\t\t&lt;/Product&gt;\r\n\t\t&lt;Product ID=\&quot;VisioPro2021Volume\&quot;&gt;\r\n\t\t\t&lt;Language ID=\&quot;en-us\&quot; /&gt;\r\n\t\t&lt;/Product&gt;\r\n\t\t&lt;Product ID=\&quot;ProjectPro2021Volume\&quot;&gt;\r\n\t\t\t&lt;Language ID=\&quot;en-us\&quot; /&gt;\r\n\t\t&lt;/Product&gt;\r\n\t&lt;/Add&gt;\r\n\t&lt;!-- &lt;RemoveMSI All=\&quot;True\&quot; /&gt; --&gt;\r\n\t&lt;!-- &lt;Display Level=\&quot;None\&quot; AcceptEULA=\&quot;TRUE\&quot; /&gt; --&gt;\r\n\t&lt;!-- &lt;Property Name=\&quot;AUTOACTIVATE\&quot; Value=\&quot;1\&quot; /&gt; --&gt;\r\n&lt;/Configuration&gt;\r\n```\r\n\r\nРассмотрим основные параметры:\r\n\r\n- `OfficeClientEdition=\&quot;64\&quot;` установка 64-битной версии Office 2021;;\r\n- `Channel=\&quot;PerpetualVL2021\&quot;` установка Office 2021 по системе корпоративного лицензирования (Volume License);\r\n- `&lt;Language ID=\&quot;en-us\&quot; /&gt;` — установка английской версии Office. Для русской версии укажите ru-ru;\r\n- `&lt;!-- &lt;RemoveMSI All=\&quot;True\&quot; /&gt; --&gt;` — удаление старых версий Office, установленных через Windows MSI. Этот параметр закомментирован, но его нужно включить перед установкой Office 2021, чтобы избежать ошибок;\r\n- `&lt;Product ID=\&quot;ProPlus2021Volume\&quot; PIDKEY=\&quot;\&quot; &gt;` — указание компонентов пакета Office (например, ProPlus2021Volume, ProjectPro2021Volume, VisioPro2021Volume), которые нужно установить. В параметре `PIDKEY=\&quot;\&quot;` можно указать ваш корпоративный ключ (обычно это MAK ключ);\r\n- Используя директиву `&lt;ExcludeApp ID=\&quot;PowerPoint\&quot; /&gt;`, можно установить только выбранные приложения Office (по умолчанию установщик C2R устанавливает все приложения пакета Office).\r\n\r\nПодробное описание всех параметров:\r\n\r\n&gt; &lt;https://learn.microsoft.com/en-us/deployoffice/office2019/deploy#create-the-configurationxml&gt;\r\n\r\nСоздание файла конфигурации под ваши конкретные параметры:\r\n\r\n&gt; &lt;https://config.office.com/&gt;\r\n\r\nПосле создания XML файла, скачайте дистрибутив для установки Office 2021. Выполните команду:\r\n\r\n``` bash\r\nSetup.exe /download configuration-Office2021Enterprise.xml\r\n```\r\n- В случае неудачи скачивания, запустите VPN, можете воспользоваться нашим сервисом.\r\n\r\n&gt; &lt;https://t.me/Dig_for_bot&gt;\r\n\r\nПосле завершения загрузки в каталоге Microsoft Office Deployment Tool появится папка Office (содержит cab и dat файлы для установки Office 2021) размером около 2 Гб.\r\n\r\n## Локальная установка \r\nДля начала установки Office 2021 выполните команду:\r\n``` bash\r\nSetup.exe /configure configuration-Office2021Enterprise.xml\r\n```\r\nПосле завершения установки Office 2021 Enterprise или любого другого пакета, вы можете активировать продукт.\r\n\r\n## Сетевая установка\r\nПолученный пакет можно использовать для установки Office 2021 на компьютеры пользователей. Чтобы каждый компьютер не загружал установочные файлы Office 2021 из сети CDN, а использовал локальную копию, укажите путь к каталогу с файлами установки Office в XML файле. Например:\r\n\r\n``` xml\r\n&lt;Add SourcePath=\&quot;\\\\FS1\\Distr\\Office2021\&quot; OfficeClientEdition=\&quot;64\&quot; Channel=\&quot;PerpetualVL2021\&quot;&gt;\r\n```\r\nТеперь вы можете скопировать каталог Microsoft Office Deployment Tool с XML файлами и дистрибутивом Office 2021 в сетевой каталог или на сервер SCCM.\r\n&quot;],&quot;collection&quot;:[0,&quot;blog&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Установливаем последний Microsoft Office с официального сайта.&quot;],&quot;summary&quot;:[0,&quot;Инструкция по установке последней версии Microsoft Office с официального сайта. В статье описаны шаги загрузки установочного файла, процесс установки и активации Office, а также советы по устранению возможных проблем.&quot;],&quot;date&quot;:[3,&quot;2024-06-12T21:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;Microsoft Office&quot;]]],&quot;draft&quot;:[0,false]}],&quot;render&quot;:[0,null]}],[0,{&quot;id&quot;:[0,&quot;project-1/index.md&quot;],&quot;slug&quot;:[0,&quot;project-1&quot;],&quot;body&quot;:[0,&quot;\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.\r\n&quot;],&quot;collection&quot;:[0,&quot;projects&quot;],&quot;data&quot;:[0,{&quot;title&quot;:[0,&quot;Project One&quot;],&quot;summary&quot;:[0,&quot;Lorem ipsum dolor sit amet&quot;],&quot;date&quot;:[3,&quot;2022-03-17T21:00:00.000Z&quot;],&quot;tags&quot;:[1,[[0,&quot;Astro&quot;],[0,&quot;Javascript&quot;],[0,&quot;Typescript&quot;],[0,&quot;Tailwind&quot;],[0,&quot;SolidJs&quot;]]],&quot;draft&quot;:[0,false],&quot;demoUrl&quot;:[0,&quot;https://astro-sphere-demo.vercel.app&quot;],&quot;repoUrl&quot;:[0,&quot;https://github.com/markhorn-dev/astro-sphere&quot;]}],&quot;render&quot;:[0,null]}]]]}" ssr="" client="load" opts="{&quot;name&quot;:&quot;Search&quot;,&quot;value&quot;:true}" await-children=""><div data-hk="s00-0-0-0" class="flex flex-col"><div class="relative"><input name="search" type="text" value="" autocomplete="off" spellcheck="false" placeholder="What are you looking for?" class="w-full px-2.5 py-1.5 pl-10 rounded outline-none text-black dark:text-white bg-black/5 dark:bg-white/15 border border-black/10 dark:border-white/20 focus:border-black focus:dark:border-white"><svg class="absolute size-6 left-1.5 top-1/2 -translate-y-1/2 stroke-current"><use href="/ui.svg#search"></use></svg></div><!--$--><!--/--></div><!--astro:end--></astro-island> </div> </div> </div> </main> <footer class="relative bg-white dark:bg-black"> <div class="animate"> <section class="py-5"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="flex items-center justify-center sm:justify-end"> <button id="back-to-top" aria-label="Back to top of page" class="group flex w-fit p-1.5 gap-1.5 text-sm items-center border rounded hover:bg-black/5 hover:dark:bg-white/10 border-black/15 dark:border-white/20 transition-colors duration-300 ease-in-out"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="stroke-current group-hover:stroke-black group-hover:dark:stroke-white rotate-90"> <line x1="19" y1="12" x2="5" y2="12" class="scale-x-0 group-hover:scale-x-100 translate-x-3 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></line> <polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out"></polyline> </svg> <div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
В начало
</div> </button> </div> </div> </section> <section class=" py-5 overflow-hidden whitespace-nowrap border-t border-black/10 dark:border-white/25"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-3"> <div class="flex flex-col items-center sm:items-start"> <a href="/" class="flex gap-1 w-fit font-semibold text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out"> <svg class="size-6 fill-current"> <use href="/brand.svg#brand"></use> </svg> Плата Управления РФ </a> </div> <div class="flex gap-2 justify-center sm:justify-end items-center"> <span class="relative flex h-3 w-3"> <span class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-300"></span> <span class="relative inline-flex rounded-full h-3 w-3 bg-green-500"></span> </span>
Все системы в норме
</div> </div> </div> </section> <section class=" py-5 overflow-hidden whitespace-nowrap border-t border-black/10 dark:border-white/25"> <div class="w-full h-full mx-auto px-5 max-w-screen-md"> <div class="h-full grid grid-cols-1 sm:grid-cols-2 gap-3"> <div class="order-2 sm:order-1 flex flex-col items-center justify-center sm:items-start"> <div class="legal"> <a href="/legal/terms" class="text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out">
Условия использования
</a> |
<a href="/legal/privacy" class="text-current hover:text-black dark:hover:text-white transition-colors duration-300 ease-in-out">
Конфиденциальности
</a> </div> <div class="text-sm mt-2">
&copy; 2024 | @iTKeyS
</div> </div> <div class="order-1 sm:order-2 flex justify-center sm:justify-end"> <div class="flex flex-wrap gap-1 items-center justify-center"> <a href="mailto:krasilnikoff.tihon@gmail.com" target="_blank" aria-label="Плата Управления РФ on Email" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#email"></use> </svg> </a><a href="https://git.fipi.pro/Plata_Upravleniya_RF" target="_blank" aria-label="Плата Управления РФ on Github" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#github"></use> </svg> </a><a href="https://www.youtube.com/@plata_upravleniya_rf" target="_blank" aria-label="Плата Управления РФ on YouTube" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#youtube"></use> </svg> </a><a href="https://t.me/plata_upravleniya_rf" target="_blank" aria-label="Плата Управления РФ on Telegram" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#telegram"></use> </svg> </a><a href="https://t.me/plata_upravleniya_rf_bot" target="_blank" aria-label="Плата Управления РФ on Telegram BOT" class="group size-10 rounded-full p-2 items-center justify-center hover:bg-black/5 dark:hover:bg-white/20 blend"> <svg class="size-full fill-current group-hover:fill-black group-hover:dark:fill-white blend"> <use href="/social.svg#telegram"></use> </svg> </a> </div> </div> </div> </div> </section> </div> </footer> <script>
function goBackToTop(event) {
event.preventDefault()
window.scrollTo({
top: 0,
behavior: "smooth"
})
}
function inintializeBackToTop() {
const backToTop = document.getElementById("back-to-top")
backToTop?.addEventListener("click", goBackToTop)
}
document.addEventListener("astro:after-swap", inintializeBackToTop)
inintializeBackToTop()
</script> </body></html>