[{"data":1,"prerenderedAt":755},["ShallowReactive",2],{"i-lucide:search":3,"i-lucide:sun":8,"i-lucide:menu":10,"marketing-home-hy":12,"home-faq-hy":201,"home-latest-hy":260,"i-lucide:copy":715,"i-lucide:plug":717,"i-lucide:globe":719,"i-lucide:lock":721,"i-lucide:archive":723,"i-lucide:scroll-text":725,"i-lucide:refresh-cw":727,"i-lucide:layout-dashboard":729,"i-lucide:shield-check":731,"i-lucide:database":733,"i-lucide:minus":735,"i-lucide:check":737,"i-lucide:x":739,"i-lucide:terminal":741,"i-lucide:file-check":743,"i-lucide:fingerprint":745,"i-lucide:eye-off":747,"i-lucide:building-2":749,"i-lucide:users":751,"i-lucide:server":753},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"/>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"/>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"/>",{"doc":13,"isFallback":6},{"id":14,"title":15,"architectureHeading":16,"architectureIntro":17,"architectureNote":18,"architectureProcesses":19,"audienceGroups":39,"audienceHeading":52,"audienceIntro":53,"body":54,"coverCaption":61,"ctaBody":62,"ctaLabel":63,"ctaPath":64,"ctaTitle":65,"description":66,"extension":67,"eyebrow":68,"faqCtaLabel":69,"faqCtaPath":70,"faqHeading":71,"faqIntro":72,"headline":73,"highlights":74,"installCaption":89,"installCommand":90,"latestHeading":91,"latestIntro":92,"licenceBody":93,"licenceCtaLabel":94,"licenceCtaPath":95,"licenceHeading":96,"licencePoints":97,"meta":108,"navigation":32,"path":109,"pillars":110,"platformsCtaLabel":134,"platformsCtaPath":135,"platformsFamilies":136,"platformsHeading":148,"platformsIntro":149,"platformsNote":150,"primaryCtaLabel":63,"primaryCtaPath":64,"secondaryCtaLabel":151,"secondaryCtaPath":135,"securityCtaLabel":152,"securityCtaPath":153,"securityHeading":154,"securityIntro":155,"securityPoints":156,"seo":171,"seoTitle":172,"statusCtaLabel":173,"statusCtaPath":174,"statusHeading":175,"statusIntro":176,"statusMissing":177,"statusShipped":181,"stem":188,"steps":189,"subhead":199,"__hash__":200},"marketingHy/hy/marketing/home.md","Maran — հոսթինգի կառավարման վահանակ Linux սերվերների համար","Երեք գործընթաց, և root-ը պատկանում է մեկին","Այս բաժանումը արտադրանքի գլխավոր նախագծային որոշումն է։ Այս էջի մնացած ամեն ինչ բխում է դրանից։","Վահանակը գործակալից խնդրում է անվանված գործողություններ՝ տիպավորված և ստուգված արգումենտներով։ Չկա գործողություն, որը գործարկում է փոխանցված ծրագիրը, և նրանց միջև ոչ մի տեղ shell-տող չկա — ուստի այն, ինչ կարելի է ստիպել անել root գործընթացին, վերջավոր է, գրված և ստուգելի։",[20,26,33],{"name":21,"role":22,"runsAs":23,"holds":24,"icon":25},"maran-api","Ինքը վահանակը","ոչ արտոնյալ համակարգային օգտվողի","ամբողջ բիզնես-տրամաբանությունը և բազայի միակ միացումը","lucide:layout-dashboard",{"name":27,"role":28,"runsAs":29,"holds":30,"icon":31,"privileged":32},"maran-agent","Միակ գործընթացը root-ով","root-ի","ոչինչ — առանց վիճակի, առանց բազայի, առանց սեփական կարգավորման","lucide:shield-check",true,{"name":34,"role":35,"runsAs":36,"holds":37,"icon":38},"PostgreSQL","Վահանակի տվյալները","սեփական օգտվողի","հաշիվներ, կայքեր, աուդիտի մատյան — unix-սոկետի վրա, առանց TCP պորտի","lucide:database",[40,44,48],{"icon":41,"title":42,"body":43},"lucide:building-2","Հոսթինգի ընկերություններին","Կաբինետ յուրաքանչյուր հաճախորդի համար, սակագներ, որոնք սահմանափակում են հաշիվը, և provisioning API, որով բիլինգը հաշիվներ է ստեղծում առանց մարդու։",{"icon":45,"title":46,"body":47},"lucide:users","Գործակալություններին և ստուդիաներին","Հաճախորդների կայքերը մեկ սերվերի վրա, յուրաքանչյուրը՝ իր Linux օգտվողը՝ իր քվոտայով և PHP-ի տարբերակով, և աուդիտի մատյան, որը պատասխանում է՝ ով ինչ է փոխել։",{"icon":49,"title":50,"body":51},"lucide:server","Մեկ սերվերին, մեկ տիրոջը","Այն ամենը, ինչ պետք է մեկ մեքենային՝ տեղադրում մեկ հրամանով, թարմացումներ ստորագրված փաթեթներով և հետգլորում ևս մեկ հրամանով։","Ում համար է այն ստեղծված","Բազմավարձակալությունը արտադրանքում է առաջին թողարկումից, ոչ թե ավելացված է հետո, և դա երևում է նրանից, թե ում է այն սազում։",{"type":55,"value":56,"toc":57},"minimark",[],{"title":58,"searchDepth":59,"depth":59,"links":60},"",2,[],"Վահանակը՝ գծանկար, ոչ թե սքրինշոթ՝ հաշիվներ, կայքեր և աուդիտի մատյան մեկ սերվերի վրա։","Ճարտարապետությունը, վահանակի և գործակալի պայմանագիրը և այն, ինչ տեղադրիչն անում է սերվերի հետ՝ գրված, ոչ թե վերապատմված։","Բացել փաստաթղթերը","/docs","Կարդացեք, թե ինչպես է այն կառուցված, նախքան root-ը վստահելը","Կայքեր, PHP, SSL, տվյալների բազաներ, պահուստային պատճեններ և firewall՝ բրաուզերից, սերվերի վրա, որտեղ root-ը պահում է մեկ փոքր դեմոն, և այն shell-հրամաններ չի ընդունում։","md","Բաց ելակետային կոդով հոսթինգի վահանակ","Բոլոր հարցերը","/faq","Ինչ են հարցնում առաջին հերթին","Կարճ պատասխանները։ Մնացածը՝ հարցերի էջում։","Հոսթինգի վահանակ, որը root-ը պահում է իր մոտ",[75,78,82,85],{"icon":31,"title":76,"body":77},"Մեկ root գործընթաց","Վահանակն աշխատում է առանց արտոնությունների։ Root-ը պահում է Rust-ով գրված փոքր դեմոն, և նրա պայմանագրում չկա գործողություն, որը կգործարկի իրեն փոխանցված ծրագիր։",{"icon":79,"title":80,"body":81},"lucide:terminal","Ոչ մի shell-տող","Դոմենը ստուգվում է որպես դոմեն, ոչ թե պաշտպանվում է հրամանի տողում։ Այնտեղ տողի փոխադրման նիշ չկա, որ ավարտի մեկ դիրեկտիվը և սկսի մյուսը։",{"icon":45,"title":83,"body":84},"Իրական Linux օգտվողներ","Յուրաքանչյուր հաշիվ համակարգային օգտվող է՝ իր տնային պանակով, իր php-fpm լողավազանով իր uid-ի տակ և իր քվոտայով։",{"icon":86,"title":87,"body":88},"lucide:plug","Պատրաստ բիլինգի համար","Provisioning API-ն ստեղծում, կասեցնում և ջնջում է հաշիվներ, այնպես որ բիլինգը վարում է հոսթինգը առանց մարդու միջամտության։","Մեկ հրաման մաքուր սերվերի վրա։ Բոլոր ստուգումներն անցնում են մինչև որևէ բան փոխվելը։","curl -sSL https://get.maran.innovayse.com | bash","Ինչ նոր կա","Վերջին թողարկումը և վերջինը գրվածը այն մասին, թե ինչպես է այս ամենը կառուցված։","Maran-ը հրապարակվում է Business Source License 1.1-ով՝ Innovayse LLC-ի կողմից, և 2030 թվականի օգոստոսի 29-ին անցնում է Apache 2.0-ի։ Ամսաթիվը գրված է հենց արտոնագրում, ոչ թե խոստացված։","Կարդալ արտոնագիրը","/legal/licence","Բաց ելակետային կոդ, որը մնում է ձերը",[98,101,103,106],{"icon":99,"text":100},"lucide:check","Տեղադրեք և հյուրընկալեք ձեր սեփական հաճախորդներին, արտադրական միջավայրում, անվճար",{"icon":99,"text":102},"Կարդացեք, փոփոխեք և ներդրում ունեցեք — կոդը բաց է, հեղինակային իրավունքը մնում է ներդրողին",{"icon":104,"text":105},"lucide:x","Չի կարելի հենց Maran-ը երրորդ կողմերին առաջարկել որպես կառավարվող վահանակի ծառայություն",{"icon":104,"text":107},"Չի կարելի վերավաճառել կամ վերաարտոնագրել այն որպես ձեր սեփական առևտրային արտադրանք",{},"/hy/marketing/home",[111,115,119,122,126,130],{"icon":112,"title":113,"body":114},"lucide:globe","Կայքեր և PHP","Ստատիկ, PHP և reverse-proxy կայքեր՝ դոմենային կեղծանուններով։ Գործակալը ստուգում է յուրաքանչյուր գեներացված vhost հենց վեբ-սերվերով և հետ է գլորում, եթե վերբեռնումը մերժվի։",{"icon":116,"title":117,"body":118},"lucide:lock","SSL, որն ինքն է նորացվում","ACME՝ HTTP-01 ստուգմամբ, սեփական վկայագրերի վերբեռնում, նորացում ժամկետից երեսուն օր առաջ, և բանալիներ root-ի պահոցում՝ տնային պանակներից դուրս։",{"icon":38,"title":120,"body":121},"Բազաներ և ֆայլերի փոխանցում","Մեկ բազա և սահմանափակ օգտվող յուրաքանչյուր հաշվի համար, chroot-ված SFTP՝ հաշվի իսկական uid-ով, սակագնային սահմաններ երկուսի վրա էլ։",{"icon":123,"title":124,"body":125},"lucide:archive","Պատճեններ և firewall","Ֆայլերի և բազաների պահուստային պատճեններ՝ մեկ առ մեկ վերականգնվող, կառավարվող firewall և սերվերի վիճակի մոնիտորինգ։",{"icon":127,"title":128,"body":129},"lucide:scroll-text","Աուդիտի մատյան","Միայն ավելացվող՝ յուրաքանչյուր մուտք և յուրաքանչյուր փոփոխություն, էկրանով, որը բացվում է միայն ադմինիստրատորների համար։",{"icon":131,"title":132,"body":133},"lucide:refresh-cw","Ստորագրված, հետշրջելի թարմացումներ","Թարմացումները ստորագրված են, բազայի պատճենն արվում է նախքան որևէ բան փոխարինելը, և հետ են գլորվում մեկ հրամանով։","Տեսնել պահանջները","/platforms",[137,140,143,146],{"name":138,"versions":139},"Ubuntu","22.04 · 24.04 LTS",{"name":141,"versions":142},"Debian","12 · 13",{"name":144,"versions":145},"AlmaLinux","9 · 10",{"name":147,"versions":145},"Rocky Linux","Աշխատում է այնտեղ, որտեղ արդեն աշխատում են ձեր սերվերները","Մեկ հրաման մաքուր սերվերի վրա՝ այս համակարգերից ցանկացածով, x86_64 կամ aarch64 ճարտարապետությամբ։","Այս ցուցակից դուրս համակարգը տեղադրիչը մերժում է, ոչ թե գուշակում․ այն գիտի յուրաքանչյուր աջակցվող ընտանիքի փաթեթների դասավորությունն ու ծառայությունների անունները։ Արտադրական տեղադրումը նատիվ է, Docker-ն օգտագործվում է միայն մշակման ժամանակ։","Տեսնել աջակցվողը","Անվտանգության քաղաքականությունը","/security","Անվտանգ է կառուցվածքով, ոչ թե խոստումով","Կոդի չորս հատկություն՝ յուրաքանչյուրը կա՛մ ճիշտ է, կա՛մ ոչ, և յուրաքանչյուրը ստուգվում է կարդալով։",[157,159,163,167],{"icon":79,"title":80,"body":158},"Դոմենը ստուգվում է որպես դոմեն՝ տառեր, թվեր, գծիկներ, կետեր, և ոչ թե պաշտպանվում հրամանի տողում։ Այնտեղ տողի փոխադրման նիշ չկա, որ ավարտի մեկ դիրեկտիվը և սկսի մյուսը։",{"icon":160,"title":161,"body":162},"lucide:file-check","Կարգավորումը ստուգում է ինքը սերվերը","Յուրաքանչյուր գրառում գեներացվում է, ատոմային կերպով վերանվանվում տեղում և ստուգվում հենց ծառայության կողմից։ Եթե ստուգումը կամ վերբեռնումը մերժել է, ֆայլը հետ է գլորվում։",{"icon":164,"title":165,"body":166},"lucide:fingerprint","Գործակալը ստուգում է, թե ով է հարցնում","Գործընկերոջ հավաստագրերը կարդացվում են սոկետից մինչև գործողությունը դիտարկելը, ուստի դեմոնը գիտի, թե որ գործընթացն է մյուս ծայրում։",{"icon":168,"title":169,"body":170},"lucide:eye-off","Ուրիշի տողը պատասխանում է 404","Ուրիշի ռեսուրսի հարցումը ստանում է «չի գտնվել», ոչ թե «արգելված է» — սխալը երբեք չի հաստատում, որ տողը գոյություն ունի։",{"title":15,"description":66},"Maran — հոսթինգի վահանակ Linux սերվերների համար","Բացել թողարկումները","/releases","Որտեղ է այն այսօր","Ակտիվ մշակման մեջ՝ դեպի առաջին ֆունկցիոնալ թողարկումը։ Ստորև՝ ինչ կա և ինչ՝ ոչ։",[178,179,180],"Դեռ չկա բազաների վեբ-կառավարիչ և բրաուզերի ֆայլային կառավարիչ","Վկայագրերը միայն HTTP-01-ով են — wildcard-ները կգան DNS-ի կառավարման հետ","Փոստը, DNS-ը, ռեսելլերային հաշիվները և մի քանի սերվերի կառավարումը՝ առաջին թողարկումից հետո",[182,183,184,185,186,187],"Հաշիվներ՝ իրական Linux օգտվողներ, քվոտաներով, կասեցումով և ջնջումով, որոնք հասնում են հոսթին","Կայքեր՝ ստատիկ, PHP և reverse-proxy, ստուգված կարգավորմամբ և ձախողման դեպքում հետգլորմամբ","PHP-ի մի քանի տարբերակ միաժամանակ՝ մեկ լողավազան հաշվի և տարբերակի համար","SSL՝ ACME-ով, նորացում ժամկետից երեսուն օր առաջ, բանալիներ տնային պանակներից դուրս","Տվյալների բազաներ և SFTP մուտքեր՝ սակագնային սահմաններով և միանվագ գաղտնաբառերով","Պահուստային պատճեններ, կառավարվող firewall, մոնիտորինգ և միայն ավելացվող աուդիտի մատյան","hy/marketing/home",[190,193,196],{"title":191,"body":192},"Տեղադրել","Մեկ հրաման մաքուր սերվերի վրա։ Նախնական ստուգումը նայում է դիստրիբուտիվը, հիշողությունը, սկավառակը և պորտերը և հայտնում է բոլոր խնդիրները միանգամից, ոչ թե մեկական։",{"title":194,"body":195},"Բացել միանվագ հղումը","Տեղադրիչը տպում է հղում, որը ստեղծում է առաջին ադմինիստրատորին։ Ուրիշ ոչինչ դա չի կարող ստեղծել, և հղումը սպառվում է օգտագործման պահին։",{"title":197,"body":198},"Ստեղծել հաշիվ","Հաշիվը հոսթի վրա ստեղծվում է որպես իրական Linux օգտվող՝ իր տնով, լողավազանով և քվոտայով, և ապա նրա կաբինետը տրվում է հաճախորդին։","Կայքեր, PHP-ի տարբերակներ, SSL, տվյալների բազաներ, ֆայլերի փոխանցում, պահուստավորում և firewall՝ բրաուզերից, առանձին կաբինետով յուրաքանչյուր հաճախորդի համար և API-ով, որը վարում է ձեր բիլինգի համակարգը։","261SbbBruGyrCldH729nVWff1apx1o8uNr-2jp2aKiA",{"doc":202,"isFallback":6},{"id":203,"title":204,"body":205,"description":222,"extension":67,"meta":223,"navigation":32,"path":224,"questions":225,"seo":256,"seoTitle":257,"stem":258,"__hash__":259},"faqHy/hy/faq.md","Հաճախ տրվող հարցեր",{"type":55,"value":206,"toc":220},[207],[208,209,210,211,215,216,219],"p",{},"Եթե այստեղ ինչ-որ բան չկա, ",[212,213,214],"a",{"href":64},"փաստաթղթերը"," գնում են ավելի հեռու, իսկ ",[212,217,218],{"href":174},"թողարկումների","\nէջը ազնիվ գրառումն է այն մասին, ինչ իրականում հրապարակված է։",{"title":58,"searchDepth":59,"depth":59,"links":221},[],"Ինչ է Maran-ը, որքան է արժենում, որ դիստրիբուտիվների վրա է աշխատում, ինչպես է տեղադրվում և ինչ գիտակցաբար չի անի՝ տասը հարցի պատասխան։",{},"/hy/faq",[226,229,232,235,238,241,244,247,250,253],{"question":227,"answer":228},"Ինչ է Maran-ը?","Վեբ-հոսթինգի կառավարման վահանակ Linux սերվերների համար։ Տեղադրում եք սերվերի վրա և բրաուզերից կառավարում եք կայքերը, PHP-ի տարբերակները, SSL վկայագրերը, բազաները, ֆայլերը, պահուստային պատճեններն ու firewall-ը՝ առանձին կաբինետով յուրաքանչյուր հաճախորդի համար և API-ով, որը վարում է բիլինգի համակարգը։",{"question":230,"answer":231},"Անվճա՞ր է","Վահանակը բաց է Business Source License 1.1-ով և անվճար է սեփական տեղադրման համար, այդ թվում՝ ձեր վճարող հաճախորդներին հյուրընկալելու համար։ Արտոնագիրն արգելում է այլ բան՝ հենց Maran-ը որպես կառավարվող վահանակի ծառայություն առաջարկելը կամ այն որպես ձեր արտադրանք վերավաճառելը։ Առևտրային մոդուլները տարածվում են առանձին և պահանջում են բանալի․ գները դեռ հրապարակված չեն։",{"question":233,"answer":234},"Կարո՞ղ եմ օգտագործել այն իմ հոսթինգի բիզնեսում","Այո։ Սեփական հաճախորդներին հյուրընկալելը ուղղակիորեն թույլատրված է արտոնագրով, իսկ բազմավարձակալությունը արտադրանքում է առաջին թողարկումից, ոչ թե ավելացված է հետո։",{"question":236,"answer":237},"Որ դիստրիբուտիվներն են աջակցվում","Ubuntu 22.04 և 24.04 LTS, Debian 12 և 13, AlmaLinux 9 և 10, Rocky Linux 9 և 10՝ x86_64 և aarch64 վրա։ Այս ցուցակից դուրս համակարգը տեղադրիչը մերժում է, փոխանակ գուշակի նրա փաթեթների դասավորությունը։",{"question":239,"answer":240},"Ինչպես է տեղադրվում","Մեկ հրամանով, root-ի անունից, մաքուր սերվերի վրա։ Տեղադրիչը ստուգում է դիստրիբուտիվը, հիշողությունը, սկավառակը և պորտերը մինչև որևէ փոփոխություն և հայտնում է բոլոր խնդիրները միանգամից։ Ավարտին այն տպում է միանվագ հղում՝ առաջին ադմինիստրատորը ստեղծելու համար։",{"question":242,"answer":243},"Docker-ում աշխատու՞մ է","Արտադրական միջավայրում՝ ոչ։ Արտադրական տեղադրումը նատիվ է․ վահանակը, գործակալը, բազան և հոսթինգի փաթեթը սովորական համակարգային ծառայություններ են։ Docker-ն օգտագործվում է միայն մշակման ժամանակ։",{"question":245,"answer":246},"Ինչով է տարբերվում այլ վահանակներից","Արտոնյալ կեսով։ Վահանակն ինքը աշխատում է առանց արտոնությունների և պահում է ամբողջ տրամաբանությունը․ root-ով միակ գործընթացը Rust-ով գրված փոքր դեմոնն է, և նրանց պայմանագրում չկա ո՛չ փոխանցված ծրագիր գործարկող գործողություն, ո՛չ մեկ shell-տող։ Այն, ինչ կարելի է խնդրել root գործընթացից, վերջավոր է, գրված և ստուգելի։",{"question":248,"answer":249},"Պատրա՞ստ է արտադրական օգտագործման","Դեռ ոչ։ Ծրագիրը ակտիվ մշակման փուլում է դեպի իր առաջին ֆունկցիոնալ թողարկումը, և ներկայիս հնարավորությունների հավաքածուն դեռ թողարկված չէ։ Նայեք թողարկումների էջը, ոչ թե ենթադրեք, որ տարբերակ կա։",{"question":251,"answer":252},"Ինչ դեռ չկա նրա մեջ","Չկա բազաների վեբ-կառավարիչ և բրաուզերի ֆայլային կառավարիչ, իսկ վկայագրերը միայն HTTP-01-ով են, ուստի wildcard-ները կգան DNS-ի կառավարման հետ։ Փոստը, DNS-ը, ռեսելլերային հաշիվները և մի քանի սերվերի կենտրոնացված կառավարումը նախատեսված են առաջին թողարկումից հետո։",{"question":254,"answer":255},"Ուր հայտնել անվտանգության խնդրի մասին","Նամակով security@innovayse.com հասցեին, և երբեք՝ հրապարակային issue-ում։ Հաղորդումները հաստատվում են 48 ժամվա ընթացքում, իսկ կրիտիկական խնդիրների համար ուղղման կամ նկարագրված մեղմացման նպատակային ժամկետը 14 օր է։",{"title":204,"description":222},"Հարցեր Maran-ի մասին և պատասխաններ","hy/faq","U5rJT6du4AbqpatgvgDjhCK0QUGvtH-ysnGnQF2eNpY",{"release":261,"post":671},{"id":262,"title":263,"body":264,"channel":662,"date":663,"description":664,"extension":67,"meta":665,"navigation":32,"path":666,"seo":667,"seoTitle":263,"stem":668,"version":669,"__hash__":670},"releasesHy/hy/releases/1.0.0-beta.1.md","Maran 1.0.0-beta.1 — առաջին տեղադրելի թողարկումը",{"type":55,"value":265,"toc":654},[266,273,276,281,317,331,334,338,346,426,453,456,500,513,517,581,585,588,592,595,635,638,642,650],[208,267,268,269],{},"Առաջին թողարկումը, որը տեղադրվում է սերվերի վրա և հոսթինգի հաշիվը տանում է սկզբից մինչև վերջ։\nՀրապարակված է որպես բետա, և բառը նշանակում է հենց այն, ինչ նշանակում է․ ",[270,271,272],"strong",{},"դեռ մի՛ տեղավորեք դրա\nվրա ուրիշի հաճախորդներին։",[208,274,275],{},"Ծրագիրը տեղադրվում է, աշխատում է և անում այն, ինչ գրված է իր էկրաններին։ Երեք բան, որոնց համար\nվճարովի հոսթինգ արտադրանքը պարտավոր է վստահելի լինել, փորձարկվել է միայն նախագծի սեփական\nկոնտեյներներում — ոչ մի վկայագիր չի թողարկվել իրական հավաստագրող կենտրոնի կողմից, ոչ մի սկավառակային\nսահմանաչափ չի կիրառվել իրական ֆայլային համակարգի կողմից, և ոչ մի վերականգնում չի կատարվել իրական\nսարքավորման վրա։ Սրանք հայտնի սխալներ չեն — սրանք պնդումներ են, որոնք դեռ ոչ ոք չի ստուգել այնտեղ,\nորտեղ դա կարևոր է։",[277,278,280],"h2",{"id":279},"տեղադրում","Տեղադրում",[282,283,287],"pre",{"className":284,"code":285,"language":286,"meta":58,"style":58},"language-bash shiki shiki-themes github-light github-dark","curl -sSL https://get.maran.innovayse.com | sudo bash\n","bash",[288,289,290],"code",{"__ignoreMap":58},[291,292,295,299,303,307,311,314],"span",{"class":293,"line":294},"line",1,[291,296,298],{"class":297},"sScJk","curl",[291,300,302],{"class":301},"sj4cs"," -sSL",[291,304,306],{"class":305},"sZZnC"," https://get.maran.innovayse.com",[291,308,310],{"class":309},"szBVR"," |",[291,312,313],{"class":297}," sudo",[291,315,316],{"class":305}," bash\n",[208,318,319,320,323,324,330],{},"Տեղադրիչը ներբեռնում է այն արտեֆակտները, որոնք նշված են նախագծի թողարկման բանալիով ստորագրված\nմանիֆեստում, և մերժում է ամեն ինչ, ինչի ստորագրությունը կամ ստուգիչ գումարը չի համընկնում։\nՄանիֆեստը և դրանում նշված արտեֆակտները հրապարակված են ",[288,321,322],{},"releases.maran.innovayse.com"," հասցեում, իսկ\nայն պիտակի ելակետային կոդը, որից հավաքվել է թողարկումը՝ ",[212,325,329],{"href":326,"rel":327},"https://github.com/innovayse/maran",[328],"nofollow","GitHub","-ում։",[208,332,333],{},"Նայեք, թե ինչ է անելու տեղադրիչը, նախքան այն root-ով գործարկելը — ինչպես ցանկացած սցենարի դեպքում,\nորին հանձնում եք ձեր սերվերը․ ներբեռնեք, կարդացեք, հետո գործարկեք։",[277,335,337],{"id":336},"ֆայլերը-և-ինչպես-ինքներդ-ստուգել-դրանք","Ֆայլերը և ինչպես ինքներդ ստուգել դրանք",[208,339,340,341,345],{},"Այն ամենը, ինչ ներբեռնում է տեղադրիչը, հրապարակված է\n",[212,342,322],{"href":343,"rel":344},"https://releases.maran.innovayse.com",[328],"-ում և թվարկված է նախագծի\nթողարկման բանալիով ստորագրված մանիֆեստում։",[347,348,349,365],"table",{},[350,351,352],"thead",{},[353,354,355,359,362],"tr",{},[356,357,358],"th",{},"Ֆայլ",[356,360,361],{},"Չափ",[356,363,364],{},"SHA-256",[366,367,368,388,407],"tbody",{},[353,369,370,380,383],{},[371,372,373],"td",{},[212,374,377],{"href":375,"rel":376},"https://releases.maran.innovayse.com/beta/agent-x86_64.tar.gz",[328],[288,378,379],{},"agent-x86_64.tar.gz",[371,381,382],{},"2.9 MB",[371,384,385],{},[288,386,387],{},"f9a57621ef349cb1bfc2df5f7f812685fb3a5a690834b18bd1ae8df2493fbadc",[353,389,390,399,402],{},[371,391,392],{},[212,393,396],{"href":394,"rel":395},"https://releases.maran.innovayse.com/beta/api-x86_64.tar.gz",[328],[288,397,398],{},"api-x86_64.tar.gz",[371,400,401],{},"25.4 MB",[371,403,404],{},[288,405,406],{},"6f367807e265d06bee9db37d692d0748c5fb815967965c0e59675a0b8468c799",[353,408,409,418,421],{},[371,410,411],{},[212,412,415],{"href":413,"rel":414},"https://releases.maran.innovayse.com/beta/frontend-x86_64.tar.gz",[328],[288,416,417],{},"frontend-x86_64.tar.gz",[371,419,420],{},"340 KB",[371,422,423],{},[288,424,425],{},"27879087ddb1a0d1e05e92b9b0b4dec6da21a99263388a74e122681ada828009",[208,427,428,429,436,437,444,445,452],{},"Ստորագրված ցանկը ",[212,430,433],{"href":431,"rel":432},"https://releases.maran.innovayse.com/beta/manifest.json",[328],[288,434,435],{},"manifest.json","-ն է,\nկողքին՝ ",[212,438,441],{"href":439,"rel":440},"https://releases.maran.innovayse.com/beta/manifest.json.sig",[328],[288,442,443],{},"manifest.json.sig",", իսկ\n",[212,446,449],{"href":447,"rel":448},"https://releases.maran.innovayse.com/beta/integrity-manifest.json",[328],[288,450,451],{},"integrity-manifest.json","-ը\nգրանցում է արխիվների ներսի ամեն ֆայլ, ոչ միայն արխիվները։",[208,454,455],{},"Եթե չեք ուզում որևէ բան խողովակով ուղարկել root-shell — նույն տեղադրումն առանց դրա․",[282,457,459],{"className":284,"code":458,"language":286,"meta":58,"style":58},"curl -O https://releases.maran.innovayse.com/installer/maran-installer.tar.gz\ntar -xzf maran-installer.tar.gz\nsudo bash installer/install.sh --channel beta\n",[288,460,461,471,482],{"__ignoreMap":58},[291,462,463,465,468],{"class":293,"line":294},[291,464,298],{"class":297},[291,466,467],{"class":301}," -O",[291,469,470],{"class":305}," https://releases.maran.innovayse.com/installer/maran-installer.tar.gz\n",[291,472,473,476,479],{"class":293,"line":59},[291,474,475],{"class":297},"tar",[291,477,478],{"class":301}," -xzf",[291,480,481],{"class":305}," maran-installer.tar.gz\n",[291,483,485,488,491,494,497],{"class":293,"line":484},3,[291,486,487],{"class":297},"sudo",[291,489,490],{"class":305}," bash",[291,492,493],{"class":305}," installer/install.sh",[291,495,496],{"class":301}," --channel",[291,498,499],{"class":305}," beta\n",[208,501,502,503,506,507,512],{},"Հանրային բանալին, որով ստուգում է տեղադրիչը, գալիս է հենց այդ փաթեթի ներսում՝\n",[288,504,505],{},"installer/keys/release-signing.pub","։ Արժե ուղիղ ասել․ նույն հոսթից ներբեռնված բանալիով ստուգված\nստորագրությունն ապացուցում է միայն, որ երկուսն էլ նույն տեղից են եկել։ Ավելին ապացուցելու համար\nհամեմատեք այդ բանալին ",[212,508,511],{"href":509,"rel":510},"https://github.com/innovayse/maran/blob/main/installer/keys/release-signing.pub",[328],"պահեստարանի պատճենի հետ","։",[277,514,516],{"id":515},"ինչ-է-ստանում-սերվերը","Ինչ է ստանում սերվերը",[518,519,520,527,533,539,545,551,557,575],"ul",{},[521,522,523,526],"li",{},[270,524,525],{},"Հոսթինգի հաշիվները իրական Linux օգտատերեր են։"," Հաշիվ ստեղծելը սերվերի վրա ստեղծում է\nհամակարգային օգտատեր, տնային պանակ և սակագնի սկավառակային սահմանաչափ․ կասեցումը, վերականգնումը և\nջնջումը նույնպես հասնում են հոսթին։ Նախ գործում է գործակալը, հետո հայտնվում է տողը բազայում —\nուստի վահանակը երբեք չի հայտարարում հաշիվ, որը սերվերի վրա չկա։",[521,528,529,532],{},[270,530,531],{},"Կայքեր"," — ստատիկ, PHP և հակադարձ պրոքսի — տիրույթների կեղծանուններով և փաստաթղթերի արմատով\nհաշվի տնային պանակի ներսում։ Գործակալը կազմում է կարգավորումը, ստիպում սերվերի սեփական\nվավերացնողին ստուգել արդյունքը և հետ գլորում ֆայլը, եթե ստուգումը կամ վերաբեռնումը մերժել են —\nուստի վատ կազմումը չի կարող տապալել սերվերի մյուս կայքերը։",[521,534,535,538],{},[270,536,537],{},"PHP-ի մի քանի տարբերակ միաժամանակ","՝ յուրաքանչյուր հաշվի համար առանձին պուլ ըստ տարբերակի,\nաշխատելով հենց այդ հաշվի Linux օգտատիրոջ անունից։ Հաճախորդը կարող է փոխել թույլատրված\nկարգավորումների ենթաբազմությունը․ ցանկից դուրս անունը մերժվում է, ոչ թե լուռ անտեսվում։",[521,540,541,544],{},[270,542,543],{},"SSL"," ACME-ով HTTP-01 ստուգմամբ, սեփական վկայագրերի վերբեռնում և թարմացում ժամկետի լրանալուց\nերեսուն օր առաջ։ Բանալիները գրվում են միայն root-ին հասանելի պահեստում՝ տնային պանակներից դուրս,\nքանի որ կայքի PHP-ն աշխատում է հաճախորդի անունից։",[521,546,547,550],{},[270,548,549],{},"Տվյալների բազաներ","՝ յուրաքանչյուրի համար առանձին օգտատեր, սակագնի սահմանաչափեր և չափի ցուցում։\nԳաղտնաբառը գեներացվում է, ցուցադրվում մեկ անգամ և չի պահվում — ուստի վերականգնումը վերականգնում չէ,\nայլ վերականգնում նորից սահմանելով։",[521,552,553,556],{},[270,554,555],{},"Ֆայլերի փոխանցում"," — SFTP հոսթի սեփական OpenSSH-ով, յուրաքանչյուր մուտք փակված է jail-ում, որի\nներսում ամրակցված է հաշվի իրական տնային պանակը, նույն uid-ով և առանց shell-ի։ FTPS-ը մատակարարվում\nէ տեղադրված, բայց անջատված․ ոչինչ չի լսում, մինչև ադմինիստրատորը այն չմիացնի։",[521,558,559,562,563,566,567,570,571,574],{},[270,560,561],{},"Պահուստային պատճեններ",", միայն ավելացվող ",[270,564,565],{},"աուդիտի մատյան"," ամեն մուտքի և ամեն փոփոխության\nհամար, ",[270,568,569],{},"տեղեկամատյանների"," կենդանի դիտում, պատնեշ, մոնիթորինգ և ",[288,572,573],{},"maran"," հրամանային գործիքը։",[521,576,577,580],{},[270,578,579],{},"Մուտք վահանակ"," Argon2id-ով, կարճատև հասանելիության նշաններով, refresh-նշանների ռոտացիայով, որտեղ\nկրկնակի օգտագործված նշանը չեղարկում է ամբողջ ընտանիքը, TOTP՝ վերականգնման կոդերով, և սեսիաներով,\nորոնք կարելի է չեղարկել մեկ առ մեկ կամ բոլորը միանգամից։",[277,582,584],{"id":583},"ինչ-է-այն-միտումնավոր-չանում","Ինչ է այն միտումնավոր չանում",[208,586,587],{},"DNS, փոստ և տվյալների բազայի վեբ-կառավարիչ։ Յուրաքանչյուրը բացակայում է որոշմամբ, ոչ թե\nանավարտության պատճառով․ բազայի կառավարիչը նախատեսված է որպես առանձին տեղակայում՝ սեփական հասցեով և\nսեփական նույնականացմամբ, ոչ թե այստեղ կիսատ արված։",[277,589,591],{"id":590},"նախքան-այնտեղ-տեղադրելը-որտեղ-դա-կարևոր-է","Նախքան այնտեղ տեղադրելը, որտեղ դա կարևոր է",[208,593,594],{},"Երեք սահմանափակում արժե իմանալ նախապես — այլապես օպերատորը դրանք կիմանա դժվար ճանապարհով։",[518,596,597,611,617],{},[521,598,599,602,603,606,607,610],{},[270,600,601],{},"Ոչ մի վկայագիր իրական հավաստագրման կենտրոնի կողմից չի տրվել։"," Ամբողջ ուղին, այդուհանդերձ,\nանցնում է սկզբից մինչև վերջ՝ գրանցում, պատվեր, HTTP-01 ստուգում, ավարտում, ներբեռնում — ",[288,604,605],{},"pebble","-ի\nդեմ, որը Let's Encrypt-ի սեփական փորձնական սերվերն է, ընդ որում տրված վկայագրի սերիական համարը\nհամընկնում է PEM-ից կարդացվածի հետ։ Այդ վարժությունը գտավ իրական թերություն, որը ոչ մի թեստ չէր\nտեսնում․ հաճախորդը ",[288,608,609],{},"User-Agent"," չէր ուղարկում, ինչը pebble-ը մերժում է, իսկ Let's Encrypt-ը՝\nհանդուրժում։ Չստուգվածը հենց կենտրոնն է՝ ոչ նրա սահմանաքանակները, ոչ հանրային ցանցից ստուգումը,\nոչ նրա շղթան։ Թարմացման ճյուղն ընդհանրապես չի փորձարկվել։ Միայն HTTP-01 — առանց wildcard\nվկայագրերի, դրանք կգան DNS-ի կառավարման հետ։",[521,612,613,616],{},[270,614,615],{},"Տվյալների բազայի ջնջումը վերջնական է։"," Չկա ոչ պատկեր, ոչ աղբարկղ, ոչ ուշացում, և ջնջման\nընթացքը ոչ մի կերպ չի դիմում պահուստավորման մոդուլին։ Բազան վերականգնելի է միայն այն պատճենից, որն\nարդեն գոյություն ուներ։",[521,618,619,622,623,626,627,630,631,634],{},[270,620,621],{},"SSH դեմոնի կարգավորումը հսկվում է, և հսկողության սահմանը նշված է։"," Տեղադրիչը գրում է այն\nբլոկը, որը ֆայլերի փոխանցման մուտքը դարձնում է փակված, իսկ մոնիթորինգն այժմ կարդում է այդ բլոկը\nետ և ահազանգ է բարձրացնում շեղման դեպքում՝ բոլոր չորս հրահանգները առանձին-առանձին, այնպես որ\nբլոկը, որի վերնագիրը մնացել է, իսկ մարմինը դատարկվել, նույնպես բռնվում է։ Կարդացվում է\nկարգավորման ֆայլը, ոչ թե դեմոնի պատասխանը․ ",[288,624,625],{},"sshd -T","-ն ընդհանրապես երբեք չի տպում ",[288,628,629],{},"Match"," բլոկի\nպարունակությունը։ Ինչ չի անում․ չի հետևում ",[288,632,633],{},"Include"," հրահանգներին և չի ապացուցում, որ շեղված\nհոսթը իրոք shell է տալիս։ Այն հաղորդում է, որ կարգավորումն այլևս չի ասում գրվածը։",[208,636,637],{},"Արտոնյալ մասերը ծածկող սպառնալիքների նշումները կարդացվել և ընդունվել են թողարկման օրը։ Դա\nբավարարում է նախագծի սեփական կանոնը երկրորդ ստուգողի մասին։ Դա արտաքին աուդիտ չէ, և այս էջը այդպիսին\nչի հայտարարում։",[277,639,641],{"id":640},"թարմացում-010-ից","Թարմացում 0.1.0-ից",[208,643,644,645,649],{},"Թարմացման ուղի չկա, և այն պետք չէ․ ",[212,646,648],{"href":647},"/releases/0.1.0","0.1.0","-ը կմախք էր առանց հոսթինգի\nհնարավորությունների, և դրա վրա պահպանելու բան չկար։",[651,652,653],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":58,"searchDepth":59,"depth":59,"links":655},[656,657,658,659,660,661],{"id":279,"depth":59,"text":280},{"id":336,"depth":59,"text":337},{"id":515,"depth":59,"text":516},{"id":583,"depth":59,"text":584},{"id":590,"depth":59,"text":591},{"id":640,"depth":59,"text":641},"beta","2026-09-23","Առաջին թողարկումը, որը տեղադրվում է սերվերի վրա՝ հաշիվները որպես իրական Linux օգտատերեր, կայքեր, PHP տարբերակներ, SSL, տվյալների բազաներ, ֆայլերի փոխանցում և պահուստային պատճեններ — հրապարակված է որպես բետա՝ հստակ նշված սահմանով։",{},"/hy/releases/0.0-beta.1",{"title":263,"description":664},"hy/releases/1.0.0-beta.1","1.0.0-beta.1","7rdPHEZdCpwI9XzxRvbTxiXVkFfXRPyGSxJ3YbmjAuM",{"id":672,"title":673,"author":674,"body":675,"date":707,"description":708,"extension":67,"meta":709,"navigation":32,"path":710,"seo":711,"seoTitle":712,"stem":713,"__hash__":714},"blogHy/hy/blog/introducing-maran.md","Ինչու գործակալը shell-հրամաններ չի ընդունում","Innovayse",{"type":55,"value":676,"toc":703},[677,680,683,687,690,693,697,700],[208,678,679],{},"Ցանկացած կառավարման վահանակ ունի նույն ձևը՝ այն, ինչի վրա մարդը սեղմում է, և այն, ինչ root\nիրավունքներով անում է աշխատանքը։ Հետաքրքիր հարցն այն է, թե ինչ է փոխանցվում նրանց միջև։",[208,681,682],{},"Սովորական պատասխանը հրամանի տողն է։ Այն ամենաարագն է հավաքելու և ամենադժվարը՝ անվտանգ պահելու,\nորովհետև հաճախորդի կողմից կառավարվող յուրաքանչյուր արժեք՝ դոմեն, բազայի անուն, ֆայլի ուղի, ի վերջո\nհայտնվում է տողում, որը կվերլուծի shell-ը։ Դա մեկ անգամ ճիշտ անելը հեշտ է։ Ամենուր, ընդմիշտ, մինչ\nվահանակն աճում է՝ ահա դրան ոչ ոք չի հասցնում։",[277,684,686],{"id":685},"ինչ-ենք-անում-փոխարենը","Ինչ ենք անում փոխարենը",[208,688,689],{},"Maran-ի root դեմոնը ընդունում է անվանված գործողություններ՝ տիպավորված և ստուգված արգումենտներով, և\nուրիշ ոչինչ։ Չկա գործողություն, որը ընդունում է գործարկելու հրաման։ Դոմենը չի պաշտպանվում կարգավորման\nֆայլ ընկնելուց առաջ․ այն ստուգվում է որպես դոմեն, այսինքն՝ տառեր, թվեր, գծիկներ և կետեր, ուստի\nայնտեղ տողի փոխադրման նիշ չկա, որ ավարտի մեկ դիրեկտիվը և սկսի կանչողի ընտրած մյուսը։",[208,691,692],{},"Գործնական արդյունքն այն է, որ այն բաների բազմությունը, որոնք կարելի է ստիպել անել դեմոնին, վերջավոր\nէ, գրված և ստուգելի։ Պայմանագրում չգոյություն ունեցող գործողությունը հնարավոր չէ պահանջել՝ որքան էլ\nհնարամիտ լինի խնդրանքը։",[277,694,696],{"id":695},"ինչ-է-դա-արժենում","Ինչ է դա արժենում",[208,698,699],{},"Յուրաքանչյուր նոր հնարավորություն դառնում է պայմանագրի փոփոխություն, ոչ թե նոր տող։ Դա ավելի դանդաղ\nէ, և գիտակցաբար․ գործողություն ավելացնելը նշանակում է որոշել, թե որոնք են նրա արգումենտները, ինչն է\nհամարվում վավեր և ինչ է լինում, երբ հոսթը համաձայն չէ՝ մինչև որևէ բան ուղարկելը։",[208,701,702],{},"Դա նաև բացառում է հնարավորությունների մի ամբողջ դաս, որը վահանակը կարող էր առաջարկել՝ «գործարկիր այս\nհրամանն իմ փոխարեն»։ Մենք սա ճիշտ փոխզիջում ենք համարում ծրագրի համար, որը պահում է root-ը սերվերի\nվրա, որտեղ ապրում են ուրիշի հաճախորդները։",{"title":58,"searchDepth":59,"depth":59,"links":704},[705,706],{"id":685,"depth":59,"text":686},{"id":695,"depth":59,"text":696},"2026-09-19","Մեկ նախագծային որոշում, որը Maran-ում որոշեց մնացած ամեն ինչ՝ root դեմոնն ընդունում է տիպավորված գործողություններ և ոչ մի shell-տող, և ինչ է դա արժենում։",{},"/hy/blog/introducing-maran",{"title":673,"description":708},"Ինչու գործակալը shell-հրաման չի ընդունում","hy/blog/introducing-maran","crPfMh6xCG0Q7s6Js5Nh6lX1ft3DHeLXHrIbDNeD98M",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":716},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":718},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 22v-5m3-9V2m2 6a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1zM9 8V2\"/>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":720},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"/>\u003Cpath d=\"M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":722},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\"/>\u003Cpath d=\"M7 11V7a5 5 0 0 1 10 0v4\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":724},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\"/>\u003Cpath d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8m-10 4h4\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":726},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 12h-5m5-4h-5m9 9V5a2 2 0 0 0-2-2H4\"/>\u003Cpath d=\"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":728},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3 12a9 9 0 0 1 9-9a9.75 9.75 0 0 1 6.74 2.74L21 8\"/>\u003Cpath d=\"M21 3v5h-5m5 4a9 9 0 0 1-9 9a9.75 9.75 0 0 1-6.74-2.74L3 16\"/>\u003Cpath d=\"M8 16H3v5\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":730},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"7\" height=\"9\" x=\"3\" y=\"3\" rx=\"1\"/>\u003Crect width=\"7\" height=\"5\" x=\"14\" y=\"3\" rx=\"1\"/>\u003Crect width=\"7\" height=\"9\" x=\"14\" y=\"12\" rx=\"1\"/>\u003Crect width=\"7\" height=\"5\" x=\"3\" y=\"16\" rx=\"1\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":732},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>\u003Cpath d=\"m9 12l2 2l4-4\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":734},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"/>\u003Cpath d=\"M3 5v14a9 3 0 0 0 18 0V5\"/>\u003Cpath d=\"M3 12a9 3 0 0 0 18 0\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":736},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14\"/>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":738},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20 6L9 17l-5-5\"/>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":740},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"/>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":742},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 19h8M4 17l6-6l-6-6\"/>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":744},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"/>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5M9 15l2 2l4-4\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":746},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4M14 13.12c0 2.38 0 6.38-1 8.88m4.29-.98c.12-.6.43-2.3.5-3.02M2 12a10 10 0 0 1 18-6M2 16h.01m19.79 0c.2-2 .131-5.354 0-6\"/>\u003Cpath d=\"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2m2.31 12c.21-.66.45-1.32.57-2M9 6.8a6 6 0 0 1 9 5.2v2\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":748},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\"/>\u003Cpath d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":750},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M10 12h4m-4-4h4m0 13v-3a2 2 0 0 0-4 0v3\"/>\u003Cpath d=\"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\"/>\u003Cpath d=\"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":752},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M16 3.128a4 4 0 0 1 0 7.744M22 21v-2a4 4 0 0 0-3-3.87\"/>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\"/>\u003C/g>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":754},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"20\" height=\"8\" x=\"2\" y=\"2\" rx=\"2\" ry=\"2\"/>\u003Crect width=\"20\" height=\"8\" x=\"2\" y=\"14\" rx=\"2\" ry=\"2\"/>\u003Cpath d=\"M6 6h.01M6 18h.01\"/>\u003C/g>",1790166387990]