Browse Source

hrml

master
zeus 4 years ago
parent
commit
da3ea6eb86
  1. 2
      HowTo-create-lab.adoc.pdf
  2. 2
      HowTo-gitea.adoc.pdf
  3. 2
      HowTo-novnc.adoc.pdf
  4. 2
      HowTo-register.adoc.pdf
  5. 213
      all.adoc
  6. 811
      all.adoc.html
  7. 3674
      all.adoc.pdf
  8. BIN
      header.adoc.pdf
  9. 2
      index.adoc.pdf
  10. 2
      labs/os2/Iptables.adoc.pdf
  11. 2
      labs/os2/ex-3a_iptables-flow-chart.adoc.pdf
  12. 2
      labs/os2/ex-4_iptables.adoc.pdf
  13. 2
      labs/os2/ex-5_iptables.adoc.pdf
  14. BIN
      labs/os2/header.adoc.pdf
  15. 2
      labs/os2/index.adoc.pdf
  16. 2
      labs/os2/network-analysis.adoc.pdf
  17. 2
      labs/os2/scan-and-network-statistics.adoc.pdf
  18. 2
      labs/os2/sec.adoc.pdf
  19. 2
      labs/os2/ssh-tunneling.adoc.pdf
  20. 213
      main.adoc
  21. 824
      main.adoc.html
  22. 3685
      main.adoc.pdf
  23. 2
      swarmlab/files/Architecture.adoc.pdf
  24. 2
      swarmlab/files/help/HowTo-gitea.adoc.pdf
  25. 2
      swarmlab/files/help/HowTo-register.adoc.pdf
  26. 10
      swarmlab/files/help/faq.adoc
  27. 2
      swarmlab/files/help/faq.adoc.html
  28. 4
      swarmlab/files/help/faq.adoc.pdf
  29. 2
      swarmlab/files/help/git_help.adoc.pdf
  30. BIN
      swarmlab/files/init/intro.adoc.pdf
  31. 2
      swarmlab/files/navigation/bootstrap.adoc.pdf
  32. BIN
      swarmlab/files/navigation/dashboard.adoc.pdf
  33. 2
      swarmlab/files/navigation/lab_instances.adoc.pdf
  34. 2
      swarmlab/files/navigation/lab_rooms.adoc.pdf
  35. 2
      swarmlab/files/navigation/my_lab.adoc.pdf
  36. BIN
      swarmlab/files/navigation/navigation_main.adoc.pdf
  37. BIN
      swarmlab/files/registration/registration_main.adoc.pdf
  38. 2
      swarmlab/files/tutor/bootstrap_labroom.adoc.pdf
  39. BIN
      swarmlab/files/tutor/for_tutors_main.adoc.pdf
  40. BIN
      swarmlab/files/tutor/my_labrooms.adoc.pdf
  41. 10572
      swarmlab/main.adoc.pdf

2
HowTo-create-lab.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164049+00'00')
/CreationDate (D:20200820192702+00'00')
>>
endobj
2 0 obj

2
HowTo-gitea.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150613+00'00')
/CreationDate (D:20200820164054+00'00')
/CreationDate (D:20200820192707+00'00')
>>
endobj
2 0 obj

2
HowTo-novnc.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164058+00'00')
/CreationDate (D:20200820192711+00'00')
>>
endobj
2 0 obj

2
HowTo-register.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150610+00'00')
/CreationDate (D:20200820164106+00'00')
/CreationDate (D:20200820192719+00'00')
>>
endobj
2 0 obj

213
all.adoc

@ -0,0 +1,213 @@
:description: Swarmlabs usage tool for students!
:keywords: Cloud, swarm
:data-uri:
:toc: right
:toc-title:
:toclevels: 4
:source-highlighter: coderay
:icons: font
:sectnums:
= Swarmlab quick-start guide!
Welcome to the vast world of Swarmlab! +
Swarmlab is a powerful collaboration tool that connects tutors and students in a unique all-in-one environment that gets work done fast and easily. +
In other words Swarmlab is the way to make your learning fun while at the same time getting to your goals faster! +
But let's get you started... +
Note: These instructions are general targeted at both students and tutors. +
If you wish to skip to the specific instructions for tutors (lab creation, student invitation etc) click here. +
WARNING: "General info WILL NOT be repeated so if you have basic questions regarding registration or labroom usage please read on from here. +
= The first steps
Before you have all of the powerfull tools of Swarmalb at your grasp you will have to create an account. +
To do that navigate to the home page at https://api-client.swarmlab.io:8088 +
You should have been greeted by our login screen! +
image::images/registration/login.png[]
To register click on the 'login with sso' option and accept the terms. +
image::images/registration/terms.png[]
Now you should be redirected to the login screen and you should be able to use the 'register' option at the bottom to make a new account! +
image::images/registration/login_main.png[]
Now fill in the required details +
image::images/registration/register_details.png[]
and follow the remaining instructions to activate your account. +
Now that your acount is ready, lets get to know Swarmlabs main page. +
= The main page
Once loaded the main page should look like this:
image::{imagesdir}/run/main_page.png[]
On the left we can see that there are two areas inside swarmlab: ::
. the dashboard where our services live +
. the 'mylab' tab from which we can control our labrooms. +
The dashboard page is pretty straight forward: ::
. The left list shows all the available services and allows you to run them. +
. The other shows the available lab rooms and allows you to interact with them (p.e. subscribe). +
With that out of the way lets enter the heart of our platform, 'my lab'! +
= My Lab
Nested under 'mylab' are both creation tools (bootstrap) and execution tools (run).
== The run menu
Inside the run menu there are three areas: ::
. 'Rub lab instance' +
. 'Enter lab room' +
. the console +
As the names suggest we can use the first to *run* one of our available lab instances, the second to *enter* a created labroom, and the third to *execute* scripts. +
Lets look at the options one by one. +
For the purpose of this walkthrough 'testmpi2' and 'test 18' were created. +
Since the console is explained along with the first area we dont feel there is a need to have seperate walkthrough.
=== Run lab instance area
==== Creating a lab
To create a lab instance simply add a repo to your git! +
You will then be able to locate that repo inside the instance list and run it. +
For more info on this please refer to the Bootstrap chapter link:main.adoc.html#_bootstrap[here] ! +
==== Running a lab instance
First we have to select the lab we want to run. To find a specific lab we can use the search bar at the top. +
image::images/run/lab_instance_list.png[]
After we have located the desired lab we can run it by using the cloud icon. image:{imagesdir}/run/cloud_icon.png[] +
To request more info about the lab we use the info icon image:{imagesdir}/run/info_icon.png[] and the trashcan image:{imagesdir}/run/trash_icon.png[] deletes the lab (forever). +
Carefull, forever is a long time! +
So lets go back to running the lab. After clicking on the according icon we should be redirected to the execution screen. +
image::images/run/execution_screen.png[]
Here we can use the command line on the bottom to execute the required commands. Our results will be visible in the console above. +
image::images/run/ls_results_console.png[]
Note that you can choose to use the editor of your liking from the drop down menu.
For more complicated tasks that may require responsivines from the machine you can use the terminal option to open a full-blown unix command line. +
=== Enter lab room area
This is the area where you will find the available labrooms created by tutors and join the desired one. +
==== Browsing labrooms
You can easily browse throught the available labrooms in the list using the search bar at the top. +
image::images/run/lab_room_list.png[]
You can get more info about a specific labroom by clicking the info button image:{imagesdir}/run/info_icon.png[]. +
image::images/run/info_poppup.png[]
Active labrooms are indicated using a green color while closed ones with orange. +
==== Entering a labroom
Once you have found the labroom you were looking for you can enter by simply clicking on the cloud icon image:images/run/cloud_icon.png[]. +
You should see a screen as follows:
image::{imagesdir}/run/password_big.png[]
The passwords are randomly generated and you can use them to connect to your lesson (see picture bellow). +
image::images/run/password_user.png[]
If the tutor is sharing his screen you can watch by clicking on the according button and using the respective password. +
image::images/run/password_tutor_screen.png[]
Now, under the password area there are three other options: ::
'Meeting' image:{imagesdir}/run/meeting_button.png[]::
Here you can join a meeting with your group (this will redirect you to a jitsi implementation). +
For more visit https://jitsi.org/ +
'Gui' image:images/run/gui_button.png[]::
This loads a graphic unix environment.
'Console' image::images/run/console_button.png[]::
This loads a unix terminal.
By now it should propably be clear how to run a lab from the list or enter a labroom. +
But you are propably wondering 'My list is empty how am i supposed to run labs from it?!' +
Well here is where the final but most basic menu comes into play: *'Bootstrap'* ! +
= Bootstrap
image::images/bootstrap/bootstrap_main.png[]
Here we can create and add labs to our list.
To do so we have to go through a series of steps, but lets first understand some basic things about how swarmlab works...
TIP: Every swarmlab lab instance resides in a git repo created inside link:https://git.swarmlab.io:3000[our git^] and owned by the lab creator. This repo then serves as a 'home' for all the work inside that lab. +
So for us to create and run a lab we have to link a service to a git repo. +
Asuming we have an account (using the same email as our swarmlab account!) all our repos should be shown on the list in the top left corner. +
To search for any public repo we can use the search bar. +
image::images/bootstrap/test_search_repo.png[]
From that list we can now select the desired repository that we want to use by clicking on the plug icon. image:{imagesdir}/bootstrap/plug_icon.png[] +
We can use any repo we like, but we will be able to commit only to those that we have access to. +
If we wish to edit or contribute to the development of a project we are not part of we can use the clone option as usual! +
Now we have to select the service that our lab will be using. We just select the desired one from the list on the right and it will be automatically linked to the project. +
image::images/bootstrap/service_select.png[]
Finally we have to save the lab instance by filling in the required info at the bottom. +
image::images/bootstrap/save_lab_details.png[]

811
all.adoc.html

@ -0,0 +1,811 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="description" content="Swarmlabs usage tool for students!">
<meta name="keywords" content="Cloud, swarm">
<title>Swarmlab quick-start guide!</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-right">
<div id="header">
<h1>Swarmlab quick-start guide!</h1>
<div id="toc" class="toc2">
<div id="toctitle"></div>
<ul class="sectlevel0">
<li><a href="#_the_first_steps">The first steps</a></li>
<li><a href="#_the_main_page">The main page</a></li>
<li><a href="#_my_lab">My Lab</a>
<ul class="sectlevel1">
<li><a href="#_the_run_menu">1. The run menu</a>
<ul class="sectlevel2">
<li><a href="#_run_lab_instance_area">1.1. Run lab instance area</a>
<ul class="sectlevel3">
<li><a href="#_creating_a_lab">1.1.1. Creating a lab</a></li>
<li><a href="#_running_a_lab_instance">1.1.2. Running a lab instance</a></li>
</ul>
</li>
<li><a href="#_enter_lab_room_area">1.2. Enter lab room area</a>
<ul class="sectlevel3">
<li><a href="#_browsing_labrooms">1.2.1. Browsing labrooms</a></li>
<li><a href="#_entering_a_labroom">1.2.2. Entering a labroom</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#_bootstrap">Bootstrap</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Welcome to the vast world of Swarmlab!<br>
Swarmlab is a powerful collaboration tool that connects tutors and students in a unique all-in-one environment that gets work done fast and easily.<br>
In other words Swarmlab is the way to make your learning fun while at the same time getting to your goals faster!<br>
But let&#8217;s get you started&#8230;&#8203;<br></p>
</div>
<div class="paragraph">
<p>Note: These instructions are general targeted at both students and tutors.<br>
If you wish to skip to the specific instructions for tutors (lab creation, student invitation etc) click here.<br></p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
"General info WILL NOT be repeated so if you have basic questions regarding registration or labroom usage please read on from here.<br>
</td>
</tr>
</table>
</div>
</div>
</div>
<h1 id="_the_first_steps" class="sect0">The first steps</h1>
<div class="paragraph">
<p>Before you have all of the powerfull tools of Swarmalb at your grasp you will have to create an account.<br>
To do that navigate to the home page at <a href="https://api-client.swarmlab.io:8088" class="bare">https://api-client.swarmlab.io:8088</a><br>
You should have been greeted by our login screen!<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="login">
</div>
</div>
<div class="paragraph">
<p>To register click on the 'login with sso' option and accept the terms.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="terms">
</div>
</div>
<div class="paragraph">
<p>Now you should be redirected to the login screen and you should be able to use the 'register' option at the bottom to make a new account!<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="login main">
</div>
</div>
<div class="paragraph">
<p>Now fill in the required details<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="register details">
</div>
</div>
<div class="paragraph">
<p>and follow the remaining instructions to activate your account.<br></p>
</div>
<div class="paragraph">
<p>Now that your acount is ready, lets get to know Swarmlabs main page.<br></p>
</div>
<h1 id="_the_main_page" class="sect0">The main page</h1>
<div class="paragraph">
<p>Once loaded the main page should look like this:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="main page">
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">On the left we can see that there are two areas inside swarmlab: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>the dashboard where our services live<br></p>
</li>
<li>
<p>the 'mylab' tab from which we can control our labrooms.<br></p>
</li>
</ol>
</div>
</dd>
<dt class="hdlist1">The dashboard page is pretty straight forward: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The left list shows all the available services and allows you to run them.<br></p>
</li>
<li>
<p>The other shows the available lab rooms and allows you to interact with them (p.e. subscribe).<br></p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
<div class="paragraph">
<p>With that out of the way lets enter the heart of our platform, 'my lab'!<br></p>
</div>
<h1 id="_my_lab" class="sect0">My Lab</h1>
<div class="paragraph">
<p>Nested under 'mylab' are both creation tools (bootstrap) and execution tools (run).</p>
</div>
<div class="sect1">
<h2 id="_the_run_menu">1. The run menu</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1">Inside the run menu there are three areas: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>'Rub lab instance'<br></p>
</li>
<li>
<p>'Enter lab room'<br></p>
</li>
<li>
<p>the console<br></p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
<div class="paragraph">
<p>As the names suggest we can use the first to <strong>run</strong> one of our available lab instances, the second to <strong>enter</strong> a created labroom, and the third to <strong>execute</strong> scripts.<br>
Lets look at the options one by one.<br>
For the purpose of this walkthrough 'testmpi2' and 'test 18' were created.<br>
Since the console is explained along with the first area we dont feel there is a need to have seperate walkthrough.</p>
</div>
<div class="sect2">
<h3 id="_run_lab_instance_area">1.1. Run lab instance area</h3>
<div class="sect3">
<h4 id="_creating_a_lab">1.1.1. Creating a lab</h4>
<div class="paragraph">
<p>To create a lab instance simply add a repo to your git!<br>
You will then be able to locate that repo inside the instance list and run it.<br>
For more info on this please refer to the Bootstrap chapter <a href="main.adoc.html#_bootstrap">here</a> !<br></p>
</div>
</div>
<div class="sect3">
<h4 id="_running_a_lab_instance">1.1.2. Running a lab instance</h4>
<div class="paragraph">
<p>First we have to select the lab we want to run. To find a specific lab we can use the search bar at the top.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="lab instance list">
</div>
</div>
<div class="paragraph">
<p>After we have located the desired lab we can run it by using the cloud icon. <span class="image"><img src="data:image/png;base64," alt="cloud icon"></span><br></p>
</div>
<div class="paragraph">
<p>To request more info about the lab we use the info icon <span class="image"><img src="data:image/png;base64," alt="info icon"></span> and the trashcan <span class="image"><img src="data:image/png;base64," alt="trash icon"></span> deletes the lab (forever).<br>
Carefull, forever is a long time!<br></p>
</div>
<div class="paragraph">
<p>So lets go back to running the lab. After clicking on the according icon we should be redirected to the execution screen.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="execution screen">
</div>
</div>
<div class="paragraph">
<p>Here we can use the command line on the bottom to execute the required commands. Our results will be visible in the console above.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="ls results console">
</div>
</div>
<div class="paragraph">
<p>Note that you can choose to use the editor of your liking from the drop down menu.</p>
</div>
<div class="paragraph">
<p>For more complicated tasks that may require responsivines from the machine you can use the terminal option to open a full-blown unix command line.<br></p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_enter_lab_room_area">1.2. Enter lab room area</h3>
<div class="paragraph">
<p>This is the area where you will find the available labrooms created by tutors and join the desired one.<br></p>
</div>
<div class="sect3">
<h4 id="_browsing_labrooms">1.2.1. Browsing labrooms</h4>
<div class="paragraph">
<p>You can easily browse throught the available labrooms in the list using the search bar at the top.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="lab room list">
</div>
</div>
<div class="paragraph">
<p>You can get more info about a specific labroom by clicking the info button <span class="image"><img src="data:image/png;base64," alt="info icon"></span>.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="info poppup">
</div>
</div>
<div class="paragraph">
<p>Active labrooms are indicated using a green color while closed ones with orange.<br></p>
</div>
</div>
<div class="sect3">
<h4 id="_entering_a_labroom">1.2.2. Entering a labroom</h4>
<div class="paragraph">
<p>Once you have found the labroom you were looking for you can enter by simply clicking on the cloud icon <span class="image"><img src="data:image/png;base64," alt="cloud icon"></span>.<br></p>
</div>
<div class="paragraph">
<p>You should see a screen as follows:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password big">
</div>
</div>
<div class="paragraph">
<p>The passwords are randomly generated and you can use them to connect to your lesson (see picture bellow).<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password user">
</div>
</div>
<div class="paragraph">
<p>If the tutor is sharing his screen you can watch by clicking on the according button and using the respective password.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password tutor screen">
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Now, under the password area there are three other options: </dt>
<dt class="hdlist1">'Meeting' <span class="image"><img src="data:image/png;base64," alt="meeting button"></span></dt>
<dd>
<p>Here you can join a meeting with your group (this will redirect you to a jitsi implementation).<br>
For more visit <a href="https://jitsi.org/" class="bare">https://jitsi.org/</a><br></p>
</dd>
<dt class="hdlist1">'Gui' <span class="image"><img src="data:image/png;base64," alt="gui button"></span></dt>
<dd>
<p>This loads a graphic unix environment.</p>
</dd>
<dt class="hdlist1">'Console' image::images/run/console_button.png[]</dt>
<dd>
<p>This loads a unix terminal.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>By now it should propably be clear how to run a lab from the list or enter a labroom.<br>
But you are propably wondering 'My list is empty how am i supposed to run labs from it?!'<br>
Well here is where the final but most basic menu comes into play: <strong>'Bootstrap'</strong> !<br></p>
</div>
</div>
</div>
</div>
</div>
<h1 id="_bootstrap" class="sect0">Bootstrap</h1>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="bootstrap main">
</div>
</div>
<div class="paragraph">
<p>Here we can create and add labs to our list.
To do so we have to go through a series of steps, but lets first understand some basic things about how swarmlab works&#8230;&#8203;</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
Every swarmlab lab instance resides in a git repo created inside <a href="https://git.swarmlab.io:3000" target="_blank" rel="noopener">our git</a> and owned by the lab creator. This repo then serves as a 'home' for all the work inside that lab.<br>
So for us to create and run a lab we have to link a service to a git repo.<br>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Asuming we have an account (using the same email as our swarmlab account!) all our repos should be shown on the list in the top left corner.<br>
To search for any public repo we can use the search bar.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="test search repo">
</div>
</div>
<div class="paragraph">
<p>From that list we can now select the desired repository that we want to use by clicking on the plug icon. <span class="image"><img src="data:image/png;base64," alt="plug icon"></span><br>
We can use any repo we like, but we will be able to commit only to those that we have access to.<br>
If we wish to edit or contribute to the development of a project we are not part of we can use the clone option as usual!<br></p>
</div>
<div class="paragraph">
<p>Now we have to select the service that our lab will be using. We just select the desired one from the list on the right and it will be automatically linked to the project.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="service select">
</div>
</div>
<div class="paragraph">
<p>Finally we have to save the lab instance by filling in the required info at the bottom.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="save lab details">
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-08-20 17:14:44 UTC
</div>
</div>
</body>
</html>

3674
all.adoc.pdf

File diff suppressed because it is too large

BIN
header.adoc.pdf

Binary file not shown.

2
index.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150613+00'00')
/CreationDate (D:20200820164110+00'00')
/CreationDate (D:20200820192723+00'00')
>>
endobj
2 0 obj

2
labs/os2/Iptables.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164136+00'00')
/CreationDate (D:20200820192748+00'00')
>>
endobj
2 0 obj

2
labs/os2/ex-3a_iptables-flow-chart.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150615+00'00')
/CreationDate (D:20200820164120+00'00')
/CreationDate (D:20200820192733+00'00')
>>
endobj
2 0 obj

2
labs/os2/ex-4_iptables.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164124+00'00')
/CreationDate (D:20200820192736+00'00')
>>
endobj
2 0 obj

2
labs/os2/ex-5_iptables.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164127+00'00')
/CreationDate (D:20200820192740+00'00')
>>
endobj
2 0 obj

BIN
labs/os2/header.adoc.pdf

Binary file not shown.

2
labs/os2/index.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164133+00'00')
/CreationDate (D:20200820192745+00'00')
>>
endobj
2 0 obj

2
labs/os2/network-analysis.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164141+00'00')
/CreationDate (D:20200820192752+00'00')
>>
endobj
2 0 obj

2
labs/os2/scan-and-network-statistics.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150614+00'00')
/CreationDate (D:20200820164145+00'00')
/CreationDate (D:20200820192755+00'00')
>>
endobj
2 0 obj

2
labs/os2/sec.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150615+00'00')
/CreationDate (D:20200820164149+00'00')
/CreationDate (D:20200820192758+00'00')
>>
endobj
2 0 obj

2
labs/os2/ssh-tunneling.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150615+00'00')
/CreationDate (D:20200820164154+00'00')
/CreationDate (D:20200820192803+00'00')
>>
endobj
2 0 obj

213
main.adoc

@ -0,0 +1,213 @@
:description: Swarmlabs usage tool for students!
:keywords: Cloud, swarm
:data-uri:
:toc: right
:toc-title:
:toclevels: 4
:source-highlighter: coderay
:icons: font
:sectnums:
= Swarmlab quick-start guide!
Welcome to the vast world of Swarmlab! +
Swarmlab is a powerful collaboration tool that connects tutors and students in a unique all-in-one environment that gets work done fast and easily. +
In other words Swarmlab is the way to make your learning fun while at the same time getting to your goals faster! +
But let's get you started... +
Note: These instructions are general targeted at both students and tutors. +
If you wish to skip to the specific instructions for tutors (lab creation, student invitation etc) click here. +
WARNING: "General info WILL NOT be repeated so if you have basic questions regarding registration or labroom usage please read on from here. +
== The first steps
Before you have all of the powerfull tools of Swarmalb at your grasp you will have to create an account. +
To do that navigate to the home page at https://api-client.swarmlab.io:8088 +
You should have been greeted by our login screen! +
image::images/registration/login.png[]
To register click on the 'login with sso' option and accept the terms. +
image::images/registration/terms.png[]
Now you should be redirected to the login screen and you should be able to use the 'register' option at the bottom to make a new account! +
image::images/registration/login_main.png[]
Now fill in the required details +
image::images/registration/register_details.png[]
and follow the remaining instructions to activate your account. +
Now that your acount is ready, lets get to know Swarmlabs main page. +
== The main page
Once loaded the main page should look like this:
image::images/run/main_page.png[]
On the left we can see that there are two areas inside swarmlab: ::
. the dashboard where our services live +
. the 'mylab' tab from which we can control our labrooms. +
The dashboard page is pretty straight forward: ::
. The left list shows all the available services and allows you to run them. +
. The other shows the available lab rooms and allows you to interact with them (p.e. subscribe). +
With that out of the way lets enter the heart of our platform, 'my lab'! +
== My Lab
Nested under 'mylab' are both creation tools (bootstrap) and execution tools (run).
== The run menu
Inside the run menu there are three areas: ::
. 'Rub lab instance' +
. 'Enter lab room' +
. the console +
As the names suggest we can use the first to *run* one of our available lab instances, the second to *enter* a created labroom, and the third to *execute* scripts. +
Lets look at the options one by one. +
For the purpose of this walkthrough 'testmpi2' and 'test 18' were created. +
Since the console is explained along with the first area we dont feel there is a need to have seperate walkthrough.
=== Run lab instance area
==== Creating a lab
To create a lab instance simply add a repo to your git! +
You will then be able to locate that repo inside the instance list and run it. +
For more info on this please refer to the Bootstrap chapter link:main.adoc.html#_bootstrap[here] ! +
==== Running a lab instance
First we have to select the lab we want to run. To find a specific lab we can use the search bar at the top. +
image::images/run/lab_instance_list.png[]
After we have located the desired lab we can run it by using the cloud icon. image::images/run/cloud_icon.png[] +
To request more info about the lab we use the info icon image::images/run/info_icon.png[] and the trashcan image::images/run/trash_icon.png[] deletes the lab (forever). +
Carefull, forever is a long time! +
So lets go back to running the lab. After clicking on the according icon we should be redirected to the execution screen. +
image::images/run/execution_screen.png[]
Here we can use the command line on the bottom to execute the required commands. Our results will be visible in the console above. +
image::images/run/ls_results_console.png[]
Note that you can choose to use the editor of your liking from the drop down menu.
For more complicated tasks that may require responsivines from the machine you can use the terminal option to open a full-blown unix command line. +
=== Enter lab room area
This is the area where you will find the available labrooms created by tutors and join the desired one. +
==== Browsing labrooms
You can easily browse throught the available labrooms in the list using the search bar at the top. +
image::images/run/lab_room_list.png[]
You can get more info about a specific labroom by clicking the info button image::images/run/info_icon.png[]. +
image::images/run/info_poppup.png[]
Active labrooms are indicated using a green color while closed ones with orange. +
==== Entering a labroom
Once you have found the labroom you were looking for you can enter by simply clicking on the cloud icon image:images/run/cloud_icon.png[]. +
You should see a screen as follows:
image::images/run/password_big.png[]
The passwords are randomly generated and you can use them to connect to your lesson (see picture bellow). +
image::images/run/password_user.png[]
If the tutor is sharing his screen you can watch by clicking on the according button and using the respective password. +
image::images/run/password_tutor_screen.png[]
Now, under the password area there are three other options: ::
'Meeting' image::images/run/meeting_button.png[]::
Here you can join a meeting with your group (this will redirect you to a jitsi implementation). +
For more visit https://jitsi.org/ +
'Gui' image:images/run/gui_button.png[]::
This loads a graphic unix environment.
'Console' image::images/run/console_button.png[]::
This loads a unix terminal.
By now it should propably be clear how to run a lab from the list or enter a labroom. +
But you are propably wondering 'My list is empty how am i supposed to run labs from it?!' +
Well here is where the final but most basic menu comes into play: *'Bootstrap'* ! +
== Bootstrap
image::images/bootstrap/bootstrap_main.png[]
Here we can create and add labs to our list.
To do so we have to go through a series of steps, but lets first understand some basic things about how swarmlab works...
TIP: Every swarmlab lab instance resides in a git repo created inside link:https://git.swarmlab.io:3000[our git^] and owned by the lab creator. This repo then serves as a 'home' for all the work inside that lab. +
So for us to create and run a lab we have to link a service to a git repo. +
Asuming we have an account (using the same email as our swarmlab account!) all our repos should be shown on the list in the top left corner. +
To search for any public repo we can use the search bar. +
image::images/bootstrap/test_search_repo.png[]
From that list we can now select the desired repository that we want to use by clicking on the plug icon. image::images/bootstrap/plug_icon.png[] +
We can use any repo we like, but we will be able to commit only to those that we have access to. +
If we wish to edit or contribute to the development of a project we are not part of we can use the clone option as usual! +
Now we have to select the service that our lab will be using. We just select the desired one from the list on the right and it will be automatically linked to the project. +
image::images/bootstrap/service_select.png[]
Finally we have to save the lab instance by filling in the required info at the bottom. +
image::images/bootstrap/save_lab_details.png[]

824
main.adoc.html

@ -0,0 +1,824 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="description" content="Swarmlabs usage tool for students!">
<meta name="keywords" content="Cloud, swarm">
<title>Swarmlab quick-start guide!</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-right">
<div id="header">
<h1>Swarmlab quick-start guide!</h1>
<div id="toc" class="toc2">
<div id="toctitle"></div>
<ul class="sectlevel1">
<li><a href="#_the_first_steps">1. The first steps</a></li>
<li><a href="#_the_main_page">2. The main page</a></li>
<li><a href="#_my_lab">3. My Lab</a></li>
<li><a href="#_the_run_menu">4. The run menu</a>
<ul class="sectlevel2">
<li><a href="#_run_lab_instance_area">4.1. Run lab instance area</a>
<ul class="sectlevel3">
<li><a href="#_creating_a_lab">4.1.1. Creating a lab</a></li>
<li><a href="#_running_a_lab_instance">4.1.2. Running a lab instance</a></li>
</ul>
</li>
<li><a href="#_enter_lab_room_area">4.2. Enter lab room area</a>
<ul class="sectlevel3">
<li><a href="#_browsing_labrooms">4.2.1. Browsing labrooms</a></li>
<li><a href="#_entering_a_labroom">4.2.2. Entering a labroom</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#_bootstrap">5. Bootstrap</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Welcome to the vast world of Swarmlab!<br>
Swarmlab is a powerful collaboration tool that connects tutors and students in a unique all-in-one environment that gets work done fast and easily.<br>
In other words Swarmlab is the way to make your learning fun while at the same time getting to your goals faster!<br>
But let&#8217;s get you started&#8230;&#8203;<br></p>
</div>
<div class="paragraph">
<p>Note: These instructions are general targeted at both students and tutors.<br>
If you wish to skip to the specific instructions for tutors (lab creation, student invitation etc) click here.<br></p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
"General info WILL NOT be repeated so if you have basic questions regarding registration or labroom usage please read on from here.<br>
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_first_steps">1. The first steps</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Before you have all of the powerfull tools of Swarmalb at your grasp you will have to create an account.<br>
To do that navigate to the home page at <a href="https://api-client.swarmlab.io:8088" class="bare">https://api-client.swarmlab.io:8088</a><br>
You should have been greeted by our login screen!<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="login">
</div>
</div>
<div class="paragraph">
<p>To register click on the 'login with sso' option and accept the terms.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="terms">
</div>
</div>
<div class="paragraph">
<p>Now you should be redirected to the login screen and you should be able to use the 'register' option at the bottom to make a new account!<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="login main">
</div>
</div>
<div class="paragraph">
<p>Now fill in the required details<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="register details">
</div>
</div>
<div class="paragraph">
<p>and follow the remaining instructions to activate your account.<br></p>
</div>
<div class="paragraph">
<p>Now that your acount is ready, lets get to know Swarmlabs main page.<br></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_main_page">2. The main page</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Once loaded the main page should look like this:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="main page">
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">On the left we can see that there are two areas inside swarmlab: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>the dashboard where our services live<br></p>
</li>
<li>
<p>the 'mylab' tab from which we can control our labrooms.<br></p>
</li>
</ol>
</div>
</dd>
<dt class="hdlist1">The dashboard page is pretty straight forward: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>The left list shows all the available services and allows you to run them.<br></p>
</li>
<li>
<p>The other shows the available lab rooms and allows you to interact with them (p.e. subscribe).<br></p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
<div class="paragraph">
<p>With that out of the way lets enter the heart of our platform, 'my lab'!<br></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_my_lab">3. My Lab</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Nested under 'mylab' are both creation tools (bootstrap) and execution tools (run).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_run_menu">4. The run menu</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1">Inside the run menu there are three areas: </dt>
<dd>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>'Rub lab instance'<br></p>
</li>
<li>
<p>'Enter lab room'<br></p>
</li>
<li>
<p>the console<br></p>
</li>
</ol>
</div>
</dd>
</dl>
</div>
<div class="paragraph">
<p>As the names suggest we can use the first to <strong>run</strong> one of our available lab instances, the second to <strong>enter</strong> a created labroom, and the third to <strong>execute</strong> scripts.<br>
Lets look at the options one by one.<br>
For the purpose of this walkthrough 'testmpi2' and 'test 18' were created.<br>
Since the console is explained along with the first area we dont feel there is a need to have seperate walkthrough.</p>
</div>
<div class="sect2">
<h3 id="_run_lab_instance_area">4.1. Run lab instance area</h3>
<div class="sect3">
<h4 id="_creating_a_lab">4.1.1. Creating a lab</h4>
<div class="paragraph">
<p>To create a lab instance simply add a repo to your git!<br>
You will then be able to locate that repo inside the instance list and run it.<br>
For more info on this please refer to the Bootstrap chapter <a href="main.adoc.html#_bootstrap">here</a> !<br></p>
</div>
</div>
<div class="sect3">
<h4 id="_running_a_lab_instance">4.1.2. Running a lab instance</h4>
<div class="paragraph">
<p>First we have to select the lab we want to run. To find a specific lab we can use the search bar at the top.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="lab instance list">
</div>
</div>
<div class="paragraph">
<p>After we have located the desired lab we can run it by using the cloud icon. image::images/run/cloud_icon.png[]<br></p>
</div>
<div class="paragraph">
<p>To request more info about the lab we use the info icon image::images/run/info_icon.png[] and the trashcan image::images/run/trash_icon.png[] deletes the lab (forever).<br>
Carefull, forever is a long time!<br></p>
</div>
<div class="paragraph">
<p>So lets go back to running the lab. After clicking on the according icon we should be redirected to the execution screen.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="execution screen">
</div>
</div>
<div class="paragraph">
<p>Here we can use the command line on the bottom to execute the required commands. Our results will be visible in the console above.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="ls results console">
</div>
</div>
<div class="paragraph">
<p>Note that you can choose to use the editor of your liking from the drop down menu.</p>
</div>
<div class="paragraph">
<p>For more complicated tasks that may require responsivines from the machine you can use the terminal option to open a full-blown unix command line.<br></p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_enter_lab_room_area">4.2. Enter lab room area</h3>
<div class="paragraph">
<p>This is the area where you will find the available labrooms created by tutors and join the desired one.<br></p>
</div>
<div class="sect3">
<h4 id="_browsing_labrooms">4.2.1. Browsing labrooms</h4>
<div class="paragraph">
<p>You can easily browse throught the available labrooms in the list using the search bar at the top.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="lab room list">
</div>
</div>
<div class="paragraph">
<p>You can get more info about a specific labroom by clicking the info button image::images/run/info_icon.png[].<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="info poppup">
</div>
</div>
<div class="paragraph">
<p>Active labrooms are indicated using a green color while closed ones with orange.<br></p>
</div>
</div>
<div class="sect3">
<h4 id="_entering_a_labroom">4.2.2. Entering a labroom</h4>
<div class="paragraph">
<p>Once you have found the labroom you were looking for you can enter by simply clicking on the cloud icon <span class="image"><img src="data:image/png;base64," alt="cloud icon"></span>.<br></p>
</div>
<div class="paragraph">
<p>You should see a screen as follows:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password big">
</div>
</div>
<div class="paragraph">
<p>The passwords are randomly generated and you can use them to connect to your lesson (see picture bellow).<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password user">
</div>
</div>
<div class="paragraph">
<p>If the tutor is sharing his screen you can watch by clicking on the according button and using the respective password.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="password tutor screen">
</div>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Now, under the password area there are three other options: </dt>
<dt class="hdlist1">'Meeting' image::images/run/meeting_button.png[]</dt>
<dd>
<p>Here you can join a meeting with your group (this will redirect you to a jitsi implementation).<br>
For more visit <a href="https://jitsi.org/" class="bare">https://jitsi.org/</a><br></p>
</dd>
<dt class="hdlist1">'Gui' <span class="image"><img src="data:image/png;base64," alt="gui button"></span></dt>
<dd>
<p>This loads a graphic unix environment.</p>
</dd>
<dt class="hdlist1">'Console' image::images/run/console_button.png[]</dt>
<dd>
<p>This loads a unix terminal.</p>
</dd>
</dl>
</div>
<div class="paragraph">
<p>By now it should propably be clear how to run a lab from the list or enter a labroom.<br>
But you are propably wondering 'My list is empty how am i supposed to run labs from it?!'<br>
Well here is where the final but most basic menu comes into play: <strong>'Bootstrap'</strong> !<br></p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_bootstrap">5. Bootstrap</h2>
<div class="sectionbody">
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="bootstrap main">
</div>
</div>
<div class="paragraph">
<p>Here we can create and add labs to our list.
To do so we have to go through a series of steps, but lets first understand some basic things about how swarmlab works&#8230;&#8203;</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
Every swarmlab lab instance resides in a git repo created inside <a href="https://git.swarmlab.io:3000" target="_blank" rel="noopener">our git</a> and owned by the lab creator. This repo then serves as a 'home' for all the work inside that lab.<br>
So for us to create and run a lab we have to link a service to a git repo.<br>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Asuming we have an account (using the same email as our swarmlab account!) all our repos should be shown on the list in the top left corner.<br>
To search for any public repo we can use the search bar.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="test search repo">
</div>
</div>
<div class="paragraph">
<p>From that list we can now select the desired repository that we want to use by clicking on the plug icon. image::images/bootstrap/plug_icon.png[]<br>
We can use any repo we like, but we will be able to commit only to those that we have access to.<br>
If we wish to edit or contribute to the development of a project we are not part of we can use the clone option as usual!<br></p>
</div>
<div class="paragraph">
<p>Now we have to select the service that our lab will be using. We just select the desired one from the list on the right and it will be automatically linked to the project.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="service select">
</div>
</div>
<div class="paragraph">
<p>Finally we have to save the lab instance by filling in the required info at the bottom.<br></p>
</div>
<div class="imageblock">
<div class="content">
<img src="data:image/png;base64," alt="save lab details">
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-08-20 17:21:34 UTC
</div>
</div>
</body>
</html>

3685
main.adoc.pdf

File diff suppressed because it is too large

2
swarmlab/files/Architecture.adoc.pdf

@ -6,7 +6,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164158+00'00')
/CreationDate (D:20200820192810+00'00')
>>
endobj
2 0 obj

2
swarmlab/files/help/HowTo-gitea.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164207+00'00')
/CreationDate (D:20200820192818+00'00')
>>
endobj
2 0 obj

2
swarmlab/files/help/HowTo-register.adoc.pdf

@ -7,7 +7,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Apostolos rootApostolos@swarmlab.io)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164211+00'00')
/CreationDate (D:20200820192822+00'00')
>>
endobj
2 0 obj

10
swarmlab/files/help/faq.adoc

@ -9,7 +9,15 @@
:sectnums:
= F.A.Q.
For any questions not addressed in this list please do not hesitate to contact our support team!
include::./git_help.adoc[]
== Git
=== http://docs.swarmlab.io/SwarmLab-HowTos/swarmlab/files/help/HowTo-register.adoc.html[HowTo-register]
=== http://docs.swarmlab.io/SwarmLab-HowTos/swarmlab/files/help/HowTo-gitea.adoc.html[HowTo-create Repo]

2
swarmlab/files/help/faq.adoc.html

@ -478,7 +478,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-07-09 15:06:11 UTC
Last updated 2020-08-20 19:18:48 UTC
</div>
</div>
</body>

4
swarmlab/files/help/faq.adoc.pdf

@ -5,8 +5,8 @@
/Keywords (faq, question, git)
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164201+00'00')
/ModDate (D:20200820191848+00'00')
/CreationDate (D:20200820192813+00'00')
>>
endobj
2 0 obj

2
swarmlab/files/help/git_help.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164204+00'00')
/CreationDate (D:20200820192816+00'00')
>>
endobj
2 0 obj

BIN
swarmlab/files/init/intro.adoc.pdf

Binary file not shown.

2
swarmlab/files/navigation/bootstrap.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164218+00'00')
/CreationDate (D:20200820192829+00'00')
>>
endobj
2 0 obj

BIN
swarmlab/files/navigation/dashboard.adoc.pdf

Binary file not shown.

2
swarmlab/files/navigation/lab_instances.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164223+00'00')
/CreationDate (D:20200820192835+00'00')
>>
endobj
2 0 obj

2
swarmlab/files/navigation/lab_rooms.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164226+00'00')
/CreationDate (D:20200820192837+00'00')
>>
endobj
2 0 obj

2
swarmlab/files/navigation/my_lab.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164229+00'00')
/CreationDate (D:20200820192840+00'00')
>>
endobj
2 0 obj

BIN
swarmlab/files/navigation/navigation_main.adoc.pdf

Binary file not shown.

BIN
swarmlab/files/registration/registration_main.adoc.pdf

Binary file not shown.

2
swarmlab/files/tutor/bootstrap_labroom.adoc.pdf

@ -5,7 +5,7 @@
/Creator (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/Producer (Asciidoctor PDF 1.5.0.beta.5, based on Prawn 2.2.2)
/ModDate (D:20200709150611+00'00')
/CreationDate (D:20200820164237+00'00')
/CreationDate (D:20200820192848+00'00')
>>
endobj
2 0 obj

BIN
swarmlab/files/tutor/for_tutors_main.adoc.pdf

Binary file not shown.

BIN
swarmlab/files/tutor/my_labrooms.adoc.pdf

Binary file not shown.

10572
swarmlab/main.adoc.pdf

File diff suppressed because it is too large
Loading…
Cancel
Save