diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 00000000..25f8eccf --- /dev/null +++ b/docs/404.html @@ -0,0 +1,141 @@ + + + + + + + + + + + + Awesome SelfHosted + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + +
  • + +
  • +
+ +
+
+
+
+ + +

404

+ +

Page not found

+ + +
+
+ + +
+
+ +
+ +
+ +
+ + + + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/Info/Authors/index.html b/docs/awesome-selfhosted/Info/Authors/index.html new file mode 100644 index 00000000..88e3dc6c --- /dev/null +++ b/docs/awesome-selfhosted/Info/Authors/index.html @@ -0,0 +1,2908 @@ + + + + + + + + + + + + Authors - Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Info »
  • + + + +
  • Awesome selfhosted »
  • + + + +
  • Authors
  • +
  • + +
  • +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CommitsAuthor
1032nodiscc nodiscc@gmail.com
319Kickball ed.kickball@hotmail.com
253n8225 n8225@users.noreply.github.com
122Andrew Rylatt arylatt@users.noreply.github.com
77Meitar M meitarm@gmail.com
35Kovah mail@kovah.de
31DJCrashdummy DJCrashdummy@users.noreply.github.com
26worldworm 13227454+worldworm@users.noreply.github.com
23cave beat cave@cavebeat.org
17Thomas Dalichow info@thomasdalichow.de
14Miguel Piedrafita github@miguelpiedrafita.com
13jungle-boogie sean@jungleboogie.me
12Alex alex@maximum.guru
12Ferdinand Mütsch mail@ferdinand-muetsch.de
12Pe46dro pietro@marangon.me
11Pietro Marangon pietro.marangon@gmail.com
9Andrew Peng pengc99@gmail.com
9Joubert RedRat eu+github@redrat.com.br
9Lance M mightyfree@users.noreply.github.com
9cave cavebeat@users.noreply.github.com
8CooperBarrett anthony.lhuissier@openmailbox.org
8Nick Busey NickBusey@users.noreply.github.com
7Hammy Havoc hammy@splitanatom.com
7Ilian ugg.rock@gmail.com
7aubrel red_clover@riseup.net
7n1trux n1trux@users.noreply.github.com
7phre4k me@phre4k.at
7édouard u. mail@edouard.us
6Jorge E. Gomez jegomez@agofer.com.co
6Per Guth mail@perguth.de
6Quinn Comendant quinn@strangecode.com
6Touhid Arastu touhid.arastu@gmail.com
5Chris McCormick chris@mccormick.cx
5James Cole JC5@users.noreply.github.com
5Jean Champémont jchampemont@users.noreply.github.com
5Johannes Zellner johannes@nebulon.de
5Karl Coelho karl.coelho1@gmail.com
5Kevin Lin developer@kevinlin.info
5Max Maischein github@corion.net
5Mohammad Faisal faisalhmohd@live.com
5Moti Korets moti.kor@gmail.com
5Muhammad Hussein Fattahizadeh m@mhf.ir
5Philip Kirkbride kirkins@gmail.com
5Surgie Finesse finesserus@gmail.com
5azlux github@azlux.fr
5mestaritonttu mestaritonttu@mail.com
4/c² cagataycali@icloud.com
4Alejandro Celaya alejandrocelaya@gmail.com
4AlessioCasco cascoalessio@gmail.com
4Alexander Litreev alxdrlitreev@users.noreply.github.com
4Alexandr Emelin frvzmb@gmail.com
4AndrewCz smacz42@users.noreply.github.com
4Andrey Semakin and-semakin@ya.ru
4Aravindo Wingeier synox@users.noreply.github.com
4Arda Kılıçdağı ardakilicdagi@gmail.com
4Bob van Luijt bob@semi.technology
4Christian Bayer cave@cavebeat.org
4Cody Heimberger cody.heimberger@printerlogic.com
4Colin Pokowitz colin@cpdev.me
4Colin Pokowitz colinpokowitz03@gmail.com
4Cory Gibbons hello@corygibbons.com
4D DL88250@gmail.com
4Dave Lockwood 1261876+deamos@users.noreply.github.com
4Dominik Pfaffenbauer dominik@lineofcode.at
4Dr. Azrael Tod github.com@g33ky.de
4Eliot Whalan ewhal@pantsu.cat
4Ilya Sevostyanov d3th@zeen.ru
4Jan Vlnas jnv@users.noreply.github.com
4Jan-Lukas Else jlelse@users.noreply.github.com
4Jason Robinson mail@jasonrobinson.me
4Jean Elchinger jinformatique@riseup.net
4Joery Zegers accounts@jzegers.nl
4Jorge E. Gomez jorge@jorgee.net
4Joshua Westerheide dev@jdoubleu.de
4Koichi MATSUMOTO mzch@mac.com
4MK kohenkatz@gmail.com
4Mancy abdullah.mancy@gmail.com
4Marius Voila marius.voila@gmail.com
4Meitar M meitarm+github.1djyXhCkVsRYzZRk@gmail.com
4Rodolfo Berrios inbox@rodolfoberrios.com
4Sebastian Stehle sebastian@squidex.io
4Tony goofballtech@gmail.com
4Valmik mail@valmik.in
4apacketofsweets 19573127+apacketofsweets@users.noreply.github.com
4bysslord wxwlegend@gmail.com
4cthu1hoo 47687909+cthu1hoo@users.noreply.github.com
4dattaz taz@dattaz.fr
4dpfaffenbauer dominik@lineofcode.at
4dyu david.yu.ftw@gmail.com
4hebbet pascal.herbert@gmail.com
4paddo mail@patrickrichter.net
3Aguay baraise.valentin@gmail.com
3Akhyar Amarullah akhyrul@gmail.com
3Alexey Velikiy gmpota@gmail.com
3BernsteinA 4685390+BernsteinA@users.noreply.github.com
3Brandon Jones brandon@radroot.com
3Burak Emre Kabakcı emrekabakci@gmail.com
3Conor O'Callaghan brioscaibriste@users.noreply.github.com
3Cédric Krier cedk@users.noreply.github.com
3Daniel Mason danielmason@catalyst.net.nz
3Danja Vasiliev danja@k0a1a.net
3Erik erikhubers@users.noreply.github.com
3Ethan Lowman ethanal@users.noreply.github.com
3FoxMaSk foxmask@users.noreply.github.com
3Francisco Gálvez crishnakh@users.noreply.github.com
3François-Xavier Lyonnet du Moutier fx.du.moutier@gmail.com
3Gabin hello@gabinaureche.com
3Garrett Martin me@garrettqmartin.com
3George C. Privon privong@users.noreply.github.com
3Görkem Çetin gc@count.ly
3Harvey Kandola harvey@documize.com
3Ilya Pirozhenko ilya.pir@gmail.com
3IrosTheBeggar paul.sori@gmail.com
3James Cole thegrumpydictator@gmail.com
3Jiří Komárek xkomczax@centrum.cz
3Kevin Hinterlong kevinhinterlong@users.noreply.github.com
3Lee Watson rev@revthefox.co.uk
3Leo Gaggl leo@brightcookie.com.au
3Marc Picaud picaud.marc@gmail.com
3MarceauKa MarceauKa@users.noreply.github.com
3Mariusz Kozakowski 11mariom+wordpress@gmail.com
3Martin Gontovnikas martin@gon.to
3Mathieu Leplatre mathieu@leplat.re
3Matt Baer matt@baer.works
3Mitchell Urgero info@urgero.org
3Morris Jobke hey@morrisjobke.de
3Nick Fox nick.fox@jobsite.co.uk
3No GUI evaryont@users.noreply.github.com
3Ovidiu Dan zmarty@users.noreply.github.com
3Pavan Yara yarapavan@gmail.com
3Peter Thaleikis spekulatius@users.noreply.github.com
3Pierre Blanes inattendu@users.noreply.github.com
3Pierre Tinard Edraens@users.noreply.github.com
3Prashant Singh prashant.singh852@webkul.com
3PrplHaz4 PrplHaz4@users.noreply.github.com
3Roland Whitehead 4478022+qururoland@users.noreply.github.com
3Ryan DeShone rfdeshon@gmail.com
3Sergio Brighenti sergio@brighenti.me
3Sung Won Cho sung@monomax.sh
3Tobi Schäfer interface@p3k.org
3Yann Forget forget.yann31@gmail.com
3Ye Lin Aung me@yelinaung.com
3Yuchen Ying github.com@yegle.net
3ddffnn ddffnn@users.noreply.github.com
3icterine account@caravat.e4ward.com
3jungle-boogie sean@rastasean.net
3moba moba@users.noreply.github.com
3oknozor paul.delafosse@protonmail.com
3pszlazak pszlazak@users.noreply.github.com
3rett gerst rettgerst@users.noreply.github.com
3sapioit sapioit@users.noreply.github.com
3slauzon seth.lauzon@gmail.com
3xBytez git@xbytez.io
20xflotus 0xflotus@gmail.com
2132ikl 132@ikl.sh
2A. Cynic chris@mretc.net
2Aditya Nagla me@imadityang.xyz
2Adminrezo (Nico Dewaele) nico@adminrezo.fr
2Albert Cervera i Areny albert@nan-tic.com
2Alex Bogdanovski alex@erudika.com
2Alexander Ryzhov gtihub@ryzhov-al.ru
2Alexis Metaireau alexis@notmyidea.org
2Amos amos@amosarts.com
2Andrei Poenaru andrei.poenaru@gmail.com
2Andrew Hayworth hayworth@meraki.net
2Andrew Rabert ar@nullsum.net
2Arik Fraimovich arik@arikfr.com
2Ave ave@ave.zone
2Bartłomiej Kurzeja B3QL@users.noreply.github.com
2Ben Yanke ben@benyanke.com
2Benjamin Gamard benjamin.gam@gmail.com
2Braintelligence Braintelligence@users.noreply.github.com
2Brendan Abolivier contact@brendanabolivier.com
2Brian Morin bdmorin@gmail.com
2Carlo F. Quaglia cfq20@users.noreply.github.com
2Charles Farence III charles@charlessite90.com
2Chris Missal chris.missal@gmail.com
2Christopher Charbonneau Wells cdubz@users.noreply.github.com
2Cleberson Ramirio cleberson.ramirio@outlook.com
2Costin Moise necenzurat@gmail.com
2Daniel Heath daniel@heath.cc
2Daniel Ramirez Grave de Peralta dxas90@gmail.com
2David Leonard david@appliedtrust.com
2David Wayne Baxter dbxt@users.noreply.github.com
2Derek Viera ma.dmviera01@gmail.com
2Deryck dhenson02@users.noreply.github.com
2Dhruv Sharma dhruvparamhans@users.noreply.github.com
2Dillon Stadther dlstadther@gmail.com
2Dominic Pratt github@dominicpratt.de
2Dr. Ridgewell ridgewell@users.noreply.github.com
2Eliot Berriot contact@eliotberriot.com
2Fabian Schliski Kombustor@users.noreply.github.com
2Feleg fegul@users.noreply.github.com
2Felix Bartels felix@host-consultants.de
2Gabin Aureche gabin.aureche@live.fr
2Gabriel Cossette gabriel.cossette@gmail.com
2Gerardo Baez g@gerardobaez.com
2Gleb Mazovetskiy glex.spb@gmail.com
2Gonçalo Valério dethos@users.noreply.github.com
2Greg Slepak contact@taoeffect.com
2Greg V greg@unrelenting.technology
2Haukur Rosinkranz hauxir@gmail.com
2Henry Ruhs info@redaxmedia.com
2Hilmi Tolga Sahin htolgasahin@gmail.com
2Ivan Krutov vania-pooh@vania-pooh.com
2Jake Breindel j.breindel2@outlook.com
2Jake Jarvis jakejarvis@gmail.com
2Jan jaltek@users.noreply.github.com
2Jan Soendermann jan.soendermann+git@gmail.com
2Jared Shields jwshields2006@hotmail.com
2Jipok braaga@inbox.ru
2Jonas L jooola@users.noreply.github.com
2Jordon Replogle jordon.replogle@blueletterbible.org
2Joseph Dykstra josephdykstra@gmail.com
2Julien Bisconti veggiemonk@users.noreply.github.com
2Jérémie Astori jeremie@astori.fr
2Keith Thibodeaux kthibodeaux@peachtreebilling.com
2Kevin Vandenborne kevin.vandenborne@gmail.com
2Klaus-Uwe Mitterer info@klaus-uwe.me
2Kukielka philipp_kutyla@gmx.de
2Lanre Adelowo adelowomailbox@gmail.com
2Liam Demafelix hello@liam.ph
2Madhu GB github@madhugb.com
2Malte Kiefer malte.kiefer@mailgermania.de
2Manuel Uberti manuel-uberti@users.noreply.github.com
2Marc Laporte marc@laporte.name
2Marcel Brückner marcelbrueckner@gmx.de
2Marien Fressinaud dev@marienfressinaud.fr
2Marius Lindvall marius@varden.info
2Markus M. Deuerlein mdeuerlein@users.noreply.github.com
2MarkusMcNugen marknewton5@gmail.com
2Martijn mrtijn@riseup.net
2Massimo Santini massimo.santini@gmail.com
2Mats Estensen mats.est@gmail.com
2Matt Hazinski matt@matthazinski.com
2Matthieu Aubry matt@piwik.org
2Melvin Loos melvin@melvinloos.nl
2Michael Tunnell MichaelTunnell@users.noreply.github.com
2Mikael Peigney Mika56@users.noreply.github.com
2Murali Govardhana murali.govardhana@gmail.com
2Nehal Hasnayeen searching.nehal@gmail.com
2Nicolas Carlier n.carlier@nunux.org
2Oliver Giles ohw.giles@gmail.com
2Patrik Ragnarsson patrik@starkast.net
2Pavel Korotkiy outdead@mail.ru
2Pavel Lobashov ShockwaveNN@gmail.com
2Pernat1y mirnesen@gmail.com
2Peter Demin poslano@gmail.com
2Peter Ivanov peter@microweber.com
2Phil phil@sapphyrus.xyz
2Phonic Mouse phonicmouse@users.noreply.github.com
2Pierre Buyle pierre@buyle.org
2Pierre Ozoux pierre@ozoux.net
2Poorchop Poorchop@users.noreply.github.com
2Prabhanjan prabhanjan.padhye@confluxsys.com
2Raymond Berger RayBB@users.noreply.github.com
2ReadmeCritic frankensteinbot@gmail.com
2Ricardo Torres ricardo@rictorres.com.br
2Rid shakeel.ridhwaan@gmail.com
2Rodolfo Berrios rodolfo.berrios@gmail.com
2Roland Geider roland@geider.net
2Ryan Mulligan ryan@ryantm.com
2Sam Tuke mail@samtuke.com
2Sameer Al-Sakran salsakran@users.noreply.github.com
2Sandeep S ghostpirate@users.noreply.github.com
2Sandro sandro.jaeckel@posteo.de
2Scot Hacker shacker@birdhouse.org
2Shane Cooke shanecooke@mac.com
2Simon Vieille simon@deblan.fr
2Simone Grignola sito@grignola.ch
2Sjoerd van der Hoorn sjoerdvanderhoorn@hotmail.com
2Spark 24642451+Sparkenstein@users.noreply.github.com
2Stefan Bohacek stefan.bohacek@gmail.com
2Stefane Fermigier sf@fermigier.com
2Stefano sabas88@gmail.com
2Suraj Patil thewhitetulip@users.noreply.github.com
2Think iwhiz@users.noreply.github.com
2Thomas Citharel tcit@tcit.fr
2Tomer tomer@campuscruizer.com
2Tomer Cohen tomer@users.noreply.github.com
2Tony Xu yihan.xu@gmail.com
2Vadim Rutkovsky vrutkovs@redhat.com
2Valentino Pesce valentino@iltuobrand.it
2Van-Duyet Le lvduit08@gmail.com
2Vladimir Avgustov vavgustov@gmail.com
2Will Bennett william.11bennett@gmail.com
2William Notowidagdo wnotowidagdo@gmail.com
2Yann forget.yann31@gmail.com
2Zeniic Zeniic@users.noreply.github.com
2agetic agetic@debian
2charsi charsi@users.noreply.github.com
2cornerot cornerot@gmail.com
2cron410 cron410@gmail.com
2digiou digitalbckp@gmail.com
2emeric itmfr@yahoo.fr
2erdihu erdihu@users.noreply.github.com
2fengshaun amoradi@fedoraproject.org
2fuerbringer severin@protonmail.ch
2gseva gavrilovseva@gmail.com
2jciskey jciskey@gmail.com
2jganobsik 39414138+jganobsik@users.noreply.github.com
2jimykk JimyKK@users.noreply.github.com
2jtagcat 38327267+jtagcat@users.noreply.github.com
2markkrj markkrj@users.noreply.github.com
2maximesrd maximesrd@maximesourdin.ovh
2rafael-santiago voidbrainvoid@gmail.com
2thomasfrivold thomas.frivold@gmail.com
2tillarnold throwable42@gmail.com
2tomc3 wordoftheday003@gmail.com
2xy2z xy2z@users.noreply.github.com
2yuche i@yuche.me
2ziλa sarikaya sarikayaziya@gmail.com
2znegva znegva@users.noreply.github.com
2Žygimantas Medelis zygimantas.medelis@tokenmill.lt
2王可森 wangkesen@users.noreply.github.com
14oo4 4oo4@users.noreply.github.com
1Aaron 44198148+whalehub@users.noreply.github.com
1Adam C 39806482+adam-redcort@users.noreply.github.com
1Adam Johnson me@adamj.eu
1Adrian Kumpf adrian.kumpf@posteo.de
1Akos Veres veres@akos.me
1Alashov Berkeli yunus.alashow@gmail.com
1Alberto Bertogli albertito@blitiri.com.ar
1Alejandro Rodríguez arcxyz@users.noreply.github.com
1Alex Fornuto alex@fornuto.com
1Alex Yumashev 33555768+alex-jitbit@users.noreply.github.com
1Alexandr Nesterenko kuchaspama@gmail.com
1Alexandre Abita xouabita@gmail.com
1Alexey Strokach alex.strokach@utoronto.ca
1Alfred Bez alfred.bez@googlemail.com
1Algram aliasgram@gmail.com
1Alys alice.harris@oldgods.net
1Anders Pitman tapitman11@gmail.com
1Andre andre.lehmann@posteo.de
1Andrew Murray radarhere@gmail.com
1Andrew Nesbitt andrewnez@gmail.com
1Andrew Prokhorenkov andrew.prokhorenkov@gmail.com
1Andrey andrey200964@yandex.ru
1Andrey Kuznetsov fear@loathing.in
1André Rodier arodier@users.noreply.github.com
1Andy Olsen andrewolsen@mail.adelphi.edu
1Andyyyyy94 Andyyyyy94@users.noreply.github.com
1Angel Velasquez angvp@archlinux.org
1Antoine anthonyfg9@gmail.com
1Antoine Gersant antoine.gersant@lesforges.org
1Anton Troyanov anton@troyanov.net
1Arkady Asuratov arkady.asuratov@dubas.pro
1Armando Lüscher armando@noplanman.ch
1Arnold Schrijver aschrijver@users.noreply.github.com
1ArthurHoaro arthur@hoa.ro
1Austin austi_gillm935@ahapps.anoka.k12.mn.us
1BN biczoxd@gmail.com
1Bas mega@ioexception.at
1Bastien Wirtz bastien.wirtz@gmail.com
1Beard of War rebelgeek@blainsmith.com
1Ben ben@rngr.org
1Ben Abbott ben@benabbott.nz
1Benj Fassbind randombenj@gmail.com
1Benjamin Lange benjamin.r.lange@gmail.com
1Bernd Bestel bernd@berrnd.de
1Bharat Kalluri bharatkalluri@protonmail.com
1Blake Bourque Techplex.Engineer@gmail.com
1Bob "Wombat" Hogg wombat@rwhogg.site
1Bob Mottram bob@robotics.uk.to
1Brett brettex@hotmail.com
1Brian bdmorin@users.noreply.github.com
1Burung Hantu privacytoolsIO@users.noreply.github.com
1Buster "Silver Eagle" Neece loobalightdark@gmail.com
1C.J. Jameson cjcjameson@gmail.com
1Caleb Xu calebcenter@live.com
1Calle Wolff carl@wolff.se
1Carlos Rodriguez carlos@s8f.org
1Chanchal Kumar Ghosh chanchal_ghosh1987@yahoo.co.in
1Chandan Rai dev.chandan.rai@gmail.com
1Charles Barnes cbarnes@bullhorn.com
1Charles Barnes charlesabarnesjr@gmail.com
1Charlotte Tan charlottetan@users.noreply.github.com
1Chema neo22s@gmail.com
1Chris Legault chrislegault2011@gmail.com
1Christoph (Sheogorath) Kern sheogorath@shivering-isles.com
1Christoph Kappestein k42b3.x@gmail.com
1Christoph Wiechert wio@psitrax.de
1Christophe Hamerling christophe.hamerling@gmail.com
1Clément AUBIN caubin@caubin.fr
1Colin 16247799+cpdevelops@users.noreply.github.com
1Colin Shea colin@evaryont.me
1Craig Davison craig@davison.io
1Cristian Menghi cristian@menghi.biz
1CyrilPepito 18053589+CyrilPepito@users.noreply.github.com
1Cédric cedric@cedricbonhomme.org
1Damir Gainetdinov damir.gaynetdinov@gmail.com
1Dan rocks.in.the.cloud@gmail.com
1Danny dannyvankooten@gmail.com
1Danny van Kooten dannyvankooten@users.noreply.github.com
1David vaidd4@users.noreply.github.com
1David Baldwynn whitef0x0@users.noreply.github.com
1David Ng david90@users.noreply.github.com
1David Stephens dave@force9.org
1David Yu david.yu.ftw@gmail.com
1Denis isdn@users.noreply.github.com
1Denis issden@gmail.com
1Diego Molina diemol@users.noreply.github.com
1Dimitri Steinel d.steinel@de.edenspiekermann.com
1Dirk Krause dirkk0@googlemail.com
1Dmitriy Volkov wldhx+vcs+github_com@wldhx.me
1Dmitry Khomutov poisoncorpsee@gmail.com
1Doğan Çelik dogancelik@users.noreply.github.com
1Dražen Lučanin kermit666@gmail.com
1Ed Tewiah etewiah@hotmail.com
1Edoardo Putti edoardo.putti@gmail.com
1Edreih Aldana edreihaldana@yahoo.com
1Eike Kettner eike.kettner@posteo.de
1Emeric POUPON epoupon@users.noreply.github.com
1Emlembow 36314674+Emlembow@users.noreply.github.com
1Eran Chetz eran.chetzroni@algolia.com
1Eren Hatırnaz erenhatirnaz@hotmail.com.tr
1Eric Moon eric@ericmoon.net
1Eric Nemchik eric@nemchik.com
1Eric Park ideamaneric@gmail.com
1Error1000 50962908+Error1000@users.noreply.github.com
1Ethan Hampton EMH333@users.noreply.github.com
1Ethan Madden crazeh.monkeh@gmail.com
1Eugen eugen@zeonfederated.com
1Evelthon Prodromou epro@prodromou.eu
1Evgeny Petrov groosha@protonmail.com
1Fabian Patzke github@patzi.de
1Fazal Majid github@sentfrom.com
1Florian flokX@users.noreply.github.com
1Florian Kaiser florian.kaiser@fnkr.net
1Florian Kaldowski flokX@users.noreply.github.com
1Florian Wilhelm f.wilhelm@tarent.de
1FortressBuilder FortressBuilder@users.noreply.github.com
1François Jacquet francoisjacquet@users.noreply.github.com
1FreeScout 40499291+freescout-helpdesk@users.noreply.github.com
1Galen Abell galen@galenabell.com
1Gio giodi@users.noreply.github.com
1Girish Ramakrishnan mail@girish.in
1Greg Chetcuti greg@chetcuti.com
1Guilherme Oenning me@goenning.net
1Henrique Holanda contato@henriqueholanda.com.br
1Herman Zvonimir Došilović hermanz.dosilovic@gmail.com
1IAlwaysBeCoding erik.dominguez1003@gmail.com
1Icantcodeatall francois.lachese@me.com
1Igor Antun IgorAntun@users.noreply.github.com
1Igor Petrov garik.piton@gmail.com
1Imron RA 42175898+imronra@users.noreply.github.com
1Isaac isaacnoda@gmail.com
1Izac Lorimer izaclorimer@users.noreply.github.com
1Jack jackdev@mailbox.org
1Jackson Delahunt jackson@jacksondelahunt.com
1Jakob Gillich jakob@gillich.me
1James Mills prologic@shortcircuit.net.au
1Jan jayphizzle@users.noreply.github.com
1Jannik Anker jannikanker@users.noreply.github.com
1Janos Dobronszki dobronszki@gmail.com
1Jarek Lipski pub@loomchild.net
1Jay Williams jay@myd3.com
1Jay Yu 265551+GitHubGeek@users.noreply.github.com
1Jay Yu GitHubGeek@users.noreply.github.com
1Jean Menezes da Rocha jean@menezesdarocha.info
1Jelmer Vernooij jelmer@jelmer.uk
1Jeremiah Marks jeremiah@jlmarks.org
1Joel Calado joelcalado@gmail.com
1Jon Schoning jonschoning@gmail.com
1Jonas j@jfgr.de
1Jonas Hellmann hellmann.jonas@web.de
1Jordan 15741144+jrdnlc@users.noreply.github.com
1Jordan Doyle jordan@9t9t9.com
1Jordan Doyle jordan@doyle.la
1Josh Harmon me@joshharmon.me
1Joshua Hamilton joshua.hamilton@fabricut.com
1José Castro cogurov@gmail.com
1Julien bibich@users.noreply.github.com
1Julien Bisconti julien.bisconti@gmail.com
1Julien Reichardt jul.reich43@opmbx.org
1Justin Clift justin@postgresql.org
1Justin O'Reilly justin@oreilly.me
1Kacper kacper@kacperadler.info
1Karl Gumerlock karl@gumerlock.com
1KarloLuiten github@karloluiten.nl
1Kaveet Laxmidas kaveetlaxmidas@gmail.com
1Kelvin kelvinhammond@users.noreply.github.com
1Ketrel webmaster@krahs-emag.com
1Kevin Lin LINKIWI@users.noreply.github.com
1Keyhaku jones@bious.fr
1Kieran kieran.brahney@gmail.com
1Kim Jahn gitfuckinghub@maisspace.org
1Koichi MATSUMOTO mzch@me.com
1Konstantin Sorokin kvs@sigterm.ru
1Kyle Farwell m@kfarwell.org
1Kyle Stetz kylestetz@gmail.com
1L1Cafe L-Cafe-github@tuta.io
1LB (Ben Johnston) mail@lb.ee
1Leonard Thomas Wall github@tenchooo.me
1Lescaudron Mathieu mathieu@lescaudron.com
1Liran Tal liran.tal@gmail.com
1Lorenz Hübschle-Schneider lorenzhs@users.noreply.github.com
1Louis Grenard louis.grenard@gmail.com
1Lukas Masuch Lukas.Masuch@gmail.com
1Luuk Nieuwdorp luuknieuwdorp@users.noreply.github.com
1Marcin Karpezo m.karpezo@nencki.gov.pl
1Marco Dickert dickert.marco@gmail.com
1Marco Kamner marco@it-kamner.de
1Marcus Ramberg marcus@nordaaker.com
1Mark Ide git@cranstonide.com
1Mark Ide mark@cranstonide.com
1Mark Railton mark@markrailton.com
1Markus Dieckmann markus.dieckmann@posteo.de
1Martin Malinda malindacz@gmail.com
1Martin Tournoij martin@arp242.net
1Marvin Groruk@uberdoge.network
1Marvin Gülker post+git@guelker.eu
1MatFluor MatFluor@users.noreply.github.com
1Matt Lee mattl@users.noreply.github.com
1Matteo Piccina matteo@beiphone.it
1Matthew Dews matthew-dews@users.noreply.github.com
1Matthew East matthew@mattheweast.me
1Matthias De Bie mattydebie@gmail.com
1Max 2843450+b-m-f@users.noreply.github.com
1Michael Barrow michael@barrow.me
1Michael Burns michael@mirwin.net
1Michael Malura github@malura.me
1Michael van Tricht mvantricht@expandonline.nl
1Michael van Tricht swordbeta@users.noreply.github.com
1Mike Goodwin xenithorb@users.noreply.github.com
1Mike Steele mike@steel.fm
1Minghe h.minghe@gmail.com
1MinorTom TheMinorTom@users.noreply.github.com
1Mitchell R github@mrincworld.com
1Moritz Kröger write@morkro.de
1Murali K G murali.girikg@gmail.com
1Murdoc Bates trockenasche@gmail.com
1Nick Sweeting git@nicksweeting.com
1NicolasCARPi nicolas.carpi@curie.fr
1Norman Xu im@norm.im
1Nÿco nicolas.verite@gmail.com
1Ober7 k.latif.misc@gmail.com
1Oleg Agafonov oleg.agafonov@telestax.com
1Oliver Kopp kopp.dev@gmail.com
1Opeyemi Obembe fickledreams@yahoo.com
1PMK webmaster@pmklaassen.com
1Paolo Pustorino stickgrinder@gmail.com
1Pau Kiat Wee paukiatwee@gmail.com
1Paul paul@rosanbo.com
1Paul Libbrecht paul.libbrecht@dipf.de
1Paul Libbrecht paul@hoplahup.net
1Pavlo Vodopyan pavel.vodopyan@gmail.com
1Paweł Jakimowski pawel@jakimowski.info
1Paweł Kapała bylek77@gmail.com
1Peter Brunner pbrunner@gmail.com
1Peter Tonoli peter+github@metaverse.org
1Peter van den Hurk runical1991@gmail.com
1Philipp Kutyla philipp@kutyla.de
1Phill phill@formbet.co.uk
1Phonic Mouse phonicmouse@gmai.com
1Pierre 21216829+pedrom34@users.noreply.github.com
1Pierre Dubouilh pldubouilh@gmail.com
1Pietro Pe46dro Marangon pietro@marangon.me
1Pouria Ezzati ezzati.upt@gmail.com
1Prahalad Belavadi prahaladbelavadi@gmail.com
1Rafael Milewski Milewski@users.noreply.github.com
1Raphael Fetzer kontakt@fetzer.me
1Remi Rampin remirampin@gmail.com
1Remy Adriaanse remy@adriaanse.it
1Remy Honig remyhonig@users.noreply.github.com
1Richard Thornton richard@richardthornton.com
1Riddler Iamjithin@live.com
1Robert Charusta rchar@protonmail.com
1Roberto Rosario roberto.rosario.gonzalez@gmail.com
1Rouven Bauer robsdedude@gmail.com
1RussellAult RussellAult@users.noreply.github.com
1Ryan Halliday ry167@ry167.com
1Ryan Noelk ryannoelk@gmail.com
1Rzeszow 6783135+Rzeszow@users.noreply.github.com
1Sahin Boydas sahin@movielala.com
1Salvatore Gentile SalGnt@users.noreply.github.com
1Sam Patterson bitcoin@samuelrpatterson.com
1Sam Wilson sam@samwilson.id.au
1Samuel Garneau sam@garno.me
1Sartaj sartaj@atomicsquare.com
1Scott Humphries sscotth@users.noreply.github.com
1Scott Miller scott.miller.utah@gmail.com
1Senan Kelly senan.f.b.kelly+github@gmail.com
1Sergey Bronnikov sergeyb@bronevichok.ru
1Sergey Ponomarev me@sergey-ponomarev.ru
1Sheldon Rupp me@shel.io
1Simon Alberny contact@simounet.net
1Simon Hanna simon.hanna@jesus.de
1Sourabh Joshi 38150665+sourabh-joshi@users.noreply.github.com
1Spencer McIntyre zeroSteiner@gmail.com
1Spencer Muise spencermuise@gmail.com
1Starbeamrainbowlabs sbrl@starbeamrainbowlabs.com
1Stefan Weil sw@weilnetz.de
1Steve Divskinsy stevesbrain@users.noreply.github.com
1Sylvain Boily sylvainboilydroid@gmail.com
1THS-on THS-on@users.noreply.github.com
1Tanner Collin git@tannercollin.com
1The Scorpion tehscorpion@users.noreply.github.com
1Thomas Ferney antiseptikk@users.noreply.github.com
1Thomas Hansen th4019@gmail.com
1Thomas Rohlik rohlik@3server.cz
1Thorsten Rinne thorsten@phpmyfaq.de
1Tim Allingham tim@timallingham.net
1Timur Bublik timur.bublik@zoho.com
1Tobias Diekershoff tobias.diekershoff@gmx.net
1Tobias Kunze rixx@cutebit.de
1Tobias Reich tobias.reich.ich@gmail.com
1Tobias Zeising tobias.zeising@aditu.de
1Todd Hoffmann ddffnn@gmail.com
1Tom Hacohen tom@stosb.com
1Tomer Shvueli tomer@shvueli.com
1Tommy Ku tommyku@users.noreply.github.com
1Trevor Ford trvrfrd@users.noreply.github.com
1Vadim Markovtsev vadim@sourced.tech
1Vidas P vp@automaticmode.com
1Viktor Geringer devfakeplus@googlemail.com
1Vincent Dauce eXorus@users.noreply.github.com
1Webmasterish webmasterish@gmail.com
1William Gathoye william@gathoye.be
1Yurii Rashkovskii yrashk@gmail.com
1axeloz axel@mabox.eu
1benmaynard11 allowin-217941-github@vhost244.maynardnetworks.com
1bitcoinshirt 36959754+bitcoinshirt@users.noreply.github.com
1bricej13 bricej13@gmail.com
1c22 c22@users.noreply.github.com
1cbdev cb@cbcdn.com
1costpermille costpermille@users.noreply.github.com
1cpdev cpdevelops@users.noreply.github.com
1dimqua dimqua@lavabit.com
1disk0x mdtha@tutanota.com
1domainzero domainzero@users.noreply.github.com
1dsx free.robots@gmail.com
1ePirat epirat07@gmail.com
1emmanouil emmanouil@users.noreply.github.com
1evitalis evitalis@users.noreply.github.com
1fghhfg fghhfg@users.noreply.github.com
1fi78 31729946+fi78@users.noreply.github.com
1florianl florianl@users.noreply.github.com
1foorb foorb@users.noreply.github.com
1ghaseminya ghaseminya@gmail.com
1golangci 35628013+golangci@users.noreply.github.com
1ice-92 ice-92@users.noreply.github.com
1ilsi ilsi@users.noreply.github.com
1itsnotv itsnotv@users.noreply.github.com
1jake jake@diesel
1jarek91 jarek91@users.noreply.github.com
1jgi public-devgit-common@gissehel.org
1josh joshua.r.li.98@gmail.com
1lachlan-00 lachlan.00@gmail.com
1lardbit 45122868+lardbit@users.noreply.github.com
1littleguga littleguga@users.noreply.github.com
1lsascha lsascha@gmail.com
1macmusz m.muszytowski@simplito.com
1memorex258 phillip.a.brown@live.com
1mertinop martin.santibanez.a@gmail.com
1mrkpl125 33229813+mrkpl125@users.noreply.github.com
1mxroute 37432698+mxroute@users.noreply.github.com
1n2i xuansamdinh.n2i@gmail.com
1nodomain ff@nodomain.cc
1norstbox norstbox@users.noreply.github.com
1pastapojken pastapojken@users.noreply.github.com
1phobot piter90@gmail.com
1pips pips@e5150.fr
1pnhofmann foss@pnhofmann.de
1poVoq wm_jkm@yahoo.com
1railscard railscard@gmail.com
1sc0repi0 sc0repi0@gmx.de
1skarphet skarphet@users.noreply.github.com
1sqozz sqozz@geekify.de
1steven jacobs stjacobs@fastmail.fm
1stevesbrain stevesbrain@users.noreply.github.com
1t1st3 contact@tiste.org
1teaberryy ekisneels@gmail.com
1timbe16 timbe16@users.noreply.github.com
1trebonius0 trebonius@worldofwargraphs.com
1ttoups ich@timotoups.de
1uchchishta uchchishta@users.noreply.github.com
1vincent-clipet vincent.clipet.7@gmail.com
1vinz243 vinz243@opmbx.org
1wxcafé wxcafe@wxcafe.net
1xuansamdinh xuansamdinh.n2i@gmail.com
1zotlabs mike@macgirvin.com
1Руслан Корнев oganer@gmail.com
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/Info/CONTRIBUTING/index.html b/docs/awesome-selfhosted/Info/CONTRIBUTING/index.html new file mode 100644 index 00000000..487cd9d1 --- /dev/null +++ b/docs/awesome-selfhosted/Info/CONTRIBUTING/index.html @@ -0,0 +1,181 @@ + + + + + + + + + + + + Contributing - Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Info »
  • + + + +
  • Awesome selfhosted »
  • + + + +
  • Contributing
  • +
  • + +
  • +
+ +
+
+
+
+ +

Contributing

+

Please open a new issue to clarify any questions, or post in the General discussion issue.

+

All guidelines for adding new software to the list are listed in PULL_REQUEST_TEMPLATE.md.

+

Other recommendations:

+
    +
  • To add a new entry, edit the README.md file through Github's web interface or a text editor, and send a Pull Request.
  • +
  • See Editing files in another user's repository, Creating Pull Requests, Using Pull Requests for help on sending your patch.
  • +
  • A script to help you format new entries is available at (it requires make to be installed): git clone/download and enter the repository, run make add and follow the instructions.
  • +
  • A website to help you format new entries is available at https://n8225.github.io/
  • +
  • The list of contributors can be updated with make contrib.
  • +
  • Software with no development activity for 6-12 months may be removed from the list.
  • +
  • Don't know where to start? Check issues labeled help wanted and fix.
  • +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/Info/LICENSE/index.html b/docs/awesome-selfhosted/Info/LICENSE/index.html new file mode 100644 index 00000000..998fb44e --- /dev/null +++ b/docs/awesome-selfhosted/Info/LICENSE/index.html @@ -0,0 +1,541 @@ + + + + + + + + + + + + License - Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Info »
  • + + + +
  • Awesome selfhosted »
  • + + + +
  • License
  • +
  • + +
  • +
+ +
+
+
+
+ +

License

+

CC-BY-SA-3.0 + Creative Commons Attribution-ShareAlike 3.0 Unported + . + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION + ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE + INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + ITS USE. + . + License + . + THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE + COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY + COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS + AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + . + BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE + TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY + BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS + CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND + CONDITIONS. + . + 1. Definitions + . + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, derivative + work, arrangement of music or other alterations of a literary or + artistic work, or phonogram or performance and includes cinematographic + adaptations or any other form in which the Work may be recast, + transformed, or adapted including in any form recognizably derived from + the original, except that a work that constitutes a Collection will not + be considered an Adaptation for the purpose of this License. For the + avoidance of doubt, where the Work is a musical work, performance or + phonogram, the synchronization of the Work in timed-relation with a + moving image ("synching") will be considered an Adaptation for the + purpose of this License. + . + b. "Collection" means a collection of literary or artistic works, such + as encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed in + Section 1(f) below, which, by reason of the selection and arrangement of + their contents, constitute intellectual creations, in which the Work is + included in its entirety in unmodified form along with one or more other + contributions, each constituting separate and independent works in + themselves, which together are assembled into a collective whole. A work + that constitutes a Collection will not be considered an Adaptation (as + defined below) for the purposes of this License. + . + c. "Creative Commons Compatible License" means a license that is listed + at http://creativecommons.org/compatiblelicenses that has been approved + by Creative Commons as being essentially equivalent to this License, + including, at a minimum, because that license: (i) contains terms that + have the same purpose, meaning and effect as the License Elements of + this License; and, (ii) explicitly permits the relicensing of + adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same License + Elements as this License. + . + d. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or other + transfer of ownership. + . + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + . + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + . + g. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work or + if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + . + h. "Work" means the literary and/or artistic work offered under the + terms of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, pamphlet + and other writing; a lecture, address, sermon or other work of the same + nature; a dramatic or dramatico-musical work; a choreographic work or + entertainment in dumb show; a musical composition with or without words; + a cinematographic work to which are assimilated works expressed by a + process analogous to cinematography; a work of drawing, painting, + architecture, sculpture, engraving or lithography; a photographic work + to which are assimilated works expressed by a process analogous to + photography; a work of applied art; an illustration, map, plan, sketch + or three-dimensional work relative to geography, topography, + architecture or science; a performance; a broadcast; a phonogram; a + compilation of data to the extent it is protected as a copyrightable + work; or a work performed by a variety or circus performer to the extent + it is not otherwise considered a literary or artistic work. + . + i. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + . + j. "Publicly Perform" means to perform public recitations of the Work + and to communicate to the public those public recitations, by any means + or process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a place + individually chosen by them; to perform the Work to the public by any + means or process and the communication to the public of the performances + of the Work, including by public digital performance; to broadcast and + rebroadcast the Work by any means including signs, sounds or images. + . + k. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + . + 2. Fair Dealing Rights. Nothing in this License is intended to reduce, + limit, or restrict any uses free from copyright or rights arising from + limitations or exceptions that are provided for in connection with the + copyright protection under copyright law or other applicable laws. + . + 3. License Grant. Subject to the terms and conditions of this License, + Licensor hereby grants You a worldwide, royalty-free, non-exclusive, + perpetual (for the duration of the applicable copyright) license to + exercise the rights in the Work as stated below: + . + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + . + b. to create and Reproduce Adaptations provided that any such + Adaptation, including any translation in any medium, takes reasonable + steps to clearly label, demarcate or otherwise identify that changes + were made to the original Work. For example, a translation could be + marked "The original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + . + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + . + d. to Distribute and Publicly Perform Adaptations. + . + e. For the avoidance of doubt: + . + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or compulsory + licensing scheme cannot be waived, the Licensor reserves the exclusive + right to collect such royalties for any exercise by You of the rights + granted under this License; + . + ii. Waivable Compulsory License Schemes. In those jurisdictions in which + the right to collect royalties through any statutory or compulsory + licensing scheme can be waived, the Licensor waives the exclusive right + to collect such royalties for any exercise by You of the rights granted + under this License; and, + . + iii. Voluntary License Schemes. The Licensor waives the right to collect + royalties, whether individually or, in the event that the Licensor is a + member of a collecting society that administers voluntary licensing + schemes, via that society, from any exercise by You of the rights + granted under this License. + . + The above rights may be exercised in all media and formats whether now + known or hereafter devised. The above rights include the right to make + such modifications as are technically necessary to exercise the rights + in other media and formats. Subject to Section 8(f), all rights not + expressly granted by Licensor are hereby reserved. + . + 4. Restrictions. The license granted in Section 3 above is expressly + made subject to and limited by the following restrictions: + . + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms on + the Work that restrict the terms of this License or the ability of the + recipient of the Work to exercise the rights granted to that recipient + under the terms of the License. You may not sublicense the Work. You + must keep intact all notices that refer to this License and to the + disclaimer of warranties with every copy of the Work You Distribute or + Publicly Perform. When You Distribute or Publicly Perform the Work, You + may not impose any effective technological measures on the Work that + restrict the ability of a recipient of the Work from You to exercise the + rights granted to that recipient under the terms of the License. This + Section 4(a) applies to the Work as incorporated in a Collection, but + this does not require the Collection apart from the Work itself to be + made subject to the terms of this License. If You create a Collection, + upon notice from any Licensor You must, to the extent practicable, + remove from the Collection any credit as required by Section 4(c), as + requested. If You create an Adaptation, upon notice from any Licensor + You must, to the extent practicable, remove from the Adaptation any + credit as required by Section 4(c), as requested. + . + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You Distribute + or Publicly Perform; (II) You may not offer or impose any terms on the + Adaptation that restrict the terms of the Applicable License or the + ability of the recipient of the Adaptation to exercise the rights + granted to that recipient under the terms of the Applicable License; + (III) You must keep intact all notices that refer to the Applicable + License and to the disclaimer of warranties with every copy of the Work + as included in the Adaptation You Distribute or Publicly Perform; (IV) + when You Distribute or Publicly Perform the Adaptation, You may not + impose any effective technological measures on the Adaptation that + restrict the ability of a recipient of the Adaptation from You to + exercise the rights granted to that recipient under the terms of the + Applicable License. This Section 4(b) applies to the Adaptation as + incorporated in a Collection, but this does not require the Collection + apart from the Adaptation itself to be made subject to the terms of the + Applicable License. + . + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party or + parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party or + parties; (ii) the title of the Work if supplied; (iii) to the extent + reasonably practicable, the URI, if any, that Licensor specifies to be + associated with the Work, unless such URI does not refer to the + copyright notice or licensing information for the Work; and (iv) , + consistent with Ssection 3(b), in the case of an Adaptation, a credit + identifying the use of the Work in the Adaptation (e.g., "French + translation of the Work by Original Author," or "Screenplay based on + original Work by Original Author"). The credit required by this Section + 4(c) may be implemented in any reasonable manner; provided, however, + that in the case of a Adaptation or Collection, at a minimum such credit + will appear, if a credit for all contributing authors of the Adaptation + or Collection appears, then as part of these credits and in a manner at + least as prominent as the credits for the other contributing authors. + For the avoidance of doubt, You may only use the credit required by this + Section for the purpose of attribution in the manner set out above and, + by exercising Your rights under this License, You may not implicitly or + explicitly assert or imply any connection with, sponsorship or + endorsement by the Original Author, Licensor and/or Attribution Parties, + as appropriate, of You or Your use of the Work, without the separate, + express prior written permission of the Original Author, Licensor and/or + Attribution Parties. + . + d. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any Adaptations + or Collections, You must not distort, mutilate, modify or take other + derogatory action in relation to the Work which would be prejudicial to + the Original Author's honor or reputation. Licensor agrees that in those + jurisdictions (e.g. Japan), in which any exercise of the right granted + in Section 3(b) of this License (the right to make Adaptations) would be + deemed to be a distortion, mutilation, modification or other derogatory + action prejudicial to the Original Author's honor and reputation, the + Licensor will waive or not assert, as appropriate, this Section, to the + fullest extent permitted by the applicable national law, to enable You + to reasonably exercise Your right under Section 3(b) of this License + (right to make Adaptations) but not otherwise. + . + 5. Representations, Warranties and Disclaimer + . + UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR + OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY + KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, + INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, + FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF + LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, + WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + . + 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE + LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR + ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES + ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + . + 7. Termination + . + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + . + b. Subject to the above terms and conditions, the license granted here + is perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + . + 8. Miscellaneous + . + a. Each time You Distribute or Publicly Perform the Work or a + Collection, the Licensor offers to the recipient a license to the Work + on the same terms and conditions as the license granted to You under + this License. + . + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same terms + and conditions as the license granted to You under this License. + . + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + . + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + . + e. This License constitutes the entire agreement between the parties + with respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that may + appear in any communication from You. This License may not be modified + without the mutual written agreement of the Licensor and You. + . + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and + the Universal Copyright Convention (as revised on July 24, 1971). These + rights and subject matter take effect in the relevant jurisdiction in + which the License terms are sought to be enforced according to the + corresponding provisions of the implementation of those treaty + provisions in the applicable national law. If the standard suite of + rights granted under applicable copyright law includes additional rights + not granted under this License, such additional rights are deemed to be + included in the License; this License is not intended to restrict the + license of any rights under applicable law. + . + Creative Commons Notice + . + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + . + Except for the limited purpose of indicating to the public that the Work + is licensed under the CCPL, Creative Commons does not authorize the use + by either party of the trademark "Creative Commons" or any related + trademark or logo of Creative Commons without the prior written consent + of Creative Commons. Any permitted use will be in compliance with + Creative Commons' then-current trademark usage guidelines, as may be + published on its website or otherwise made available upon request from + time to time. For the avoidance of doubt, this trademark restriction + does not form part of the License. + . + Creative Commons may be contacted at http://creativecommons.org/.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/Makefile b/docs/awesome-selfhosted/Makefile new file mode 100644 index 00000000..5b95e08d --- /dev/null +++ b/docs/awesome-selfhosted/Makefile @@ -0,0 +1,52 @@ +#!/usr/bin/make -f +SHELL = /bin/bash +AWESOME_BOT_OPTIONS = --allow-redirect --skip-save-results --allow 202 --white-list airsonic.github.io/docs/apps + +all: check_all + +# run all checks +check_all: check_syntax_full awesome_bot check_github_commit_dates + +# check pull requests +check_pr: check_syntax_diff + +# check syntax in whole file +check_syntax_full: + node tests/test.js -r README.md + +# check syntax in the diff from master to current branch +check_syntax_diff: + git diff origin/master -U0 README.md | grep --perl-regexp --only-matching "(?<=^\+).*" >> temp.md && \ + node tests/test.js -r README.md -d temp.md && \ + awesome_bot -f temp.md $(AWESOME_BOT_OPTIONS) + +# check dead links +# https://github.com/dkhamsing/awesome_bot +awesome_bot: + awesome_bot -f README.md $(AWESOME_BOT_OPTIONS) + +# check date of last commit for github.com repository URLs +check_github_commit_dates: + pip3 install PyGithub + python3 tests/check-github-commit-dates.py + +################################# + +# update the AUTHORS.md file +contrib: + @mv .github/.mailmap . && printf "|Commits | Author |\n| :---: | --- |\n" > AUTHORS.md && git shortlog -sne | sed -r 's/^\s*([[:digit:]]*?)\s*?(.*?)/|\1|\2|/' >> AUTHORS.md && mv .mailmap .github/.mailmap + +# add a new entry +add: + @read -r -p "Software name: " Name && [[ ! -z "$$Name" ]] && \ + read -r -p "Homepage/URL: " Url && [[ ! -z "$$Url" ]] && \ + read -r -p "Description (max 250 characters, ending with .): " Description && [[ ! -z "$$Description" ]] && \ + read -r -p "License: " License && [[ ! -z "$$License" ]] && \ + read -r -p "Main server-side language/platform/requirement: " Language && [[ ! -z "$$Language" ]] && \ + read -r -p "Demo URL (optional,leave empty): " Demo && \ + if [[ "$$Demo" == "" ]]; then CDemo=""; else CDemo="[Demo]($$Demo)"; fi; \ + read -r -p "Source code URL (if different from homepage): " Source && \ + if [[ "$$Source" == "" ]]; then CSource=""; else CSource="[Source Code]($$Source)"; fi; \ + if [[ "$$CSource" == "" && "$$Demo" == "" ]]; then Moreinfo=""; else Moreinfo="($$CDemo $$CSource)"; fi; \ + echo "Copy this entry to your clipboard, paste it in the appropriate category:" ;\ + echo "- [$$Name]($$Url) - $${Description} $${Moreinfo} \`$$License\` \`$$Language\`" diff --git a/docs/awesome-selfhosted/index.html b/docs/awesome-selfhosted/index.html new file mode 100644 index 00000000..efc2afac --- /dev/null +++ b/docs/awesome-selfhosted/index.html @@ -0,0 +1,1915 @@ + + + + + + + + + + + + Awesome-Selfhosted - Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Awesome selfhosted »
  • + + + +
  • Awesome-Selfhosted
  • +
  • + +
  • +
+ +
+
+
+
+ +

Awesome-Selfhosted

+
+ +
+ + +

Analytics

+

^ back to top ^

+

For personal analytics/dashboards, see Personal Dashboards

+

For everything else, see awesome-analytics

+

Archiving and Digital Preservation (DP)

+

^ back to top ^

+

Some Content Management System solutions also feature archiving and digital preservation.

+
    +
  • Access to Memory (AtoM) - Web-based, open source application for standards-based archival description and access in a multilingual, multi-repository environment. (Demo, Source Code) AGPL-3.0-only PHP
  • +
  • Archivematica - Mature digital preservation system designed to maintain standards-based, long-term access to collections of digital objects. (Demo, Source Code) AGPL-3.0-only Python
  • +
  • ArchiveBox - Self-hosted "wayback machine" that creates HTML & screenshot archives of sites from your bookmarks, browsing history, RSS feeds, or other sources. (Source Code) MIT Python
  • +
  • ArchivesSpace - Archives information management application for managing and providing Web access to archives, manuscripts and digital objects. (Demo, Source Code) ECL-2.0 Ruby
  • +
  • Collective Access: Providence - Highly configurable Web-based framework for management, description, and discovery of digital and physical collections supporting a variety of metadata standards, data types, and media formats. (Source Code) GPL-3.0-only PHP
  • +
  • CKAN - CKAN is a tool for making open data websites. (Source Code) AGPL-3.0 Python
  • +
+

Automation

+

^ back to top ^

+

See also Internet of Things (IoT)

+
    +
  • Accelerated Text - Automatically generate multiple natural language descriptions of your data varying in wording and structure. Apache-2.0 Java
  • +
  • ActiveWorkflow - An intelligent process and workflow automation platform based on software agents. MIT Ruby
  • +
  • Alltube - Web interface for youtube-dl, a program to download videos and audio from more than 100 websites. (Source Code) GPL-3.0 PHP
  • +
  • AmIUnique - Learn how identifiable you are on the Internet (browser fingerprinting tool). (Source Code) MIT Java
  • +
  • Beehive - Flexible event and agent system, which allows you to create your own agents that perform automated tasks triggered by events and filters. AGPL-3.0 Go
  • +
  • betanin - Music organization man-in-the-middle of your torrent client and music player. Based on beets.io, similar to Sonarr and Radarr. GPL-3.0 Python
  • +
  • CouchPotato - CouchPotato is an automatic Video Library Manager for Movies. Automatic torrent/nzb searching, downloading, and processing at the qualities you want. (Source Code) GPL-3.0 Python
  • +
  • Episodes - Self Hosted TV show Episode tracker and recommender built using django, bootstrap4. MIT Python
  • +
  • feed2toot - Feed2toot parses a RSS feed, extracts the last entries and sends them to Mastodon. (Source Code) GPL-3.0 Python
  • +
  • feedmixer - FeedMixer is a WSGI (Python3) micro web service which takes a list of feed URLs and returns a new feed consisting of the most recent n entries from each given feed(Returns Atom, RSS, or JSON). (Demo) WTFPL Python
  • +
  • Gekko - Gekko is a Bitcoin TA trading and backtesting bot which support multiple exchanges and cryptocurrencies. (Source Code) MIT Nodejs
  • +
  • Headphones - Automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent, Deluge and Blackhole. GPL-3.0 Python
  • +
  • Healthchecks - Django app which listens for pings and sends alerts when pings are late. (Source Code) BSD-3-Clause Python
  • +
  • homebank-converter - Web app to convert an export bank file to compatible Homebank csv. (Demo) AGPL-3.0 HTML5
  • +
  • HRConvert2 - Drag-and-drop file conversion server with session based authentication, automatic temporary file maintenance, and logging capability. GPL-3.0 PHP
  • +
  • Huginn - Allows you to build agents that monitor and act on your behalf. MIT Ruby
  • +
  • Kibitzr - Lightweight personal web assistant with powerful integrations. (Source Code) MIT Python
  • +
  • LazyLibrarian - LazyLibrarian is a program to follow authors and grab metadata for all your digital reading needs. It uses a combination of Goodreads Librarything and optionally GoogleBooks as sources for author info and book info. GPL-3.0 Python
  • +
  • Leon - Open-source personal assistant who can live on your server. (Demo, Source Code) MIT Node.js
  • +
  • Lidarr - Lidarr is a music collection manager for Usenet and BitTorrent users. (Source Code) GPL-3.0 C#
  • +
  • Medusa - Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic. GPL-3.0 Python
  • +
  • MeTube - Web GUI for youtube-dl, with playlist support. Allows downloading videos from dozens of websites. AGPL-3.0 Python/Nodejs/Docker
  • +
  • n8n - Free node based Workflow Automation Tool. Easily automate tasks across different services. (Source Code) Apache-2.0 Nodejs
  • +
  • nefarious - Web application that automates downloading Movies and TV Shows. GPL-3.0 Python
  • +
  • pyLoad - Lightweight, customizable and remotely manageable downloader for 1-click-hosting sites like rapidshare.com or uploaded.to. (Source Code) GPL-3.0 Python
  • +
  • Radarr - Radarr is an independent fork of Sonarr reworked for automatically downloading movies via Usenet and BitTorrent, à la Couchpotato. (Source Code) GPL-3.0 C#
  • +
  • StackStorm - StackStorm (aka "IFTTT for Ops") is event-driven automation for auto-remediation, security responses, troubleshooting, deployments, and more. Includes rules engine, workflow, 160 integration packs with 6000+ actions and ChatOps. (Source Code) Apache-2.0 Python
  • +
  • SickRage - SickRage is an automatic Video Library Manager for TV Shows. Automatic torrent/nzb searching, downloading, and processing at the qualities you want. (Source Code) GPL-3.0 Python
  • +
  • Sonarr - Automatic TV Shows downloader and manager for Usenet and BitTorrent. It can grab, sort and rename new episodes and automatically upgrade the quality of files already downloaded when a better quality format becomes available. (Source Code) GPL-3.0 C#
  • +
  • µTask - µTask is an automation engine that models and executes business processes declared in yaml. BSD-3-Clause Go
  • +
  • TriggerHappy - Open source clone of IFTTT, a bridge between your internet services. (Source Code) BSD-3-Clause Python
  • +
  • WebUI-aria2 - Interface to interact with the aria2 downloader. Very simple to use, just download and open index.html in any web browser. (Demo) MIT HTML5
  • +
  • YoutubeDL-Material - Material Design inspired YouTube downloader, based on youtube-dl. Supports playlists, quality select, search, dark mode and much more, all with a clean and modern design. MIT Nodejs
  • +
  • Zenbot 3 - Zenbot is a lightweight, extendable, artificially intelligent trading bot for Bitcoin, Ether, Litecoin, and more. MIT Node.js
  • +
  • ZeroQueue - A low-code queue management system that lets you run scheduled jobs for anything. GPL-3.0 Node.js
  • +
+

Blogging Platforms

+

^ back to top ^

+

See also Static Site Generators, Content Management Systems and WeblogMatrix

+
    +
  • Antville - Free, open source project aimed at the development of a high performance, feature rich weblog hosting software. (Source Code) Apache-2.0 Javascript
  • +
  • Blog - Facebook-styled blog. Free, extremely lightweight, single-user and easy to install. (Demo) GPL-3.0 PHP
  • +
  • Blogotext - Free blog-engine written in PHP and using SQLite. This offers you both an unmatched simplicity during installation and great performances. (Source Code) MIT PHP
  • +
  • Bludit - Simple application to build a site or blog in seconds. Bludit uses flat-files (text files in JSON format) to store posts and pages. (Demo, Source Code) MIT PHP
  • +
  • Cadmus - Cadmus is an extremely lightweight, flat-file blogging platform powered by Markdown. MIT PHP
  • +
  • Canvas - A Laravel publishing platform. (Source Code) MIT PHP
  • +
  • Chyrp Lite - Extra-awesome, extra-lightweight blog engine. (Source Code) BSD-3-Clause PHP
  • +
  • Dante Stories - Self hosted Medium platform built with Ruby on Rails. (Source Code) MIT Ruby
  • +
  • Dotclear - Take control over your blog. (Source Code) GPL-2.0 PHP
  • +
  • Formtools - Powerful, flexible, free and open source PHP/MySQL script to manage your forms and data. (Source Code) GPL-2.0 PHP
  • +
  • Ghost - Just a blogging platform. (Source Code) MIT Nodejs
  • +
  • Hexo - Fast, simple and powerful blog framework, powered by Node.js. (Source Code) MIT Nodejs
  • +
  • Hotglue - Freehand CMS which allows to construct websites directly in a web-browser. It uses flat files for storage and provides an intuitive GUI. (Demo, Source Code) GPL-3.0 PHP
  • +
  • htmly - Databaseless Blogging Platform (Flat-File Blog). (Demo, Source Code) GPL-2.0 PHP
  • +
  • Known - Single website for all your content. (Source Code) Apache-2.0 PHP
  • +
  • Plume - Federated blogging engine, based on ActivityPub. (Source Code) AGPL-3.0 Rust
  • +
  • PluXml - XML-based blog/CMS platform. (Source Code) GPL-1.0 PHP
  • +
  • Postleaf - Open source blogging platform with inline editing, handlebar templates, and a beautiful user interface. (Source Code) MIT Nodejs
  • +
+ +

^ back to top ^

+
    +
  • dyu/bookmarks - Single-threaded/process bookmark app powered by leveldb and uWebSockets. Supports importing from Delicious and Chrome. (Demo) Apache-2.0 Java
  • +
  • Espial - An open-source, web-based bookmarking server. AGPL-3.0 Haskell
  • +
  • Firefox Account Server - This is the monorepo for Firefox Accounts (formerly separated into Auth and Content). (Source Code) MPL-2.0 Nodejs, Java
  • +
  • Firefox Sync Server - Sync Firefox bookmarks, passwords, history, tabs, preferences. MPL-2.0 Python
  • +
  • Geekmarks - Personal bookmarking service focused on speed and organization using hierarchical tags. (Source Code) BSD-2-Clause Go
  • +
  • golinks - Web application that allows you to create smart bookmarks, commands and aliases by pointing your web browser's default search engine at a running instance. Similar to bunny1 or yubnub. (Demo) MIT Go
  • +
  • linkding - Minimal bookmark management with a fast and clean UI. Simple installation through Docker and can run on your Raspberry Pi. (Demo) MIT Docker/Python/Nodejs
  • +
  • Lobsters - Run your own link aggregation site. (Source Code) BSD-3-Clause Ruby
  • +
  • No Fuss Bookmarks - Very simple software and service to store bookmarks especially designed for hackers (that don't need fancy interfaces, but nice API). (Source Code) GPL-3.0 Python
  • +
  • Pinry - The tiling image board system for people who want to save, tag, and share images, videos, and webpages. (Source Code) BSD-2-Clause Python
  • +
  • Reminiscence - Self-Hosted Bookmark And Archive Manager. AGPL-3.0 Python
  • +
  • Shaarli - Personal, minimalist, super-fast, no-database bookmarking and link sharing platform. (Demo) Zlib PHP
  • +
  • Shiori - Simple bookmark manager built with Go. MIT Go
  • +
  • unmark - Open source to do app for links. MIT PHP
  • +
  • ubookmark - LDAP enabled bookmarking service. (Demo, Source Code) GPL-2.0 Python
  • +
  • xBrowserSync - Open source tool for syncing browser data between browsers and devices. (Source Code) MIT Nodejs
  • +
+

Calendaring and Contacts Management

+

^ back to top ^

+

Some Groupware solutions also feature calendar/address book editing and synchronization.

+

See https://en.wikipedia.org/wiki/Comparison_of_CalDAV_and_CardDAV_implementations

+

CalDAV or CardDAV servers

+
    +
  • Baïkal - Lightweight CalDAV and CardDAV server based on sabre/dav. (Source Code) GPL-3.0 PHP
  • +
  • CalendarServer - Apple, Inc.'s standards-compliant server implementing the CalDAV and CardDAV protocols shipped with macOS Server. (Source Code) Apache-2.0 Python
  • +
  • calypso - Python-based CalDAV and CardDAV server, forked from Radicale. (Source Code) GPL-3.0 Python
  • +
  • DAViCal - Server for calendar sharing (CalDAV) that uses a PostgreSQL database as a data store. (Source Code) GPL-2.0 PHP
  • +
  • Davis - A simple, dockerizable and fully translatable admin interface for sabre/dav based on Symfony 5 and Bootstrap 4, largely inspired by Baïkal. MIT PHP
  • +
  • DecSync CC - Serverless contacts, calendar synchronization using your own file syncing method i.e Syncthing, Nextcloud etc. (Source Code) GPL-3.0 Kotlin
  • +
  • EteSync Server - End-to-end encrypted and journaled personal information server supporting calendar and contact data, offering its own clients. (Source Code) AGPL-3.0 Python/Django
  • +
  • Radicale - Simple calendar and contact server with extremely low administrative overhead. (Source Code) GPL-3.0 Python
  • +
  • SabreDAV - Open source CardDAV, CalDAV, and WebDAV framework and server. (Source Code) MIT PHP
  • +
  • Xandikos - Open source CardDAV and CalDAV server with minimal administrative overhead, backed by a Git repository. (Source Code) GPL-3.0 Python
  • +
+

CalDAV or CardDAV web-based clients

+
    +
  • AgenDAV - Multilanguage CalDAV web client with a rich AJAX interface and shared calendars support. (Source Code) GPL-3.0 PHP
  • +
  • InfCloud - Open source CalDAV/CardDAV web client implementation. (Demo, Source Code) AGPL-3.0 Javascript
  • +
  • EteSync Web - EteSync's official Web-based client (i.e., their Web app). (Demo, Source Code) AGPL-3.0 Javascript
  • +
+

Communication systems

+

^ back to top ^

+

Custom communication systems

+
    +
  • Centrifugo - Language-agnostic real-time messaging (Websocket or SockJS) server. (Demo) MIT Go
  • +
  • Cherry - Tiny webchat server. GPL-2.0 Go
  • +
  • Darkwire.io - End-to-end encrypted instant web chat. (Source Code) MIT Nodejs
  • +
  • Freenet - Anonymously share files, browse and publish "freesites" (web sites accessible only through Freenet) and chat on forums. (Source Code) GPL-2.0 Java
  • +
  • Friends - P2P chat powered by the web. (Source Code) MIT Nodejs
  • +
  • GNUnet - Free software framework for decentralized, peer-to-peer networking. (Source Code) GPL-3.0 C
  • +
  • Gotify - Self-hosted notification server with Android and CLI clients, similar to PushBullet. (Source Code, Clients) MIT Go
  • +
  • Hawkpost - HawkPost is a web app that lets you create unique links that you can share with a person that desires to send you important information but doesn't know how to encrypt it. The message is encrypted in their browser and sent to your email address. (Source Code) MIT Python
  • +
  • Jami - Free and universal communication platform which preserves the user's privacy and freedoms (formerly GNU Ring). (Source Code) GPL-3.0 C++
  • +
  • Jitsi Meet - Jitsi Meet is an OpenSource (MIT) WebRTC Javascript application that uses Jitsi Videobridge to provide high quality, scalable video conferences. (Source Code) MIT Javascript
  • +
  • Jitsi Video Bridge - WebRTC compatible Selective Forwarding Unit (SFU) that allows for multiuser video communication. (Source Code) Apache-2.0 Java
  • +
  • KChat - PHP Based Live Chat Application. Apache-2.0 PHP
  • +
  • LeapChat - Ephemeral, encrypted, in-browser chat rooms. AGPL-3.0 JavaScript
  • +
  • Lets-Chat - Self hosted chat suite written in Node. (Source Code) MIT Nodejs
  • +
  • LibreNews - Decentralized and secure breaking news notification system. (Source Code) GPL-3.0 Python
  • +
  • Live Helper Chat - Live Support chat for your website. (Source Code) Apache-2.0 PHP
  • +
  • Mattermost - Open-source, on-prem Slack-alternative. It can be integrated with Gitlab. (Source Code) AGPL-3.0/Apache-2.0 Go
  • +
  • MiAOU - Multi-room persistent chat server. (Source Code) MIT Nodejs
  • +
  • Mibew - Mibew Messenger is an open-source live support application written in PHP and MySQL. It enables one-on-one chat assistance in real-time directly from your website. (Demo, Source Code) Apache-2.0 PHP
  • +
  • Mumble - Low-latency, high quality voice/text chat software. (Source Code, Clients) BSD-3-Clause C++
  • +
  • Node-Chat - Not-so-basic open-source chat with admin features. MIT Nodejs
  • +
  • OTS - One-Time-Secret sharing platform with a symmetric 256bit AES encryption in the browser. (Source Code) Apache-2.0 Go
  • +
  • Papercups - An open source live customer chat web app written in Elixir. (Demo, Source Code) MIT Elixir
  • +
  • PushBits - Self-hosted notification server for relaying push notifications via Matrix, similar to PushBullet and Gotify. ISC Go
  • +
  • Rallly - Rallly is a free collaborative scheduling service. (Source Code) CC-BY-SA-4.0 Nodejs
  • +
  • RetroShare - Secured and decentralized communication system. Offers decentralized chat, forums, messaging, file transfer. (Source Code) GPL-2.0 С++
  • +
  • Rocket.Chat - Teamchat solution similar to Gitter.im or Slack. (Source Code) MIT Nodejs
  • +
  • Shhh - Keep secrets out of emails or chat logs, share them using secure links with passphrase and expiration dates. MIT Python
  • +
  • Spectrum 2 - Spectrum 2 is an open source instant messaging transport. It allows users to chat together even when they are using different IM networks. (Source Code) GPL-3.0 C++
  • +
  • Spreed - WebRTC audio/video calls, conferencing server, and web client. (Source Code) AGPL-3.0 Go
  • +
  • Synapse - Server for Matrix, an open standard for decentralized persistent communication. (Source Code) Apache-2.0 Python
  • +
  • Matrix Console Web - Web client meant to be a showcase of Matrix capabilities, and reference implementation of the Matrix standard. (Source Code) Apache-2.0 Javascript
  • +
  • Element - Fully-featured Matrix client for Web, iOS & Android. (Source Code) Apache-2.0 Javascript
  • +
  • Syndie - Syndie is a libre system for operating distributed forums. CC0-1.0 Java
  • +
  • TextBelt - Outgoing SMS API that uses carrier-specific gateways to deliver your text messages for free, and without ads. MIT Javascript
  • +
  • Tox - Distributed, secure messenger with audio and video chat capabilities. (Source Code) GPL-3.0 C
  • +
  • Tuber - Peer-to-peer video chat that works. (Source Code) MIT Javascript
  • +
  • WBO - A web Whiteboard to collaborate in real-time on schemas, drawings, and notes. (Demo) AGPL-3.0 Nodejs/Docker
  • +
  • ZeroNet - Open, free, and uncensorable websites, using Bitcoin cryptography and BitTorrent network. (Source Code) GPL-2.0 Python
  • +
  • Zulip - Zulip is a powerful, open source group chat application. (Source Code) Apache-2.0/Other Python
  • +
+

Email

+

^ back to top ^

+

Complete solutions

+

Simple deployment of a mail server, e.g. for inexperienced or impatient admins.

+
    +
  • AnonAddy - Open source email forwarding service for creating aliases. (Source Code) MIT PHP
  • +
  • docker-mailserver - Fullstack but simple mail server (smtp, imap, antispam, antivirus, etc.). Only configuration files, no SQL database. Keep it simple and versioned. Easy to deploy and upgrade. MIT Docker
  • +
  • Excision Mail - Fullstack, security focused mailserver based on OpenSMTPD for OpenBSD using ansible. ISC Shell/Ansible
  • +
  • Inboxen - Inboxen is a service that provides you with an infinite number of unique inboxes. (Source Code) GPL-3.0 Python
  • +
  • homebox - Suite of Ansible scripts to deploy a fully functional mail server on Debian. Unobtrusive and automatic as much as possible, focusing on stability and security. GPL-3.0 Shell
  • +
  • iRedMail - Full-featured mail server solution based on Postfix and Dovecot. (Source Code) GPL-3.0 Shell
  • +
  • Mailcow - Mail server suite based on Dovecot, Postfix and other open source software, that provides a modern Web UI for administration. (Source Code) GPL-2.0 Docker/PHP
  • +
  • Mailu - Mailu is a simple yet full-featured mail server as a set of Docker images. (Demo, Source Code) MIT Docker/Python
  • +
  • Mail-in-a-Box - Turns any Ubuntu server into a fully functional mail server with one command. (Source Code) CC0-1.0 Shell
  • +
  • Modoboa - Modoboa is a mail hosting and management platform including a modern and simplified Web User Interface. (Source Code) MIT Python
  • +
  • Ptorx - 📩🛡 Email privacy. Anonymously send and receive with alias forwarding. (Source Code) GPL-3.0 Node.js
  • +
  • Qmailtoaster - Stable, full-featured, easy-to-install mail server based on qmail. (Source Code) Multiple Linux
  • +
  • SimpleLogin - Open source email alias solution to protect your email address. Comes with browser extensions and mobile apps. (Source Code) MIT Docker/Python
  • +
  • Simple NixOS Mailserver - Complete mailserver solution leveraging the Nix Ecosystem. GPL-3.0 Nix
  • +
  • wildduck - Scalable no-SPOF IMAP/POP3 mail server. (Source Code) EUPL-1.2 Node.js
  • +
+

Mail Transfer Agents

+

MTAs / SMTP servers

+
    +
  • chasquid - SMTP (email) server with a focus on simplicity, security, and ease of operation. (Source Code) Apache-2.0 Go
  • +
  • Courier MTA - Fast, scalable, enterprise mail/groupware server providing ESMTP, IMAP, POP3, webmail, mailing list, basic web-based calendaring and scheduling services. (Source Code) GPL-3.0 C
  • +
  • Exim - Message transfer agent (MTA) developed at the University of Cambridge. (Source Code) GPL-3.0 C
  • +
  • Haraka - High-performance, pluginable SMTP server written in Javascript. (Source Code) MIT Javascript
  • +
  • MailCatcher - Ruby gem that deploys a simply SMTP MTA gateway that accepts all mail and displays in web interface. Useful for debugging or development. (Source Code) MIT Ruby
  • +
  • Maildrop - Disposable email SMTP server, also useful for development. MIT Scala
  • +
  • MailHog - Small Golang executable which runs an SMTP MTA gateway that accepts all mail and displays in web interface. Useful for debugging or development. MIT Go
  • +
  • OpenSMTPD - Secure SMTP server implementation from the OpenBSD project. (Source Code) ISC C
  • +
  • Postfix - Fast, easy to administer, and secure Sendmail replacement. IPL-1.0 C
  • +
  • Qmail - Secure Sendmail replacement. (Source Code) CC0-1.0 C
  • +
  • Sendmail - Message transfer agent (MTA). Sendmail C
  • +
  • Slimta - Mail Transfer Library built on Python. (Source Code) MIT Python
  • +
+

Mail Delivery Agents

+

MDAs - IMAP/POP3 software

+
    +
  • Cyrus IMAP/POP3 - Intended to be run on sealed servers, where normal users are not permitted to log in. (Source Code) BSD-3-Clause-Attribution C
  • +
  • Dovecot - IMAP and POP3 server written primarily with security in mind. (Source Code) MIT/LGPL-2.1 C
  • +
  • Piler - feature-rich open source email archiving solution. (Source Code) GPL-3.0 C
  • +
+

Mailing lists and Newsletters

+

Mailing lists servers and mass mailing software - one message to many recipients.

+
    +
  • Dada Mail - Web-based list management system that can be used for announcement lists and/or discussion lists. (Source Code) GPL-2.0 Perl
  • +
  • Listmonk - High performance, self-hosted newsletter and mailing list manager with a modern dashboard. (Source Code) AGPL-3.0 Go
  • +
  • Mail For Good - Open source email campaign management tool for nonprofits. BSD-3-Clause Javascript
  • +
  • Mailman - The Gnu mailing list server. GPL-3.0 Python
  • +
  • Mailtrain - self hosted newsletter application built on Node.js (v5+) and MySQL (v5.5+ or MariaDB). (Source Code) GPL-3.0 Nodejs
  • +
  • MailyHerald - Self-hosted Mailchimp alternative that you can easily integrate with your site. Helps you send and manage your application mailings. It supports email marketing and conducting the daily stream of notifications you send to your users. (Source Code) LGPL-3.0 Ruby
  • +
  • Mautic - Mautic is marketing automation software (email, social and more). (Source Code) GPL-3.0 PHP
  • +
  • HyperKitty - Open source Django application to provide a web interface to access GNU Mailman v3 archives. (Demo, Source Code) GPL-3.0 Python
  • +
  • phpList - Newsletter and email marketing with advanced management of subscribers, bounces, and plugins. (Source Code) AGPL-3.0 PHP
  • +
  • Postal - Fully featured open source mail delivery platform for incoming and outgoing e-mail. MIT Ruby
  • +
  • Postorius - Web user interface to access GNU Mailman. (Source Code) GPL-3.0 Python
  • +
  • Schleuder - GPG-enabled mailing list manager with resending-capabilities. (Source Code) GPL-3.0 Ruby
  • +
  • Sympa - Mailing list manager. GPL-2.0 Perl
  • +
+

Webmail clients

+ +

IRC

+

^ back to top ^

+

IRC communication software

+
    +
  • Convos - Always online web IRC client. (Demo, Source Code) Artistic-2.0 Perl
  • +
  • InspIRCd - Modular IRC server written in C++ for Linux, BSD, Windows, and macOS. (Source Code) GFDL-1.2-only C++
  • +
  • Dispatch - Self-hosted web IRC client written in Go. (Demo) MIT Go
  • +
  • Kiwi IRC - Responsive web IRC client with theming support. (Demo, Source Code) Apache-2.0 Nodejs
  • +
  • ngircd - Free, portable and lightweight Internet Relay Chat server for small or private networks. (Source Code) GPL-2.0 C
  • +
  • Oragono - Modern IRCv3 server written in Go, combining the features of an ircd, a services framework, and a bouncer. (Source Code) MIT Go
  • +
  • The Lounge - Self-hosted web IRC client. (Demo, Source Code) MIT Nodejs
  • +
  • Quassel IRC - distributed IRC client, meaning that one (or multiple) client(s) can attach to and detach from a central core. (Source Code) GPL-2.0 C++
  • +
  • Robust IRC - RobustIRC is IRC without netsplits. Distributed IRC server, based on RobustSession protocol. (Source Code) BSD-3-Clause Go
  • +
  • Tiny Tiny IRC - An open source AJAX-powered chat platform with support for IRC (Source Code). GPL-3.0 PHP/Java
  • +
  • Weechat - Fast, light and extensible chat client. GPL-3.0 C
  • +
  • Glowing Bear - A web frontend for WeeChat. (Demo) GPL-3.0 JavaScript
  • +
  • ZNC - Advanced IRC bouncer. (Source Code) Apache-2.0 C++
  • +
+

SIP

+

^ back to top ^

+

SIP/IPBX telephony software

+
    +
  • Asterisk - Easy to use but advanced IP PBX system, VoIP gateway and conference server. GPL-2.0 C
  • +
  • ASTPP - is an Open Source VoIP Billing Solution for Freeswitch. It supports prepaid and postpaid billing with call rating and credit control. It also provides many other features. (Source Code) AGPL-3.0 PHP
  • +
  • Freepbx - Web-based open source GUI that controls and manages Asterisk. (Source Code) GPL-2.0 PHP
  • +
  • FreeSWITCH - Scalable open source cross-platform telephony platform. (Source Code) MPL-2.0 C
  • +
  • FusionPBX - Open source project that provides a customizable and flexible web interface to the very powerful and highly scalable multi-platform voice switch called FreeSWITCH. (Source Code) MPL-1.1 PHP
  • +
  • Homer - Troubleshooting and monitoring VoIP calls. (Source Code) AGPL-3.0 Angular/C
  • +
  • Kamailio - Modular SIP server (registrar/proxy/router/etc). (Source Code) GPL-2.0 C
  • +
  • Kazoo - KAZOO is an open-source, highly scalable software platform designed to provide carrier-grade VoIP switch functions and features. (Source Code) MPL-1.1 Erlang
  • +
  • Ostel - Secure SIP telephony setup with ZRTP encryption. GPL-3.0 Ruby
  • +
  • Routr - A lightweight sip proxy, location server, and registrar for a reliable and scalable SIP infrastructure. (Demo, Source Code) MIT JavaScript
  • +
  • SipXcom - Open source unified communications system. (Source Code) AGPL-3.0 Java
  • +
  • SIP3 - VoIP troubleshooting and monitoring platform. (Demo, Source Code) Apache-2.0 Kotlin
  • +
  • Wazo - Full-featured IPBX solution built atop Asterisk with integrated Web administration interface and REST-ful API. (Source Code) GPL-3.0 Python
  • +
+

Social Networks and Forums

+

^ back to top ^

+
    +
  • Abilian SBE - Open Source Collaboration and Social Networking framework and platform. LGPL-2.1 Python
  • +
  • Anahita - Open Source Social Networking Framework and Platform. (Source Code) GPL-3.0 PHP
  • +
  • bbPress - bbPress is forum software with a twist from the creators of WordPress. Easily setup discussion forums inside your WordPress.org powered site. (Source Code) GPL-2.0 PHP
  • +
  • Bootcamp - Enterprise social network. (Source Code) MIT Python
  • +
  • Buddycloud - Tools, libraries, services and a community to build user-to-user, group and social messaging into your app. Saves time. Scales up. Supports you. (Source Code) Apache-2.0 Java
  • +
  • BuddyPress - Powerful plugin that takes your WordPress.org powered site beyond the blog with social-network features like user profiles, activity streams, user groups, and more. (Source Code) GPL-2.0 PHP
  • +
  • cartulary - RSS reader, readability tool, article archiver, microblogger, social graph manager and reading list manager. CDDL-1.0 PHP
  • +
  • Commento - Commento is a discussion platform that you can embed on your blog, news articles, and any place where you want your readers to add comments. MIT GO
  • +
  • Coral - A better commenting experience from Vox Media. (Source Code) Apache-2.0 Nodejs
  • +
  • diaspora* - Distributed social networking server. (Demo, Source Code) AGPL-3.0 Ruby
  • +
  • Discourse - Advanced forum / community solution based on Ruby and JS. (Demo, Source Code) GPL-2.0 Ruby
  • +
  • dyu/comments - Real-time, markdown-enabled comment engine powered by leveldb. (Demo) Apache-2.0 Java
  • +
  • EpochTalk - Next Generation Forum Software. MIT Nodejs
  • +
  • Elgg - Powerful open source social networking engine. (Source Code) GPL-2.0 PHP
  • +
  • Flarum - Delightfully simple forums. Flarum is the next-generation forum software that makes online discussion fun again. (Source Code) MIT PHP
  • +
  • flaskbb - FlaskBB is forum software written in Python using the microframework Flask. You can easily create new topics, posts and send other users private messages. It also includes basic administration and moderation tools. (Source Code) BSD-3-Clause Python
  • +
  • FluxBB - Fast, light, user-friendly forum software for your website. (Source Code) GPL-2.0 PHP
  • +
  • Friendica - Social Communication Server. (Source Code) AGPL-3.0 PHP
  • +
  • Glosa - Open source commentary system easy to integrate with static pages. You can import from Disqus. GPL-3.0 Java
  • +
  • GNU social - Social communication software for both public and private communications. (Source Code) AGPL-3.0 PHP
  • +
  • Gosora - Gosora is an ultra-fast and secure forum software written in Go that balances usability with functionality. (Source Code) GPL-3.0 Go
  • +
  • Hubzilla - Decentralized identity, privacy, publishing, sharing, cloud storage, and communications/social platform. (Source Code) MIT PHP
  • +
  • HumHub - Flexible kit for private social networks. (Source Code) AGPL-3.0 PHP
  • +
  • Isso - Lightweight commenting server written in Python and Javascript. It aims to be a drop-in replacement for Disqus. (Source Code) MIT Python
  • +
  • Lemmy - A link aggregator / reddit clone for the fediverse. Reddit alternative built in Rust. (Source Code) AGPL-3.0 Rust
  • +
  • Loomio - Loomio is a collaborative decision-making tool that makes it easy for anyone to participate in decisions which affect them. (Source Code) AGPL-3.0 Ruby
  • +
  • Mastodon - Federated microblogging server, an alternative to GNU social. (Source Code) AGPL-3.0 Ruby
  • +
  • Misago - Misago is fully featured modern forum application that is fast, scalable and responsive. (Source Code) GPL-2.0 Python
  • +
  • Misskey - Decentralized app-like microblogging server/SNS for the Fediverse, using the ActivityPub protocol like GNU social and Mastodon. (Source Code) AGPL-3.0 Nodejs
  • +
  • Movim - Modern, federated social network based on XMPP, with a fully featured group-chat, subscriptions and microblogging. (Source Code) AGPL-3.0 PHP
  • +
  • MyBB - Free, extensible forum software package. (Source Code) LGPL-3.0 PHP
  • +
  • NodeBB - Node.js based forum software built for the modern web. (Source Code) GPL-3.0 Nodejs
  • +
  • Orange Forum - Orange Forum is an easy to deploy forum that has minimal dependencies and uses very little javascript. (Source Code) BSD-3-Clause Go
  • +
  • OSSN - Open Source Social Network (OSSN) is a social networking software written in PHP. It allows you to make a social networking website and helps your members build social relationships, with people who share similar professional or personal interests. (Source Code) GPL-2.0 PHP
  • +
  • Patchwork - Decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB). AGPL-3.0-only NodeJS
  • +
  • phpBB - Flat-forum bulletin board software solution that can be used to stay in touch with a group of people or can power your entire website. (Source Code) GPL-2.0 PHP
  • +
  • PixelFed - Pixelfed is an open-source, federated platform alternate to Instagram. (Source Code) AGPL-3.0 PHP\HTML\Vue
  • +
  • Pleroma - Federated microblogging server, Mastodon, GNU social, & ActivityPub compatible. (Source Code) AGPL-3.0 Elixir
  • +
  • PPnet - Create and host your own social network. MIT Javascript
  • +
  • Pump.io - Stream server that does most of what people really want from a social network. (Source Code) Apache-2.0 Nodejs
  • +
  • remark42 - A lightweight and simple comment engine, which doesn't spy on users. It can be embedded into blogs, articles or any other place where readers add comments. (Demo, Source Code) MIT Go
  • +
  • Satellity - Yet another open source forum written in Golang, React and PostgreSQL. (Source Code) MIT Go
  • +
  • Scoold - Stack Overflow in a JAR. An enterprise-ready Q&A platform with full-text search, SAML, LDAP integration and social login support. (Demo, Source Code) Apache-2.0 Java
  • +
  • Simple Machines Forum - Free, professional grade software package that allows you to set up your own online community within minutes. (Source Code) BSD-3-Clause PHP
  • +
  • Socialhome - Federated and decentralized profile builder and social network engine. (Demo, Source Code) AGPL-3.0 Python
  • +
  • Talkyard - Create a community, where your users can suggest ideas and get questions answered. And have friendly open-ended discussions and chat (Slack/StackOverflow/Discourse/Reddit/Disqus hybrid). (Demo, Source Code) AGPL-3.0 Scala
  • +
  • Tokumei - Anonymous microblogging platform. (Source Code) ISC rc
  • +
  • Thredded - Forums, feature-rich and simple. MIT Ruby
  • +
  • twister - Fully decentralized P2P microblogging platform leveraging the free software implementations of Bitcoin and BitTorrent protocols. (Source Code) MIT C++
  • +
  • twtxt.net - a Self-Hosted, Twitter™-like Decentralised micro-logging platform. No ads, no tracking, your content, your data. (Source Code) MIT Go
  • +
  • rss2twtxt - An RSS/Atom feed aggregator command-line tool and web service that consumes RSS/Atom and produces twtxt.net feeds for consumption by twtxt clients. (Demo) MIT Go
  • +
  • Vanilla Forums - Simple and flexible forum software. (Source Code) GPL-2.0 PHP
  • +
  • Zusam - Free and open-source way to self-host private forums for groups of friends or family. (Demo, Source Code) AGPL-3.0 PHP
  • +
+

XMPP

+

^ back to top ^

+

Extensible Messaging and Presence Protocol software

+

XMPP Servers

+
    +
  • ejabberd - XMPP instant messaging server. (Source Code) GPL-2.0 Erlang
  • +
  • Kontalk - Kontalk is an Open Source Messenger, similar to WhatsApp (app for android only currently), including end-to-end encryption, server is based on Tigase XMPP Server. (Source Code) GPL-3.0 Java
  • +
  • Metronome IM - Fork of Prosody IM. (Source Code) MIT Lua
  • +
  • MongooseIM - Mobile messaging platform with a focus on performance and scalability. (Source Code) GPL-2.0 Erlang
  • +
  • Openfire - Real time collaboration (RTC) server. (Source Code) Apache-2.0 Java
  • +
  • Prosody IM - Feature-rich and easy to configure XMPP server. (Source Code) MIT Lua
  • +
  • Tigase - XMPP server implementation in Java. GPL-3.0 Java
  • +
+

XMPP Web Clients

+
    +
  • Candy - Multi user XMPP client written in Javascript. (Source Code) MIT Javascript
  • +
  • Converse.js - Free and open-source XMPP chat client in your browser. (Source Code) MPL-2.0 Javascript
  • +
  • JSXC - Real-time XMPP web chat application with video calls, file transfer and encrypted communication. There are also versions for Nextcloud/Owncloud and SOGo. (Source Code) MIT Javascript
  • +
  • Salut à Toi - Multipurpose, multi frontend, libre and decentralized communication tool. (Source Code) AGPL-3.0 Python
  • +
  • Libervia - Web frontend from Salut à Toi. (Source Code) AGPL-3.0 Python
  • +
+

Conference Management

+

^ back to top ^

+
    +
  • BigBlueButton - Supports real-time sharing of audio, video, slides (with whiteboard controls), chat, and the screen. Instructors can engage remote students with polling, emojis, and breakout rooms. (Demo, Source Code) LGPL-3.0 Java
  • +
  • Conference Organizing Distribution (COD) - Create conference and event websites built on top of Drupal. (Source Code) GPL-1.0 PHP
  • +
  • frab - web-based conference planning and management system. It helps to collect submissions, to manage talks and speakers and to create a schedule. (Source Code) MIT Ruby
  • +
  • indico - A feature-rich event management system, made @ CERN, the place where the Web was born. (Demo, Source Code) MIT Python
  • +
  • Open Conference Systems (OCS) - is a free Web publishing tool that will create a complete Web presence for your scholarly conference. (Demo, Source Code) GPL-1.0 PHP
  • +
  • OpenCFP - OpenCFP is a PHP-based conference talk submission system. MIT PHP
  • +
  • OpenConferenceWare - An open source web application for supporting conference-like events. This customizable, general-purpose platform provides proposals, sessions, schedules, tracks, user profiles. (Source Code) MIT Ruby
  • +
  • osem - Event management tailored to free Software conferences. (Demo, Source Code) MIT Ruby
  • +
  • pretalx - Web-based event management, including running a Call for Papers, reviewing submissions, and scheduling talks. Exports and imports for various related tools. (Source Code) Apache-2.0 Python
  • +
+

Content Management Systems (CMS)

+

^ back to top ^

+

CMS are a practical way to setup a website with many features. CMS often come with third party plugins, themes and functionality that is easy to add and customize to your needs. See also Blogging Platforms and Static Site Generators

+
    +
  • Alfresco Community Edition - The open source Enterprise Content Management software that handles any type of content, allowing users to easily share and collaborate on content. (Source Code) LGPL-3.0 Java
  • +
  • Apostrophe - Node.js CMS with a focus on extensible in-context editing tools. (Demo, Source Code) MIT Nodejs
  • +
  • b2evolution CMS - The most integrated CMS ever: b2evolution includes everything you need to build websites for publishing, sharing and interacting with your community. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Backdrop CMS - Comprehensive CMS for small to medium sized businesses and non-profits. (Source Code) GPL-2.0 PHP
  • +
  • BigTree CMS - Straightforward, well documented, and capable written with PHP and MySQL. (Source Code) LGPL-2.1 PHP
  • +
  • Bolt CMS - Open source Content Management Tool, which strives to be as simple and straightforward as possible. (Demo, Source Code) MIT PHP
  • +
  • CMS Made Simple - Open source content management system, faster and easier management of website contents, scalable for small businesses to large corporations. (Source Code) GPL-1.0 PHP
  • +
  • Cockpit - Simple Content Platform to manage any structured content. (Source Code) MIT PHP
  • +
  • Concrete 5 CMS - Open source content management system. (Source Code) MIT PHP
  • +
  • Contao - Contao is a powerful open source CMS that allows you to create professional websites and scalable web applications. (Source Code) LGPL-3.0 PHP
  • +
  • CouchCMS - Simple Open-Source CMS for designers. (Source Code) CPAL-1.0 PHP
  • +
  • Directus - Directus is a powerful and intuitive headless CMS for managing SQL databases with custom architectures. Built around a robust and extensible API, this decoupled content management framework is perfect for websites, apps, or multi-client projects. (Source Code) GPL-3.0 PHP
  • +
  • Drupal - Advanced open source content management platform. (Source Code) GPL-2.0 PHP
  • +
  • eLabFTW - Online lab notebook for research labs. Store experiments, use a database to find reagents or protocols, use trusted timestamping to legally timestamp an experiment, export as pdf or zip archive, share with collaborators…. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • Expressa - Content Management System for powering database driven websites using JSON schemas. Provides permission management and automatic REST APIs. MIT Nodejs
  • +
  • GetSimple CMS - The Simplest Content Management System. Ever. (Source Code) GPL-3.0 PHP
  • +
  • Joomla! - Advanced Content Management System (CMS). (Source Code) GPL-2.0 PHP
  • +
  • KeystoneJS - CMS and Web Application Platform. (Demo, Source Code) MIT Nodejs
  • +
  • MODX - MODX is an advanced content management and publishing platform. The current version is called 'Revolution'. (Source Code) GPL-2.0 PHP
  • +
  • Neos - Neos or TYPO3 Neos (for version 1) is a modern, open source CMS. (Source Code) GPL-3.0 PHP
  • +
  • Noosfero - Noosfero is a web platform for social and solidarity economy networks with blog, e-Portfolios, CMS, RSS, thematic discussion, events agenda and collective intelligence for solidarity economy in the same system. AGPL-3.0 Ruby
  • +
  • october - Free, open-source, self-hosted CMS platform. (Source Code) MIT PHP
  • +
  • Omeka - Create complex narratives and share rich collections, adhering to Dublin Core standards with Omeka on your server, designed for scholars, museums, libraries, archives, and enthusiasts. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Pagekit - New modern CMS to create and share. (Source Code) MIT PHP
  • +
  • Pico - Stupidly simple, blazing fast, flat file CMS. (Source Code) MIT PHP
  • +
  • Pimcore - Multi-Channel Experience and Engagement Management Platform. (Source Code) GPL-3.0-or-later PHP
  • +
  • Plone - Powerful open-source CMS system. (Source Code) ZPL-2.0 Python
  • +
  • ProcessWire - ProcessWire is an open source content management system (CMS) and web application framework aimed at the needs of designers, developers and their clients. (Source Code) MPL-2.0 PHP
  • +
  • PropertyWebBuilder - Ultimate Ruby on Rails engine for creating real estate websites. (Demo, Source Code) MIT Ruby
  • +
  • Publify - Simple but full featured web publishing software. (Source Code) MIT Ruby
  • +
  • REDAXO - Simple, flexible and useful content management system (documentation only available in German). (Source Code) MIT PHP
  • +
  • Redaxscript - Ultra lightweight CMS for MySQL, SQLite and PostgreSQL. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Roadiz - Modern CMS based on a node system which can handle many types of services. (Source Code) MIT PHP
  • +
  • SilverStripe - Easy to use CMS with powerful MVC framework underlying. (Demo, Source Code) BSD-3-Clause PHP
  • +
  • SPIP - Publication system for the Internet aimed at collaborative work, multilingual environments, and simplicity of use for web authors. (Source Code) GPL-2.0 PHP
  • +
  • Squidex - Headless CMS, based on MongoDB, CQRS and Event Sourcing. (Demo, Source Code) MIT .NET
  • +
  • Strapi - The most advanced open-source Content Management Framework (headless-CMS) to build powerful API with no effort. (Source Code) MIT Nodejs
  • +
  • Subrion - Subrion is a free open source content management system that allows you to build websites for any purpose. Yes, from blog to corporate mega portal. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Textpattern - Flexible, elegant and easy-to-use CMS. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Typemill - Author-friendly flat-file-cms with a visual markdown editor based on vue.js. (Source Code) MIT PHP
  • +
  • TYPO3 - Powerful and advanced CMS with a large community. (Source Code) GPL-2.0 PHP
  • +
  • Umbraco - The friendly CMS. Free and open source with an amazing community. (Source Code) MIT .NET
  • +
  • Wagtail - Django content management system focused on flexibility and user experience. (Source Code) BSD-3-Clause Python
  • +
  • WonderCMS - WonderCMS is the smallest flat file CMS since 2008. (Demo, Source Code) MIT PHP
  • +
  • WordPress - World's most-used blogging and CMS engine. (Source Code) GPL-2.0 PHP
  • +
  • WriteFreely - Writing software for starting a minimalist, federated blog — or an entire community. (Source Code) AGPL-3.0 Go
  • +
+

Recipe management

+
    +
  • OpenEats - Recipe management site that allows users to create, store, share and rate recipes, create grocery lists, and more. (Demo) MIT Python
  • +
  • Recipes - Recipes is a Django application to manage, tag and search recipes using either built-in models or external storage providers hosting PDF's, Images or other files. MIT Python
  • +
+

E-commerce

+ +

DNS

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#dns

+ +

Document Management

+

^ back to top ^

+
    +
  • CaseBox - Manage all your organization's information in one system. (Source Code) AGPL-3.0 PHP/Java
  • +
  • DOCAT - Host your docs. Simple. Versioned. Fancy. MIT Python/docker
  • +
  • Docspell - Auto-tagging document organizer and archive. (Source Code) GPL-3.0 Scala/Java
  • +
  • EdPaper - PDF organizer with users management. MIT PHP
  • +
  • EveryDocs - A simple Document Management System for private use with basic functionality to organize your documents digitally. GPL-3.0 Ruby
  • +
  • Mayan EDMS - Free Open Source Electronic Document Management System. An electronic vault for your documents with preview generation, OCR, and automatic categorization among other features. (Source Code) Apache-2.0 Python
  • +
  • Papermerge - Open Source Document Management System focused on scanned documents (electronic archives). Features file browsing in similar way to dropbox/google drive. OCR, full text search, text overlay/selection. (Source Code) Apache-2.0 Python
  • +
  • Paperless - Scan, index, and archive all of your paper documents. GPL-3.0 Python
  • +
  • Teedy - (Ex SismicsDocs) Lightweight document management system packed with all the features you can expect from big expensive solutions. (Source Code) GPL-2.0 Java
  • +
+

E-books and Integrated Library Systems (ILS)

+

^ back to top ^

+

Some Content Management System and Archiving and Digital Preservation solutions also overlap with library and institutional repository software.

+

Personal e-book management software.

+
    +
  • Calibre - E-book library manager that can view, convert, and catalog e-books in most of the major e-book formats and provides a built-in Web server for remote clients. (Demo, Source Code) GPL-3.0 Python
  • +
  • BicBucStriim - Provides web-based access to your Calibre Library's e-book collection. (Source Code) MIT PHP
  • +
  • Calibre Web - Web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. GPL-3.0 Python
  • +
  • COPS - Lightweight e-book server alternative to Calibre content server or Calibre2OPDS. (Demo, Source Code) GPL-2.0 PHP
  • +
  • The Epube - Self-hosted web EPUB reader using EPUB.js, Bootstrap, and Calibre. (Source Code) GPL-3.0 PHP
  • +
  • Komga - Media server for comics/mangas/BDs with API and OPDS support, a modern web interface for exploring your libraries, as well as a web reader. (Source Code) MIT Java/Docker
  • +
  • Mango - Manga server and web reader with a built-in MangaDex downloader. MIT Crystal
  • +
+

Enterprise-class library management software.

+
    +
  • Evergreen - Highly-scalable software for libraries that helps library patrons find library materials, and helps libraries manage, catalog, and circulate those materials. (Source Code) GPL-2.0 PL/pgSQL
  • +
  • Koha - Enterprise-class ILS with modules for acquisitions, circulation, cataloging, label printing, offline circulation for when Internet access is not available, and much more. (Demo, Source Code) GPL-3.0 Perl
  • +
  • RERO ILS - Large-scale ILS that can be run as a service with consortial features, intended primarily for library networks. Includes most standard modules (circulation, acquisitions, cataloging,...) and a web-based public and professional interface. (Demo, Source Code) AGPL-3.0 Python/Other
  • +
+

Institutional repository and digital library software.

+
    +
  • DSpace - Turnkey repository application providing durable access to digital resources. (Source Code) BSD-3-Clause Java
  • +
  • EPrints - Digital document management system with a flexible metadata and workflow model primarily aimed at academic institutions. (Demo, Source Code) GPL-3.0 Perl
  • +
  • Fedora Commons Repository - Robust and modular repository system for the management and dissemination of digital content especially suited for digital libraries and archives, both for access and preservation. (Source Code) Apache-2.0 Java
  • +
  • Islandora - Drupal module for browsing and managing Fedora-based digital repositories. (Source Code) GPL-3.0 PHP
  • +
  • Samvera Hyrax - Front-end for the Samvera framework, which itself is a Ruby on Rails application for browsing and managing Fedora-based digital repositories. (Source Code) Apache-2.0 Ruby
  • +
+

Federated Identity/Authentication

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#identity-management

+

Feed Readers

+

^ back to top ^

+
    +
  • CommaFeed - Google Reader inspired self-hosted RSS reader. (Source Code) Apache-2.0 Java
  • +
  • Feedbin - Simple, fast and nice looking RSS reader. (Source Code) MIT Ruby
  • +
  • FeedHQ - FeedHQ is a web-based feed reader. (Source Code) BSD-3-Clause Python
  • +
  • FreshRSS - Self-hostable RSS feed aggregator. (Demo, Source Code, Clients) AGPL-3.0 PHP
  • +
  • JARR - JARR (Just Another RSS Reader) is a web-based news aggregator and reader (fork of Newspipe). (Demo, Source Code) AGPL-3.0 Python
  • +
  • Kriss Feed - Simple and smart (or stupid) feed reader. (Demo, Source Code) CC0-1.0 PHP
  • +
  • Leed - Leed (for Light Feed) is a Free and minimalist RSS aggregator. (Source Code) AGPL-3.0 PHP
  • +
  • Leselys - Your very elegant RSS reader. AGPL-3.0 Python
  • +
  • Lite-Reader - Read your feeds on your own machine with a simple and lite application. (Demo) BSD-3-Clause PHP
  • +
  • Moonmoon - simple feed aggregator (planet like): it only aggregates feeds and spits them out in one single page. (Source Code) BSD-3-Clause PHP
  • +
  • Miniflux - Miniflux 2 is a minimalist and open source news reader, written in Go and PostgreSQL. (Source Code) Apache-2.0 Go
  • +
  • NewsBlur - NewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument. (Source Code) MIT Python
  • +
  • newsdash - A news dashboard inspired by iGoogle and Netvibes. AGPL-3.0 NodeJS
  • +
  • Newspipe - Newspipe is a web news reader. (Demo) AGPL-3.0 Python
  • +
  • reader - A Python feed reader web app and library (so you can use it to build your own), with only standard library and pure-Python dependencies. BSD-3-Clause Python
  • +
  • Reader-Self - Self-hosted rss reader (php / mysql or sqlite) - Google Reader alternative. (Source Code) GPL-3.0 PHP
  • +
  • RSS Monster - RSS Monster is an easy to use web-based RSS aggregator and reader compatible with the Fever API, created as an alternative for Google Reader. MIT PHP
  • +
  • Selfoss - New multipurpose rss reader, live stream, mashup, aggregation web application. (Source Code) AGPL-3.0 PHP
  • +
  • Sismics Reader - Free and open source feeds reader, including all major Google Reader features. (Demo, Source Code) GPL-2.0 Java
  • +
  • Stringer - Work-in-progress self-hosted, anti-social RSS reader. MIT Ruby
  • +
  • Temboz - Two-column feed reader emphasizing filtering capabilities to manage information overload. MIT Python
  • +
  • Tiny Tiny RSS - Open source web-based news feed (RSS/Atom) reader and aggregator. (Demo, Source Code) GPL-3.0 PHP
  • +
  • gritttt-rss - More features for Tiny Tiny RSS. (Source Code) BSD-2-Clause Python
  • +
  • ttrss-mobile - Mobile webapp for Tiny Tiny RSS. AGPL-3.0 Javascript
  • +
  • ttrss-reader - Light and responsive client for TTRSS. GPL-2.0 Javascript
  • +
  • Winds - Open source and beautiful RSS reader built using React/Redux/Sails/Node and Stream. It showcases personalized feeds powered by the Stream API. (Demo, Source Code) BSD-3-Clause Nodejs
  • +
+

RSS/Atom automation

+
    +
  • Feedpushr - Powerful RSS aggregator, able to transform and send articles to many outputs. Single binary, extensible with plugins. GPL-3.0 Go
  • +
  • Full-Text RSS - Extract article content from news sites and blogs and convert RSS feeds that contain only extracts of stories to full-text feeds. Developed by FiveFilters.org. (Source Code) GPL-3.0 PHP
  • +
  • PolitePol - Online tool for creation of RSS feeds for any web page. (Demo) MIT Python
  • +
  • RSS Fulltext Proxy - Mirrors RSS feeds to return the full content of the items, extracted from the website. MIT NodeJS
  • +
  • RSS Merger - PHP script which will take multiple RSS / Atom feeds as input and merge them into a single RSS feed. GPL-2.0 PHP
  • +
  • RSS-Bridge - rss-bridge is a PHP project capable of generating ATOM feeds for websites which don't have one. Unlicense PHP
  • +
  • RSS2EMail - Fetches RSS/Atom-feeds and pushes new Content to any email-receiver, supports OPML. GPL-2.0 Python
  • +
  • Screaming Liquid Tiger - Simple script to automatically generate valid RSS and Atom feeds from a list of media files in the same folder. MIT PHP
  • +
+

File Sharing and Synchronization

+

^ back to top ^

+

Some Groupware solutions also feature file sharing and synchronization.

+

Distributed filesystems

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#distributed-filesystems

+

File transfer/synchronization

+
    +
  • Git Annex - File synchronization between computers, servers, external drives. (Source Code) GPL-3.0 Haskell
  • +
  • Kinto - Kinto is a minimalist JSON storage service with synchronisation and sharing abilities. (Source Code) Apache-2.0 Python
  • +
  • myDrive - Fully featured online storage solution, upload/download files, photo/video viewer, and more, all through the web client. (Demo) GPL-3.0 Node.js
  • +
  • Nextcloud - Access and share your files, calendars, contacts, mail and more from any device, on your terms. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • OpenSSH/SFTP - Secure File Transfer Program. (Source Code) BSD-2-Clause C
  • +
  • ownCloud - All-in-one solution for saving, synchronizing, viewing, editing and sharing files, calendars, address books and more. (Source Code, Clients) AGPL-3.0 PHP
  • +
  • Pydio - Turn any web server into a powerful file management system and an alternative to mainstream cloud storage providers. (Source Code) AGPL-3.0 PHP
  • +
  • Samba - Samba is the standard Windows interoperability suite of programs for Linux and Unix. It provides secure, stable and fast file and print services for all clients using the SMB/CIFS protocol. (Source Code) GPL-3.0 C
  • +
  • Seafile - File hosting and sharing solution primary for teams and organizations. (Source Code) GPL-2.0/GPL-3.0/AGPL-3.0/Apache-2.0 C
  • +
  • SparkleShare - Self hosted, instant, secure file sync. (Source Code) GPL-3.0 C#
  • +
  • Syncany - Secure file sync software for arbitrary storage backends, an open-source cloud storage and filesharing application. Securely synchronize your files to any kind of storage. GPL-3.0 Java
  • +
  • Syncthing - Syncthing is an open source peer-to-peer file synchronisation tool. (Source Code) MPL-2.0 Go
  • +
  • Unison - Unison is a file-synchronization tool for OSX, Unix, and Windows. GPL-3.0 OCaml
  • +
  • Z-Push - Implementation of Microsoft’s ActiveSync protocol. (Source Code) AGPL-3.0 PHP
  • +
+

Peer-to-peer filesharing

+
    +
  • bittorrent-tracker - Simple, robust, BitTorrent tracker (client and server) implementation. (Source Code) MIT Nodejs
  • +
  • cloud-torrent - Torrent Web Client with HTTP retrievable or streamable downloaded files. AGPL-3.0 Go
  • +
  • Dat Project - Powerful decentralized file sharing applications built from a large ecosystem of modules. (Source Code) MIT Nodejs
  • +
  • FilePizza - Peer-to-peer file transfers in your browser. (Source Code) BSD-3-Clause Nodejs
  • +
  • Send - A file sharing experiment which allows you to send encrypted files to other users. (Clients) MPL-2.0 Nodejs
  • +
  • instant.io - Streaming file transfer over WebTorrent. (Demo) MIT Nodejs
  • +
  • Magnetico - Magnetico is the first autonomous (self-hosted) BitTorrent DHT search engine suite that is designed for end-users. AGPL-3.0 Python
  • +
  • Magnetissimo - Search engine that indexes all popular torrent sites. MIT Elixir
  • +
  • Opentracker - Open and free bittorrent tracker. It aims for minimal resource usage and is intended to run at your wlan router. (Source Code) Beerware C
  • +
  • peerflix-server - Downloads torrent files and provides a direct link download or a direct link stream. MIT Nodejs
  • +
  • qBittorrent - Free cross-platform bittorrent client with a feature rich Web UI for remote access. (Source Code) GPL-2.0 C++
  • +
  • rartracker - Complete private bittorrent tracker. WTFPL PHP
  • +
  • Torrents.csv - A self-hostable torrent search engine. GPL-3.0 Rust
  • +
  • Transmission - Fast, easy, Free Bittorrent client. (Source Code) GPL-3.0 C
  • +
+

Object storage/file servers

+
    +
  • Minio - Minio is an open source object storage server compatible with Amazon S3 APIs. (Source Code) Apache-2.0 Go
  • +
  • Zenko CloudServer - Zenko CloudServer, an open-source Node.js implementation of a server handling the Amazon S3 protocol. (Source Code) Apache-2.0 Nodejs
  • +
+

Single-click/drag-n-drop upload

+
    +
  • BoZoN - Minimalist Drag and drop file sharing app. AGPL-3.0 PHP
  • +
  • Coquelicot - Coquelicot is a “one-click” file sharing web application with a focus on protecting users’ privacy. (Source Code) AGPL-3.0 Ruby
  • +
  • elixire - Simple yet advanced screenshot uploading and link shortening service. (Source Code, Clients) AGPL-3.0 Python
  • +
  • fibridge - Stream huge files out of your browser without having to upload. MIT Rust
  • +
  • FileShelter - FileShelter is a self-hosted software that allows you to easily share files over the Internet. (Demo) GPL-3.0 C++
  • +
  • Files Sharing - Open Source and self-hosted files sharing application based on unique and temporary links. GPL-3.0 PHP
  • +
  • goploader - Easy file sharing with server-side encryption, curl/httpie/wget compliant. (Source Code) MIT Go
  • +
  • imgpush - imgpush is a self-hosted file upload service that can easily be integrated into other webapps. MIT Python
  • +
  • ipfs.pics - ipfs.pics is a distributed image hosting website. AGPL-3.0 PHP
  • +
  • Jirafeau - Jirafeau is a web site permitting to upload a file in a simple way and give an unique link to it. (Demo) AGPL-3.0 PHP
  • +
  • linx-server - Simple file sharing and pastebin with API, auto-expiry, deletion keys, and web seed support. (Demo) GPL-3.0 Go
  • +
  • lufi - Let's Upload that FIle, client-side encrypted. (Demo, Source Code) AGPL-3.0 Perl
  • +
  • lutim - Let's Upload That Image. AGPL-3.0 Perl
  • +
  • OnionShare - Securely and anonymously share a file of any size. GPL-2.0 Python
  • +
  • PictShare - PictShare is a multi lingual, open source image hosting service with a simple resizing and upload API. (Source Code) Apache-2.0 PHP
  • +
  • Plik - Plik is a scalable and friendly temporary file upload system. (Demo) MIT Go
  • +
  • Pomf - Simple file uploading and sharing, source for the now shut down site Pomf.se. MIT PHP
  • +
  • ProjectSend - Upload files and assign them to specific clients you create. Give access to those files to your clients. (Source Code) GPL-2.0 PHP
  • +
  • PsiTransfer - Simple open source self-hosted file sharing solution with robust up-/download-resume and password protection. BSD-2-Clause Nodejs
  • +
  • Share - Simple yet advanced uploader - upload files, images and text with moderation tools for admins. Can be used for friends and family or just for you. Integration with ShareX and more. MIT Nodejs
  • +
  • Sharry - Share files easily over the internet between authenticated and anonymous users (both ways) with resumable up- and downloads. GPL-3.0 Scala/Java
  • +
  • Uguu - Stores files and deletes after X amount of time. (Source Code) MIT PHP
  • +
  • Up1 - Client-side Encrypted Image Host. MIT Nodejs
  • +
  • uPste - Private file hosting application with an emphasis on serving technology communities. (Source Code) AGPL-3.0 PHP
  • +
  • XBackBone - A simple, fast and lightweight file manager with instant sharing tools integration, like ShareX (a free and open-source screenshot utility for Windows). AGPL-3.0 PHP
  • +
  • YouTransfer - YouTransfer is a simple but elegant self-hosted file transfer and sharing solution. (Demo, Source Code) Apache-2.0 Nodejs
  • +
+

Command-line file upload

+
    +
  • Beauties - Minimalist file sharing written in Go, to be used primarily from Unix shell (e.g. with curl). Can be built as a Debian package for easy install. MIT Go
  • +
  • transfer.sh - Easy file sharing from the command line. (Source Code) MIT Go
  • +
+

Web based file managers

+
    +
  • Apaxy - Theme built to enhance the experience of browsing web directories, using the mod_autoindex Apache module and some CSS to override the default style of a directory listing. (Source Code) Unlicense HTML
  • +
  • DirectoryLister - Simple PHP based directory lister that lists a directory and all it's sub-directories and allows you to navigate there within. (Source Code) MIT PHP
  • +
  • Encode Explorer - Encode Explorer is a single page file browser, it is simple and functional. (Demo, Source Code) MIT PHP
  • +
  • explorer - Highly-configurable directory listing made with nodejs. (Source Code) MIT Nodejs
  • +
  • Filestash - A web file manager that lets you manage your data anywhere it is located: FTP, SFTP, WebDAV, Git, S3, Minio, Dropbox, or Google Drive . (Demo, Source Code) AGPL-3.0 Go
  • +
  • goBrowser - Simple http file browser. GPL-3.0 Go
  • +
  • Gossa - Gossa is a light and simple webserver for your files. MIT Go
  • +
  • h5ai - Modern file indexer for HTTP web servers with focus on your files. Directories are displayed in a appealing way and browsing them is enhanced by different views, a breadcrumb and a tree overview. (Demo, Source Code) MIT PHP
  • +
  • IFM - Single script file manager. MIT PHP
  • +
  • ResourceSpace - ResourceSpace open source digital asset management software is the simple, fast, and free way to organise your digital assets. (Demo, Source Code) Other PHP
  • +
  • s3server - Simple HTTP interface to index and browse files in a public S3 or Google Cloud Storage bucket. MIT Go
  • +
  • Surfer - Simple static file server with webui to manage files. MIT Nodejs
  • +
  • TagSpaces - TagSpaces is an offline, cross-platform file manager and organiser that also can function as a note taking app. The WebDAV version of the application can be installed on top of a WebDAV servers such as Nextcloud or ownCloud. (Demo, Source Code) AGPL-3.0 Javascript
  • +
+

Games

+

^ back to top ^

+

Games, game servers and control panels.

+
    +
  • A Dark Room - Minimalist text adventure game for your browser. (Demo) MPL-2.0 HTML5
  • +
  • Agar.IO Clone - Agar.io clone written with Socket.IO and HTML5 canvas. MIT Nodejs
  • +
  • battlecraft - Fully distributed multiplayer browser game. Apache-2.0 Erlang
  • +
  • elevatorsaga - The elevator programming game. (Source Code) MIT Javascript
  • +
  • Hextris - Fast paced HTML5 puzzle game inspired by Tetris. (Demo) GPL-3.0 HTML5
  • +
  • Legend of the Green Dragon - Legend of the Green Dragon is a text-based RPG originally developed by Eric Stevens and JT Traub as a remake of and homage to the classic BBS Door game, Legend of the Red Dragon, by Seth Able Robinson. (Demo) AGPL-3.0 PHP
  • +
  • Lila - The forever free, adless and open source chess server powering lichess.org, with official iOS and Android client apps. (Source Code) AGPL-3.0 Scala
  • +
  • Mindustry - Factorio-like tower defense game. Build production chains to gather more resources, and build complex facilities. (Source Code) GPL-3.0 Java
  • +
  • Minetest - An open source voxel game engine. Play one of our many games, mod a game to your liking, make your own game, or play on a multiplayer server. (Source Code) LGPL-2.1/CC-BY-SA-3.0/Other C++
  • +
  • Net64+ - Net64 aka SM64O allows playing Super Mario 64 in an online multiplayer mode. Net64+ is the official continuation of the program and features an integrated server list. (Source Code, Clients) MIT Nodejs
  • +
  • node-virtual-gamepads - Turn your smartphone into a game controller, keyboard, or touchpad for a remote Linux OS machine. MIT Nodejs/CoffeScript
  • +
  • Posio - Geography multiplayer game. MIT Python
  • +
  • piqueserver - Server for openspades, the first-person shooter in a destructible voxel world. (Clients) GPL-3.0 Python/C++
  • +
  • QuakeJS - QuakeJS is a port of ioquake3 to JavaScript that can be played in a browser. MIT Nodejs
  • +
  • Quizmaster - A web-app for conducting a quiz, including a page for players to enter their answers. Apache-2.0 Scala
  • +
  • RconCli - CLI for executing queries on a remote Valve Source dedicated server using the RCON Protocol. MIT Go
  • +
  • SourceBans++ - Admin, ban, and communication management system for games running on the Source engine. (Source Code) CC-BY-SA-4.0 PHP
  • +
  • Teeworlds - Open source 2D retro multiplayer shooter. (Source Code) BSD-3-Clause/Other C++
  • +
  • TournamentMango - TournamentMango is an open source tournament bracket and user management system. You can build an archive of players and keep track of all their scores over time as well as their regular characters, games, and aliases. MIT Javascript
  • +
+

Gateways and terminal sharing

+

^ back to top ^

+
    +
  • asciinema - Web app for hosting asciicasts. (Demo) Apache-2.0 Elixir/Docker
  • +
  • GateOne - Gate One is an HTML5 web-based terminal emulator and SSH client. (Source Code) AGPL-3.0 Python
  • +
  • Guacamole - Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC and RDP. (Source Code) Apache-2.0 Java/C
  • +
  • Neko - A self hosted virtual browser (rabb.it clone) that runs in Docker. Apache-2.0 Docker/Go
  • +
  • oneye - Cloud software to access your data from everywhere with any browser. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • OS.js - Desktop implementation for your browser with a fully-fledged window manager, Application APIs, GUI toolkits and filesystem abstraction. (Demo, Source Code) BSD-2-Clause Nodejs
  • +
  • Sshwifty - Sshwifty is a SSH and Telnet connector made for the Web. AGPL-3.0 Go/Docker
  • +
  • tmate - Instant terminal sharing. (Source Code) ISC C
  • +
+

Groupware

+

^ back to top ^

+
    +
  • BlueMind - Groupware with email, calendar, addressbooks, exchange active sync, exchange "mapi" protocol support. (Source Code) AGPL-3.0 Java
  • +
  • Citadel - Groupware including email, calendar/scheduling, address books, forums, mailing lists, IM, wiki and blog engines, RSS aggregation and more. (Source Code) GPL-3.0 C
  • +
  • Corteza - CRM including a unified workspace, enterprise messaging and a low code environment for rapidly and securely delivering records-based management solutions. (Demo, Source Code) Apache-2.0 Go
  • +
  • Cozy Cloud - Personal cloud where you can manage and sync your contact, files and calendars, and manage your budget with an app store full of community contributions. (Source Code) GPL-3.0 Nodejs
  • +
  • egroupware - Software suite including calendars, address books, notepad, project management tools, client relationship management tools (CRM), knowledge management tools, a wiki and a CMS. (Source Code) GPL-2.0 PHP
  • +
  • EspoCRM - CRM with a frontend designed as a single page application, and a REST API. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Horde - The Horde Project is about creating high quality Open Source applications and libraries, based on PHP and the Horde Framework. (Demo, Source Code) GPL-2.0 PHP
  • +
  • HRCloud2 - Full-featured home hosted Cloud Drive, Personal Assistant, App Launcher, File Converter, Streamer, Share Tool and more. GPL-3.0 PHP
  • +
  • Kolab - Kolab community is a unified communication and collaboration system. (Source Code) GPL-2.0/LGPL-2.1/GPL-3.0 C++/Python/PHP
  • +
  • Kopano - Groupware suite including e-mail, calendars, tasks, todos and notes. Featuring a modern WebApp, DeskApp and mobile access over Z-Push/ActiveSync. (Demo, Source Code) AGPL-3.0 C/Python/PHP
  • +
  • Openmeetings - Openmeetings provides video conferencing, instant messaging, white board, collaborative document editing and other groupware tools using API functions of the Red5 Streaming Server for Remoting and Streaming. (Source Code) Apache-2.0 Java
  • +
  • SOGo - SOGo offers multiple ways to access the calendaring and messaging data. CalDAV, CardDAV, GroupDAV, as well as ActiveSync, including native Outlook compatibility and Web interface. (Demo, Source Code) LGPL-2.1 Objective-C
  • +
  • SuiteCRM - The award-winning, enterprise-class open source CRM. (Source Code) AGPL-3.0 PHP
  • +
  • Tine 2.0 - Contacts, Calendar, Tasks, WebDAV, ActiveSync, VOIP, Mail-Client, CRM, Sales, Projects, Timetracker. (Demo, Source Code) AGPL-3.0/Other PHP
  • +
  • Zimbra Collaboration - Email, calendar, collaboration server with Web interface and lots of integrations. (Source Code) GPL-2.0/CPAL-1.0 Java
  • +
+

Human Resources Management (HRM)

+

^ back to top ^

+
    +
  • admidio - Admidio is a free open source user management system for websites of organizations and groups. The system has a flexible role model so that it’s possible to reflect the structure and permissions of your organization. (Demo, Source Code) GPL-2.0 PHP
  • +
  • IceHrm - IceHrm employee management system allows companies to centralize confidential employee information. (Demo, Source Code) Apache-2.0 PHP
  • +
  • OrangeHRM - OrangeHRM is a comprehensive HRM system that captures all the essential functionalities required for any enterprise. (Source Code) GPL-2.0 PHP
  • +
  • Sentrifugo - Sentrifugo is a HRM system that can be easily configured to meet your organizational needs. (Source Code) GPL-3.0 PHP
  • +
  • TimeOff.Management - Simple yet powerful absence management software for small and medium size business. (Demo, Source Code) MIT Nodejs
  • +
+

Internet Of Things (IoT)

+

^ back to top ^

+
    +
  • DeviceHive - Open Source IoT Platform with a wide range of integration options. (Demo, Source Code) Apache-2.0 Java
  • +
  • Domoticz - Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. (Source Code, Clients) GPL-3.0 C/C++
  • +
  • FHEM - FHEM is used to automate common tasks in the household like switching lamps and heating. It can also be used to log events like temperature or power consumption. You can control it via web or smartphone frontends, telnet or TCP/IP directly. (Source Code) GPL-3.0 Perl
  • +
  • Gladys - Gladys is an open-source home assistant which runs on your Raspberry Pi. (Source Code) MIT Nodejs
  • +
  • Home Assistant - Open-source home automation platform. (Demo, Source Code) MIT Python
  • +
  • Mozilla Gateway - Mozilla WebThings is Mozilla’s open source implementation of the Web of Things, including the WebThings Gateway and the WebThings framework. (Source Code) MPL-2.0 NodeJS
  • +
  • Node RED - Browser-based flow editor that helps you wiring hardware devices, APIs and online services to create IoT solutions. (Source Code) Apache-2.0 Nodejs
  • +
  • openHAB - Vendor and technology agnostic open source software for home automation. (Demo, Source Code) EPL-2.0 Java
  • +
  • Thingsboard - Open-source IoT Platform - Device management, data collection, processing and visualization. (Demo, Source Code) Apache-2.0 Java
  • +
  • Thingspeak - Open source “Internet of Things” application and API to store and retrieve data from things using HTTP. (Demo, Source Code) GPL-3.0 Ruby
  • +
+

Knowledge Management Tools

+

^ back to top ^

+
    +
  • Mindmaps - Open source, offline capable, mind mapping application. (Demo) AGPL-3.0 HTML5
  • +
  • My Mind - Web application for creating and managing mind maps. (Demo) MIT Javascript
  • +
  • Weaviate - A cloud-native, realtime vector search engine integrating scalable machine learning models (GraphQL and RESTful API's). (Demo) BSD-3-Clause Go
  • +
+

Learning and Courses

+

^ back to top ^

+
    +
  • Canvas LMS - Canvas is the trusted, open-source learning management system (LMS) that is revolutionizing the way we educate. (Demo, Source Code) AGPL-3.0 Ruby
  • +
  • Chamilo LMS - Chamilo LMS allows you to create a virtual campus for the provision of online or semi-online training. (Source Code) GPL-3.0 PHP
  • +
  • edX - The Open edX platform is open-source code that powers edX.org. (Source Code) AGPL-3.0 Python
  • +
  • ILIAS - ILIAS is the Learning Management System that can cope with anything you throw at it. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Mahara - Open Source fully featured web application to build students electronic portfolio. (Source Code) GPL-3.0 PHP
  • +
  • Moodle - Moodle is a learning and courses platform with one of the largest open source communities worldwide. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Open eClass - Open eClass is an advanced e-learning solution that can enhance the teaching and learning process. (Demo, Source Code) GPL-2.0 PHP
  • +
  • OpenOLAT - OpenOLAT is a web-based learning management system for teaching, education, assessment and communication. (Demo, Source Code) Apache-2.0 Java
  • +
  • RELATE - RELATE is a web-based courseware package, includes features such as: flexible rules, statistics, multi-course support, class calendar. (Source Code) MIT Python
  • +
  • RosarioSIS - RosarioSIS, free Student Information System for school management. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Sakai - The Sakai project provides a flexible and feature-rich environment for teaching, learning, research and other collaboration. (Demo, Source Code) ECL-2.0 Java
  • +
+

Maps and Global Positioning System (GPS)

+

^ back to top ^

+

See also awesome-gis.

+
    +
  • Geo2tz - Get the timezone from geo coordinates (lat, lon). MIT Go/Docker
  • +
  • GraphHopper - Fast routing library and server using OpenStreetMap. (Source Code) Apache-2.0 Java
  • +
  • Hauk - Easy to setup location sharing platform that lets you temporarily share your location with anyone in real-time. (Demo) Apache-2.0 PHP
  • +
  • MapBBCodeShare - Tool for sharing custom OSM maps. Support for annotated markers, polygons, lines, multi-format import/export, multiple layers, shortlinks. (Demo) WTFPL/Other PHP
  • +
  • Open Source Routing Machine (OSRM) - High performance routing engine designed to run on OpenStreetMap data and offering an HTTP API, C++ library interface, and NodeJS wrapper. (Demo, Source Code) BSD-2-Clause C++
  • +
  • Nominatim - Server application for reverse geocoding (address -> coordinates) on OpenStreetMap data. (Source Code) GPL-2.0 C
  • +
  • OpenGTS - Entry-level fleet tracking system. Supports variety of tracking devices and protocols. Comes with rich web-interface and reporting features. (Demo, Source Code) Apache-2.0 Java
  • +
  • OpenStreetMap - Collaborative project to create a free editable map of the world. (Source Code, Clients) GPL-2.0 Ruby
  • +
  • OpenTripPlanner - Multimodal trip planning software based on OpenStreetMap data and consuming published GTFS-formatted data to suggest routes using local public transit systems. (Source Code) LGPL-3.0 Java/JavaScript
  • +
  • Orion - Powerful OwnTracks API-compliant location data visualization frontend for the web. (Demo) MIT Python/Nodejs
  • +
  • OwnTracks Recorder - Store and access data published by OwnTracks location tracking apps. GPL-2.0 C/Lua
  • +
  • TileServer GL - Vector and raster maps with GL styles. Server side rendering by Mapbox GL Native. Map tile server for Mapbox GL JS, Android, iOS, Leaflet, OpenLayers, GIS via WMTS, etc. (Source Code) BSD-2-Clause Nodejs
  • +
  • TileServer PHP - Serve map tiles from any PHP hosting. BSD-2-Clause PHP
  • +
  • Traccar - Java application to track GPS positions. Supports loads of tracking devices and protocols, has an Android and iOS App. Has a web interface to view your trips. (Demo, Source Code) Apache-2.0 Java
  • +
  • μlogger - Collect geolocation from users in real-time and display their GPS tracks on a website. (Demo) GPL-3.0 PHP
  • +
  • uMap - Create maps with OpenStreetMap layers in a minute and embed them in your site. (Source Code) WTFPL Python
  • +
+

Media Streaming

+

^ back to top ^

+

See also https://en.wikipedia.org/wiki/List_of_streaming_media_systems, https://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems

+

Multimedia Streaming

+
    +
  • Darwin Streaming Server - High performance server for streaming QuickTime and MPEG-4 media over RTP and RTSP protocols. Originated as Apple’s QTSS. (Source Code) APSL-2.0 C++
  • +
  • Gerbera - Gerbera is an UPnP Media Server. It allows you to stream your digital media throughout your home network and listen to/watch it on a variety of UPnP compatible devices. (Source Code) GPL-2.0 C++
  • +
  • homehost - Self-hosted React + Redux app that streams your media collection (music, movies, books, podcasts, comics etc). MIT Nodejs
  • +
  • Icecast 2 - streaming audio/video server which can be used to create an Internet radio station or a privately running jukebox and many things in between. (Source Code, Clients) GPL-2.0 C
  • +
  • Jellyfin - Media server for audio, video, books, comics, and photos with a sleek interface and robust transcoding capabilities. Almost all modern platforms have clients, including Roku, Android TV, iOS, Xbox, and Kodi. (Demo, Source Code) GPL-2.0 C#
  • +
  • Karaoke Forever - Host awesome karaoke parties where everyone can easily find and queue songs from their phone's web browser. The player is also browser-based with support for MP3+G, MP4 and WebGL visualizations. (Source Code) ISC Nodejs
  • +
  • LBRY - Is a secure, open, and community-run digital marketplace that aims to replace Youtube and Amazon. (Demo, Source Code, Clients) MIT PHP
  • +
  • MistServer - Streaming media server that works well in any streaming environment. (Source Code) AGPL-3.0 C++
  • +
  • NymphCast - NymphCast is a Chromecast alternative which turns your choice of Linux-capable hardware into an audio and video source for a television or powered speakers. (Source Code) BSD-3-Clause C++
  • +
  • ReadyMedia - Simple media server software, with the aim of being fully compliant with DLNA/UPnP-AV clients. Formerly known as MiniDLNA. (Source Code) GPL-2.0 C
  • +
  • Rygel - Rygel is a UPnP AV MediaServer that allows you to easily share audio, video, and pictures. Media player software may use Rygel to become a MediaRenderer that may be controlled remotely by a UPnP or DLNA Controller. (Source Code) GPL-3.0 C
  • +
  • üWave - üWave is a self-hosted collaborative listening platform. Users take turns playing media—songs, talks, gameplay videos, or anything else—from a variety of media sources like YouTube and SoundCloud. (Demo, Source Code) MIT Nodejs
  • +
+

Audio Streaming

+
    +
  • Ampache - Web based audio/video streaming application. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • Airsonic - Open-source web-based media streamer and jukebox. A fork of Subsonic's last open-source release, before it switched licenses. (Source Code, Clients) GPL-3.0 Java
  • +
  • AzuraCast - A modern and accessible self-hosted web radio management suite. (Source Code) Apache-2.0 PHP
  • +
  • Audioserve - Simple personal server to serve audio files from directories (audiobooks, music, podcasts...). Focused on simplicity and supports sync of play position between clients. MIT Rust
  • +
  • Beets - Music library manager and MusicBrainz tagger (command-line and Web interface). (Source Code) MIT Python
  • +
  • Black Candy - Music streaming server built with Rails and Stimulus. MIT Ruby
  • +
  • Compactd - Remote music player that supports adding content. MIT Nodejs
  • +
  • FriendsRadio - Share music with your friends from Youtube and Soundcloud. (Demo) MIT Nodejs
  • +
  • Funkwhale - Modern, web-based, convivial, multi-user and free music server. (Demo, Source Code) BSD-3-Clause Python/Django
  • +
  • GNU FM - Running music community websites, alternative to last.fm. (Source Code) AGPL-3.0 PHP
  • +
  • gonic - Lightweight music streaming server. Subsonic compatible. GPL-3.0 Go
  • +
  • Groove Basin - Music player server with a web-based user interface inspired by Amarok 1.4. MIT Nodejs
  • +
  • koel - Personal music streaming server that works. (Source Code) MIT PHP
  • +
  • KooZic - Music server with powerful playlist features and Subsonic compatibility. (Demo, Source Code) LGPL-3.0/MIT Python
  • +
  • LibreTime - Simple, open source platform that lets you broadcast streaming radio on the web (fork of Airtime). (Source Code) AGPL-3.0 PHP
  • +
  • LMS - Access your self-hosted music using a web interface. (Demo) GPL-3.0 C++
  • +
  • moOde Audio - Audiophile-quality music playback for the wonderful Raspberry Pi family of single board computers. (Source Code) GPL-3.0 PHP
  • +
  • Mopidy - Extensible music server. Offers a superset of the mpd API, as well as integration with 3rd party services like Spotify, SoundCloud etc. (Source Code) Apache-2.0 Python
  • +
  • Moped - Responsive HTML5 + Javascript client for the Mopidy music server. MIT HTML5
  • +
  • Mopidy MusicBox - Web Client for Mopidy Music Server. Apache-2.0 HTML5
  • +
  • Mopidy-Party - Mopidy web extension designed for party! Let your guests manage the sound. Apache-2.0 Python
  • +
  • mpd - Daemon to remotely play music, stream music, handle and organize playlists. Many clients available. (Source Code, Clients) GPL-2.0 C++
  • +
  • ympd - Standalone MPD Web GUI written in C, utilizing Websockets and Bootstrap/JS. (Source Code) GPL-2.0 C
  • +
  • mStream - Music streaming server with GUI management tools. Runs on Mac, Windows, and Linux. (Source Code) GPL-2.0 Nodejs
  • +
  • musikcube - Streaming audio server with Linux/macOS/Windows/Android clients. (Source Code) BSD-3-Clause C++
  • +
  • Navidrome Music Streamer - Modern Music Server and Streamer, compatible with Subsonic/Airsonic. (Demo, Source Code, Clients) GPL-3.0 Go/JavaScript
  • +
  • Polaris - Music browsing and streaming application optimized for large music collections, ease of use and high performance. MIT Rust
  • +
  • Snapcast - Synchronous multiroom audio server. GPL-3.0 C++
  • +
  • Sonerezh - Self-hosted, web-based application for stream your music, everywhere. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Stretto - Music player with Youtube/Soundcloud import and iTunes/Spotify discovery. (Demo, Clients) MIT Nodejs
  • +
  • Volumio - A free and open source linux distribution, designed and fine-tuned exclusively for music playback. (Source Code) GPL-3.0 NodeJS
  • +
+

Video Streaming

+
    +
  • Bluecherry - Closed-circuit television (CCTV) software application which supports IP and Analog cameras. (Source Code) GPL-2.0 PHP
  • +
  • crtmpserver - High performance RTMP/RTSP streaming server. GPL-3.0 C++
  • +
  • CyTube - CyTube is a web application providing media synchronization, chat, and more for an arbitrary number of channels. (Demo) MIT Nodejs
  • +
  • Hellowlol HTPC Manager fork - Fully responsive interface to manage all your favorite media on your HTPC. MIT Python
  • +
  • Invidious - Invidious is an alternative front-end to YouTube. (Demo) AGPL-3.0 Crystal
  • +
  • Myflix - Self-hosted, super lightweight Netflix alternative. MIT Shell
  • +
  • Oddworks - Oddworks is an open source video distribution platform built to destroy the barriers to streaming television with SDKs for Roku, Apple iOS/tvOS, Google Android, and Amazon FireTV. MIT Nodejs
  • +
  • Open Streaming Platform - Self-Hosted alternative to Twitch and Youtube Live for live and on-demand video streaming. (Source Code) MIT Python
  • +
  • PeerTube - Decentralized video streaming platform using P2P (BitTorrent) directly in the web browser. (Source Code) AGPL-3.0 Nodejs
  • +
  • Rapidbay - Self-hosted torrent videostreaming service/torrent client that allows searching and playing videos from torrents in the browser or from a Chromecast/AppleTV/Smart TV. MIT Python/Docker
  • +
  • Restreamer - Restreamer allows you to do h.264 real-time video streaming on your website without a streaming provider. (Source Code) Apache-2.0 Nodejs/Docker
  • +
  • Radium - Synced stream and video playback with VOD capabilities utilizing HLS. Developed for movie nights but has many use cases. (Demo) MIT Nodejs/Docker
  • +
  • ShinobiCE - Open Source CCTV software written in Node with both IP and local camera support. AGPL-3.0/GPL-3.0 Nodejs
  • +
  • Streama - Self hosted streaming media server. MIT Java
  • +
  • SyncTube - Lightweight and very simple to setup CyTube alternative to watch videos with friends and chat. (Demo) MIT Nodejs/Haxe
  • +
  • Tube - a Youtube-like (without censorship and features you don't need!) Video Sharing App written in Go which also supports automatic transcoding to MP4 H.265 AAC, multiple collections and RSS feed. (Demo, Source Code) MIT Go
  • +
  • VideoLAN Client (VLC) - Cross-platform multimedia player client and server supporting most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols. (Source Code) Multiple C
  • +
  • Zoneminder - Closed-circuit television (CCTV) software application which supports IP, USB and Analog cameras. (Source Code) GPL-2.0 PHP
  • +
+

Misc/Other

+

^ back to top ^

+
    +
  • 2FAuth - A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes. (Demo) AGPL-3.0 PHP
  • +
  • 411 - Alert Management Web Application. MIT PHP
  • +
  • AlertHub - AlertHub is a simple tool to get alerted from GitHub releases. MIT Nodejs
  • +
  • Anchr - Anchr is a toolbox for tiny tasks on the internet, including bookmark collections, URL shortening and (encrypted) image uploads. (Source Code) GPL-3.0 Nodejs
  • +
  • Anuko - Anuko provides simple time and project tracking on a selfhosted basis. (Demo, Source Code) Other PHP
  • +
  • asciiflow - Flow Diagram Drawing Tool. (Source Code) GPL-3.0 Java/JavaScript
  • +
  • blynk - Platform with iOS and Android apps to control Arduino, ESP8266, Raspberry Pi and similar microcontroller boards over the Internet. (Source Code) AGPL-3.0 Java
  • +
  • Cachet - An open source status page system for everyone. (Demo, Source Code) BSD-3-Clause PHP
  • +
  • CapRover - Build your own PaaS in a few minutes. (Demo, Source Code) Apache-2.0 Docker/Nodejs
  • +
  • cState - Static status page for hyperfast Hugo. Clean design, minimal JS, super light HTML/CSS, high customization, optional admin panel, read-only API, IE8+. Best used with Netlify, Docker. (Demo) MIT Go
  • +
  • CUPS - The Common Unix Print System uses Internet Printing Protocol (IPP) to support printing to local and network printers. (Source Code) GPL-2.0 C
  • +
  • CyberChef - Perform all manner of "cyber" operations within a web browser such as AES, DES and Blowfish encryption and decryption, creating hexdumps, calculating hashes, and much more. (Demo) Apache-2.0 JavaScript
  • +
  • Digital-Currency - Create your own Self-Hosted Digital Currency. (Demo) GPL-3.0 Nodejs
  • +
  • DomainMOD - Application to manage your domains and other internet assets in a central location. DomainMOD includes a Data Warehouse framework that allows you to import your WHM/cPanel web server data so that you can view, export, and report on your data. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Flox - Self hosted movie, TV series and anime watch list with a 3-point rating system. Uses The Movie Database backend for information. (Demo) MIT PHP
  • +
  • formspree - Just send your form to our URL and we'll forward it to your email. No PHP, Javascript or sign up required. (Demo, Source Code) AGPL-3.0 Python
  • +
  • GeneWeb - GeneWeb is an open source genealogy software written in OCaml. It comes with a Web interface and can be used off-line or as a Web service. (Demo, Source Code) GPL-2.0 OCAML
  • +
  • graph-vl - Identity document verification using Machine Learning and GraphQL. MIT Python
  • +
  • How Secure Is My Password - Rather than just saying a password is "weak" or "strong", How Secure is My Password? lets your users know how long it would take someone to crack their password. (Demo) MIT Javascript
  • +
  • google-webfonts-helper - Hassle-Free Way to Self-Host Google Fonts. Get eot, ttf, svg, woff and woff2 files + CSS snippets. (Demo) MIT Nodejs
  • +
  • ytdl-webserver - Docker-ready webserver for downloading youtube videos. MIT Nodejs
  • +
  • Journal - Simple journaling with encrypted entries and sharing capabilities. MIT Ruby
  • +
  • Kimai - Simple time and project tracking. (Demo, Source Code) GPL-3.0 PHP
  • +
  • King Phisher - King Phisher is a tool for testing and promoting user awareness by simulating real world phishing attacks. BSD-3-Clause Python
  • +
  • MailyGo - MailyGo is a small tool written in Go that allows to send HTML forms, for example from static websites without a dynamic backend, via email. MIT Go
  • +
  • MindsDB - MindsDB is an open source self hosted AI layer for existing databases that allows you to effortlessly develop, train and deploy state-of-the-art machine learning models using standard queries. GPL-3.0 Python
  • +
  • Monica - Personal relationship manager, and a new kind of CRM to organize interactions with your friends and family. (Source Code) AGPL-3.0 PHP
  • +
  • Musical Artifacts - Helping to catalog, preserve and free the artifacts you need to produce music. (Source Code) MIT Ruby
  • +
  • nnmm - Super tiny pastebin/url minifier "microservice". Beerware PHP
  • +
  • Notica - Lets you send browser notifications from your terminal to your desktop or phone. No installation or registration is required. (Source Code) MIT Nodejs
  • +
  • Ombi - A content request system for Plex/Emby, connects to SickRage, CouchPotato, Sonarr, with a growing feature set. (Source Code) GPL-2.0 C#
  • +
  • oTranscribe - Free web app to take the pain out of transcribing recorded interviews. (Source Code) MIT JavaScript
  • +
  • PassCheck - A web application featuring some handy password tools, including a password generator, strength checker and HaveIBeenPwned breach checker. (Source Code) MIT JavaScript
  • +
  • Reactive Resume - A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. (Demo, Source Code) MIT Docker/Nodejs
  • +
  • ReleaseBell - Send release notifications for starred Github repos. (Source Code) MIT Nodejs
  • +
  • revealjs - Framework for easily creating beautiful presentations using HTML. (Demo, Source Code) MIT JavaScript
  • +
  • Revive Adserver - World's most popular free, open source ad serving system. Formerly known as OpenX Adserver and phpAdsNew. (Source Code) GPL-2.0-or-later PHP
  • +
  • SANE Network Scanning - Allow remote clients to access image acquisition devices (scanners) available on the local host. (Source Code) GPL-2.0 C
  • +
  • TeslaMate - A powerful data logger for Tesla vehicles. MIT Elixir
  • +
  • Trello Burndown - Easy to use SCRUM burndown chart for Trello boards. MIT Go/Docker
  • +
  • ViMbAdmin - Provides a web based virtual mailbox administration system to allow mail administrators to easily manage domains, mailboxes and aliases. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Web fonts repository - Simple webfont hosting. Google Fonts alternative for your own fonts. MIT PHP
  • +
  • webtrees - Webtrees is the web's leading on-line collaborative genealogy application. (Demo, Source Code) GPL-3.0 PHP
  • +
+

Money, Budgeting and Management

+

^ back to top ^

+

See also https://github.com/n1trux/awesome-sysadmin#it-asset-management

+
    +
  • Akaunting - Akaunting is a free, online and open source accounting software designed for small businesses and freelancers. (Source Code) GPL-3.0 PHP
  • +
  • BTCPay Server - A self-hosted Bitcoin and other cryptocurrencies payment processor. (Demo, Source Code) MIT C#
  • +
  • Boodle - Simple accounting single-page application in Clojure and ClojureScript. EPL-1.0 Java
  • +
  • Budget App - Budget App is an open source personal budgeting application. Apache-2.0 Java
  • +
  • Dot Ledger - Web-based personal finance management tool. (Demo, Source Code) Apache-2.0 Ruby
  • +
  • Economizzer - An easy and secure system for you to manage your personal money and achieve your goals, and can be accessed by computer, tablet or smartphone. (Demo, Source Code) MIT PHP
  • +
  • ExMoney - Self-hosted personal finance app. ISC Elixir
  • +
  • Firefly III - Firefly III is a modern financial manager. It helps you to keep track of your money and make budget forecasts. It supports credit cards, has an advanced rule engine and can import data from many banks. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • Family Accounting Tool - Web-based finance management tool for partners with partially shared expenses. Apache-2.0 Scala
  • +
  • Fava - Fava is the web frontend of Beancount, a text based double-entry accounting system. (Demo, Source Code) MIT Python
  • +
  • Galette - Galette is a membership management web application towards non profit organizations. (Source Code) GPL-3.0 PHP
  • +
  • GRR - Assets management and booking for small/medium companies. (Source Code) GPL-2.0 PHP
  • +
  • Hospital Run - Hospital Run is offline enabled hospital management software. (Demo, Source Code) GPL-3.0 Nodejs
  • +
  • Inventaire - Collaborative resources mapper project, while yet only focused on exploring books mapping with wikidata and ISBNs. (Source Code) AGPL-3.0 Nodejs
  • +
  • Invoice Ninja - Powerful tool to invoice clients online. (Demo, Source Code) AAL PHP
  • +
  • InvoicePlane - Manage quotes, invoices, payments and customers for your small business. MIT PHP
  • +
  • IHateMoney - Manage your shared expenses, easily. (Demo, Source Code) BSD-3-Clause Python
  • +
  • Kresus - Open source personal finance manager. (Demo, Source Code) MIT Nodejs
  • +
  • OnTrack - A simple app to track spend and set goals. MIT Ruby/React
  • +
  • PartKeepr - PartKeepr is an electronic part inventory management software. It helps you to keep track of your available parts and assist you with re-ordering parts. (Demo, Source Code) GPL-3.0 PHP
  • +
  • SilverStrike - Personal finance management made easy. (Demo, Source Code) MIT Python/Django
  • +
  • StockazNG - Asset Management System. MIT Python
  • +
+

Monitoring

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#monitoring and https://github.com/n1trux/awesome-sysadmin#metric--metric-collection

+

Note-taking and Editors

+

^ back to top ^

+

See also Wikis

+
    +
  • BulletNotes - Workflowy / Dynalist clone with Kanban (Trello) and Calendar functionality. Organize everything. (Source Code) MIT Nodejs
  • +
  • Boostnote - The note-taking app for programmers that focuses on markdown, snippets, and customizability. (Source Code) GPL-3.0 JavaScript
  • +
  • CodiMD - Realtime collaborative markdown notes on all platforms, formerly HackMD CE. (Source Code) AGPL-3.0 Node.js
  • +
  • DailyNotes - App for taking notes and tracking tasks on a daily basis in Markdown. MIT Python
  • +
  • dillinger - The last Markdown editor, ever. (Source Code) MIT Nodejs
  • +
  • Dnote - A simple command line notebook with multi-device sync and web interface. (Source Code) AGPL-3.0 Go
  • +
  • DocPHT - With DocPHT you can take notes and quickly document anything and without the use of any database. (Demo, Source Code) MIT PHP
  • +
  • draw.io - Diagram software for making flowcharts, process diagrams, org charts, UML, ER and network diagrams. (Source Code) Apache-2.0 JavaScript
  • +
  • Joplin - Joplin is a note taking application with Markdown editor and encryption support for mobile and desktop platforms. Runs client-side and syncs through self hosted Nextcloud or similar. Consider it like open source alternative to Evernote. (Source Code) MIT Nodejs
  • +
  • Leanote - Leanote, Not Just A Notepad! Open source cloud notepad. (Demo, Source Code) GPL-2.0 Go
  • +
  • Markdown Edit - Online markdown editor/viewer. (Source Code) MIT HTML5
  • +
  • Meemo - Personal notes stream with Markdown support. (Source Code) MIT Nodejs
  • +
  • minimalist-web-notepad - Minimalist notepad.cc clone. (Demo) Apache-2.0 PHP
  • +
  • MiniNote - Simple Markdown note-taking app with persistence. MIT Nodejs
  • +
  • OpenNote - OpenNote was built to be an open web-based alternative to Microsoft OneNote (T) and EverNote. (Demo) MIT HTML5
  • +
  • Overleaf - Web-based collaborative LaTeX editor. (Source Code) AGPL-3.0 Ruby
  • +
  • Paperwork - OpenSource note-taking and archiving alternative to Evernote, Microsoft OneNote and Google Keep. (Source Code) MIT PHP
  • +
  • Plainpad - A modern note taking application for the cloud, utilizing the best features of progressive web apps technology. (Demo, Source Code) GPL-3.0 PHP
  • +
  • savepad - Minimalist notepad based on notepad.cc. MIT PHP
  • +
  • Standard Notes - Simple and private notes app. Protect your privacy while getting more done. That's Standard Notes. (Demo, Source Code) GPL-3.0 Ruby
  • +
  • turndown - HTML to Markdown converter written in JavaScript. (Source Code) MIT Javascript
  • +
  • Trilium Notes - Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. AGPL-3.0 Nodejs
  • +
  • Turtl - Totally private personal database and note taking app. (Source Code) GPL-3.0 CommonLisp
  • +
  • Wreeto - Wreeto is an open source note-taking, knowledge management and wiki system built on top of Ruby on Rails framework. (Source Code) AGPL-3.0 Ruby
  • +
  • Writing - Lightweight distraction-free text editor, in the browser (Markdown and LaTeX supported). No lag when writing. (Source Code) MIT Javascript
  • +
+

Office Suites

+

^ back to top ^

+
    +
  • Collabora Online Development Edition - Collabora Online Development Edition (CODE) is a powerful LibreOffice-based online office that supports all major document, spreadsheet and presentation file formats, which you can integrate in your own infrastructure. (Source Code) MPL-2.0 C++
  • +
  • CryptPad - CryptPad is the zero knowledge realtime collaborative editor (rich-text, files, source-code, ...). (Source Code) AGPL-3.0 Nodejs
  • +
  • EtherCalc - Web spreadsheet. (Source Code) CPAL-1.0/Other Nodejs
  • +
  • Etherpad - Etherpad is a highly customizable Open Source online editor providing collaborative editing in really real-time. (Demo, Source Code) Apache-2.0 Nodejs
  • +
  • Infinoted - Server for Gobby, a multi-platform collaborative text editor. (Source Code) MIT C++
  • +
  • ONLYOFFICE - Office suite that enables you to manage documents, projects, team and customer relations in one place. (Source Code) AGPL-3.0 Nodejs
  • +
  • PHPOffice - PHPOffice contains libraries which permits to write and read files from most office suites. LGPL-3.0 PHP
  • +
  • WebODF - Tools and libraries to view and edit Open Document Format (ODF) files. (Source Code) AGPL-3.0 HTML5
  • +
+

Password Managers

+

^ back to top ^

+
    +
  • Bitwarden - Password manager with webapp, browser extension, and mobile app. (Source Code) AGPL-3.0 C#
  • +
  • bitwarden_rs - Lightweight Bitwarden server API implementation written in Rust. GPL-3.0 Rust
  • +
  • keeweb - This webapp is a browser and desktop password manager compatible with KeePass databases. (Source Code) MIT HTML5
  • +
  • Padloc - A modern, open source password manager for individuals and teams. (Source Code) GPL-3.0 Nodejs
  • +
  • Passbolt - Password manager dedicated for managing passwords in a collaborative way on any Web server, using a MySQL database backend. (Source Code) AGPL-3.0 PHP
  • +
  • PassIt - Simple password manage with sharing features by group and user, but no administration interface. (Demo, Source Code) AGPL-3.0 Python
  • +
  • PassWall - Open source password manager. AGPL-3.0 Go
  • +
  • Psono - A promising password managers fully featured for teams. (Demo, Source Code) Apache-2.0 Python
  • +
  • Shaark - All in one platform for your links, stories, passwords and albums. Built with Laravel and Vue.js. MIT PHP
  • +
  • sysPass - Multiuser password management system. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Teampass - Password manager dedicated for managing passwords in a collaborative way. One symmetric key is used to encrypt all shared/team passwords and stored server side in a file and the database. works on any server Apache, MySQL and PHP. (Source Code) GPL-3.0 PHP
  • +
+

Pastebins

+

^ back to top ^

+
    +
  • 0bin - Client side encrypted pastebin. WTFPL Python
  • +
  • bepasty - A pastebin for all kinds of files. (Source Code) BSD-2-Clause Python
  • +
  • bin - a paste bin. WTFPL/0BSD Rust
  • +
  • cryptonote - Simple open source web application that lets users encrypt and share messages that can only be read once. (Source Code) MIT Ruby
  • +
  • EdPaste - Self-hosted pastebin written in Laravel (PHP Framework). MIT PHP
  • +
  • fiche - Command line pastebin, all you need is netcat. (Demo) MIT C
  • +
  • filite - A simple, light and standalone pastebin, URL shortener and file-sharing service. (Demo) MIT Rust
  • +
  • Fugacious - Open source short-term secure messaging (OSSSM). (Source Code) CC0-1.0 Ruby
  • +
  • Hastebin - Open source pastebin written in Node.js (This is a fork with extended maintenance). (Demo, Source Code) MIT Node.js
  • +
  • mojopaste - Perl based pastebin. (Demo, Source Code) Artistic-2.0 Perl
  • +
  • NoteHub - Free and Hassle-free Pastebin for Markdown Pages. Simple, clean, password provided, generated-short link. MIT Nodejs
  • +
  • Paste - Paste is forked from the original source pastebin.com used before it was bought. (Source Code) GPL-3.0 PHP
  • +
  • pastebin - Simple pastebin service with convenient api and CLI. (Demo) MIT Go
  • +
  • pastebin - Simple, fast, feature-rich, standalone pastebin service. MIT Rust
  • +
  • pb - Lightweight pastebin (and url shortener) built using flask. GPL-3.0 Python
  • +
  • PrivateBin - PrivateBin is a minimalist, opensource online pastebin/discussion board where the server has zero knowledge of hosted data. (Demo, Source Code) Zlib PHP
  • +
  • PurritoBin - Ultra fast, minimalistic, encrypted command line paste-bin, where the server has no knowledge of the paste data. ISC C++
  • +
  • SharpPaste - Cross-platform C# pastebin with client-side AES-256 encryption that just works. MIT C#/NancyFX
  • +
  • Snibox - Code snippets manager with attractive tag-oriented interface. (Demo, Source Code) MIT Ruby
  • +
  • snipt - Long-term memory for coders. Share and store code snippets. MIT Python
  • +
  • SocksBin - Simple and fast terminal based pastebin, with optional code highlighting. No specific client required, all you need is netcat. Demo. GPL-3.0 Python
  • +
  • Stikked - Advanced and beautiful pastebin. (Demo) GPL-3.0 PHP
  • +
  • Sup3rS3cretMes5age - Very simple (to deploy and to use) secret message service using Hashicorp Vault as a secrets storage. MIT Go
  • +
  • Pasty - Pasty is a fast and lightweight code pasting server. (Demo) MIT Go
  • +
+

Personal Dashboards

+

^ back to top ^

+

See also Monitoring

+
    +
  • Baby Buddy - Helps caregivers track baby sleep, feedings, diaper changes, and tummy time. (Demo) BSD-2-Clause Python
  • +
  • DashMachine - Another web application bookmark dashboard, with fun features. GPL-3.0 Python
  • +
  • Habitica - Habit tracker app which treats your goals like a Role Playing Game. Previously called HabitRPG. (Source Code) GPL-3.0/CC-BY-NC-SA-3.0/CC-BY-SA-3.0 Nodejs
  • +
  • Heimdall - Heimdall is an elegant solution to organise all your web applications. (Source Code) MIT PHP
  • +
  • Hiccup - A beautiful static homepage to get to your links and services quickly. It has built-in search, editing, PWA support and localstorage caching to easily organize your start page. (Source Code) MIT HTML5
  • +
  • Homepage - Simple, standalone, self-hosted PHP page that is your window to your server and the web. MIT PHP
  • +
  • Homer - A dead simple static homepage to expose your server services, with an easy yaml configuration and connectivity check. Apache-2.0 HTML5
  • +
  • Organizr - Organizr aims to be your one stop shop for your Servers Frontend. GPL-3.0 PHP
  • +
  • Personal management system - Central point for managing personal data (billings, payments, job holidays, notes etc.). (Demo) MIT PHP
  • +
  • simple-dash - A simple, fully responsive Dashboard to forward to the services of your choice. (Demo) MIT Javascript
  • +
  • Tipboard - In-house, tasty, local dashboarding system. (Source Code) Apache-2.0 Python
  • +
  • wger - Web-based personal workout, fitness and weight logger/tracker. It can also be used as a simple gym management utility and offers a full REST API as well. (Demo, Source Code) AGPL-3.0 Python
  • +
+

Photo and Video Galleries

+

^ back to top ^

+
    +
  • Chevereto Free - Powerful and fast image hosting script that allows you to create your very own full featured image hosting website in just minutes. (Source Code) AGPL-3.0 PHP
  • +
  • Coppermine - Multilingual photo gallery that integrates with various bulletin boards. Includes upload approval and password protected albums. (Demo, Source Code) GPL-3.0 PHP
  • +
  • CumulusClips - Your own video sharing website with CumulusClips video sharing script. You can build a YouTube clone where users can upload, rate, comment on videos, and much more. (Demo) GPL-2.0 PHP
  • +
  • Fussel - Fussel is a static photo gallery generator. Easily generate a reactive gallery and host the optimized static folder of assets. MIT Python
  • +
  • Gallery CSS - Gallery.css is all CSS. Think: Simple, maintainable and understandable galleries without the use of Javascript. (Source Code) MIT CSS
  • +
  • Lychee - Open source grid and album based photo-management-system. (Source Code) MIT PHP
  • +
  • Mediagoblin - Free software media publishing platform that anyone can run. You can think of it as a decentralized alternative to Flickr, YouTube, SoundCloud, etc. (Source Code) AGPL-3.0 Python
  • +
  • OwnPhotos - Self hosted wannabe Google Photos clone, with a slight focus on cool graphs. MIT Python
  • +
  • Photato - Self-hosted photo gallery, accessible through a responsive WebUI. Directly uses and indexes a specific folder in the filesystem. AGPL-3.0 Java
  • +
  • Photofloat - Web 2.0 Photo Gallery Done Right via Static JSON and Dynamic Javascript. (Demo) GPL-2.0 Python
  • +
  • PhotoLight - The easiest photo gallery there is. GPL-3.0 PHP
  • +
  • Photonix - A new web-based photo management application with object recognition, location awareness, color analysis and other ML algorithms. (Demo, Source Code) AGPL-3.0 Python
  • +
  • PhotoPrism - Personal photo management powered by Go and Google TensorFlow. Browse, organize, and share your personal photo collection, using the latest technologies to automatically tag and find pictures. (Source Code) MIT Go
  • +
  • Photo Stream - Minimalist self-hosted photo stream. (Demo) MIT Ruby
  • +
  • Photoview - A simple and user-friendly Photo Gallery for personal servers. It is made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high resolution photos. (Demo) GPL-3.0 Go
  • +
  • PiGallery 2 - A directory-first photo gallery website, with a rich UI, optimised for running on low resource servers. (Demo, Source Code) MIT Docker/Nodejs
  • +
  • Piwigo - Photo gallery software for the web, built by an active community of users and developers. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Plumi - Create your own sophisticated video-sharing site. (Source Code) GPL-2.0 Python
  • +
  • Quru Image Server - High performance dynamically resizing image server offering directory based access control cropping, rotation, color management and other tools. (Demo, Source Code) AGPL-3.0 Python
  • +
  • sigal - Yet another simple static gallery generator. MIT Python
  • +
  • UberGallery - UberGallery is an easy to use, simple to manage, web photo gallery. UberGallery does not require a database and supports JPEG, GIF and PNG file types. Simply upload your images and UberGallery will automatically generate thumbnails and output HTML. (Source Code) MIT PHP
  • +
  • Zenphoto - Open-source gallery and CMS project. (Source Code) GPL-2.0 PHP
  • +
+

Polls and Events

+

^ back to top ^

+
    +
  • Calagator - Event aggregator. (Source Code) MIT Ruby
  • +
  • Clerk - Simple event logger to keep track of periodic events, habits, etc. as they occur. GPL-3.0 PHP
  • +
  • dudle - Online scheduling application. (Demo, Source Code) AGPL-3.0 Ruby
  • +
  • Feedka - Open-source web application that can serve as a platform to get authentic, kindful, and constructive feedback from your friends, family, and co-workers. (Demo) AGPL-3.0 Ruby
  • +
  • Fider - Open source alternative to UserVoice for customer feedback. (Demo, Source Code) MIT Go
  • +
  • Framadate - Online service for planning an appointment or make a decision quickly and easily: Make a poll, Define dates or subjects to choose, Send the poll link to your friends or colleagues, Discuss and make a decision. (Demo, Source Code) CECILL-B PHP
  • +
  • hitobito - A web application to manage complex group hierarchies with members, events and a lot more. (Demo, Source Code) AGPL-3.0 Ruby
  • +
  • JD Esurvey - Open source enterprise survey web application. (Source Code) AGPL-3.0 Java
  • +
  • Kyélà - Participation polls for group events. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • LimeSurvey - Feature-rich Open Source web based polling software. Supports extensive survey logic. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Meetable - Event aggregator. (Demo, Source Code) MIT PHP
  • +
  • Mobilizon - A federated tool that helps you find, create and organise events and groups. (Demo, Source Code) GPL-3.0 Elixir
  • +
  • Open Event Server - Enables organizers to manage events from concerts to conferences and meet-ups. GPL-3.0 Python
  • +
  • PHPBack - The open source feedback system. (Demo, Source Code) GPL-3.0 PHP
  • +
+

Booking and Scheduling

+
    +
  • Alf.io - The open source ticket reservation system. (Demo, Source Code) GPL-3.0 Java
  • +
  • Booked - A web-based calendar and resource scheduling system that allows administered management of reservations on any number of resources. (Demo, Source Code) GPL-3.0 PHP
  • +
  • Easy!Appointments - A highly customizable web application that allows your customers to book appointments with you via the web. (Demo, Source Code) GPL-3.0 PHP
  • +
+

Proxy

+

^ back to top ^

+
    +
  • http2-serverpush-proxy - Reverse proxy that helps to automatically utilize HTTP/2.0's server push mechanism for static websites. Available as middleware and standalone application. MIT Nodejs
  • +
  • imgproxy - Fast and secure standalone server for resizing and converting remote images. It works great when you need to resize multiple images on the fly without preparing a ton of cached resized images or re-doing it every time the design changes. MIT Go/Docker
  • +
  • inlets - Expose your local endpoints to the Internet - with a Kubernetes integration, Docker image and CLI available. MIT Go/Docker
  • +
  • iodine - IPv4 over DNS tunnel solution, enabling you to start up a socks5 proxy listener. (Source Code) ISC C
  • +
  • microproxy - lightweight non-caching HTTP/HTTPS proxy server. MIT Go
  • +
  • Nginx Proxy Manager - Nginx Proxy Manager is an easy way to accomplish reverse proxying hosts with SSL termination. (Source Code) MIT Nodejs/Docker
  • +
  • PHP-Proxy - Web proxy script built specifically to be fast, easy to modify and to support video sites such as YouTube. (Demo, Source Code) MIT PHP
  • +
  • Pomerium - An identity-aware reverse proxy, successor to now obsolete oauth_proxy. It inserts an OAuth step before proxying your request to the backend, so that you can safely expose your self-hosted websites to public Internet. (Source Code) Apache-2.0 Go
  • +
  • Pound - Light-weight reverse proxy and load balancer for HTTP/HTTPS. GPL-2.0 C
  • +
  • Privoxy - Non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk. GPL-2.0 C
  • +
  • Redbird - A modern reverse proxy for node that includes cluster, HTTP2, LetsEncrypt, and Docker support. BSD-2-Clause Javascript
  • +
  • sish - Open source serveo/ngrok alternative providing HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH. MIT Go
  • +
  • socks5-proxy-server - SOCKS5 proxy server with built-in authentication and Telegram-bot for user management and user statistics on data spent (handy when you pay per GB of data). It is dockerised and simple to install. Apache-2.0 NodeJS
  • +
  • SOCKS5Engine - Lightweight & resource-efficient SOCKS5 proxy server, optimized for high-load. AGPL-3.0 Go
  • +
  • Squid - Caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. (Source Code) GPL-2.0 C
  • +
  • Swiperproxy - Lightning-fast, open source web proxy that is easy for you to run and customize. (Source Code) MIT Python
  • +
  • Tinyproxy - Light-weight HTTP/HTTPS proxy daemon. (Source Code) GPL-2.0 C
  • +
  • Traefik - Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. It supports several backends (Docker, Swarm, Mesos/Marathon, …) to manage its configuration automatically and dynamically. (Source Code) MIT Go
  • +
+

Read it Later Lists

+

^ back to top ^

+
    +
  • Nunux Keeper - Your personal content curation service. (Source Code) GPL-3.0 Nodejs
  • +
  • Readflow - Lightweight news reader with modern interface and features: full-text search, automatic categorization, archiving, offline support, notifications... (Source Code) MIT Go
  • +
  • Wallabag - Wallabag, formerly Poche, is a web application allowing you to save articles to read them later with improved readability. (Demo, Source Code) MIT PHP
  • +
+

Resource Planning

+

^ back to top ^

+
    +
  • farmOS - Web-based farm record keeping application. (Source Code) GPL-2.0 PHP
  • +
  • grocy - ERP beyond your fridge - grocy is a web-based self-hosted groceries & household management solution for your home. (Demo, Source Code) MIT PHP
  • +
  • Tania - Tania is a free and open source farming management system for everyone. You can manage your areas, reservoirs, farm tasks, inventories, and the crop growing progress. Apache-2.0 Go
  • +
+

Enterprise Resource Planning

+
    +
  • Dolibarr - Dolibarr ERP CRM is a modern software package to manage your company or foundation activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). (Demo, Source Code) GPL-3.0-or-later PHP
  • +
  • ERPNext - Free open source ERP system. (Demo, Source Code) GPL-3.0 Python
  • +
  • LedgerSMB - Integrated accounting and ERP system for small and midsize businesses, with double entry accounting, budgeting, invoicing, quotations, projects, orders and inventory management, shipping and more. (Demo, Source Code) GPL-2.0 Perl
  • +
  • Odoo - Free open source ERP system. (Demo, Source Code) LGPL-3.0 Python
  • +
  • OFBiz - FOSS enterprise resource planning system with a suite of business applications flexible enough to be used across any industry. (Source Code) Apache-2.0 Java
  • +
  • OSPOS - Open Source Point of Sale is a web based point of sale system. (Demo, Source Code) MIT PHP
  • +
  • Tryton - Free open source business solution. (Demo, Source Code) GPL-3.0 Python
  • +
+

Search Engines

+

^ back to top ^

+
    +
  • Ambar - Document Search Engine (OCR, Store & Search). (Demo, Source Code) MIT Nodejs/Python
  • +
  • Gigablast - open source search engine. (Source Code) Apache-2.0 C++
  • +
  • MeiliSearch - Ultra relevant, instant and typo-tolerant full-text search API. (Source Code) MIT Rust
  • +
  • Searx - Privacy-respecting, hackable metasearch engine. (Demo, Source Code) AGPL-3.0 Python
  • +
  • sist2 - Lightning-fast file system indexer and search tool. (Demo) GPL-3.0 C
  • +
  • Typesense - Blazing fast, typo-tolerant open source search engine optimized for developer happiness and ease of use. (Source Code) GPL-3.0 C++
  • +
  • Yacy - Peer based, decentralized search engine server. (Demo, Source Code) GPL-2.0 Java
  • +
+

Software Development

+

^ back to top ^

+

Project Management

+

See also Ticketing, Task management/To-do lists, awesome-sysadmin/Code Review

+
    +
  • Bonobo Git Server - Set up your own self hosted git server on IIS for Windows. Manage users and have full control over your repositories with a nice user friendly graphical interface. (Source Code) MIT C#
  • +
  • Fossil - Distributed version control system featuring wiki and bug tracker. BSD-2-Clause-FreeBSD C
  • +
  • Goodwork - Self hosted project management and collaboration tool powered by Laravel & VueJS. (Demo, Source Code) MIT PHP
  • +
  • Gitblit - Pure Java stack for managing, viewing, and serving Git repositories. (Source Code) Apache-2.0 Java
  • +
  • gitbucket - Easily installable GitHub clone powered by Scala. (Source Code) Apache-2.0 Scala/Java
  • +
  • Gitea - Community managed fork of Gogs, lightweight code hosting solution. (Demo, Source Code) MIT Go
  • +
  • GitLab - Self Hosted Git repository management, code reviews, issue tracking, activity feeds and wikis. (Demo, Source Code) MIT Ruby
  • +
  • Gitlist - Web-based git repository browser - GitList allows you to browse repositories using your favorite browser, viewing files under different revisions, commit history and diffs. (Source Code) BSD-3-Clause PHP
  • +
  • Gitolite - Gitolite allows you to setup git hosting on a central server, with fine-grained access control and many more powerful features. (Source Code) GPL-2.0 Perl
  • +
  • GitPrep - Portable Github clone. (Demo, Source Code) Artistic-2.0 Perl
  • +
  • Git WebUI - Standalone web based user interface for git repositories. Apache-2.0 Python
  • +
  • Gogs - Painless self-hosted Git Service written in Go. (Demo, Source Code) MIT Go
  • +
  • Kallithea - Source code management system that supports two leading version control systems, Mercurial and Git, with a web interface. (Source Code) GPL-3.0 Python
  • +
  • Klaus - Simple, easy-to-set-up Git web viewer that Just Works. ISC Python
  • +
  • Lavagna - Lavagna is an open-source issue/project management tool designed for small teams. Lightweight, pure Java, easy to install, easy to use. (Source Code) GPL-3.0 Java
  • +
  • Lazylead - Eliminate the annoying work within ticketing systems (Jira, GitHub, Trello). Allows to automate daily actions like tickets fields verification, email notifications by JQL/GQL, meeting requests to your (or teammates) calendar. (Source Code) MIT Ruby
  • +
  • Leantime - Leantime is a lean project management system for small teams and startups helping to manage projects from ideation through delivery. (Source Code) GPL-2.0 PHP
  • +
  • Microgit - Git hosting service made in Crystal and Lucky. MIT Crystal
  • +
  • Octobox - Take back control of your GitHub Notifications. (Source Code) AGPL-3.0 Ruby
  • +
  • OpenProject - OpenProject is a web-based project management system. (Source Code) GPL-3.0 Ruby
  • +
  • Pagure - A lightweight, powerful, and flexible git-centric forge with features laying the foundation for federated and decentralized development. (Demo) GPL-2.0 Python
  • +
  • Phabricator - Collection of web applications that help build better software. (Demo, Source Code) Apache-2.0 PHP
  • +
  • Phproject - High performance full-featured project management system. (Demo, Source Code) GPL-3.0 PHP
  • +
  • ProjeQtOr - A complete, mature, multi-user project management system with extensive functionality for all phases of a project. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • Re:Backlogs - Project management and collaboration tool powered by Ruby on Rails & VueJS. (Demo) MIT Ruby
  • +
  • Redmine - Redmine is a flexible project management web application. (Demo, Source Code) GPL-2.0 Ruby
  • +
  • RhodeCode - RhodeCode is an open source platform for software development teams. It unifies and simplifies repository management for Git, Subversion, and Mercurial. (Demo, Source Code) AGPL-3.0 Python
  • +
  • SCM Manager - The easiest way to share and manage your Git, Mercurial and Subversion repositories over http. (Source Code) BSD-3-Clause Java
  • +
  • Taiga - Agile Project Management Tool based on the Kanban and Scrum methods. (Source Code) AGPL-3.0 Python
  • +
  • Titra - Time-tracking solution for freelancers and small teams. (Demo, Source Code) GPL-3.0 JavaScript
  • +
  • Trac - Trac is an enhanced wiki and issue tracking system for software development projects. BSD-3-Clause Python
  • +
  • Tuleap - Tuleap is a libre suite to plan, track, code and collaborate on software projects. (Source Code) GPL-2.0 PHP
  • +
  • UVDesk - UVDesk community is a service oriented, event driven extensible opensource helpdesk system that can be used by your organization to provide efficient support to your clients effortlessly whichever way you imagine. (Demo, Source Code) MIT PHP
  • +
  • ZenTao - An agile(scrum) project management system/tool. (Demo, Source Code) ZPL-1.2 PHP
  • +
+

Bug Trackers

+

See Ticketing

+

IDE/Tools

+
    +
  • Atheos - Web-based IDE framework with a small footprint and minimal requirements, continued from Codiad. (Source Code) MIT PHP
  • +
  • Babelfish - Self-hosted server for source code parsing. It can parse any file, in any supported language, extract an Abstract Syntax Tree from it, and convert it to a Universal Abstract Syntax Tree which can enable further analysis and transformation. GPL-3.0 Go
  • +
  • Code-Server - Visual Studio Code in the browser, hosted on a remote server. (Source Code) MIT Nodejs/Docker
  • +
  • Eclipse Che - Open source workspace server and cloud IDE. (Source Code) EPL-1.0 Docker/Java
  • +
  • Gitpod - Online IDE for GitHub and GitLab. (Demo, Source Code) EPL-2.0 Go/Docker
  • +
  • Hakatime - WakaTime server implementation with analytics dashboard. Unlicense Haskell
  • +
  • HttPlaceholder - Quickly mock away any webservice using HttPlaceholder. HttPlaceholder lets you specify what the request should look like and what response needs to be returned. MIT C#
  • +
  • ICEcoder - ICEcoder is a web IDE / browser based code editor, which allows you to develop websites directly within the web browser. (Demo, Source Code) MIT PHP
  • +
  • JS Bin - Open source collaborative web development debugging tool. (Source Code) MIT Nodejs
  • +
  • Judge0 API - Open source API to compile and run source code. (Source Code) GPL-3.0 Ruby
  • +
  • JupyterLab - Web-based environment for interactive and reproducible computing. (Demo, Source Code) BSD-3-Clause Python/Docker
  • +
  • Koding - The simplest way to manage your entire Dev Infrastructure. (Source Code) Apache-2.0 Nodejs
  • +
  • ML Workspace - All-in-one web-based IDE for machine learning and data science. Apache-2.0 Docker
  • +
  • Regexr - RegExr is a HTML/JS based tool for creating, testing, and learning about Regular Expressions. (Source Code) MIT Nodejs
  • +
  • RequestBin - Inspect HTTP requests. Debug webhooks. MIT python
  • +
  • RStudio Server - Web browser based IDE for R. (Source Code) AGPL-3.0 Java/C++
  • +
  • sourcegraph - Sourcegraph is a fast, open-source, fully-featured code search and navigation engine written in Go. (Source Code) Apache-2.0 Go
  • +
  • Wakapi - Tracking tool for coding statistics, compatible with WakaTime. GPL-3.0 Go
  • +
+

Continuous Integration

+

See awesome-sysadmin/Continuous Integration & Continuous Deployment

+

UX testing

+
    +
  • Uier - Codeless or low-code User Experience test editing and management using Selenium to perform testing or UI automation. Uier tends to be a free self hostable alternative to Applitools, Endtest, Ghost Inspector, Usetrace, Screenster and many others. Apache-2.0 Nodejs
  • +
  • Selenoid - Lightweight Selenium hub implementation launching browsers within Docker containers. (Source Code) Apache-2.0 Go
  • +
+

FaaS/Serverless

+

Serverless computing on Wikipedia

+
    +
  • Appwrite - End to end backend server for web, native, and mobile developers 🚀. (Source Code) BSD-3-Clause PHP
  • +
  • fx - fx is a tool to help you do Function as a Service with painless on your own servers. MIT Go
  • +
  • IronFunctions - The serverless microservices platform by iron.io. Apache-2.0 Go
  • +
  • LocalStack - LocalStack is a fully functional local AWS cloud stack. This includes Lambda for serverless computation. (Source Code) Apache-2.0 Python/Other
  • +
  • OpenFaaS - Serverless Functions Made Simple for Docker & Kubernetes. (Source Code) MIT Go
  • +
  • Trusted-CGI - Lightweight self-hosted lambda/applications/cgi/serverless-functions platform. MIT Go
  • +
+

API Management

+
    +
  • DreamFactory - Turns any SQL/NoSQL/Structured data into Restful API. (Source Code) Apache-2.0 PHP
  • +
  • Fusio - Open-source API management platform which helps to build and manage REST APIs. (Demo, Source Code) AGPL-3.0 PHP
  • +
  • Hapttic - Simple HTTP server that forwards all requests to a shell script to handle webhooks you receive. Apache-2.0 Go
  • +
  • Hasura - Fast, instant realtime GraphQL APIs on Postgres with fine grained access control, also trigger webhooks on database events. (Source Code) Apache-2.0 Haskell
  • +
  • Hoppscotch - A free, fast and beautiful API request builder. (Source Code) MIT Nodejs/Vue/Nuxt
  • +
  • Kong - The World’s Most Popular Open Source Microservice API Gateway and Platform. (Source Code) Apache-2.0 Lua
  • +
  • KrakenD - Open source High-Performance API Gateway. (Source Code) Apache-2.0 Go
  • +
  • Para - Flexible and modular backend framework/server for object persistence, API development and authentication. (Source Code) Apache-2.0 Java
  • +
  • Pizzly - Open-source API Integrations Manager that provides everything a developer needs to interact with OAuth based APIs. MIT Nodejs
  • +
  • Tyk - Fast and scalable open source API Gateway. Out of the box, Tyk offers an API Management Platform with an API Gateway, API Analytics, Developer Portal and API Management Dashboard. (Source Code) MPL-2.0 Go
  • +
+

Documentation Generators

+

See also Static site generators

+
    +
  • Docstore - Static document hosting without any server-side processing, does not require you to recompile every time you change an article. Clone the repository and add articles in the text/ directory to get started. (Source Code) BSD-3-Clause Javascript
  • +
  • Flatdoc - Small Javascript file that fetches Markdown files and renders them as full pages. MIT Javascript
  • +
  • markdown-tree - Serve a hierarchy / tree directory of markdown files. Use intended for small sites built in markdown. MIT Ruby
  • +
  • Read the Docs - Host documentation, making it fully searchable and easy to find; import your docs using any major version control system, including Mercurial, Git, Subversion, and Bazaar. (Demo, Source Code) MIT Python
  • +
+

Localization

+
    +
  • Accent - Open-source, self-hosted, developer-oriented translation tool. (Source Code) BSD-3-Clause Elixir
  • +
  • Pootle - Online translation and localization tool. (Source Code) GPL-3.0 Python
  • +
  • Traduora - Translation management platform for teams. (Source Code) AGPL-3.0 Docker/Nodejs
  • +
  • Weblate - Web-based translation tool with tight version control integration. (Demo, Source Code) GPL-3.0 Python
  • +
  • Zanata - Web-based translation platform for translators, content creators and developers to manage localisation projects. (Source Code) GPL-2.0 Java
  • +
+

Static site generators

+

^ back to top ^

+

See https://staticsitegenerators.net and https://www.staticgen.com

+

Task management/To-do lists

+

^ back to top ^

+

See also Project Management and Ticketing.

+
    +
  • Kanbana - Create boards to track users and projects from flat markdown files. Forked from Crepido. MIT Nodejs
  • +
  • Kanboard - Simple and open source visual task board. (Source Code) MIT PHP
  • +
  • myTinyTodo - Simple way to manage your todo list in AJAX style. Uses PHP, jQuery, SQLite/MySQL. GTD compliant. (Demo, Source Code) GPL-2.0 PHP
  • +
  • Nullboard - Single-page minimalist kanban board; compact, highly readable and quick to use. (Demo) BSD-2-Clause Javascript
  • +
  • PHP Task/Todo list - Simple task/todo list that uses a JSON text file for the tasks. MIT PHP
  • +
  • Planka - Open source Trello alternative. (Demo, Source Code) MIT Nodejs
  • +
  • Restyaboard - Open source Trello-like kanban board. (Demo, Source Code) OSL-3.0 PHP
  • +
  • Task Keeper - List editor for power users, backed by a self-hosted server. Apache-2.0 Scala
  • +
  • TaskBoard - Kanban-inspired app for keeping track of things that need to get done. (Demo, Source Code) MIT PHP
  • +
  • Taskfreak - Simple but efficient web based task manager written in PHP. GPL-3.0 PHP
  • +
  • Tasks - Simple tasks and notes manager written in PHP, jQuery and Bootstrap using a custom flat file database. MPL-2.0 PHP
  • +
  • Tasks - Kanban based to-do list manager written in Go. MIT Go
  • +
  • Taskwarrior - Taskwarrior is Free and Open Source Software that manages your TODO list from your command line. It is flexible, fast, efficient, and unobtrusive. It does its job then gets out of your way. (Source Code) MIT C++
  • +
  • Tinyissue - Simple Issue Tracking for Teams. MIT PHP
  • +
  • todo - Simple todo list manager. (Demo) MIT Go
  • +
  • todoMini - Mobile friendly zero-feature TODO list web app. Unix philosophy. (Demo, Source Code) GPL-3.0 PHP/Java
  • +
  • Tracks - Web-based application to help you implement David Allen’s Getting Things Done™ methodology. (Source Code) GPL-2.0 Ruby
  • +
  • Vikunja - The to-do app to organize your life. (Demo, Source Code) GPL-3.0 Go
  • +
  • Volition - Opinionated open-source task management. MIT Ruby
  • +
  • Wekan - Open-source Trello-like kanban. (Source Code) MIT Nodejs
  • +
+

Ticketing

+

^ back to top ^

+

See also Task management/To-do lists and Project Management

+
    +
  • Bugzilla - General-purpose bugtracker and testing tool originally developed and used by the Mozilla project. MPL-2.0 Perl
  • +
  • Bumpy Booby - Simple, responsive and highly customizable PHP bug tracking system. (Source Code) MIT PHP
  • +
  • DiamanteDesk - DiamanteDesk is FREE Open Source easy-to-use help-desk solution. (Demo, Source Code) OSL-3.0 PHP
  • +
  • django-todo - django-todo is a pluggable, multi-user, multi-group, multi-list todo and ticketing system - a reusable app designed to be dropped into any existing Django project. (Source Code) BSD-3-Clause Python/Django
  • +
  • Erxes - Marketing, sales, and customer service platform designed to help businesses attract more engaged customers. (Demo, Source Code) GPL-3.0 Javascript
  • +
  • Flyspray - Uncomplicated, web-based bug tracking system. (Source Code) GPL-2.0 PHP
  • +
  • FreeScout - Open source clone of Help Scout: email-based customer support application, help desk and shared mailbox. AGPL-3.0 PHP
  • +
  • Helpy - Helpy is a modern, open source helpdesk customer support application. Features include knowledgebase, community discussions and support tickets integrated with email. (Demo, Source Code) MIT Ruby
  • +
  • HuBoard - Instant project management for your GitHub issues (Connects directly GitHub API). MIT Ruby
  • +
  • MantisBT - Self hosted bug tracker, fits best for software development. (Demo, Source Code) GPL-2.0 PHP
  • +
  • OpenSupports - Multi language ticket system with FAQ, role management, metrics and canned response features. (Demo, Source Code) GPL-3.0 PHP
  • +
  • osTicket - Manage, organize and archive all your support requests and responses in one place. (Source Code) GPL-2.0 PHP
  • +
  • OTRS - Trouble ticket system for assigning tickets to incoming queries and tracking further communications. (Source Code) AGPL-3.0 Perl
  • +
  • Request Tracker - An enterprise-grade issue tracking system. (Source Code) GPL-2.0 Perl
  • +
  • Sentry On-Premise - A powerful error tracking platform with wide language support and a robust API. (Source Code) BSD-3-Clause Python/Django
  • +
  • SIT - SCM-agnostic, file-based, offline-first, immutable issue tracker. (Source Code) MIT Apache-2.0 Rust
  • +
  • TheBugGenie - friendly project management and issue tracking tool, with extensive user rights system. (Source Code) MPL-2.0 PHP
  • +
  • Zammad - Easy to use but powerful open-source support and ticketing system. (Source Code) AGPL-3.0 Ruby
  • +
+

URL Shorteners

+

Before hosting one, please see shortcomings of URL shorteners.

+

^ back to top ^

+
    +
  • gShort - Privacy-friendly self-hosted URL shortener. (Demo) GPL-3.0 Go
  • +
  • Kutt - A modern URL shortener with support for custom domains. (Source Code) MIT Nodejs
  • +
  • Link-shortener-bot - URL shortener using a Telegram Bot. (Demo) MIT Ruby
  • +
  • liteshort - User-friendly, actually lightweight, and configurable URL shortener. (Demo) MIT Python
  • +
  • Lstu - Let's SHorten That Url - Lightweight URL shortener. WTFPL Perl
  • +
  • Polr - Modern, minimalist, modular, and lightweight URL shortener. (Source Code) GPL-2.0 PHP
  • +
  • reduc.io - URL shortener service written in Scala, using Akka-Http and Redis. MIT Scala
  • +
  • ReducePy - URL shortener service using Tornado and Redis runs on Docker and Kubernetes. MIT Python
  • +
  • schort - No login, no javascript, just short links. (Demo) CC0-1.0 Python
  • +
  • Shlink - URL shortener with REST API and command line interface. Includes official progressive web application and docker images. (Source Code, Clients) MIT PHP
  • +
  • shorturl - Simple URL shortener with very tiny URLs. (Demo) MIT Go
  • +
  • Simple-URL-Shortener - KISS URL shortener, public or private (with account). Minimalist and lightweight. No dependencies. (Demo) MIT PHP
  • +
  • Simply Shorten - A simple URL shortener that just shortens links. MIT Java
  • +
  • url-shortener - Shitty url shortener, emoji and AI powered. MIT Nodejs
  • +
  • URL-Shortener - Make your long links short and only uses lowercase, so you can write and spell them faster. (Demo) GPL-3.0 PHP
  • +
  • YOURLS - YOURLS is a set of PHP scripts that will allow you to run Your Own URL Shortener. Features include password protection, URL customization, bookmarklets, statistics, API, plugins, jsonp. (Source Code) MIT PHP
  • +
+

VPN

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#vpn

+

Web servers

+

^ back to top ^

+

See https://github.com/n1trux/awesome-sysadmin#web

+

Wikis

+

^ back to top ^

+

See also Documentation Generators, Wikimatrix, Wiki Engines on WikiIndex, List of wiki software on wikipedia, Comparison of wiki software on wikipedia.

+
    +
  • BookStack - BookStack is a simple, self-hosted, easy-to-use platform for organizing and storing information. It allows for documentation to be stored in a book like fashion. (Demo, Source Code) MIT PHP
  • +
  • Cowyo - Cowyo is a feature-rich wiki for minimalists. (Demo) MIT Go
  • +
  • django-wiki - Wiki system with complex functionality for simple integration and a superb interface. Store your knowledge with style: Use django models. (Demo) GPL-3.0 Python
  • +
  • Documize - Modern Docs + Wiki software with built-in workflow, single binary executable, just bring MySQL/Percona. (Source Code) AGPL-3.0 Go
  • +
  • Dokuwiki - Easy to use, lightweight, standards-compliant wiki engine with a simple syntax allowing reading the data outside the wiki. All data is stored in plain files, therefore no database is required. (Source Code) GPL-2.0 PHP
  • +
  • Gitit - Wiki program that stores pages and uploaded files in a git repository, which can then be modified using the VCS command line tools or the wiki's web interface. GPL-2.0 Haskell
  • +
  • Gollum - Simple, Git-powered wiki with a sweet API and local frontend. MIT Ruby
  • +
  • jingo - Git based wiki engine written for node.js, with a decent design, a search capability and good typography. MIT Nodejs
  • +
  • Mediawiki - MediaWiki is a free and open-source wiki software package written in PHP. It serves as the platform for Wikipedia and the other Wikimedia projects, used by hundreds of millions of people each month. (Demo, Source Code) GPL-2.0 PHP
  • +
  • MoinMoin - Advanced, easy to use and extensible WikiEngine with a large community of users. (Source Code) GPL-2.0 Python
  • +
  • Outline - An open, extensible, wiki for your team built using React and Node.js. (Source Code) BSD-3-Clause Nodejs
  • +
  • Pepperminty Wiki - Complete markdown-powered wiki contained in a single PHP file. (Demo) MPL-2.0 PHP
  • +
  • PineDocs - Simple, fast, customizable and lightweight site for browsing files. GPL-3.0 PHP
  • +
  • PmWiki - Wiki-based system for collaborative creation and maintenance of websites. GPL-3.0 PHP
  • +
  • Raneto - Raneto is an open source Knowledgebase platform that uses static Markdown files to power your Knowledgebase. MIT Nodejs
  • +
  • TiddlyWiki - Reusable non-linear personal web notebook. (Source Code) BSD-3-Clause Nodejs
  • +
  • Tiki - Wiki CMS Groupware with the most built-in features. (Demo, Source Code) LGPL-2.1 PHP
  • +
  • TWiki - TWiki is a Perl-based structured wiki application, typically used to run a collaboration platform, knowledge or document management system, a knowledge base, or team portal. (Demo, Source Code) GPL-1.0 Perl
  • +
  • wiki - Simple Markdown based wiki engine. (Demo) MIT Go
  • +
  • Wiki.js - Modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown. (Demo) AGPL-3.0 Nodejs
  • +
  • WiKiss - Wiki, simple to use and install. (Source Code) GPL-2.0 PHP
  • +
  • XWiki - Second generation wiki that allows the user to extend its functionalities with a powerful extension-based architecture. (Demo, Source Code) LGPL-2.1 Java
  • +
  • Zim - Graphical text editor used to maintain a collection of wiki pages. Each page can contain links to other pages, simple formatting and images. (Source Code) GPL-2.0 Python
  • +
+

Self-hosting Solutions

+

^ back to top ^

+
    +
  • 1Backend - Self-host web apps, microservices and lambdas on your server. Advanced features enable service reuse and composition. AGPL-3.0 Go
  • +
  • Ansible-NAS - Build a full-featured home server with this playbook and an Ubuntu box. MIT YAML/Docker
  • +
  • CharjaBox - Highly configurable Ansible based Homeserver setup using Docker. GPL-3.0 YAML/Ansible/Docker
  • +
  • Cloud Computer - A computer in the cloud that deploys with one click and makes applications accessible through a web browser. (Source Code) MIT Docker
  • +
  • DietPi - Minimal Debian OS optimized for single-board computers, which allows you to easily install and manage several services for selfhosting at home. (Source Code) GPL-2.0 Shell
  • +
  • DockSTARTer - DockSTARTer helps you get started with home server apps running in Docker. (Source Code) MIT Shell
  • +
  • DPlatform - Deploy self-hosted apps easily: simple, bloat-free, independent installation. (Source Code) MIT Shell
  • +
  • FLAP - Low maintenance framework to manage self-hosted services. (Source Code) AGPL-3.0 Docker/Shell
  • +
  • FreedomBone - Home server configuration based on Debian. (Source Code) AGPL-3.0 Shell
  • +
  • FreedomBox - Community project to develop, design and promote personal servers running free software for private, personal, communications. GPL-3.0 Python/Other
  • +
  • FreeNAS - Network-attached storage (NAS) software based on FreeBSD and the OpenZFS file system. Support for SMB, AFP, NFS, iSCSI, SSH, rsync and FTP/TFTP protocols. Advanced features include full-disk encryption and plug-ins. (Source Code) BSD-3-Clause Python/Other
  • +
  • HomelabOS - Your very own offline-first privacy-centric open-source data-center. Deploy over 100 services with a few commands. (Source Code) MIT Docker
  • +
  • NextCloudPi - Nextcloud preinstalled and preconfigured, with a text and web management interface and all the tools needed to self host private data. With installation images for Raspberry Pi, Odroid, Rock64, Docker, and a curl installer for Armbian/Debian. (Source Code) GPL-2.0-or-later Bash/PHP
  • +
  • OpenMediaVault - OpenMediaVault is the next generation network attached storage (NAS) solution based on Debian Linux. It contains services like SSH, (S)FTP, SMB/CIFS, DAAP media server, RSync, BitTorrent client and many more. (Source Code) GPL-3.0 PHP
  • +
  • Piratebox - DIY anonymous offline file-sharing and communications system built with free software and inexpensive off-the-shelf hardware. GPL-3.0 Python/Other
  • +
  • Sandstorm - Personal server for running self-hosted apps easily and securely. (Demo, Source Code) Apache-2.0 C++/Other
  • +
  • sovereign - Set of Ansible playbooks to build and maintain your own private cloud: email, calendar, contacts, file sync, IRC bouncer, VPN, and more. GPL-3.0 YAML/Other
  • +
  • Syncloud - Your own online file storage, social network or email server. (Source Code) GPL-3.0 Python/Other
  • +
  • UBOS - Linux distro that runs on indie boxes (personal servers and IoT devices). Single-command installation and management of apps - Jenkins, Mediawiki, Owncloud, WordPress, etc., and other features. GPL-3.0 Perl/Other
  • +
  • WikiSuite - The most comprehensive and integrated Free / Libre / Open Source enterprise software suite. (Source Code) Multiple ClearOS
  • +
  • YunoHost - Server operating system aiming to make self-hosting accessible to everyone. (Demo, Source Code) AGPL-3.0 Python/Other
  • +
+ + +
+

List of Licenses

+

^ back to top ^

+ +
+ +

^ back to top ^

+ +
+

Contributing

+

Contributing guidelines can be found in .github/CONTRIBUTING.md.

+

Authors

+

The list of authors can be found in AUTHORS.md.

+

License

+

This list is under the Creative Commons Attribution-ShareAlike 3.0 Unported License.

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/non-free/index.html b/docs/awesome-selfhosted/non-free/index.html new file mode 100644 index 00000000..4b229d57 --- /dev/null +++ b/docs/awesome-selfhosted/non-free/index.html @@ -0,0 +1,315 @@ + + + + + + + + + + + + Proprietary Software - Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Awesome selfhosted »
  • + + + +
  • Proprietary Software
  • +
  • + +
  • +
+ +
+
+
+
+ +

Proprietary Software

+

Software listed here does not allow you to run it for any purpose, study, modify or distribute the source code. Some of the software here may not be audited due to its closed source nature, and can therefore contain anti-features, such as but not limited to: undisclosed security vulnerabilities, backdoors, user lock-in, sending personal data to a third party.

+

Analytics

+
    +
  • userTrack ⊘ Proprietary - userTrack is a web analytics platform with heatmaps, session recordings and powerful user segmentation feature. Updated very regularly. (Demo) PHP/MySQL/ReactJS
  • +
  • UXLens ⊘ Proprietary - UXLens is a website visitor recording software meant for identifying UI issues and fix them to improve user experience. Formerly known as SessionRecord (Demo) Docker Nodejs
  • +
+

Content Management Systems (CMS)

+
    +
  • CraftCMS ⊘ Proprietary - Craft is a content-first CMS that aims to make life enjoyable for developers and content managers alike. (Demo) PHP
  • +
  • Gazelle - Gazelle is a web framework geared towards private BitTorrent trackers. Although naturally focusing on music, it can be modified for most needs. unlicensed PHP
  • +
  • Kirby ⊘ Proprietary - File-based CMS. Easy to setup. Easy to use. Flexible as hell. (Source Code) PHP
  • +
+

Communication Systems

+
    +
  • Dialog ⊘ Proprietary - Handy and feature-rich multi-device solution with native mobile clients, SIP integration, chatbots, 3rd-party integrations. It brings communication efficiency without sacrificing privacy. Works in closed circuit, encrypts push notifications. (Demo) Scala/Go
  • +
  • Groupboard ⊘ Proprietary - Online whiteboard, audio/video conferencing, screen sharing, shared code editing and optional session recording/playback.
  • +
  • HipChat ⊘ Proprietary - A team chat solution with 1:1 chat audio and video, third party integration and more. PHP/Python
  • +
  • PrivMX WebMail - an alternative private mail system - web-based, end-to-end encrypted by design, self-hosted, decentralized, uses independent PKI. Easy to install and administrate, freeware, open-source. PHP
  • +
+

E-books and Integrated Library Systems (ILS)

+
    +
  • Ubooquity ⊘ Proprietary - Ubooquity is a free to use, versatile, lightweight, multi-platform, and secure home server for your comic and e-book library. Java
  • +
+

File Sharing and Synchronization

+
    +
  • Resilio Sync ⊘ Proprietary - Resilio Sync by Resilio, Inc is a proprietary peer-to-peer file synchronisation tool.
  • +
  • Drive Virtual ⊘ Proprietary - With Drive Virtual you can sync, backup and share your files privately with your own FTP (SFTP) server or account.
  • +
  • Dropcenter - Upload files by simple drag-n-drop. (Source Code) CCBYNCSAv3 PHP
  • +
  • FileRun ⊘ Proprietary - A complete solution for your files with integration with Google and Office. (Demo) PHP
  • +
+

Games

+
    +
  • Cubiks-2048 - Clone of 2048 game in 3D. (Demo) CCBYNCv4 HTML5
  • +
  • untrusted - Untrusted is a unique puzzle game designed for geeks and developers, where you solve the puzzles in the game by reading and writing Javascript. (Demo) CCBYNCSAv3/Custom Nodejs
  • +
+

IPBX

+
    +
  • Elastix ⊘ Proprietary - Unified communications server software based on 3CX.
  • +
+

Maps & GPS

+ +

Media Streaming

+
    +
  • Channels DVR Server ⊘ Proprietary - Flexible server providing a whole home self hosted DVR experience for Channels.
  • +
  • Emby ⊘ Proprietary - Home media server supporting both DLNA and DIAL (Chromecast) devices out-of-the-box. (Partial source Code) Proprietary with some GPL-2.0 C#
  • +
  • Plex ⊘ Proprietary - Plex is a centralized home media playback system with a powerful central server.
  • +
  • Subsonic - Web-based media streamer and jukebox. (Demo)
  • +
+

Money, Budgeting and Management

+
    +
  • Anchor - Anchor is an invoicing system that integrates with Stripe and Paypal. Includes features such as: reporting, dashboard and no client limit. (Demo) PHP
  • +
  • Manager ⊘ Proprietary - Online accounting software for small businesses. Mono
  • +
  • Pancake ⊘ Proprietary - Online invoicing, project management, time tracking and proposal software. PHP
  • +
+

Photo and Video Galleries

+
    +
  • ArtVenue ⊘ Proprietary - Start your own photography community website, platform based on the Laravel PHP Framework. (Demo) PHP
  • +
  • Chevereto ⊘ Proprietary - A powerful and fast image hosting script that allows you to create your very own full featured image hosting website in just minutes. (Demo) PHP
  • +
  • Koken ⊘ Proprietary - Content management and web site publishing for photographers. PHP
  • +
  • PhotoStructure ⊘ Proprietary - All your family's photos and videos automatically organized into a fun and beautiful website. Runs via Docker, NodeJS, or native desktop installers. NodeJS
  • +
  • Single File PHP Gallery ⊘ Proprietary - is a web gallery in one single PHP file. PHP
  • +
+

Project Management

+
    +
  • Active Collab ⊘ Proprietary - Project management - PHP
  • +
  • Duet ⊘ Proprietary - Invoicing and project management with an integrated client portal. (Demo) PHP
  • +
  • Kantree ⊘ Proprietary - Work management and collaboration - Python
  • +
  • Solo - Solo is a free project management app created for freelancers. Create contacts, manage tasks, upload files, track project progress, and keep notes. (Demo) PHP
  • +
+

Self-hosting Solutions

+
    +
  • Axigen ⊘ Proprietary - Great alternative to open source. It's a turnkey messaging solution, perfect for small & micro businesses, integration projects or test environments.
  • +
  • Cloudron ⊘ Proprietary - Open-core software allowing you to effortlessly self-host web apps on your server. (Source Code) Nodejs/Docker
  • +
  • hMailServer ⊘ Proprietary - Open source e-mail server for Microsoft Windows. (Source Code) C++
  • +
  • Poste.io ⊘ Proprietary - Full featured solution for your Email server. Native implementation of last anti-SPAM methods, webmail and easy administration included. Free tier available. (Demo)
  • +
+

Software Development

+
    +
  • 92five ⊘ Proprietary - Self hosted project management application (Source code) CC BY-NC 4.0 PHP
  • +
  • Bamboo ⊘ Proprietary - A continuous integration server Java
  • +
  • Buddy Enterprise - The Git and Continuous Integration / Delivery Platform. ⊘ Proprietary Nodejs/Java
  • +
  • Cloud9 ⊘ Proprietary - Your development environment, in the cloud (Source code) Nodejs
  • +
  • Confluence ⊘ Proprietary - A team collaboration software Java
  • +
  • Crucible ⊘ Proprietary - A peer code review application Java
  • +
  • Documize ⊘ Proprietary - Modern docs & wiki software built for software team collaboration. Go
  • +
  • JIRA ⊘ Proprietary - A professional and extensible issue tracker Java
  • +
  • Kloudless ⊘ Proprietary - Platform for native, embedded, SaaS integrations using Unified APIs. Python
  • +
  • RhodeCode ⊘ Proprietary - On-premise Source Code Management for Mercurial, Git & Subversion. Python
  • +
  • BitBucket Server ⊘ Proprietary - An enterprise-level Git solution similar to GitLab Java
  • +
+

Ticketing

+
    +
  • Full Help ⊘ Proprietary - Simple, easy to use help desk & knowledge base software. Custom branding, custom themes, restful API, communication channels, multi-company support, multi-language support, and much more! At least 1 new release per month. Changelog PHP
  • +
  • Jitbit Helpdesk ⊘ Proprietary - Self-hosted help desk software - simple but powerful. (Demo) ASP.NET
  • +
  • SupportPal ⊘ Proprietary - Powerful help desk software - easy, fast and intuitive. (Demo) PHP
  • +
  • Cerb - Group-based e-mail management project. (Source Code) DPL PHP
  • +
+

Time Tracking

+ +

Remote Support

+
    +
  • ScreenConnect ⊘ Proprietary - ScreenConnect offers lightning-fast remote support and remote access to connect instantly and solve problems faster.
  • +
  • RemoteUtilities ⊘ Proprietary - Remote Utilities is self-hosted remote support software for LAN administration and remote support over the Internet.
  • +
+

UX testing

+
    +
  • Moon ⊘ Proprietary - An efficient Selenium protocol implementation running everything in Kubernetes or Openshift. Go
  • +
+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + « Previous + + + Next » + + +
+ + + + + + + diff --git a/docs/awesome-selfhosted/tests/Dangerfile b/docs/awesome-selfhosted/tests/Dangerfile new file mode 100644 index 00000000..a0efc2f8 --- /dev/null +++ b/docs/awesome-selfhosted/tests/Dangerfile @@ -0,0 +1,39 @@ +# Danger CI configuration file +# https://danger.systems/guides/getting_started.html + +# Check for changes to README.md +has_readme_changes = git.modified_files.include?("README.md") + +# Ensure there is a summary for a pull request +fail 'Please provide a summary in the Pull Request description' if github.pr_body.length < 5 + +# Warn if PR guideline boxes are not checked. +warn 'Please check PR guidelines and check the boxes.' if github.pr_body.include? '- [ ]' + +# Warn if pull request is not updated +warn 'Please provide a descriptive title for the Pull Request' if github.pr_title.include? 'Update README.md' + +# Warn when there are merge commits in the diff +warn 'Please rebase to get rid of the merge commits in this Pull Request' if git.commits.any? { |c| c.message =~ /^Merge branch 'master'/ } + +# Check links +if has_readme_changes + require 'json' + results = File.read 'ab-results-temp.md-markdown-table.json' + j = JSON.parse results + if j['error']==true + warn j['title'] + markdown j['message'] + end +end + +# Check syntax +if has_readme_changes + require 'json' + syntaxresults = File.read 'syntaxcheck.json' + sj = JSON.parse syntaxresults + if sj['error']==true + fail sj['title'] + markdown sj['message'] + end +end diff --git a/docs/awesome-selfhosted/tests/check-github-commit-dates.py b/docs/awesome-selfhosted/tests/check-github-commit-dates.py new file mode 100644 index 00000000..ea9805c6 --- /dev/null +++ b/docs/awesome-selfhosted/tests/check-github-commit-dates.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +""" A script to find github repo links and last commit dates in a markdown file + +Requirements: + - python3 github module (sudo apt install python3-github on Debian) + - A personal access token (https://github.com/settings/tokens) + +Usage: + - Run awesome_bot --allow-redirect -f README.md beforehand to detect any error(4xx, 5xx) that would + cause the script to abort + - Github API calls are limited to 5000 requests/hour https://developer.github.com/v3/#rate-limiting + - Put the token in your environment variables: + export GITHUB_TOKEN=18c45f8d8d556492d1d877998a5b311b368a76e4 + - The output is unsorted, just pipe it through 'sort' or paste it in your editor and sort from there + - Put the script in your crontab or run it from time to time. It doesn't make sense to add this + script to the CI job that runs every time something is pushed. + - To detect no-commit related activity (repo metadata changes, wiki edits, ...), replace pushed_at + with updated_at + +""" + +from github import Github +import sys +import time +import re +import os + +__author__ = "nodiscc" +__copyright__ = "Copyright 2019, nodiscc" +__credits__ = ["https://github.com/awesome-selfhosted/awesome-selfhosted"] +__license__ = "MIT" +__version__ = "1.0" +__maintainer__ = "nodiscc" +__email__ = "nodiscc@gmail.com" +__status__ = "Production" + +############################################################################### + +access_token = os.environ['GITHUB_TOKEN'] + +""" find all URLs of the form https://github.com/owner/repo """ +with open('README.md', 'r') as readme: + data = readme.read() + project_urls = re.findall('https://github.com/[A-z]*/[A-z|0-9|\-|_|\.]+', data) + +urls = sorted(set(project_urls)) + +""" Uncomment this to debug the list of matched URLs """ +# print(str(urls)) +# exit(0) + +""" login to github API """ +g = Github(access_token) + +""" load project metadata, output last commit date and URL """ +for url in urls: + project = re.sub('https://github.com/', '', url) + repo = g.get_repo(project) + print(str(repo.pushed_at) + ' https://github.com/' + project) diff --git a/docs/awesome-selfhosted/tests/test.js b/docs/awesome-selfhosted/tests/test.js new file mode 100644 index 00000000..fd82b79b --- /dev/null +++ b/docs/awesome-selfhosted/tests/test.js @@ -0,0 +1,251 @@ +// USAGE: +// node test.js -r README.md (Checks whole file) +// node test.js -r README.md -d temp.md (Checks just the diff) + +const fs = require('fs'); +const chalk = require('chalk'); +let licenses = new Set(); +let pr = false; +let readme; +let diff; + +//Parse the command options and set the pr var +function parseArgs(args) { + if ( args.indexOf('-r', 2) > 0 ) { + readme = fs.readFileSync(args[args.indexOf('-r', 2)+1], 'utf8') + } + if (args.indexOf('-d', 2) > 0) { + pr = true; + diff = fs.readFileSync(args[args.indexOf('-d', 2)+1], 'utf8'); + } + if ( pr === true) { + console.log(chalk.blue(`Running on PR. README.md: ${args[args.indexOf('-r', 2)+1]} diff: ${args[args.indexOf('-d', 2)+1]}`)) + } +} + +// Function to find lines with entries +function entryFilter(md) { + const linepatt = /^\s{0,2}-\s\[.*`/; + return linepatt.test(md); +} + +// Function to find lines with licenses +function licenseFilter(md) { + const linepatt = /^- `.*` - .*/; + return linepatt.test(md) +} + +// Function to split lines into array +function split(text) { + return text.split(/\r?\n/); +} + +// All entries should match this pattern. If matches pattern returns true. +function findPattern(text) { + const patt = /^\s{0,2}-\s\[.*?\]\(.*?\) (`⚠` )?- .{0,249}?\.( \(\[(Demo|Source Code|Clients)\]\([^)\]]*\)(, \[(Source Code|Clients)\]\([^)\]]*\))?(, \[(Source Code|Clients)\]\([^)\]]*\))*\))? \`.*?\` \`.*?\`$/; + if (patt.test(text) === true) { + return true; + } + return false; +} + +// Parses SPDX identifiers from list of licenses +function parseLicense(md) { + const patt = /^- `(.*)` - .*/ + return patt.exec(md)[1] +} + +//Test '- [Name](http://homepage/)' +function testMainLink(text) { + let testA = /(^ {0,2}- \[.*?\]\([^)]*\.[^)]*?\))(?=\ ?\-?\ ?\w)/ // /(^ {0,2}- \[.*?\]\(.*\))(?=.?-? ?\w)/; + const testA1 = /(- \W?\w*\W{0,2}.*?\)?)( .*$)/; + if (!testA.test(text)) { + let a1 = testA1.exec(text)[2]; + return chalk.red(text.replace(a1, '')) + } + return chalk.green(testA.exec(text)[1]) +} + +//Test '`⚠` - Short description, less than 250 characters.' +function testDescription(text) { + const testB = /( - .*\. )(?:(\(?\[?|\`))/; + const testA1 = /(- \W?\w*\W{0,2}.*?\)?)( .*$)/; + const testB2 = /((\(\[|\`).*$)/; + if (!testB.test(text)) { + let b1 = testA1.exec(text)[1]; + let b2 = testB2.exec(text)[1]; + return chalk.red(text.replace(b1, '').replace(b2, '')) + } + return chalk.green(testB.exec(text)[1]) +} + +//If present, tests '([Demo](http://url.to/demo), [Source Code](http://url.of/source/code), [Clients](https://url.to/list/of/related/clients-or-apps))' +function testSrcDemCli(text) { + let testC = text.search(/\.\ \(|\.\ \[|\ \(\[[sSdDcC]/); // /\(\[|\)\,|\)\)/); + let testD = /(?<=\w. )(\(\[(Demo|Source Code|Clients)\]\([^)\]]*\)(, \[(Source Code|Clients)\]\([^)\]]*\))?(, \[(Source Code|Clients)\]\([^)\]]*\))*\))(?= \`?)/; + const testD1 = /(^- \W[a-zA-Z0-9-_ .]*\W{0,2}http[^\[]*)(?<= )/; + const testD2 = /(\`.*\` \`.*\`$)/; + if ((testC > -1) && (!testD.test(text))) { + let d1 = testD1.exec(text)[1]; + let d2 = testD2.exec(text)[1]; + return chalk.red(text.replace(d1, '').replace(d2, '')) +} else if (testC > -1) { + return chalk.green(testD.exec(text)[1]) +} +return "" +} + +// Tests '`License` `Language`' +function testLangLic(text) { + const testD2 = /(\`.*\` \`.*\`$)/; + let testE = testD2.test(text); + const testE1 = /(^[^`]*)/; + if (!testE) { + let e1 = testE1.exec(text)[1]; + return chalk.red(text.replace(e1, '')) + } + return chalk.green(testD2.exec(text)[1]) +} + +//Runs all the syntax tests... +function findError(text) { + let res + res = testMainLink(text) + res += testDescription(text) + res += testSrcDemCli(text) + res += testLangLic(text) + return res + `\n` +} + +//Check if license is in the list of licenses. +function testLicense(md) { + let pass = true; + let lFailed = [] + let lPassed = [] + const regex = /.*\`(.*)\` .*$/; + try { + for (l of regex.exec(md)[1].split("/")) { + if (!licenses.has(l)) { + pass = false; + lPassed.push(l) + } + lFailed.push(l) + } + } + catch(err) { + console.log(chalk.yellow("Error in License syntax, license not checked against list.")) + return [false, "", ""] + } + + + + + + return [pass, lFailed, lPassed] +} + + +//Parses name from entry +function parseName(md) { + const regex = /^\W*(.*?)\W/ + return regex.exec(md)[1] +} + +function entryErrorCheck() { + const lines = split(readme); // Inserts each line into the entries array + let totalFail = 0; + let totalPass = 0; + let total = 0; + let entries = []; + let diffEntries = []; + + if (lines[0] === "") { + console.log(chalk.red("0 Entries Found, check your commandline arguments")) + process.exit(0) + } + for (let i = 0; i < lines.length; i ++) { // Loop through array of lines + if (entryFilter(lines[i]) === true) { // filter out lines that don't start with * [) + e = {}; + e.raw = lines[i]; + e.line = i + 1 + entries.push(e); + } else if (licenseFilter(lines[i]) === true) { + licenses.add(parseLicense(lines[i])) + } + } + + if (pr === true) { + console.log(chalk.cyan("Only testing the diff from the PR.\n")) + const diffLines = split(diff); // Inserts each line of diff into an array + for (let l of diffLines) { + if (entryFilter(l) === true) { // filter out lines that don't start with * [) + e = {}; + e.raw = l; + diffEntries.push(e); + } else if (licenseFilter(l) === true) { + licenses.add(parseLicense(l)) + } + } + if (diffEntries.length === 0) { + console.log("No entries changed in README.md, Exiting...") + process.exit(0) + } + total = diffEntries.length + for (let e of diffEntries) { + e.pass = true + e.name = parseName(e.raw) + if (!findPattern(e.raw)) { + e.highlight = findError(e.raw); + e.pass = false; + console.log(e.highlight) + } + e.licenseTest = testLicense(e.raw); + if (!e.licenseTest) { + e.pass = false; + console.log(chalk.red(`${e.name}'s license is not on License list.`)) + } + if (e.pass) { + totalPass++ + } else { + totalFail++ + } + } + } else { + console.log(chalk.cyan("Testing entire README.md\n")) + total = entries.length + for (let e of entries) { + e.pass = true + e.name = parseName(e.raw) + if (!findPattern(e.raw)) { + e.highlight = findError(e.raw); + e.pass = false; + console.log(`${chalk.yellow(e.line + ": ")}${e.highlight}`); + syntax = e.highlight; + } + e.licenseTest = testLicense(e.raw); + if (!e.licenseTest[0]) { + e.pass = false; + console.log(chalk.yellow(e.line + ": ") + `${e.name}'s license ${chalk.red(`'${e.licenseTest[1]}'`)} is not on the License list.\n`) + } + if (e.pass) { + totalPass++ + } else { + totalFail++ + } + } + } + if (totalFail > 0) { + console.log(chalk.blue(`\n-----------------------------\n`)) + console.log(chalk.red(`${totalFail} Failed, `) + chalk.green(`${totalPass} Passed, `) + chalk.blue(`of ${total}`)) + console.log(chalk.blue(`\n-----------------------------\n`)) + process.exit(1); + } else { + console.log(chalk.blue(`\n-----------------------------\n`)) + console.log(chalk.green(`${totalPass} Passed of ${total}`)) + console.log(chalk.blue(`\n-----------------------------\n`)) + process.exit(0) + } +} + +parseArgs(process.argv) +entryErrorCheck(); diff --git a/docs/css/theme.css b/docs/css/theme.css new file mode 100644 index 00000000..bb00f2f9 --- /dev/null +++ b/docs/css/theme.css @@ -0,0 +1,14 @@ +/* + * This file is copied from the upstream ReadTheDocs Sphinx + * theme. To aid upgradability this file should *not* be edited. + * modifications we need should be included in theme_extra.css. + * + * https://github.com/rtfd/sphinx_rtd_theme + */ + + /* sphinx_rtd_theme version 0.4.1 | MIT license */ + /* Built 20180727 10:07 */ + *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/docs/css/theme_extra.css b/docs/css/theme_extra.css new file mode 100644 index 00000000..9cb7579e --- /dev/null +++ b/docs/css/theme_extra.css @@ -0,0 +1,140 @@ +/* + * Wrap inline code samples otherwise they shoot of the side and + * can't be read at all. + * + * https://github.com/mkdocs/mkdocs/issues/313 + * https://github.com/mkdocs/mkdocs/issues/233 + * https://github.com/mkdocs/mkdocs/issues/834 + */ +.rst-content code { + white-space: pre-wrap; + word-wrap: break-word; + padding: 2px 5px; +} + +/** + * Make code blocks display as blocks and give them the appropriate + * font size and padding. + * + * https://github.com/mkdocs/mkdocs/issues/855 + * https://github.com/mkdocs/mkdocs/issues/834 + * https://github.com/mkdocs/mkdocs/issues/233 + */ +.rst-content pre code { + white-space: pre; + word-wrap: normal; + display: block; + padding: 12px; + font-size: 12px; +} + +/** + * Fix code colors + * + * https://github.com/mkdocs/mkdocs/issues/2027 + */ +.rst-content code { + color: #E74C3C; +} + +.rst-content pre code { + color: #000; + background: #f8f8f8; +} + +/* + * Fix link colors when the link text is inline code. + * + * https://github.com/mkdocs/mkdocs/issues/718 + */ +a code { + color: #2980B9; +} +a:hover code { + color: #3091d1; +} +a:visited code { + color: #9B59B6; +} + +/* + * The CSS classes from highlight.js seem to clash with the + * ReadTheDocs theme causing some code to be incorrectly made + * bold and italic. + * + * https://github.com/mkdocs/mkdocs/issues/411 + */ +pre .cs, pre .c { + font-weight: inherit; + font-style: inherit; +} + +/* + * Fix some issues with the theme and non-highlighted code + * samples. Without and highlighting styles attached the + * formatting is broken. + * + * https://github.com/mkdocs/mkdocs/issues/319 + */ +.rst-content .no-highlight { + display: block; + padding: 0.5em; + color: #333; +} + + +/* + * Additions specific to the search functionality provided by MkDocs + */ + +.search-results { + margin-top: 23px; +} + +.search-results article { + border-top: 1px solid #E1E4E5; + padding-top: 24px; +} + +.search-results article:first-child { + border-top: none; +} + +form .search-query { + width: 100%; + border-radius: 50px; + padding: 6px 12px; /* csslint allow: box-model */ + border-color: #D1D4D5; +} + +/* + * Improve inline code blocks within admonitions. + * + * https://github.com/mkdocs/mkdocs/issues/656 + */ + .rst-content .admonition code { + color: #404040; + border: 1px solid #c7c9cb; + border: 1px solid rgba(0, 0, 0, 0.2); + background: #f8fbfd; + background: rgba(255, 255, 255, 0.7); +} + +/* + * Account for wide tables which go off the side. + * Override borders to avoid wierdness on narrow tables. + * + * https://github.com/mkdocs/mkdocs/issues/834 + * https://github.com/mkdocs/mkdocs/pull/1034 + */ +.rst-content .section .docutils { + width: 100%; + overflow: auto; + display: block; + border: none; +} + +td, th { + border: 1px solid #e1e4e5 !important; /* csslint allow: important */ + border-collapse: collapse; +} diff --git a/docs/fonts/Lato/lato-bold.eot b/docs/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/docs/fonts/Lato/lato-bold.eot differ diff --git a/docs/fonts/Lato/lato-bold.ttf b/docs/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/docs/fonts/Lato/lato-bold.ttf differ diff --git a/docs/fonts/Lato/lato-bold.woff b/docs/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/docs/fonts/Lato/lato-bold.woff differ diff --git a/docs/fonts/Lato/lato-bold.woff2 b/docs/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/docs/fonts/Lato/lato-bold.woff2 differ diff --git a/docs/fonts/Lato/lato-bolditalic.eot b/docs/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/docs/fonts/Lato/lato-bolditalic.eot differ diff --git a/docs/fonts/Lato/lato-bolditalic.ttf b/docs/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/docs/fonts/Lato/lato-bolditalic.ttf differ diff --git a/docs/fonts/Lato/lato-bolditalic.woff b/docs/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/docs/fonts/Lato/lato-bolditalic.woff differ diff --git a/docs/fonts/Lato/lato-bolditalic.woff2 b/docs/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/docs/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/docs/fonts/Lato/lato-italic.eot b/docs/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/docs/fonts/Lato/lato-italic.eot differ diff --git a/docs/fonts/Lato/lato-italic.ttf b/docs/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/docs/fonts/Lato/lato-italic.ttf differ diff --git a/docs/fonts/Lato/lato-italic.woff b/docs/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/docs/fonts/Lato/lato-italic.woff differ diff --git a/docs/fonts/Lato/lato-italic.woff2 b/docs/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/docs/fonts/Lato/lato-italic.woff2 differ diff --git a/docs/fonts/Lato/lato-regular.eot b/docs/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/docs/fonts/Lato/lato-regular.eot differ diff --git a/docs/fonts/Lato/lato-regular.ttf b/docs/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/docs/fonts/Lato/lato-regular.ttf differ diff --git a/docs/fonts/Lato/lato-regular.woff b/docs/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/docs/fonts/Lato/lato-regular.woff differ diff --git a/docs/fonts/Lato/lato-regular.woff2 b/docs/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/docs/fonts/Lato/lato-regular.woff2 differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/docs/fonts/RobotoSlab/roboto-slab.eot b/docs/fonts/RobotoSlab/roboto-slab.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/docs/fonts/RobotoSlab/roboto-slab.eot differ diff --git a/docs/fonts/fontawesome-webfont.eot b/docs/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/docs/fonts/fontawesome-webfont.eot differ diff --git a/docs/fonts/fontawesome-webfont.svg b/docs/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/docs/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/fonts/fontawesome-webfont.ttf b/docs/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/docs/fonts/fontawesome-webfont.ttf differ diff --git a/docs/fonts/fontawesome-webfont.woff b/docs/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/docs/fonts/fontawesome-webfont.woff differ diff --git a/docs/fonts/fontawesome-webfont.woff2 b/docs/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/docs/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico new file mode 100644 index 00000000..e85006a3 Binary files /dev/null and b/docs/img/favicon.ico differ diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..66e06e01 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,171 @@ + + + + + + + + + + + + Awesome SelfHosted + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+
+
+
    +
  • Docs »
  • + + + +
  • Home
  • +
  • + +
  • +
+ +
+
+
+
+ +

Home

+

Awesome Selfhosted

+

+Awesome

+

Self-hosting is the practice of locally hosting and managing applications instead of renting from SaaSS providers.

+

This is a list of Free Software network services and web applications which can be hosted locally. Non-Free software is listed on the Non-Free page.

+

See Contributing.

+

See r/SelfHosted

+ +
+
+ + +
+
+ +
+ +
+ +
+ + + + + Next » + + +
+ + + + + + + + + diff --git a/docs/js/jquery-2.1.1.min.js b/docs/js/jquery-2.1.1.min.js new file mode 100644 index 00000000..e5ace116 --- /dev/null +++ b/docs/js/jquery-2.1.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("