summaryrefslogtreecommitdiff
path: root/Fosdem2023
diff options
context:
space:
mode:
authorEkaitz Zarraga <ekaitz@elenq.tech>2024-01-11 16:36:50 +0100
committerEkaitz Zarraga <ekaitz@elenq.tech>2024-01-11 16:36:50 +0100
commitc3cd50085e400541e595a7852f84df680bb1dd14 (patch)
tree7ea69d1cf2fb558109575f356f1f3fcb2da8e249 /Fosdem2023
Initial commit
Diffstat (limited to 'Fosdem2023')
-rw-r--r--Fosdem2023/Makefile25
-rw-r--r--Fosdem2023/contents.md488
-rw-r--r--Fosdem2023/img/BASE.svg118
-rw-r--r--Fosdem2023/img/Bootstrapping.svg378
-rw-r--r--Fosdem2023/img/Sneaky-Compiler.svg267
-rw-r--r--Fosdem2023/img/Source-Binary-Compiler.svg172
-rw-r--r--Fosdem2023/img/Source-Binary.svg154
-rw-r--r--Fosdem2023/img/meme.jpgbin0 -> 41379 bytes
-rw-r--r--Fosdem2023/template.tex236
9 files changed, 1838 insertions, 0 deletions
diff --git a/Fosdem2023/Makefile b/Fosdem2023/Makefile
new file mode 100644
index 0000000..1f2daf1
--- /dev/null
+++ b/Fosdem2023/Makefile
@@ -0,0 +1,25 @@
+TARGET = presentation.pdf
+
+TEMPLATE = template.tex
+CONTENT = contents.md
+
+# IMG_DIR = img
+# IMG_SRCS = $(wildcard $(IMG_DIR)/*.svg)
+# IMG_BASENAME = $(notdir $(basename $(IMG_SRCS)))
+# TMP_IMG_DIR = tmp
+# IMGS = $(addsuffix .png, $(addprefix $(TMP_IMG_DIR)/, $(IMG_BASENAME)))
+
+all: $(TARGET)
+
+$(TARGET): $(CONTENT) $(TEMPLATE) # $(IMGS)
+ pandoc -f markdown+smart -t beamer $(CONTENT) -o $(TARGET) --pdf-engine=xelatex --template=$(TEMPLATE)
+
+# $(IMGS): $(TMP_IMG_DIR)/%.png: $(IMG_DIR)/%.svg
+# mkdir -p $(TMP_IMG_DIR)
+# inkscape $< --export-filename $@ --export-type=png --export-background-opacity=0.0
+
+clean:
+ rm -r $(TARGET) # $(TMP_IMG_DIR)
+
+.PHONY: all clean $(CONTENT) $(TEMPLATE)
+
diff --git a/Fosdem2023/contents.md b/Fosdem2023/contents.md
new file mode 100644
index 0000000..924371c
--- /dev/null
+++ b/Fosdem2023/contents.md
@@ -0,0 +1,488 @@
+---
+title: "Bringing RISC-V to Guix's bootstrap"
+
+subtitle: What's done and what we need to do
+
+license: CC-BY-SA
+author: Ekaitz Zárraga
+links-as-notes: true
+lang: spanish
+polyglossia-lang:
+ name: english
+how-to: pandoc -f markdown+smart -t beamer contents.md -o beamer.pdf --pdf-engine=xelatex --template=template.tex
+header-includes:
+ - \usepackage{multicol}
+ - \newcommand{\hideFromPandoc}[1]{#1}
+ - \hideFromPandoc{
+ \let\Begin\begin
+ \let\End\end
+ }
+...
+
+## Who I am
+- Telecommunication engineer (EEE equivalent)
+- Freelance engineer/programmer at [ElenQ.Tech](https://elenq.tech)
+- Guix user and contributor
+- You might remember me from my talk last year:
+ *"A year of RISC-V adventures: embracing chaos in your software journey"*
+
+
+## Intro
+
+- Last year I asked [NlNet for a grant][nlnet-grant].
+- I wanted to push the bootstrapping effort for RISC-V, and they funded me to
+ do so.
+- In this talk I'm going to introduce what I did[^1], what I think it's more or
+ less done and what's missing.
+
+[nlnet-grant]: https://nlnet.nl/project/GNUMes-RISCV/index.html
+
+[^1]: Read the longer version here: <https://ekaitz.elenq.tech/tag/bootstrapping-gcc-in-risc-v.html>
+
+# Intro to bootstrapping
+
+## Free software is not enough
+
+We love Free Software because it helps us audit our programs.
+
+![&nbsp;](img/Source-Binary.svg){width=200px}
+
+But do we know if the source code we read actually maps to the binary we are
+executing? **Not really**
+
+## Reproducibility
+
+![The relation is one-way: the compiler is in the middle](img/Source-Binary-Compiler.svg){width=200px}
+
+In Guix we have **reproducibility**, so we can make sure some inputs (the
+source, the compiler and the environment where it runs) always produce the same
+outputs.
+
+**We can challenge the binaries**, so nobody will give us a malicious binary.
+
+## Trusting trust
+
+![But what if the bad actor is not a person but a program?](img/Sneaky-Compiler.svg){width=200px}
+
+## Trusting trust
+
+![But what if the bad actor is not a person but a program?](img/Sneaky-Compiler.svg){width=160px}
+
+Reproducibility here will only make sure we generate the same **corrupt**
+binary.
+
+> This kind of attack [can be done in real life][ken-trust].
+
+[ken-trust]: https://niconiconi.neocities.org/posts/ken-thompson-really-did-launch-his-trusting-trust-trojan-attack-in-real-life/
+
+## Recursive problem, recursive solution
+
+The compiler is a program too. **This issue is recursive**: a corrupt compiler
+could corrupt it's output compiler!
+
+![What's the exit point?](img/Bootstrapping.svg){width=300px}
+
+## Recursive problem, recursive solution
+
+![What's the exit point?](img/Bootstrapping.svg){width=200px}
+
+If we could have a compiler that we can make sure its output is not corrupt
+(**but how?**), we could make sure all the chain is correct.
+
+## In practice
+
+GNU+Linux distributions often rely in many prebuilt binaries: Bash, GCC,
+Coreutils, Python...
+
+Some distributions like Guix are interested on reducing the amount of binaries
+they have to trust.
+
+We can compile most of **The World** from source using a powerful compiler (GCC
+FTW). But we can't use a pre-built compiler (remember the previous slides?)
+
+**The key**: Who is compiling the compiler?
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+2. GCC 11 (requires ISO C++98 compiler)
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+2. GCC 11 (requires ISO C++98 compiler)
+3. GCC 4.8 (requires ISO C89 compiler)
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+2. GCC 11 (requires ISO C++98 compiler)
+3. GCC 4.8 (requires ISO C89 compiler)
+4. GCC 3.4 (requires K&R compiler)
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+2. GCC 11 (requires ISO C++98 compiler)
+3. GCC 4.8 (requires ISO C89 compiler)
+4. GCC 3.4 (requires K&R compiler)
+5. ...
+
+## In practice - II
+
+Let's try with GCC:
+
+0. The World (requires a modern GCC)
+1. Modern GCC (requires ISO C++11 compiler)
+2. GCC 11 (requires ISO C++98 compiler)
+3. GCC 4.8 (requires ISO C89 compiler)
+4. GCC 3.4 (requires K&R compiler)
+5. ...
+
+*I didn't mention libraries here, that's also a lot of fun*
+
+## Guix's bootstrapping
+
+0. The World
+1. Modern GCC
+2. GCC 7.5
+3. GCC 4.6.4
+4. GCC 2.95
+5. TinyCC
+ - Bootstrappable TinyCC
+6. GNU Mes
+7. Stage0-POSIX => **SOURCE CODE**
+
+## GNU Mes
+
+> GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU
+> System. Since version 0.22 it has again helped to halve the size of opaque,
+> uninspectable binary seeds that are currently being used in the Further
+> Reduced Binary Seed bootstrap of GNU Guix. **The final goal is to help create
+> a full-source bootstrap as part of the bootstrappable builds effort for
+> UNIX-like operating systems**.
+
+> The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
+> compiler written in Scheme and these are mutual self-hosting. Mes can now be
+> bootstrapped from M2-Planet and Mescc-Tools.
+
+<https://www.gnu.org/software/mes/>
+
+
+## Stage0-POSIX
+
+> It bootstraps all these from a single 256 byte seed (which you will find in
+> the folder bootstrap-seeds). **The ultimate goal is for this to bootstrap all
+> the way up to GCC**.
+
+> There is only one "missing" part that is not bootstrappable from the hex0
+> seed: a kernel. This issue is not yet solved and at the moment the kernel is
+> trusted.
+
+<https://github.com/oriansj/stage0-posix>
+
+
+## Boostrapping - wrapping up
+
+![&nbsp;](img/meme.jpg)
+
+
+# RISC-V support
+
+## Guix's bootstrapping - RISC-V support
+
+\Begin{multicols}{2}
+
+0. The World
+1. Modern GCC
+2. GCC 7.5
+3. GCC 4.6.4
+4. GCC 2.95
+5. TinyCC
+ - Bootstrappable TinyCC
+6. GNU Mes
+7. Stage0-POSIX
+
+\columnbreak
+
+- N/A
+- YES
+- YES
+- NO
+- NO
+- YES
+ - NO
+- PARTIAL
+- YES
+
+\End{multicols}
+
+
+## Guix's bootstrapping - RISC-V support *SPOILER*
+
+\Begin{multicols}{2}
+
+0. The World
+1. Modern GCC
+2. GCC 7.5
+3. GCC 4.6.4
+4. GCC 2.95
+5. TinyCC
+ - Bootstrappable TinyCC
+6. GNU Mes
+7. Stage0-POSIX
+
+\columnbreak
+
+- N/A
+- YES
+- YES
+- ~~NO~~ *I backported this*
+- ~~NO~~ *We will remove it*
+- YES
+ - ~~NO~~ *I backported this*
+- PARTIAL
+- YES *I made some of this*
+
+\End{multicols}
+
+# What I did
+
+## GCC
+
+GCC uses a Davidson-Fraser model. Meaning that it uses an intermediate language
+that is machine dependant: RTL (Register Transfer Language).
+
+```
+HLL -> GIMPLE -> RTL -> OPTIMIZATIONS -> RTL -> ASSEMBLY
+```
+
+GCC is only a coordinator: it calls `as` and `ld` from binutils as the
+assembler and linker.
+
+- `GIMPLE -> RTL`: is done using identifiers. The GIMPLE nodes match insn
+ identifiers.
+
+- `RTL -> OPTIMIZATIONS`: RTL matches the RTL templates we write in the
+ backend part of GCC. Those can be expanded to other RTL expressions.
+
+- `RTL -> ASSEMBLY`: The expanded RTL expressions are matched against RTL
+ templates that also describe their equivalent in assembly and assembly is
+ generated from them.
+
+## GCC
+
+RTL templates are written in LISP in machine descriptor files (`*.md`), they
+look like this:
+
+\small
+``` lisp
+(define_insn
+ "adddi3" ;; Identifier
+
+ ;; The behavior of the instruction
+ [(set (match_operand:DI 0 "register_operand" "=r,r")
+ (plus:DI (match_operand:DI 1 "register_operand" "r,r")
+ (match_operand:DI 2 "arith_operand" "r,I")))
+ ]
+
+ "TARGET_64BIT" ;; Predicate to test
+ "add\t%0,%1,%2" ;; Assembly output template
+
+ ;; Attributes
+ [(set_attr "type" "arith")
+ (set_attr "mode" "DI")])
+```
+\normalsize
+
+## GCC
+
+Apart from that GCC needs tons of other definitions in order to get another
+target:
+
+- Target description macros and functions
+- Libraries like libgcc and many others
+
+## GCC - What I did
+
+Cherry picked the RISC-V support from GCC 7.5 to GCC 4.6.4
+
+1. There were missing insns => Used older ones that were equivalent.
+2. Some RTL constructs (`int_iterator`) didn't exist in 4.6.4 => Expanded the
+ iterator by hand.
+3. There were missing predicates => Copied them.
+4. The internal GCC API moved from C to C++ in the meantime => I had to convert
+ the code from using a class to the older interface.
+5. Memory barriers didn't exist back then => Always introduce a `fence` to make
+ sure code is correct.
+6. `libgcc` is a mess => Play around until it works
+
+**TL;DR**: Touch everything until it works.
+
+## GCC - What I did
+
+Finally I managed to make a GCC 4.6.4 that is able to generate RISC-V binary.
+
+See the blog for a more detailed description of the changes:
+
+- <https://ekaitz.elenq.tech/bootstrapGcc3.html>
+- <https://ekaitz.elenq.tech/bootstrapGcc4.html>
+
+
+## Bootstrappable TinyCC
+
+TinyCC has RISC-V support but it's not boostrappable using GNU Mes.
+
+The bootstrappable fork of TinyCC GNU Mes uses is old => Backport again.
+
+## Bootstrappable TinyCC - What I did
+
+Copy the relevant files from the upstream TinyCC and:
+
+0. Prepare a reproducible way to build the Bootstrappable TinyCC.
+1. Just read the code and make it match.
+ **SURPRISE**: The code is really hard to read... But I eventually managed to
+ make it work.
+2. Some core code was needed for the backend to work => Remove it! It was only
+ some optimization code!
+
+More detailed description of the changes:
+
+- <https://ekaitz.elenq.tech/bootstrapGcc6.html>
+
+## Bootstrappable TinyCC - What I did
+
+\tiny
+\Begin{multicols}{2}
+
+**OPTIMIZED VERSION**
+```
+0000000000000000 <main>:
+ 0: fd010113 addi sp,sp,-48
+ 4: 02113423 sd ra,40(sp)
+ 8: 02813023 sd s0,32(sp)
+ c: 03010413 addi s0,sp,48
+ 10: 00000013 nop
+ 14: fea43423 sd a0,-24(s0)
+ 18: feb43023 sd a1,-32(s0)
+ 1c: 0130051b addiw a0,zero,19
+ 20: fca42e23 sw a0,-36(s0)
+ 24: 05a0051b addiw a0,zero,90
+ 28: fca42c23 sw a0,-40(s0)
+ 2c: fdc42503 lw a0,-36(s0)
+ 30: 00051463 bnez a0,38 <main+0x38>
+ 34: 0180006f j 4c <main+0x4c>
+ 38: fd842503 lw a0,-40(s0)
+ 3c: 00051463 bnez a0,44 <main+0x44>
+ 40: 00c0006f j 4c <main+0x4c>
+ 44: 0010051b addiw a0,zero,1
+ 48: 0100006f j 58 <main+0x58>
+ 4c: 00008537 lui a0,0x8
+ 50: 7005051b addiw a0,a0,1792
+ 54: 00000033 add zero,zero,zero
+ 58: 02813083 ld ra,40(sp)
+ 5c: 02013403 ld s0,32(sp)
+ 60: 03010113 addi sp,sp,48
+ 64: 00008067 ret
+```
+\columnbreak
+**UNOPTIMIZED VERSION**
+```
+0000000000000000 <main>:
+ 0: fd010113 addi sp,sp,-48
+ 4: 02113423 sd ra,40(sp)
+ 8: 02813023 sd s0,32(sp)
+ c: 03010413 addi s0,sp,48
+ 10: 00000013 nop
+ 14: fea43423 sd a0,-24(s0)
+ 18: feb43023 sd a1,-32(s0)
+ 1c: 0130051b addiw a0,zero,19
+ 20: fca42e23 sw a0,-36(s0)
+ 24: 05a0051b addiw a0,zero,90
+ 28: fca42c23 sw a0,-40(s0)
+ 2c: fdc42503 lw a0,-36(s0)
+ 30: 00051463 bnez a0,38 <main+0x38>
+ 34: 01c0006f j 50 <main+0x50>
+ 38: fd842503 lw a0,-40(s0)
+ 3c: 00051463 bnez a0,44 <main+0x44>
+ 40: 0100006f j 50 <main+0x50>
+ 44: 0010051b addiw a0,zero,1
+ 48: 0140006f j 5c <main+0x5c>
+ 4c: 0100006f j 5c <main+0x5c>
+ 50: 00008537 lui a0,0x8
+ 54: 7005051b addiw a0,a0,1792
+ 58: 00000033 add zero,zero,zero
+ 5c: 02813083 ld ra,40(sp)
+ 60: 02013403 ld s0,32(sp)
+ 64: 03010113 addi sp,sp,48
+ 68: 00008067 ret
+```
+\End{multicols}
+
+\normalsize
+
+# What needs to be done
+
+## GCC - What needs to be done
+
+- Properly package the GCC-4.6.4 to include C++ support, and fix all the
+ libraries that might be missing.
+- Build the backported GCC-4.6.4 using TinyCC
+- Build GCC-7.5 using the backported GCC-4.6.4
+
+## TinyCC - What needs to be done
+
+- Build the bootstrappable TinyCC using GNU Mes
+- Decide if we need the upstream TinyCC to build GCC or not
+ - If we do: build the upstream TinyCC with the bootstrappable TinyCC
+
+## GNU Mes - What needs to be done
+
+- Review the current RISC-V support and prepare it to be merged
+
+## Guix - What needs to be done
+
+- Describe the whole compiler compiler chain in the bootstrapping packages so
+ everyone can benefit from it
+
+## Extra
+
+Do it all in real hardware
+
+# Last words
+
+## Last words
+
+There's still a lot of work to be done, most of it being the integration of the
+work I already did in the past thanks to NlNet.
+
+The future is bright though. We are probably going to get more funds from NlNet
+to involve more people on this.
+
+Wanna join?
+
+## Contact and take part
+
+- Email me: <ekaitz@elenq.tech>
+- Relevant IRC channels: `#bootstrappable`, `#guix`, `#guix-risc-v`
+
+# Thank you
diff --git a/Fosdem2023/img/BASE.svg b/Fosdem2023/img/BASE.svg
new file mode 100644
index 0000000..facfa8e
--- /dev/null
+++ b/Fosdem2023/img/BASE.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="148mm"
+ viewBox="0 0 793.70081 559.37006"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="BASE.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ showguides="false"
+ inkscape:zoom="1.9303915"
+ inkscape:cx="354.07325"
+ inkscape:cy="144.53027"
+ inkscape:window-width="1916"
+ inkscape:window-height="1036"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid366"
+ spacingx="5"
+ spacingy="5" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="TriangleStart"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368"
+ width="135"
+ height="50"
+ x="130"
+ y="115" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect370"
+ width="140"
+ height="50"
+ x="385"
+ y="115" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="236.01859"
+ y="149.78835"
+ id="text471"><tspan
+ sodipodi:role="line"
+ id="tspan469"
+ x="236.01859"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Source</tspan><tspan
+ sodipodi:role="line"
+ x="236.01859"
+ y="199.78835"
+ id="tspan473" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="496.01859"
+ y="149.78835"
+ id="text471-6"><tspan
+ sodipodi:role="line"
+ id="tspan469-0"
+ x="496.01859"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Binary</tspan><tspan
+ sodipodi:role="line"
+ x="496.01859"
+ y="199.78835"
+ id="tspan473-6" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77952758;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart);stroke-dasharray:none"
+ d="M 265,140 H 385"
+ id="path611" />
+ </g>
+</svg>
diff --git a/Fosdem2023/img/Bootstrapping.svg b/Fosdem2023/img/Bootstrapping.svg
new file mode 100644
index 0000000..6f61055
--- /dev/null
+++ b/Fosdem2023/img/Bootstrapping.svg
@@ -0,0 +1,378 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="145.94458mm"
+ height="73.31604mm"
+ viewBox="0 0 551.60158 277.09998"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Bootstrapping.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ showguides="false"
+ inkscape:zoom="1.6060415"
+ inkscape:cx="228.82348"
+ inkscape:cy="162.51137"
+ inkscape:window-width="1916"
+ inkscape:window-height="1036"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid366"
+ spacingx="5"
+ spacingy="5"
+ originx="-291.39844"
+ originy="-202.39551" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1067">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop1063" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop1065" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1035">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop1031" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop1033" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1003">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop999" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop1001" />
+ </linearGradient>
+ <marker
+ style="overflow:visible"
+ id="marker8990"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988" />
+ </marker>
+ <rect
+ x="285.34802"
+ y="81.876205"
+ width="72.577995"
+ height="46.49157"
+ id="rect4504" />
+ <marker
+ style="overflow:visible"
+ id="TriangleStart"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="TriangleStart-2"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="marker8990-7"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988-5" />
+ </marker>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1003"
+ id="linearGradient1005"
+ x1="220.24939"
+ y1="246.47063"
+ x2="297.8335"
+ y2="246.47063"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1035"
+ id="linearGradient1037"
+ x1="335.71463"
+ y1="354.63511"
+ x2="439.45118"
+ y2="354.63511"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1067"
+ id="linearGradient1069"
+ x1="433.16601"
+ y1="364.42624"
+ x2="448.62421"
+ y2="364.42624"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-163.28819,-113.11023)">
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368"
+ width="135"
+ height="50"
+ x="318"
+ y="115" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect370"
+ width="140"
+ height="50"
+ x="573"
+ y="115" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="425.31064"
+ y="149.78835"
+ id="text471"><tspan
+ sodipodi:role="line"
+ id="tspan469"
+ x="425.31064"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Source</tspan><tspan
+ sodipodi:role="line"
+ x="425.31064"
+ y="199.78835"
+ id="tspan473" /></text>
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368-7"
+ width="135"
+ height="50"
+ x="446.54141"
+ y="221.16039" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="566.10809"
+ y="255.94873"
+ id="text471-9"><tspan
+ sodipodi:role="line"
+ id="tspan469-2"
+ x="566.10809"
+ y="255.94873"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Compiler</tspan><tspan
+ sodipodi:role="line"
+ x="566.10809"
+ y="305.94873"
+ id="tspan473-0" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="679.07361"
+ y="149.92062"
+ id="text471-6"><tspan
+ sodipodi:role="line"
+ id="tspan469-0"
+ x="679.07361"
+ y="149.92062"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Binary</tspan><tspan
+ sodipodi:role="line"
+ x="679.07361"
+ y="199.92062"
+ id="tspan473-6" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
+ d="M 453,140 H 573"
+ id="path611" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990)"
+ d="M 514.04141,221.16038 513,140"
+ id="path8986" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#808080;stroke-width:3.77953;stroke-linecap:square;stroke-opacity:1"
+ id="rect368-9"
+ width="135"
+ height="50"
+ x="191.54141"
+ y="221.16039" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill-opacity:1;fill:#808080"
+ x="298.85208"
+ y="255.94875"
+ id="text471-2"><tspan
+ sodipodi:role="line"
+ id="tspan469-28"
+ x="298.85208"
+ y="255.94875"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato;fill-opacity:1;fill:#808080">Source</tspan><tspan
+ sodipodi:role="line"
+ x="298.85208"
+ y="305.94873"
+ id="tspan473-9"
+ style="fill-opacity:1;fill:#808080" /></text>
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#808080;stroke-width:3.77953;stroke-linecap:square;stroke-opacity:1"
+ id="rect368-7-7"
+ width="135"
+ height="50"
+ x="320.08286"
+ y="327.32077" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill-opacity:1;fill:#808080"
+ x="439.64957"
+ y="362.10913"
+ id="text471-9-3"><tspan
+ sodipodi:role="line"
+ id="tspan469-2-6"
+ x="439.64957"
+ y="362.10913"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato;fill-opacity:1;fill:#808080">Compiler</tspan><tspan
+ sodipodi:role="line"
+ x="439.64957"
+ y="412.10913"
+ id="tspan473-0-1"
+ style="fill-opacity:1;fill:#808080" /></text>
+ <path
+ style="fill:none;stroke:#808080;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart-2)"
+ d="m 326.54141,246.16039 h 120"
+ id="path611-2" />
+ <path
+ style="fill:none;stroke:#808080;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990-7)"
+ d="m 387.58282,327.32077 -1.04141,-81.16038"
+ id="path8986-9" />
+ <text
+ xml:space="preserve"
+ style="font-size:18.8976px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill-opacity:1;fill:#808080"
+ x="449.96594"
+ y="371.21048"
+ id="text9623"><tspan
+ sodipodi:role="line"
+ id="tspan9621"
+ x="449.96594"
+ y="371.21048"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.8976px;font-family:Lato;-inkscape-font-specification:Lato;fill-opacity:1;fill:#808080">-1</tspan></text>
+ <path
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:2.04472;stroke-linecap:square;stroke-dasharray:none;stroke-opacity:1"
+ id="path10005"
+ sodipodi:type="arc"
+ sodipodi:cx="170.46747"
+ sodipodi:cy="383.03094"
+ sodipodi:rx="6.1569166"
+ sodipodi:ry="6.1569166"
+ sodipodi:start="0"
+ sodipodi:end="6.2714916"
+ sodipodi:arc-type="arc"
+ d="m 176.62438,383.03094 a 6.1569166,6.1569166 0 0 1 -6.13891,6.1569 6.1569166,6.1569166 0 0 1 -6.17481,-6.1209 6.1569166,6.1569166 0 0 1 6.10281,-6.19268 6.1569166,6.1569166 0 0 1 6.21049,6.08469"
+ sodipodi:open="true" />
+ <path
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:2.04472;stroke-linecap:square;stroke-dasharray:none;stroke-opacity:1"
+ id="path10005-6"
+ sodipodi:type="arc"
+ sodipodi:cx="231.03075"
+ sodipodi:cy="383.03094"
+ sodipodi:rx="6.1569166"
+ sodipodi:ry="6.1569166"
+ sodipodi:start="0"
+ sodipodi:end="6.2714916"
+ sodipodi:arc-type="arc"
+ d="m 237.18766,383.03094 a 6.1569166,6.1569166 0 0 1 -6.13891,6.1569 6.1569166,6.1569166 0 0 1 -6.17481,-6.1209 6.1569166,6.1569166 0 0 1 6.10281,-6.19268 6.1569166,6.1569166 0 0 1 6.21049,6.08469"
+ sodipodi:open="true" />
+ <path
+ style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:2.04472;stroke-linecap:square;stroke-dasharray:none;stroke-opacity:1"
+ id="path10005-5"
+ sodipodi:type="arc"
+ sodipodi:cx="200.74911"
+ sodipodi:cy="383.03094"
+ sodipodi:rx="6.1569166"
+ sodipodi:ry="6.1569166"
+ sodipodi:start="0"
+ sodipodi:end="6.2714916"
+ sodipodi:arc-type="arc"
+ d="m 206.90603,383.03094 a 6.1569166,6.1569166 0 0 1 -6.13892,6.1569 6.1569166,6.1569166 0 0 1 -6.17481,-6.1209 6.1569166,6.1569166 0 0 1 6.10282,-6.19268 6.1569166,6.1569166 0 0 1 6.21049,6.08469"
+ sodipodi:open="true" />
+ </g>
+</svg>
diff --git a/Fosdem2023/img/Sneaky-Compiler.svg b/Fosdem2023/img/Sneaky-Compiler.svg
new file mode 100644
index 0000000..76790cc
--- /dev/null
+++ b/Fosdem2023/img/Sneaky-Compiler.svg
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="105.51042mm"
+ height="55.136127mm"
+ viewBox="0 0 398.77956 208.3885"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Sneaky-Compiler.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ showguides="false"
+ inkscape:zoom="2.7250638"
+ inkscape:cx="229.53591"
+ inkscape:cy="95.043645"
+ inkscape:window-width="1916"
+ inkscape:window-height="1036"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid366"
+ spacingx="5"
+ spacingy="5"
+ originx="-444.22052"
+ originy="-202.3955" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="marker8990"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988" />
+ </marker>
+ <rect
+ x="285.34802"
+ y="81.876205"
+ width="72.577995"
+ height="46.49157"
+ id="rect4504" />
+ <marker
+ style="overflow:visible"
+ id="TriangleStart"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="marker8990-6"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="marker8990-4"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988-3" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-316.11023,-113.11023)">
+ <path
+ style="fill:none;stroke:#ff0101;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990-4)"
+ d="M 516.93846,141.74131 573,142"
+ id="path8986-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#f90000;fill-opacity:1;stroke:#ff0000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990-6)"
+ d="m 515.97987,222.90169 -1.04141,-81.16038"
+ id="path8986-8" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368"
+ width="135"
+ height="50"
+ x="318"
+ y="115" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect370"
+ width="140"
+ height="50"
+ x="573"
+ y="115" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="425.31064"
+ y="149.78835"
+ id="text471"><tspan
+ sodipodi:role="line"
+ id="tspan469"
+ x="425.31064"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Source</tspan><tspan
+ sodipodi:role="line"
+ x="425.31064"
+ y="199.78835"
+ id="tspan473" /></text>
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368-7"
+ width="134.99997"
+ height="98.448586"
+ x="446.54141"
+ y="221.16039" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#ff0808;fill-opacity:1"
+ x="568.10809"
+ y="255.68668"
+ id="text471-9-0"><tspan
+ sodipodi:role="line"
+ x="568.10809"
+ y="255.68668"
+ id="tspan473-0-8"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato;fill:#ff0808;fill-opacity:1">Ć̡̹͇̼̲̰̱͐ͧ́̎ͫo̵̗̎ͭ̈̈̚͢ḿ̴̴͎̮̫̣͔̰̐̌̆ͨ̇͐ͯ̉̉̌̊͢pil̞ͤę̝͍̭̱͆̃ͦͫr̰̗̥̬̣̔̄͑̾̔͆̕̕</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="566.10809"
+ y="255.94873"
+ id="text471-9"><tspan
+ sodipodi:role="line"
+ id="tspan469-2"
+ x="566.10809"
+ y="255.94873"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Compiler</tspan><tspan
+ sodipodi:role="line"
+ x="566.10809"
+ y="305.94873"
+ id="tspan473-0" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="566.55933"
+ y="255.84323"
+ id="text471-9-2"><tspan
+ sodipodi:role="line"
+ id="tspan469-2-5"
+ x="566.55933"
+ y="255.84323"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato" /><tspan
+ sodipodi:role="line"
+ x="566.55933"
+ y="305.84323"
+ id="tspan473-0-4" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#f90000;fill-opacity:1"
+ x="681.55615"
+ y="149.3976"
+ id="text471-6-6"><tspan
+ sodipodi:role="line"
+ x="681.55615"
+ y="149.3976"
+ id="tspan473-6-3"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato;fill:#f90000;fill-opacity:1">B̧͔̹͔̜̗͙͉͎̻̹͚͕̫͛̈̀̊̔ͦ͂̈̍͘͡͠i̶̢̘̞͕̓̓̿̂̅ͮ͜͜͞n̯̲̫̥͇̞̞̬̥̜͍͕̺̱ͩͧ̆́̽ͧ̾̋̆ͤ̚̚̚͞ar̢̼̲͈̝̱̄y</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="679.07361"
+ y="149.92062"
+ id="text471-6"><tspan
+ sodipodi:role="line"
+ id="tspan469-0"
+ x="679.07361"
+ y="149.92062"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Binary</tspan><tspan
+ sodipodi:role="line"
+ x="679.07361"
+ y="199.92062"
+ id="tspan473-6" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
+ d="M 453,140 H 573"
+ id="path611" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990)"
+ d="M 514.04141,221.16038 513,140"
+ id="path8986" />
+ <text
+ xml:space="preserve"
+ style="font-size:26.4567px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="556.2843"
+ y="297.93332"
+ id="text17854"><tspan
+ sodipodi:role="line"
+ id="tspan17852"
+ x="556.2843"
+ y="297.93332"
+ style="font-size:26.4567px">(▀̿Ĺ̯▀̿ ̿)</tspan></text>
+ </g>
+</svg>
diff --git a/Fosdem2023/img/Source-Binary-Compiler.svg b/Fosdem2023/img/Source-Binary-Compiler.svg
new file mode 100644
index 0000000..8afafdd
--- /dev/null
+++ b/Fosdem2023/img/Source-Binary-Compiler.svg
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="105.51042mm"
+ height="42.317436mm"
+ viewBox="0 0 398.77956 159.93991"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Source-Binary-Compiler.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ showguides="false"
+ inkscape:zoom="1.6060415"
+ inkscape:cx="76.274492"
+ inkscape:cy="162.51137"
+ inkscape:window-width="1916"
+ inkscape:window-height="1036"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid366"
+ spacingx="5"
+ spacingy="5"
+ originx="-444.22052"
+ originy="-202.39552" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="marker8990"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path8988" />
+ </marker>
+ <rect
+ x="285.34802"
+ y="81.876205"
+ width="72.577995"
+ height="46.49157"
+ id="rect4504" />
+ <marker
+ style="overflow:visible"
+ id="TriangleStart"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-316.11023,-113.11023)">
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368"
+ width="135"
+ height="50"
+ x="318"
+ y="115" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect370"
+ width="140"
+ height="50"
+ x="573"
+ y="115" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="425.31064"
+ y="149.78835"
+ id="text471"><tspan
+ sodipodi:role="line"
+ id="tspan469"
+ x="425.31064"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Source</tspan><tspan
+ sodipodi:role="line"
+ x="425.31064"
+ y="199.78835"
+ id="tspan473" /></text>
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368-7"
+ width="135"
+ height="50"
+ x="446.54141"
+ y="221.16039" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="566.10809"
+ y="255.94873"
+ id="text471-9"><tspan
+ sodipodi:role="line"
+ id="tspan469-2"
+ x="566.10809"
+ y="255.94873"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Compiler</tspan><tspan
+ sodipodi:role="line"
+ x="566.10809"
+ y="305.94873"
+ id="tspan473-0" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:Lato;-inkscape-font-specification:Lato;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="679.07361"
+ y="149.92062"
+ id="text471-6"><tspan
+ sodipodi:role="line"
+ id="tspan469-0"
+ x="679.07361"
+ y="149.92062"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Binary</tspan><tspan
+ sodipodi:role="line"
+ x="679.07361"
+ y="199.92062"
+ id="tspan473-6" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
+ d="M 453,140 H 573"
+ id="path611" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker8990)"
+ d="M 514.04141,221.16038 513,140"
+ id="path8986" />
+ </g>
+</svg>
diff --git a/Fosdem2023/img/Source-Binary.svg b/Fosdem2023/img/Source-Binary.svg
new file mode 100644
index 0000000..26dc5ba
--- /dev/null
+++ b/Fosdem2023/img/Source-Binary.svg
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="105.51041mm"
+ height="20.532848mm"
+ viewBox="0 0 398.77953 77.604464"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
+ sodipodi:docname="Bootstrapping.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ showguides="false"
+ inkscape:zoom="2.2942902"
+ inkscape:cx="217.27853"
+ inkscape:cy="142.52774"
+ inkscape:window-width="1916"
+ inkscape:window-height="1036"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid366"
+ spacingx="5"
+ spacingy="5"
+ originx="-128.11025"
+ originy="-89.285294" />
+ </sodipodi:namedview>
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="marker7577"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path7575" />
+ </marker>
+ <rect
+ x="285.34802"
+ y="81.876205"
+ width="72.577995"
+ height="46.49157"
+ id="rect4504" />
+ <marker
+ style="overflow:visible"
+ id="TriangleStart"
+ refX="3"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="TriangleStart"
+ markerWidth="5.3244081"
+ markerHeight="6.155385"
+ viewBox="0 0 5.3244081 6.1553851"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path135" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.11023,-89.285301)">
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect368"
+ width="135"
+ height="50"
+ x="130"
+ y="115" />
+ <rect
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:3.77953;stroke-linecap:square"
+ id="rect370"
+ width="140"
+ height="50"
+ x="385"
+ y="115" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="237.31064"
+ y="149.78835"
+ id="text471"><tspan
+ sodipodi:role="line"
+ id="tspan469"
+ x="237.31064"
+ y="149.78835"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Source</tspan><tspan
+ sodipodi:role="line"
+ x="237.31064"
+ y="199.78835"
+ id="tspan473" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end"
+ x="491.07361"
+ y="149.92062"
+ id="text471-6"><tspan
+ sodipodi:role="line"
+ id="tspan469-0"
+ x="491.07361"
+ y="149.92062"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.4567px;font-family:Lato;-inkscape-font-specification:Lato">Binary</tspan><tspan
+ sodipodi:role="line"
+ x="491.07361"
+ y="199.92062"
+ id="tspan473-6" /></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:3.77953;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart);marker-start:url(#marker7577)"
+ d="M 265,140 H 385"
+ id="path611" />
+ <text
+ xml:space="preserve"
+ id="text4502"
+ style="font-size:40px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect4504)"
+ transform="translate(-21.308206,1.705223)"><tspan
+ x="336.69531"
+ y="117.26758"
+ id="tspan8085">?</tspan></text>
+ </g>
+</svg>
diff --git a/Fosdem2023/img/meme.jpg b/Fosdem2023/img/meme.jpg
new file mode 100644
index 0000000..e015a1c
--- /dev/null
+++ b/Fosdem2023/img/meme.jpg
Binary files differ
diff --git a/Fosdem2023/template.tex b/Fosdem2023/template.tex
new file mode 100644
index 0000000..0ae0832
--- /dev/null
+++ b/Fosdem2023/template.tex
@@ -0,0 +1,236 @@
+\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}
+\setbeamertemplate{caption}[numbered]
+\setbeamertemplate{caption label separator}{: }
+\selectcolormodel{gray} % Color B&W
+\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$
+
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\usepackage{fixltx2e} % provides \textsubscript
+
+
+\usefonttheme{professionalfonts} % using non standard fonts for beamer
+\usefonttheme{serif} % default family is serif
+
+% Font
+\usepackage{fontspec}
+\setmainfont[
+ BoldFont = {*-Bold},
+ ItalicFont = {*-Italic},
+ BoldItalicFont = {*-BoldItalic},
+]{Lato}
+\newcommand{\euro}{€}
+
+% Images with no captions
+\usepackage{caption}
+\captionsetup[figure]{labelformat=empty}
+
+% Bullet style
+\useinnertheme{circles}
+\newlength{\wideitemsep}
+\setlength{\wideitemsep}{\itemsep}
+\addtolength{\wideitemsep}{5pt}
+\let\olditem\item
+\renewcommand{\item}{\setlength{\itemsep}{\wideitemsep}\olditem}
+
+$if(euro)$
+ \newcommand{\euro}{€}
+$endif$
+
+% Language
+\usepackage{polyglossia}
+\setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
+
+\newif\ifbibliography
+$if(natbib)$
+\usepackage{natbib}
+\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
+$endif$
+$if(biblatex)$
+\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
+$for(bibliography)$
+\addbibresource{$bibliography$}
+$endfor$
+$endif$
+
+$if(verbatim-in-note)$
+\usepackage{fancyvrb}
+$endif$
+
+\hypersetup{
+$if(title-meta)$
+ pdftitle={$title-meta$},
+$endif$
+$if(author-meta)$
+ pdfauthor={$author-meta$},
+$endif$
+$if(keywords)$
+ pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
+$endif$
+$if(colorlinks)$
+ colorlinks=true,
+ linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$,
+ citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$,
+ urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$,
+$else$
+ pdfborder={0 0 0},
+$endif$
+ breaklinks=true}
+\urlstyle{same} % don't use monospace font for urls
+$if(verbatim-in-note)$
+\VerbatimFootnotes % allows verbatim text in footnotes
+$endif$
+$if(listings)$
+\usepackage{listings}
+$endif$
+$if(lhs)$
+\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
+$endif$
+$if(highlighting-macros)$
+$highlighting-macros$
+$endif$
+$if(tables)$
+\usepackage{longtable,booktabs}
+\usepackage{caption}
+% These lines are needed to make table captions work with longtable:
+\makeatletter
+\def\fnum@table{\tablename~\thetable}
+\makeatother
+$endif$
+$if(graphics)$
+\usepackage{graphicx,grffile}
+\makeatletter
+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
+\def\maxheight{\ifdim\Gin@nat@height>\textheight0.8\textheight\else\Gin@nat@height\fi}
+\makeatother
+% Scale images if necessary, so that they will not overflow the page
+% margins by default, and it is still possible to overwrite the defaults
+% using explicit options in \includegraphics[width, height, ...]{}
+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+$endif$
+
+% Prevent slide breaks in the middle of a paragraph:
+\widowpenalties 1 10000
+\raggedbottom
+
+$if(section-titles)$
+\AtBeginPart{
+ \let\insertpartnumber\relax
+ \let\partname\relax
+ \frame{\partpage}
+}
+\AtBeginSection{
+ \ifbibliography
+ \else
+ \let\insertsectionnumber\relax
+ \let\sectionname\relax
+ \frame{\sectionpage}
+ \fi
+}
+\AtBeginSubsection{
+ \let\insertsubsectionnumber\relax
+ \let\subsectionname\relax
+ \frame{\subsectionpage}
+}
+$endif$
+
+$if(links-as-notes)$
+% Make links footnotes instead of hotlinks:
+\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
+$endif$
+
+$if(strikeout)$
+\usepackage[normalem]{ulem}
+% avoid problems with \sout in headers with hyperref:
+\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
+$endif$
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt plus 2pt minus 1pt}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+$if(numbersections)$
+\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
+$else$
+\setcounter{secnumdepth}{0}
+$endif$
+$if(dir)$
+\ifxetex
+ % load bidi as late as possible as it modifies e.g. graphicx
+ $if(latex-dir-rtl)$
+ \usepackage[RTLdocument]{bidi}
+ $else$
+ \usepackage{bidi}
+ $endif$
+\fi
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \TeXXeTstate=1
+ \newcommand{\RL}[1]{\beginR #1\endR}
+ \newcommand{\LR}[1]{\beginL #1\endL}
+ \newenvironment{RTL}{\beginR}{\endR}
+ \newenvironment{LTR}{\beginL}{\endL}
+\fi
+$endif$
+$for(header-includes)$
+$header-includes$
+$endfor$
+
+$if(title)$
+\title{$title$}
+$endif$
+$if(subtitle)$
+\subtitle{$subtitle$}
+$endif$
+$if(author)$
+\author{$for(author)$$author$$sep$ \and $endfor$}
+$endif$
+$if(institute)$
+\institute{$for(institute)$$institute$$sep$ \and $endfor$}
+$endif$
+\date{$date$}
+
+\begin{document}
+$if(title)$
+\frame{\titlepage}
+$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+$if(toc)$
+\begin{frame}
+\tableofcontents[hideallsubsections]
+\end{frame}
+
+$endif$
+$body$
+
+$if(natbib)$
+$if(bibliography)$
+$if(biblio-title)$
+$if(book-class)$
+\renewcommand\bibname{$biblio-title$}
+$else$
+\renewcommand\refname{$biblio-title$}
+$endif$
+$endif$
+\begin{frame}[allowframebreaks]{$biblio-title$}
+\bibliographytrue
+\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
+\end{frame}
+
+$endif$
+$endif$
+$if(biblatex)$
+\begin{frame}[allowframebreaks]{$biblio-title$}
+\bibliographytrue
+\printbibliography[heading=none]
+\end{frame}
+
+$endif$
+$for(include-after)$
+$include-after$
+
+$endfor$
+\end{document}