357 lines
3.8 MiB
Markdown
357 lines
3.8 MiB
Markdown
|
---
|
||
|
title: Personal Infrastructure
|
||
|
theme: gaia
|
||
|
_class: lead
|
||
|
backgroundColor: #fff
|
||
|
backgroundImage: url('https://0.s3.envato.com/files/138380962/Preview%20Image%20White%20Low%20Poly%20Background2.jpg')
|
||
|
marp: true
|
||
|
---
|
||
|
|
||
|
![bg left:40% 80%](data:image/jpeg;base64,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
|
||
|
|
||
|
# **Personal Infrastructure**
|
||
|
|
||
|
**Marcus Noble**
|
||
|
|
||
|
🔗 https://marcusnoble.co.uk
|
||
|
🐦 @Marcus_Noble_
|
||
|
✨ AverageMarcus
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
## A little about me and the past
|
||
|
|
||
|
- I work professionally as a "DevOps" engineer at Elsevier with a focus on Kubernetes and containers
|
||
|
- Previously a JavaScript developer, now a Go developer
|
||
|
- I've been running my own servers for as long back as I can recall
|
||
|
- I like to tinker with "Smart Home" stuff
|
||
|
|
||
|
---
|
||
|
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
### 1. Personal network setup
|
||
|
### 2. Smart home
|
||
|
### 3. Replacing Google Analytics
|
||
|
|
||
|
---
|
||
|
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Personal network setup
|
||
|
|
||
|
---
|
||
|
|
||
|
## Where things are at today...
|
||
|
|
||
|
* **87** uniquely identifiable devices connected to my home network
|
||
|
* A Zigbee network with **32** devices
|
||
|
* A single-node Kubernetes cluster running on a dedicated desktop machine hosting **14** applications
|
||
|
* An autoscaling 1-3 node Kubernetes cluster hosted on Scaleway running **~30** applications
|
||
|
* 1 Raspberry Pi running Home Assistant to control all smart devices in my home
|
||
|
* 1 Raspberry Pi running OctoPi to control my 3D printer
|
||
|
|
||
|
---
|
||
|
|
||
|
## Previously
|
||
|
|
||
|
* Raspberry Pi 4 running k3s Kubernetes cluster
|
||
|
- Only ARM arch support - required me to manually rebuild some images
|
||
|
- I had stability and performance issues
|
||
|
* Dokku running on a VPS server hosted on bHost (now Mythic Beasts)
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Local Network setup
|
||
|
|
||
|
**FTTP** - Zen Internet
|
||
|
↯
|
||
|
**ISP Modem**
|
||
|
↯
|
||
|
**Powerline**
|
||
|
↯
|
||
|
**Router** - TP-Link Archer C7
|
||
|
↯
|
||
|
**Mesh WiFi beacons** - TP-Link Deco M4 (x3)
|
||
|
↯
|
||
|
**87 devices**
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Local Network setup
|
||
|
|
||
|
5 devices connected via ethernet
|
||
|
|
||
|
Everything else via WiFi
|
||
|
|
||
|
All devices have static IPs and assigned hostnames
|
||
|
(based on the periodic table of elements)
|
||
|
|
||
|
---
|
||
|
|
||
|
## Kubernetes - local
|
||
|
|
||
|
An old desktop machine repurposed as a single-node Kubernetes cluster
|
||
|
|
||
|
**OS**: Ubuntu
|
||
|
**Kubernetes Version**: Microk8s v1.20.1
|
||
|
**Specs**: CPU - 4 core | Memory - 12Gb | HDD - Lots
|
||
|
|
||
|
---
|
||
|
|
||
|
## Kubernetes - local
|
||
|
|
||
|
**Primary Use**: Hosting sensitive or local-specific applications that I want to keep off the internet.
|
||
|
E.g.
|
||
|
|
||
|
- custom built CCTV monitoring application covering the 8 cameras I currently have set up
|
||
|
- automated download tools so I can kick off downloads remotely while I'm out
|
||
|
- DNS-based ad blocker (AdGuard)
|
||
|
|
||
|
---
|
||
|
|
||
|
## Kubernetes - cloud
|
||
|
|
||
|
Hosted on Scaleway's managed Kubernetes platform, Kapsule.
|
||
|
1-3 *DEV1_M* instances, autoscaled based on load.
|
||
|
|
||
|
All defined in code using Terraform and stored in git.
|
||
|
|
||
|
**Kubernetes Version**: v1.20
|
||
|
**Specs**: CPU - 3 vCPUs | Memory - 4Gb | HDD - 40Gb + 14 PVCs of varying size
|
||
|
|
||
|
---
|
||
|
## Kubernetes - cloud
|
||
|
|
||
|
<style scoped>p, ul { font-size: 0.85em; }</style>
|
||
|
|
||
|
**Primary Use**: Hosting internet facing services and providing a secure, authenticated tunnel to my local cluster
|
||
|
E.g.
|
||
|
|
||
|
- My personal blog plus some related sites
|
||
|
- Self-hosted alternatives to cloud services: Gitea, Nextcloud, Harbor, Photoprism, etc.
|
||
|
- Tekton - handle all my CI/CD needs, triggered by webhooks from Gitea
|
||
|
- "Utility" applications to make my life easier:
|
||
|
- Convert SVG to DXF - used when creating 3D print designs from SVG
|
||
|
- website-to-remarkable - lets me send a webpage as a PDF to my reMarkable tablet for later reading
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Time for a quick break
|
||
|
|
||
|
☕️
|
||
|
|
||
|
Questions so far?
|
||
|
|
||
|
---
|
||
|
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Smart Home
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.95em; }</style>
|
||
|
|
||
|
- Home Assistant centrally controlling all devices
|
||
|
- Combination of Zigbee and WiFi devices
|
||
|
- Amazon Echo in every room
|
||
|
- Most rooms have smart lighting: ceiling bulbs, floor lamps, LED strips
|
||
|
- Motion and light sensors used to trigger turning lights on
|
||
|
- Outdoor lighting with LED strips + motion/light sensors
|
||
|
- Cheap Android tablets acting as dashboards
|
||
|
|
||
|
![bg right:30% 90%](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABosAAAN6CAYAAABWinCdAAABQ2lDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSCwoyGFhYGDIzSspCnJ3UoiIjFJgf8rAxMDBwMIgzyCSmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsisTWtmdsvq208uM3NZ/diBKRpTPQrgSkktTgbSf4A4KbmgqISBgTEByFYuLykAsVuAbJEioKOA7BkgdjqEvQbEToKwD4DVhAQ5A9lXgGyB5IzEFCD7CZCtk4Qkno7EhtoLAhzBxiZepqYVBJxKOihJrSgB0c75BZVFmekZJQqOwBBKVfDMS9bTUTAyMDJkYACFN0T15xvgcGQU40CI5W5mYLCoYmBgkkGIpfQwMOyQB3r5LEJMZToDA386A8Mel4LEokS4Axi/sRSnGRtB2NzbGRhYp/3//zmcgYFdk4Hh7/X//39v////7zIGBuZbDAwHvgEAAOtdAF3raekAAABWZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAOShgAHAAAAEgAAAESgAgAEAAAAAQAABougAwAEAAAAAQAAA3oAAAAAQVNDSUkAAABTY3JlZW5zaG90UPp4ngAAAddpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTY3NTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44OTA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/R7RggAAQABJREFUeAHs3QecJWWZL+C38+Q8wJCTRAHJYEAwoSIYAROIIoooezHvuncXFd1dDGu4ZgUjoiAqKoKiS1BZEBGJkuMMafJM96ROt96qqZ6egRl6AiB9nhpPV/qqzqmnzu/n4fzP+31N/cUUJgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYYUaG7Iq3bRBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECpYCwyBuBAAECBAgQIECAAAECBAgQIECAAAECBAgQINDAAsKiBr75Lp0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgICzyHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINLCAsKiBb75LJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgIi7wHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINLCAsauCb79IJECBAgAABAgQIECBAgAABAgQIECBAgAABAsIi7wECBAgQIECAAAECBAgQIECAAAECBAgQIECAQAMLCIsa+Oa7dAIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAsMh7gAABAgQIECBAgAABAgQIECBAgAABAgQIECDQwALCoga++S6dAAECBAgQIECAAAECBAgQIECAAAECBAgQICAs8h4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDSwgLCogW++SydAgAABAgQIECBAgAABAgQIECBAgAABAgQICIu8BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECDSwgLGrgm+/SCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLCIu8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEADCwiLGvjmu3QCBAgQIECAAAECBAgQIECAAAECBAgQIECAgLDIe4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0MACwqIGvvkunQABAgQIECBAgAABAgQIECBAgAABAgQIECAgLPIeIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0sICwqIFvvksnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiLvAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0sICxq4Jvv0gkQIECAAAECBAgQIECAAAECBAgQIECAAAECwiLvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAAwsIixr45rt0AgQIECBAgAABAgQIECBAgAABAgQIECBAgICwyHuAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDAAsKiBr75Lp0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgICzyHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINLCAsKiBb75LJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgIi7wHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINLCAsauCb79IJECBAgAABAgQIECBAgAABAgQIECBAgAABAsIi7wECBAgQIECAAAECBAgQIECAAAECBAgQIECAQAMLCIsa+Oa7dAIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAsMh7gAABAgQIECBAgAABAgQIECBAgAABAgQIECDQwALCoga++S6dAAECBAgQIECAAAECBAgQIECAAAECBAgQICAs8h4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDSwgLCogW++SydAgAABAgQIECBAgAABAgQIECBAgAABAgQICIu8BwgQIECAAAECBAgQIECAAAECBAgQIECAAAECDSwgLGrgm+/SCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLCIu8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgEADCwiLGvjmu3QCBAgQIECAAAECBAgQIECAAAECBAgQIECAgLDIe4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0MACwqIGvvkunQABAgQIECBAgAABAgQIECBAgAABAgQIECAgLPIeIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0sICwqIFvvksnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiLvAcIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0sICxq4Jvv0gkQIECAAAECBAgQIECAAAECBAgQIECAAAECwiLvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAAwsIixr45rt0AgQIECBAgAABAgQIECBAgAABAgQIECBAgICwyHuAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDAAsKiBr75Lp0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgICzyHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQINLCAsKiBb75LJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgIi7wHCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINLCAsauCb79IJECBAgAABAgQIECBAgAABAgQIECBAgAABAsIi7wECBAgQIECAAAECBAgQIECAAAECBAgQIECAQAMLCIsa+Oa7dAIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAsMh7gAABAgQIECBAgAABAgQIECBAgAABAgQIECDQwALCoga++S6dAAECBAgQIECAAAECBAgQIECAAAECBAgQICAs8h4gQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDSwgLCogW++S
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Typical Day
|
||
|
|
||
|
* 🌙 Wake up at 5am 🥱
|
||
|
* Take my phone off charge 📱 and my office lights automatically turn on along with my monitor 💡🖥
|
||
|
* 🚶🏽♂️ Walk downstairs and as I pass through the landing and the hallway the lights automatically turn on at 20% brightness 💡
|
||
|
* Enter the kitchen to get a drink and again the light turns on at 20% brightness 🥛💡
|
||
|
* Go through to the living room and tap on the tablet by the door to turn on the sofa lamp 🛋
|
||
|
* Open the back door to let the dog out 🐶 the LED strip along the garden fence lights up as the door opens
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Typical Day
|
||
|
|
||
|
* Time to get some work done 👨🏻💻
|
||
|
* Check my calendar for meetings - morning free so decide to set my 3D printer going
|
||
|
* Tap on the tablet mounted in front of my monitor to turn on my 3D printer and start it pre-heating 🔥
|
||
|
* Access my OctoPrint webpage and select the model to print 🖨
|
||
|
* Some time later access my 📹 CCTV webpage to check what the dog is up to downstairs 🐕
|
||
|
* Head down to the kitchen for a snack 🍪 - this time the lights come on at 100% brightness as does the lamp in the kitchen 💡
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Typical Day
|
||
|
|
||
|
* Lunchtime - head down for food 🧆 this time the lights don't come on as there is already enough natural light
|
||
|
* While eating my 3D printer finishes printing and shortly after turns itself off 🔌
|
||
|
* Back to work... 👨🏻💻
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Typical Day
|
||
|
|
||
|
* Evening - take the dog for a walk 🦮 outdoor lights come on as the front door is opened, turning off automatically a few minutes later
|
||
|
* When returning back the lights again turn on automatically as I approach to illuminate the keyhole
|
||
|
* Dinner time 🍔 put food in the over then ask Echo to set a timer
|
||
|
* Timer sounds - take food out and plate up. 🍛 Tap a button on the tablet that triggers an announcement on all the Echos in the house letting the family know food is ready 📣
|
||
|
* Daughter's bedtime 🛏 lights on her desk flash briefly letting her know it's bedtime and the lights under her bed turn on to a dim glow
|
||
|
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>ul { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Typical Day
|
||
|
|
||
|
* Bedtime 🛏
|
||
|
* While getting ready for bed I check my phone to make sure all lights are turned off through the house and if not toggle them off 🎚
|
||
|
* When in bed - "Echo, turn the lights off" 🌑
|
||
|
* 😴
|
||
|
|
||
|
---
|
||
|
|
||
|
<style scoped>p { font-size: 0.9em; }</style>
|
||
|
|
||
|
## Security
|
||
|
|
||
|
Where possible devices have been flashed with custom firmware that makes them run in a local-only mode. This is done on all cameras, all compatible WiFi plugs and most of the LED strips.
|
||
|
|
||
|
Unnecessary external network traffic is blocked by AdGuard.
|
||
|
|
||
|
Firewall on router blocks all incoming ports.
|
||
|
|
||
|
Amazon Echo's ... 🤷🏼♂️
|
||
|
|
||
|
Secure external access is provides via a tunnel between my local cluster and my remote cluster. All endpoints authenticated and monitored. Local cluster connects to internet via a VPN.
|
||
|
|
||
|
---
|
||
|
|
||
|
## Misc
|
||
|
|
||
|
- Automation handles brightness of lights based on time of day and amount of light already in the room
|
||
|
- Automation controls the volume of the Echos throughout the house based on time of day
|
||
|
- Alerts sent to phones when outside doors, garden gate or garage door are left open for too long
|
||
|
- Most lights set to automatically turn off after a period of inactivity
|
||
|
- 4 Tablets mounted throughout the house as dashboards
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Time for a quick break
|
||
|
|
||
|
☕️
|
||
|
|
||
|
Questions so far?
|
||
|
|
||
|
---
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Replacing Google Analytics
|
||
|
|
||
|
---
|
||
|
|
||
|
### Why?
|
||
|
|
||
|
- Never used 99% of the functionality that Google Analytics provides
|
||
|
- Slowly de-google-ing myself so I should do the same for my website visitors
|
||
|
- Client-side analytics are flakey at best
|
||
|
- All I really wanted to know was:
|
||
|
- What pages are popular when?
|
||
|
- How are bots trying to do naughty things?
|
||
|
- Anything throwing error codes?
|
||
|
|
||
|
---
|
||
|
|
||
|
### The solution!
|
||
|
|
||
|
<style scoped>p {text-align: center;}</style>
|
||
|
|
||
|
Traefik + Loki + Grafana
|
||
|
|
||
|
* Traefik - Handles all incoming HTTP requests and logs out to an access log in JSON format.
|
||
|
* Loki - Collects all logs from the application in my cluster and stores them ready for querying.
|
||
|
* Grafana - Queries the Loki data and displays it as a dashboard
|
||
|
|
||
|
---
|
||
|
|
||
|
### Example Access Log
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"BackendAddr": "100.64.128.16:8000", "BackendName": "http-https_marcusnoble.co.uk/",
|
||
|
"BackendURL": { "Scheme": "http", "Opaque": "", "User": null, "Host": "100.64.128.16:8000", "Path": "", "RawPath": "", "ForceQuery": false, "RawQuery": "", "Fragment": "" },
|
||
|
"ClientAddr": "100.64.0.1:10948", "ClientHost": "100.64.0.1", "ClientPort": "10948", "ClientUsername": "-",
|
||
|
"DownstreamContentSize": 1245, "DownstreamStatus": 200,"DownstreamStatusLine": "200 OK",
|
||
|
"Duration": 25958433,
|
||
|
"FrontendName": "http-https_marcusnoble.co.uk/",
|
||
|
"OriginContentSize": 1245, "OriginDuration": 25716428, "OriginStatus": 200, "OriginStatusLine": "200 OK",
|
||
|
"Overhead": 242005,
|
||
|
"RequestAddr": "marcusnoble.co.uk", "RequestContentSize": 0, "RequestCount": 50101, "RequestHost": "marcusnoble.co.uk",
|
||
|
"RequestLine": "GET /css/main.css?202102052202 HTTP/1.1",
|
||
|
"RequestMethod": "GET", "RequestPath": "/css/main.css?202102052202", "RequestPort": "-", "RequestProtocol": "HTTP/1.1",
|
||
|
"RetryAttempts": 0,
|
||
|
"StartLocal": "2021-02-09T10:04:23.441099709Z", "StartUTC": "2021-02-09T10:04:23.441099709Z",
|
||
|
"downstream_Accept-Ranges": "bytes", "downstream_Cache-Control": "public, max-age=0", "downstream_Content-Encoding": "gzip", "downstream_Content-Type": "text/css; charset=UTF-8",
|
||
|
"downstream_Date": "Tue, 09 Feb 2021 10:04:23 GMT", "downstream_Etag": "W/\"13dc-1777437f9e8\"", "downstream_Last-Modified": "Fri, 05 Feb 2021 22:02:41 GMT",
|
||
|
"downstream_Vary": "Accept-Encoding", "downstream_X-Powered-By": "Express",
|
||
|
"level": "info",
|
||
|
"msg": "",
|
||
|
"origin_Accept-Ranges": "bytes", "origin_Cache-Control": "public, max-age=0", "origin_Content-Encoding": "gzip", "origin_Content-Type": "text/css; charset=UTF-8",
|
||
|
"origin_Date": "Tue, 09 Feb 2021 10:04:23 GMT", "origin_Etag": "W/\"13dc-1777437f9e8\"", "origin_Last-Modified": "Fri, 05 Feb 2021 22:02:41 GMT", "origin_Vary": "Accept-Encoding", "origin_X-Powered-By": "Express",
|
||
|
"request_Accept": "text/css,*/*;q=0.1", "request_Accept-Encoding": "gzip,deflate,br", "request_Accept-Language": "en-US", "request_Connection": "keep-alive", "request_From": "googlebot(at)googlebot.com",
|
||
|
"request_Referer": "https://marcusnoble.co.uk/",
|
||
|
"request_User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.36",
|
||
|
"time": "2021-02-09T10:04:23Z"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
![bg contain](data:image/png;base64,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FQnPE7mJVYkvk7yTapLeJQckNyTPpESktKYSUmNTu8Ty4mRx33L15TnLh9KM04rTpOn26dvTJyV+kvoMKGNJRmcmA/3xDmQZZH2XNZrtlF2d/X5F+IpjOXI54pyBlUYrN6x8vMpz1YFcTC4/tzdPM29t3uhq19W1+VB+XH7vGu01RWvGC7wKGteS1iav/aXQvLC88M26iHXdRWpFBUVj33l911wsUywpvrHeYX3N95jvE78f3GC1YeeGLyWCkoul5qUVpZ/K+GUXf7D4ofKHmY3xGwc32Wzasxm3Wbx5ZIvzlsZyufJV5WNbF25t38baVrLtzfZl2y9UWFfU7CDtyNohrfSv7Nyps3Pzzk9VCVXD1W7VrbuYuzbserdbsPvqHpc9LTVqNaU1H/cm7r1Z61XbXqdXV7EPty9736P94fv7D3AONNWr1pfWf24QN0gbgxv7mmybmg4yD25qhpuzmicOxRy6ctj9cGeLSUttq2Jr6RFwJOvI0x9jfxw56ne09xjnWMtPuj/taqO3lbRD7SvbJzsSOqSdUZ1DXb5dvd0O3W0/m/7ccFzzePUJhRObTpJOFp2cObXq1FRPWs/z06LTY73Leu+ciTxzvS+ob/Cs39nz5zzPnel37T913vH88Qv2F7ouci52XLK51D7AHmj7hf1L26DNYPtl28udV+yudA8tGDp51fnq6Wvu185d97l+aXjR8NBI2MjNGzE3pDcFN5/cSrn18nb27ek7BXexd0vuyd6ruM+8X/er4a+tUhvpiVH30YEHIQ/ujPHHnj3MePhpvOgR9VHFY43HTU8snxyf8Jy48nTx0/Fnac+mnxf/JvfbrhcGL3763eX3gcnIyfGXkpczr8peq7xueGP9pncqcOr+29S30+9K3qu8b/zA+dD/MeLj4+kVn/CfKj8bfu7+4vfl7kzqzEwaT8L7KgUQtMHx8QC8agCAGoXKJ1SXkRbP6bU/9Q30l+p5eesbv/8WR/2cpvtqNgAccAEgHMUA1FcXoBqkB9UgaD8Q7Ye6ANjK6u/2p2XEW1nO5aItAQBvOjMzmQ8A0Q+Az8EzMx87Z2Y+G6C6pRaAYw/ndOKs+ZugeSXcCM/I27nCgn/XaH8AIEW/MGXNuVgAAABWZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAOShgAHAAAAEgAAAESgAgAEAAAAAQAADW+gAwAEAAAAAQAABTYAAAAAQVNDSUkAAABTY3JlZW5zaG90EB//WQAAAdhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzQzOTwvZXhpZjpQaXhlbFh
|
||
|
|
||
|
---
|
||
|
|
||
|
![bg contain](data:image/png;base64,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
|
||
|
|
||
|
|
||
|
---
|
||
|
![bg contain](data:image/png;base64,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
|
||
|
|
||
|
---
|
||
|
|
||
|
![bg contain](data:image/png;base64,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
|
||
|
|
||
|
---
|
||
|
|
||
|
![bg contain](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADWMAAAUnCAYAAACCXpRPAAAKKGlDQ1BJQ0MgUHJvZmlsZQAASImVlgdUE9kax+/MpBcCJFQDhN6kEwggNXRQehWVkIRQI4QiCiIiiyuwFlREUBFUiii4utS1IKJYWBQV7G4QUVHXxYINlR1kd3373jnvvPfNufP97jf3fvebe+ec+QNAFvDS0lJgWQBSxZmSYC83VmRUNAv/EGAAE1AAArA8fkaaa2CgP0DtL/9PezsCoFl/zWQ2138+/68mJxBm8AGAAlFOFWTwU1HuQdmFnybJBACeHaO9IjNtlnVQZkjQAlHmzLJojmdrYsTNcezXMaHBXJTROQQKjycRAUAqQOOsbL4IjZH2omwuFiSKUb6CshM/gScAgIzuApifmrp8lhegbBD3L3lE/8gZ93dOHk/0N8+9y1ejh1hZ+7LZOSwuLyUxTsLLFAr+z535Hyw1Jeuv9WZPgCIUh4WgfnafmCAEWAFr4AvY6JUDWIALeCAFJII4IEEpEwiBIFOYkzk7mbs8baUkUZSQyXJFT1DI8hHzTeezLM0tzQGY/R7mlnjN/LoKZNj/LZakDYBNLhq8/i0migOgayt6DNhvMd0gAGivATgRws+SZM/FMLM3LCABGmAAFaAOtIEBMAGWwAY4ABfggdYeAEJBFFgK+CABpKJ1rwB5YC0oBqVgM9gOqkAN2AcawWFwFHSA4+A0OAcugStgGNwBUjAOnoFJ8BZMQxCEh6gQHVKBNCBdyBiyhDiQE+QB+UPBUBQUC4kgMZQF5UHroFKoHKqCaqEm6EeoCzoNXYCGoFvQKDQBvYI+wghMgRmwGqwHm8Ec2BX2g0PhJbAITodXwUXwRrgSroMPwe3wafgSPAxL4WfwFAIQMqKIaCImCAfhIgFINBKPSJB8pASpQOqQFqQb6UeuIVLkOfIBg8PQMSyMCcYB440Jw/Ax6Zh8TBmmCtOIacf0Ya5hRjGTmC9YKpaJNcbaY32wkVgRdgW2GFuBrce2Yc9ih7Hj2Lc4HE4Rp4+zxXnjonBJuFxcGW43rhXXgxvCjeGm8Hi8Ct4Y74gPwPPwmfhi/E78Ifwp/FX8OP49gUzQIFgSPAnRBDGhkFBBOEg4SbhKeEyYJsoSdYn2xACigLiSuIm4n9hNvEwcJ06T5Ej6JEdSKCmJtJZUSWohnSXdJb0mk8laZDtyEDmRXECuJB8hnyePkj9Q5ClGFC4lhpJF2UhpoPRQblFeU6lUPaoLNZqaSd1IbaKeod6nvpehy5jK+MgIZNbIVMu0y1yVeUEj0nRprrSltFW0Ctox2mXac1mirJ4sV5Ynmy9bLdsle0N2So4uZyEXIJcqVyZ3UO6C3BN5vLyevIe8QL5Ifp/8GfkxOkLXpnPpfPo6+n76Wfo4A8fQZ/gwkhiljMOMQcakgryCtUK4Qo5CtcIJBakioqin6KOYorhJ8ajiiOJHJTUlVyWh0galFqWrSu+U5ym7KAuVS5RblYeVP6qwVDxUklW2qHSo3FPFqBqpBqmuUN2jelb1+TzGPId5/Hkl847Ou82EmUbMYGYucx9zgDmlpq7mpZamtlPtjNpzdUV1F/Uk9W3qJ9UnNOgaThqJGts0Tmk8ZSmwXFkprEpWH2tSk6nprZmlWas5qDmtpa8VplWo1ap1T5ukzdGO196m3as9qaOhs1AnT6dZ57YuUZejm6C7Q7df952evl6E3nq9Dr0n+sr6Pvqr9Jv17xpQDZwN0g3qDK4b4gw5hsmGuw2vGMFGbKMEo2qjy8awsY1xovFu46H52Pl288Xz6+bfMKGYuJpkmzSbjJoqmvqbFpp2mL4w0zGLNtti1m/2xZxtnmK+3/yOhbyFr0WhRbfFK0sjS75lteV1K6qVp9Uaq06rl9bG1kLrPdY32XT2QvZ6di/7s42tjcSmxWbCVsc21naX7Q0OgxPIKeOct8PaudmtsTtu98Hexj7T/qj97w4mDskOBx2eLNBfIFywf8GYo5Yjz7HWUerEcop12uskddZ05jnXOT9w0XYRuNS7PHY1dE1yPeT6ws3cTeLW5vaOa89dze1xR9y93EvcBz3kPcI8qjzue2p5ijybPSe92F65Xj3eWG8/7y3eN3zUfPg+TT6Tvra+q337/Ch+IX5Vfg/8jfwl/t0L4YW+C7cuvLtId5F4UUcACPAJ2BpwL1A/MD3w5yBcUGBQddCjYIvgvOD+EHrIspCDIW9D3UI3hd4JMwjLCusNp4XHhDeFv4twjyiPkEaaRa6OvBSlGpUY1RmNjw6Pro+eWuyxePvi8Rh2THHMyBL9JTlLLixVXZqy9MQy2jLesmOx2NiI2IOxn3gBvDreVJxP3K64ST6Xv4P/TOAi2CaYEDoKy4WP4x3jy+OfiBxFW0UTCc4JFQnPE7mJVYkvk7yTapLeJQckNyTPpESktKYSUmNTu8Ty4mRx33L15TnLh9KM04rTpOn26dvTJyV+kvoMKGNJRmcmA/3xDmQZZH2XNZrtlF2d/X5F+IpjOXI54pyBlUYrN6x8vMpz1YFcTC4/tzdPM29t3uhq19W1+VB+XH7vGu01RWvGC7wKGteS1iav/aXQvLC88M26iHXdRWpFBUVj33l911wsUywpvrHeYX3N95jvE78f3GC1YeeGLyWCkoul5qUVpZ/K+GUXf7D4ofKHmY3xGwc32Wzasxm3Wbx5ZIvzlsZyufJV5WNbF25t38baVrLtzfZl2y9UWFfU7CDtyNohrfSv7Nyps3Pzzk9VCVXD1W7VrbuYuzbserdbsPvqHpc9LTVqNaU1H/cm7r1Z61XbXqdXV7EPty9736P94fv7D3AONNWr1pfWf24QN0gbgxv7mmybmg4yD25qhpuzmicOxRy6ctj9cGeLSUttq2Jr6RFwJOvI0x9jfxw56ne09xjnWMtPuj/taqO3lbRD7SvbJzsSOqSdUZ1DXb5dvd0O3W0/m/7ccFzzePUJhRObTpJOFp2cObXq1FRPWs/z06LTY73Leu+ciTxzvS+ob/Cs39nz5zzPnel37T913vH88Qv2F7ouci52XLK51D7AHmj7hf1L26DNYPtl28udV+yudA8tGDp51fnq6Wvu185d97l+aXjR8NBI2MjNGzE3pDcFN5/cSrn18nb27ek7BXexd0vuyd6ruM+8X/er4a+tUhvpiVH30YEHIQ/ujPHHnj3MePhpvOgR9VHFY43HTU8snxyf8Jy48nTx0/Fnac+mnxf/JvfbrhcGL3763eX3gcnIyfGXkpczr8peq7xueGP9pncqcOr+29S30+9K3qu8b/zA+dD/MeLj4+kVn/CfKj8bfu7+4vfl7kzqzEwaT8L7KgUQtMHx8QC8agCAGoXKJ1SXkRbP6bU/9Q30l+p5eesbv/8WR/2cpvtqNgAccAEgHMUA1FcXoBqkB9UgaD8Q7Ye6ANjK6u/2p2XEW1nO5aItAQBvOjMzmQ8A0Q+Az8EzMx87Z2Y+G6C6pRaAYw/ndOKs+ZugeSXcCM/I27nCgn/XaH8AIEW/MGXNuVgAAEAASURBVHgB7N33d1znfe/77xT0DhBgJ9gpdqoXS3IcSS5qji059nIS5xznJHFOuWedH+9fcP+Bs7LuWucmTrEdJ7ZjO7IdO7LlJquRKuy9dwIEiT4oM7jfzzPYw8FgAIIgCILk+5EAzOz67Nd+9p4BOJ/1jdmWZ0ZsZMQsETdLJiy0WMzM/7f0sFlNrVWVlVlqaMjSPT1mGV+2NGkx/zkyOGg25MsMpc18GUv4+n39vq62lTTz+QvWrbKuvj7rS/VbQ12dXenosER5maX7fTnfplVW+6plNqBtD2ey6/nPZG2tDWtaU63v07evbfanzAYGLO77yXT5PDVtw/upLttIxkbUZx2PmtazhJWXl/ukkbCfHu9LZtiXiccs5n0cSfsyw74NX8Z8eqKi3NI6BnmEFneCGkv5voeuXrV4TY01+nFcvtJhJb7+4PnzFp/XFKa1++Oa+nrr6e6xET++cj+GTGzEux53moT19XTbx5562t56+60w38oqLO7zMumMta5YbqdOnbLa2jpLxpN
|
||
|
|
||
|
---
|
||
|
|
||
|
![bg contain]( data:image/png;base64,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
|
||
|
|
||
|
---
|
||
|
|
||
|
<!-- _class: lead -->
|
||
|
|
||
|
## Fin!
|
||
|
|
||
|
Question?
|