talks: remove nearly everything

Everything in this repo moved to golang.org/x/website
in CL 365135 (x/website commit e219555f).

Leave a README behind.

Change-Id: I35d72a64f3f350967842fb3285737aa065729732
Reviewed-on: https://go-review.googlesource.com/c/talks/+/366177
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/.gcloudignore b/.gcloudignore
deleted file mode 100644
index 199e6d9..0000000
--- a/.gcloudignore
+++ /dev/null
@@ -1,25 +0,0 @@
-# This file specifies files that are *not* uploaded to Google Cloud Platform
-# using gcloud. It follows the same syntax as .gitignore, with the addition of
-# "#!include" directives (which insert the entries of the given .gitignore-style
-# file at that point).
-#
-# For more information, run:
-#   $ gcloud topic gcloudignore
-#
-.gcloudignore
-# If you would like to upload your .git directory, .gitignore file or files
-# from your .gitignore file, remove the corresponding line
-# below:
-.git
-.gitignore
-
-# Binaries for programs and plugins
-*.exe
-*.exe~
-*.dll
-*.so
-*.dylib
-# Test binary, build with `go test -c`
-*.test
-# Output of the go coverage tool, specifically when used with LiteIDE
-*.out
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index be5533b..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,21 +0,0 @@
-# Treat all files in this repo as binary, with no git magic updating
-# line endings. Windows users contributing to Go will need to use a
-# modern version of git and editors capable of LF line endings.
-#
-# We'll prevent accidental CRLF line endings from entering the repo
-# via the git-review gofmt checks.
-#
-# See golang.org/issue/9281
-
-* -text
-
-# The builders assume the git archive *.tar.gz of the tree is under
-# 25 MB but this repo is 31+ MB with all the images.
-# So exclude those.
-# See https://golang.org/issue/11199
-
-*.jpg export-ignore
-*.jpeg export-ignore
-*.png export-ignore
-*.gif export-ignore
-*.pdf export-ignore
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 15167cd..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-# This source code refers to The Go Authors for copyright purposes.
-# The master list of authors is in the main Go distribution,
-# visible at http://tip.golang.org/AUTHORS.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index d0485e8..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Contributing to Go
-
-Go is an open source project.
-
-It is the work of hundreds of contributors. We appreciate your help!
-
-## Filing issues
-
-When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
-
-1.  What version of Go are you using (`go version`)?
-2.  What operating system and processor architecture are you using?
-3.  What did you do?
-4.  What did you expect to see?
-5.  What did you see instead?
-
-General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
-The gophers there will answer or ask you to file an issue if you've tripped over a bug.
-
-## Contributing code
-
-Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
-before sending patches.
-
-Unless otherwise noted, the Go source files are distributed under
-the BSD-style license found in the LICENSE file.
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
deleted file mode 100644
index 1c4577e..0000000
--- a/CONTRIBUTORS
+++ /dev/null
@@ -1,3 +0,0 @@
-# This source code was written by the Go contributors.
-# The master list of contributors is in the main Go distribution,
-# visible at http://tip.golang.org/CONTRIBUTORS.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 6a66aea..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2009 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-   * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-   * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-   * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/PATENTS b/PATENTS
deleted file mode 100644
index 7330990..0000000
--- a/PATENTS
+++ /dev/null
@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Go project.
-
-Google hereby grants to You a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this section)
-patent license to make, have made, use, offer to sell, sell, import,
-transfer and otherwise run, modify and propagate the contents of this
-implementation of Go, where such license applies only to those patent
-claims, both currently owned or controlled by Google and acquired in
-the future, licensable by Google that are necessarily infringed by this
-implementation of Go.  This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation.  If you or your agent or exclusive licensee institute or
-order or agree to the institution of patent litigation against any
-entity (including a cross-claim or counterclaim in a lawsuit) alleging
-that this implementation of Go or any code incorporated within this
-implementation of Go constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of Go
-shall terminate as of the date such litigation is filed.
diff --git a/README.md b/README.md
index 135d5ee..e5e7f43 100644
--- a/README.md
+++ b/README.md
@@ -1,61 +1,3 @@
-# Go Talks
+# Go Talks (obsolete)
 
-[![Go Reference](https://pkg.go.dev/badge/golang.org/x/talks.svg)](https://pkg.go.dev/golang.org/x/talks)
-
-This repository holds various Go talks that may be viewed with the present tool.
-
-## Viewing Locally
-
-To install the present tool, use `go get`:
-
-```
-go get golang.org/x/tools/cmd/present
-```
-
-To view talks, run `present` in the `content` directory and then
-visit [http://127.0.0.1:3999](http://127.0.0.1:3999) in your browser.
-
-## Report Issues / Send Patches
-
-This repository uses Gerrit for code changes. To learn how to submit changes to
-this repository, see https://golang.org/doc/contribute.html.
-
-The main issue tracker for the talks repository is located at
-https://github.com/golang/go/issues. Prefix your issue with "x/talks:" in the
-subject line, so it is easy to find.
-
-## Deploying
-
-To deploy these talks to talks.golang.org hosted on App Engine:
-
-1.	Add a version of `golang.org/x/tools/cmd/present` that you intend to
-	use in this deploy as a dependency of this module:
-
-	```
-	go get -d golang.org/x/tools/cmd/present@latest
-	```
-
-2.	Copy the contents of `golang.org/x/tools/cmd/present` to the root of
-	this repository:
-
-	```
-	rsync -r $(go list -f '{{.Dir}}' golang.org/x/tools/cmd/present)/ .
-	```
-
-3.	Run the deploy:
-
-	```
-	GO111MODULE=on gcloud --project=golang-org app deploy --no-promote app.yaml
-	```
-
-	This will create a new version, which can be viewed within the
-	[golang-org GCP project](https://console.cloud.google.com/appengine/versions?project=golang-org&serviceId=talks).
-
-4.	Check that the deployed version looks OK (click the version link in GCP).
-
-5.	If all is well, click "Migrate Traffic" to move 100% of the talks.golang.org
-	traffic to the new version.
-
-6.	Clean up the local file modifications that steps 1 and 2 caused.
-
-7.	You're done.
+The content of this repository has moved to [golang.org/x/website/_content/talks/](https://cs.opensource.google/go/x/website/+/master:_content/talks/).
diff --git a/app.yaml b/app.yaml
deleted file mode 100644
index ed889e7..0000000
--- a/app.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-service: talks
-runtime: go111
-
-env_variables:
-  GOLANGORG_CHECK_COUNTRY: true
-
-handlers:
-- url: /favicon.ico
-  static_files: static/favicon.ico
-  upload: static/favicon.ico
-  secure: always
-- url: /static
-  static_dir: static
-  secure: always
-- url: /.*
-  script: auto
-  secure: always
-
-nobuild_files: content/
diff --git a/codereview.cfg b/codereview.cfg
deleted file mode 100644
index 3f8b14b..0000000
--- a/codereview.cfg
+++ /dev/null
@@ -1 +0,0 @@
-issuerepo: golang/go
diff --git a/content/2009/go_talk-20091030.pdf b/content/2009/go_talk-20091030.pdf
deleted file mode 100644
index 5139ff2..0000000
--- a/content/2009/go_talk-20091030.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2010/ExpressivenessOfGo-2010.pdf b/content/2010/ExpressivenessOfGo-2010.pdf
deleted file mode 100644
index f1931d0..0000000
--- a/content/2010/ExpressivenessOfGo-2010.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2010/go_talk-20100112.html b/content/2010/go_talk-20100112.html
deleted file mode 100644
index e119dbb..0000000
--- a/content/2010/go_talk-20100112.html
+++ /dev/null
@@ -1,410 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Go (January 12, 2010)</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="font-size-adjustment" content="-1" />
-<link rel="stylesheet" href="support/slidy.css"
-  type="text/css" media="screen, projection, print" />
-<script src="support/slidy.js" type="text/javascript">
-</script>
-</head>
-<body>
-<!-- this defines the slide background -->
-
-<div class="background">
-
-  <div class="header">
-  <!-- sized and colored via CSS -->
-  </div>
-
-  <div class="footer"></div>
-  </div>
-
-<div class="slide titlepage">
-<div style="height: 135px; width: 480px; overflow: hidden; position: fixed; top: auto; bottom: 10px; left: auto; right: 0;  ">
-<img src="support/bumper480x270.png" style="margin: -135px 0 0 0;"/>
-</div>
-<br/>
-<img src="support/go-logo-white.png">
-<br/>
-<br/>
-<h1 style="padding-right: 0pt; margin-right: 0pt; color: #0066cc; font-size: 250%; border-bottom: 0px;">The Go Programming Language</h1>
-<div style="color: #ffcc00;">
-<h2>Russ Cox</h2>
-<!-- <h3><i>rsc@google.com</i></h3> -->
-<br/>
-<h3>Stanford University<br/><br/>January 12, 2010</h3>
-</div>
-</div>
-
-<div class="slide">
-	<h1>Go</h1>
-
-	<h2>New</h2>
-	<h2>Experimental</h2>
-	<h2>Concurrent</h2>
-	<h2>Garbage-collected</h2>
-	<h2>Systems</h2>
-	<h2>Language</h2>
-</div>
-
-<div class="slide">
-	<h1>Hello, world</h1>
-<pre>
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("Hello, 世界\n")
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>History</h1>
-	
-	<h2>Design started in late 2007.</h2>
-	<h2>Implementation starting to work mid-2008.</h2>
-	<h2>Released as an open source project in November 2009.</h2>
-	<h2>Work continues.<h2>
-	<h2>Robert&nbsp;Griesemer, Ken&nbsp;Thompson, Rob&nbsp;Pike, Ian&nbsp;Lance&nbsp;Taylor, Russ&nbsp;Cox, many others</h2>
-</div>
-
-<div class="slide">
-	<h1>Why?</h1>
-	
-	<h2>Go fast!</h2>
-	<h2>Make programming fun again.</h2>
-</div>
-
-<div class="slide">
-	<h1>Why isn't programming fun?</h1>
-	
-	<div class="incremental">
-	<h2>Compiled, statically-typed languages (C, C++, Java) require too much typing and too much typing:</h2>
-	
-	<ul>
-		<li>verbose, lots of repetition</li>
-		<li>too much focus on type hierarchy</li>
-		<li>types get in the way as much as they help</li>
-		<li>compiles take far too long</li>
-	</ul>
-	</div>
-	
-	<div class="incremental">
-	<h2>Dynamic languages (Python, JavaScript) fix these problems (no more types, no more compiler) but introduce others:</h2>
-	
-	<ul>
-		<li>errors at run time that should be caught statically</li>
-		<li>no compilation means slow code</li>
-	</ul>
-	</div>
-	
-	<h2 class="incremental">Can we combine the best of both?</h2>
-</div>
-
-<div class="slide">
-	<h1>Go</h1>
-	
-	<h2>Make the language fast.</h2>
-	<h2>Make the tools fast.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Static Types</h1>
-	
-	<h2>Static types, but declarations can infer type from expression:</h2>
-	
-<pre>
-var one, hi = 1, "hello"
-
-var double = func(x int) int { return x*2 }
-</pre>
-
-	<h2>Not full Hindley-Milner type inference.</h2>
-</div>
-
-
-<div class="slide">
-	<h1>Go Approach: Methods</h1>
-	
-	<h2>Methods can be defined on any type.</h2>
-
-<pre>
-type Point struct {
-	X, Y float64
-}
-
-func (p Point) Abs() float64 {
-	return math.Sqrt(p.X*p.X + p.Y*p.Y)
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Methods</h1>
-	
-	<h2>Methods can be defined on any type.</h2>
-
-<pre>
-type MyFloat float64
-
-func (f MyFloat) Abs() float64 {
-	v := float64(f)
-	if v < 0 {
-		v = -v
-	}
-	return v
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Abstract Types</h1>
-	
-	<h2>An interface type lists a set of methods. Any value with those methods satisfies the interface.</h2>
-
-<pre>
-type Abser interface {
-	Abs() float64
-}
-
-func AbsPrinter(a Abser)
-</pre>
-
-	<h2>Can use Point or MyFloat (or ...):</h2>
-
-<pre>
-p := Point{3, 4}
-AbsPrinter(p)
-
-f := MyFloat(-10)
-AbsPrinter(f)
-</pre>
-
-	<h2>Notice that Point never declared that it implements Abser. It just does.  Same with MyFloat.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Packages</h1>
-
-	<h2>A Go program comprises one or more packages.</h2>
-	<h2>Each package is one or more source files compiled and imported as a unit.</h2>
-<pre>
-package draw
-
-type Point struct {
-	X, Y int
-}
-</pre>
-
-<pre>
-package main
-
-import "draw"
-
-var p draw.Point
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Visibility</h1>
-	
-	<h2>Inside a package, all locally defined names are visible in all source files.</h2>
-	
-	<h2>When imported, only the upper case names are visible.</h2>
-
-<pre>
-package draw
-
-type <span style="color: black;">Point</span> struct {
-	<span style="color: black;">X</span>, <span style="color: black;">Y</span> int
-	dist float64
-}
-
-type cache map[Point] float64
-</pre>
-
-<h2>Clients that <code>import "draw"</code> can use the black names only.</h2>
-
-<h2>&ldquo;Shift is the new <code>public</code>.&rdquo;</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Concurrency</h1>
-	
-	<h2>Cheap to create a new flow of control (goroutine):</h2>
-	
-<pre>
-func main() {
-	go expensiveComputation(x, y, z)
-	anotherExpensiveComputation(a, b, c)
-}
-</pre>
-
-	<h2>Two expensive computations in parallel.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Approach: Synchronization</h1>
-	
-	<h2>Use explicit messages to communicate and synchronize.</h2>
-	
-<pre>
-func computeAndSend(ch chan int, x, y, z int) {
-	ch <- expensiveComputation(x, y, z)
-}
-
-func main() {
-	ch := make(chan int)
-	go computeAndSend(ch, x, y, z)
-	v2 := anotherExpensiveComputation(a, b, c)
-	v1 := <-ch
-	fmt.Println(v1, v2)
-}
-</pre>
-	<h2>Notice communication of result in addition to synchronization.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Fast: Language</h1>
-	
-	<h2 class="incremental">Static types: enough to compile well, but inferred much of the time.</h2>
-	
-	<h2 class="incremental">Methods: on any type, orthogonal to type system.</h2>
-	
-	<h2 class="incremental">Abstract types: interface values, relations inferred statically.</h2>
-	
-	<h2 class="incremental">Visibility: inferred from case of name.</h2>
-	
-	<h2 class="incremental">Concurrency: lightweight way to start new thread of control.</h2>
-	
-	<h2 class="incremental">Synchronization: explicit, easy message passing.</h2>
-
-	<br/>
-	
-	<h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2>
-</div>
-
-<div class="slide">
-	<h1>Compile fast</h1>
-
-	<div class="incremental">
-	<h2>Observation: much of the compile time for a source file is spent processing
-	other, often unrelated files.</h2>
-
-	<h2>In C: <code>a.c</code> includes <code>b.h</code>, which includes <code>c.h</code>, which includes <code>d.h</code>.
-	</h2>
-	
-	<h2>Except that it's more often a tree instead of a chain.</h2>
-	
-	<h2>On my Mac (OS X 10.5.8, gcc 4.0.1):</h2>
-	<ul>
-	<li>C: <code>#include &lt;stdio.h&gt;</code> reads 360 lines from 9 files.
-	<li>C++: <code>#include &lt;iostream&gt;</code> reads 25,326 lines from 131 files.
-	<li>Objective C: <code>#include &lt;Carbon/Carbon.h&gt;</code> reads 124,730 lines from 689 files.
-	</ul>
-	
-	<h2>And we haven't done any real work yet!</h2>
-	
-	<h2>Same story in Java, Python, but reading binaries instead of source files.</h2>
-	</div>
-</div>
-
-<div class="slide">
-	<h1>Implementation: Summarize Dependencies</h1>
-	
-<pre>
-package gui
-
-import "draw"
-
-type Mouse struct {
-	Loc draw.Point
-	Buttons uint
-}
-</pre>
-	<h2>Compiled form of <code>gui</code> summarizes the necessary part of <code>draw</code> (just <code>Point</code>).</h2>
-
-</div>
-
-<div class="slide">
-	<h1>Implementation: Summarize Dependencies</h1>
-
-	<h2>Compiled form of <code>gui</code> summarizes the necessary part of <code>draw</code> (just <code>Point</code>).  Pseudo-object:</h2>
-
-<pre>
-package gui
-type draw.Point struct {
-	X, Y int
-}
-type gui.Mouse struct {
-	Loc draw.Point
-	Buttons uint
-}
-</pre>
-
-	<h2>A file that imports <code>gui</code> compiles without consulting <code>draw</code> or its dependencies.</h2>
-	
-	<h2>In Go: <code>import "fmt"</code> reads <i>one</i> file: 184 lines summarizing types from 7 packages.</h2>
-
-	<h2>Tiny effect in this program but can be exponential in large programs.</h2>
-</div>
-
-<div class="slide">
-	<h1>Compilation Demo</h1>
-	
-	<h2>Build all standard Go packages: ~120,000 lines of code.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go Status</h1>
-	
-	<div class="incremental">
-	<div>
-	<h2>Open source:</h2>
-	<ul>
-	<li>released on November 10, 2009
-	<li>regular releases (~ weekly)
-	<li>all development done in public Mercurial repository
-	<li>outside contributions welcome
-	</ul>
-	</div>
-	
-	<div>
-	<h2>Portable:</h2>
-	<ul>
-	<li>FreeBSD, Linux, OS X (x86, x86-64)
-	<li>(in progress) Linux arm, Native Client x86, Windows x86.
-	</ul>
-	</div>
-	
-	<div>
-	<h2>Still in progress, experimental.  Yet to come:</h2>
-	<ul>
-	<li>mature garbage collector
-	<li>generics?
-	<li>exceptions?
-	<li>unions or sum types?
-	</ul>
-	</div>
-	</div>
-
-</div>
-
-<div class="slide titlepage">
-	<h1>Questions?</h1>
-	<br><br>
-	<center>
-	<img src="support/bumper640x360.png">
-	</center>
-	<br><br>
-	<div style="color: #ffcc00;">
-	<!-- <h3><i>rsc@google.com</i></h3> -->
-	</div>
-</div>
-
-</body></html>
diff --git a/content/2010/go_talk-20100121.html b/content/2010/go_talk-20100121.html
deleted file mode 100644
index 4c88a1b..0000000
--- a/content/2010/go_talk-20100121.html
+++ /dev/null
@@ -1,452 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Go, Networked (January 21, 2010)</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="font-size-adjustment" content="-1" />
-<link rel="stylesheet" href="support/slidy.css"
-  type="text/css" media="screen, projection, print" />
-<script src="support/slidy.js" type="text/javascript">
-</script>
-</head>
-<body>
-<!-- this defines the slide background -->
-
-<div class="background">
-
-  <div class="header">
-  <!-- sized and colored via CSS -->
-  </div>
-
-  <div class="footer"></div>
-  </div>
-
-<div class="slide titlepage">
-<div style="height: 135px; width: 480px; overflow: hidden; position: fixed; top: auto; bottom: 10px; left: auto; right: 0;  ">
-<img src="support/gordon/bumper480x270.png" style="margin: -135px 0 0 0;"/>
-</div>
-<br/>
-<img src="support/go-logo-white.png">
-<br/>
-<br/>
-<h1 style="padding-right: 0pt; margin-right: 0pt; color: #0066cc; font-size: 250%; border-bottom: 0px;">The Go Programming Language</h1>
-<div style="color: #ffcc00;">
-<h2>Russ Cox</h2>
-<!-- <h3><i>rsc@google.com</i></h3> -->
-<br/>
-<h3>CNS Winter Research Review<br/><br/>January 21, 2010</h3>
-<br/>
-<br/>
-<!--
-<h4><i>click to start; then left/right arrow to change slides</i></h4> -->
-</div>
-</div>
-
-<div class="slide">
-	<h1>Go</h1>
-
-	<h2>New</h2>
-	<h2>Experimental</h2>
-	<h2>Concurrent</h2>
-	<h2>Garbage-collected</h2>
-	<h2>Systems</h2>
-	<h2>Language</h2>
-</div>
-
-<div class="slide">
-	<h1>Hello, world</h1>
-<pre>
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("Hello, 世界\n")
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>History</h1>
-	
-	<h2>Design started in late 2007.</h2>
-	<h2>Implementation starting to work mid-2008.</h2>
-	<h2>Released as an open source project in November 2009.</h2>
-	<h2>Work continues.</h2>
-	<h2>Robert&nbsp;Griesemer, Ken&nbsp;Thompson, Rob&nbsp;Pike, Ian&nbsp;Lance&nbsp;Taylor, Russ&nbsp;Cox, many others</h2>
-</div>
-
-<div class="slide">
-	<h1>Goals and Motivation</h1>
-	
-	<h2>Go fast!</h2>
-	<h2>Make programming fun again.</h2>
-	<h2>Targeted at systems software, broadly.</h2>
-</div>
-
-<div class="slide">
-	<h1>Why isn't programming fun?</h1>
-	
-	<div class="incremental">
-	<h2>Compiled, statically-typed languages (C, C++, Java) require too much typing and too much typing:</h2>
-	
-	<ul>
-		<li>verbose, lots of repetition</li>
-		<li>too much focus on type hierarchy</li>
-		<li>types get in the way as much as they help</li>
-		<li>compiles take far too long</li>
-	</ul>
-	</div>
-	
-	<div class="incremental">
-	<h2>Dynamic languages (Python, JavaScript) fix these problems (no more types, no more compiler) but introduce others:</h2>
-	
-	<ul>
-		<li>errors at run time that should be caught statically</li>
-		<li>no compilation means slow code</li>
-	</ul>
-	</div>
-	
-	<h2 class="incremental">Can we combine the best of both?</h2>
-</div>
-
-<div class="slide">
-	<h1>Why a new language?</h1>
-	
-	<div class="incremental">
-	<h2>No new systems language in 10+ years.</h2>
-	<h2>Current languages designed before ...</h2>
-	<h3>... rise of large-scale, networked and multicore computing</h3>
-	<h3>... rise of Internet-scale distributed development (many libraries)</h3>
-	</div>
-</div>
-	
-<div class="slide">
-	<h1>Go</h1>
-	
-	<h2>Make the language fast.</h2>
-	<h2>Make the tools fast.</h2>
-</div>
-
-<div class="slide">
-	<h1>Compilation Demo</h1>
-	
-	<h2>Build all standard Go packages: ~120,000 lines of code.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go in one slide</h1>
-	
-	<h2 class="incremental">Lightweight syntax.</h2>
-	
-	<h2 class="incremental">Static types: enough to compile well, but inferred much of the time.</h2>
-	
-	<h2 class="incremental">Methods: on any type, orthogonal to type system.</h2>
-	
-	<h2 class="incremental">Abstract types: interface values, relations inferred statically.</h2>
-	
-	<h2 class="incremental">Visibility: inferred from case of name.</h2>
-
-	<h2 class="incremental">First-class functions.</h2>
-	
-	<h2 class="incremental">Garbage collection.</h2>
-
-	<br/>
-	
-	<h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, concurrently</h1>
-	
-	<h2>Cheap to create a new flow of control (goroutine):</h2>
-	
-<pre>
-func main() {
-	go expensiveComputation(x, y, z)
-	anotherExpensiveComputation(a, b, c)
-}
-</pre>
-
-	<h2>Two expensive computations in parallel.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, concurrently</h1>
-	
-	<h2>Cheap to create a new flow of control (goroutine):</h2>
-	
-<pre>
-	for {
-		rw := l.Accept()
-		conn := newConn(rw, handler)
-		go conn.serve()
-	}
-</pre>
-
-	<h2>Concurrent web server.</h2>
-	<h2>Network connections multiplexed onto epoll.</h2>
-		<ul>
-		<li>many blocked Read calls != many blocked OS threads</li>
-		</ul>
-
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>Use explicit messages to communicate and synchronize.</h2>
-	
-<pre>
-func computeAndSend(ch chan int, x, y, z int) {
-	ch <- expensiveComputation(x, y, z)
-}
-
-func main() {
-	ch := make(chan int)
-	go computeAndSend(ch, x, y, z)
-	v2 := anotherExpensiveComputation(a, b, c)
-	v1 := <-ch
-	fmt.Println(v1, v2)
-}
-</pre>
-	<h2>Notice communication of result in addition to synchronization.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client</h2>
-
-<pre>
-func (client *Client) Call(method string, args, reply interface{}) os.Error {
-    // Send RPC message.
-    call := client.Go(method, args, reply, nil)
-	
-    // Read reply from Done channel.
-    <-call.Done
-
-    return call.Error
-}
-</pre>	
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		resp := client.readResponse()
-		client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()
-		if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)
-		c.Done <- c
-	}
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		<font style="color: black;">resp := client.readResponse()</font>
-		client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()
-		if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)
-		c.Done <- c
-	}
-}
-</pre>
-<h2>Read response from network.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		resp := client.readResponse()
-		<font style="color: black;">client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()</font>
-		if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)
-		c.Done <- c
-	}
-}
-</pre>
-<h2>Look up request by sequence number.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		resp := client.readResponse()
-		client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()
-		<font style="color: black;">if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)</font>
-		c.Done <- c
-	}
-}
-</pre>
-<h2>Decode response fields from payload.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		resp := client.readResponse()
-		client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()
-		if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)
-		<font style="color: black;">c.Done <- c</font>
-	}
-}
-</pre>
-<h2>Tell client that it finished.</h2>
-</div>
-
-<div class="slide">
-	<h1>Go, synchronized</h1>
-	
-	<h2>RPC client demux</h2>
-
-<pre>
-func (client *Client) input() {
-	for {
-		resp := client.readResponse()
-		client.mutex.Lock()
-		c := client.pending[resp.Seq]
-		client.pending[resp.Seq] = c, false
-		client.mutex.Unlock()
-		if resp.Error != "" {
-			c.Error = os.ErrorString(resp.error)
-		}
-		resp.Decode(c.Reply)
-		c.Done <- c
-	}
-}
-</pre>
-
-<h2>Can create multiple Calls with same Done channel
-and distinguish which finished by inspecting value sent on channel.
-</h2>
-
-</div>
-
-<div class="slide">
-	<h1>Goroutine demo</h1>
-	
-	<h2>Chain together 100,000 goroutines connected by 100,001 channels.</h2>
-	
-	<h2>Send a value to one end of the chain.</h2>
-	
-	<h2>Each passes it along, increments.</h2>
-	
-	<h2>Receive value out the other end of the chain.</h2>
-</div>
-	
-
-<div class="slide">
-	<h1>Go Status</h1>
-</div>
-
-<div class="slide">
-	<h1>Go Status</h1>
-	
-	<h2>Open source:</h2>
-	<ul>
-	<li>released on November 10, 2009
-	<li>regular releases (~ weekly)
-	<li>all development done in public Mercurial repository
-	<li>outside contributions welcome
-	<li>two independent compiler implementations
-	<li>XML, JSON, HTTP, TLS/SSL, native RPC, (network channels,) ...
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Go Status</h1>
-	
-	<h2>Open source</h2>
-
-	<h2>Portable:</h2>
-	<ul>
-	<li>FreeBSD, Linux, OS X (x86, x86-64)
-	<li>(in progress) Linux arm, Native Client x86, Windows x86.
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Go Status</h1>
-	
-	<h2>Open source</h2>
-	<h2>Portable</h2>
-
-	<h2>Still in progress, experimental.  Yet to come:</h2>
-	<ul>
-	<li>production garbage collector
-	<li>generics?
-	<li>exceptions?
-	<li>unions or sum types?
-	</ul>
-</div>
-
-<div class="slide titlepage">
-	<h1>Questions?</h1>
-	<br><br>
-	<center>
-	<img src="support/bumper640x360.png">
-	</center>
-	<br><br>
-	<div style="color: #ffcc00;">
-	<!-- <h3><i>rsc@google.com</i></h3> -->
-	</div>
-</div>
-
-</body></html>
diff --git a/content/2010/go_talk-20100323.html b/content/2010/go_talk-20100323.html
deleted file mode 100644
index 277546d..0000000
--- a/content/2010/go_talk-20100323.html
+++ /dev/null
@@ -1,395 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<title>Go Tech Talk</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="font-size-adjustment" content="-1" />
-<link rel="stylesheet" href="support/slidy.css"
-  type="text/css" media="screen, projection, print" />
-<script src="support/slidy.js" type="text/javascript">
-</script>
-</head>
-<body>
-<!-- this defines the slide background -->
-
-<div class="background">
-
-  <div class="header">
-  <!-- sized and colored via CSS -->
-  </div>
-
-  <div class="footer"></div>
-  </div>
-
-<div class="slide titlepage">
-<br/>
-<br/>
-<img src="support/go-logo-white.png" width="588px" height="217px">
-<br/>
-<h1 style="padding-right: 0pt; margin-right: 0pt; color: #0066cc; font-size: 250%; border-bottom: 0px;">The Go Programming Language</h1>
-<div style="color: #ffcc00;">
-<br/>
-<h3>Sydney University<br/><br/>March 23, 2010</h3>
-</div>
-</div>
-
-<div class="slide">
-	<h1>Go</h1>
-
-	<h2>New</h2>
-	<h2>Experimental</h2>
-	<h2>Concurrent</h2>
-	<h2>Garbage Collected</h2>
-	<h2>Systems Language</h2>
-</div>
-
-<div class="slide">
-	<h1>Hello, world</h1>
-<pre>
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("Hello, 世界\n")
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Hello, world 2.0</h1>
-
-	<h2>Serving <a href="http://localhost:8080/world">http://localhost:8080/world</a></h2>
-<pre>
-package main
-
-import (
-	"fmt"
-	"http"
-)
-
-func handler(c *http.Conn, r *http.Request) { 
-	fmt.Fprintf(c, "Hello, %s.", r.URL.Path[1:]) 
-}
-
-func main() {
-	http.ListenAndServe(":8080",
-			http.HandlerFunc(handler))
-}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>New</h1>
-	
-	<h2>It's about two years old:</h2>
-	<ul>
-		<li>Design started in late 2007</li>
-		<li>Implementation starting to work mid-2008</li>
-		<li>Released as an open source project in November 2009</li>
-		<li>Development continues with an active community</li>
-	</ul>
-
-	<h2>Why invent a new language? Older languages weren't designed for concurrency, but modern software needs it:</h2>
-	<ul>
-		<li>Large scale, networked computing, such as Google web search</li>
-		<li>Multi-core hardware</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>New</h1>
-	
-	<h2>Older languages are also frustrating on a day-to-day basis</h2>
-	<h2>Statically-typed languages (C, C++, Java) have issues:</h2>
-	<ul>
-		<li>Edit-Compile-Run cycle takes far too long</li>
-		<li>Type hierarchy can hurt as much as it helps</li>
-	</ul>
-<div style="text-align:center">
-<img src="support/java-typing.png" width="800px" height="90px"><br>
-</div>
-	
-	<h2>Dynamic languages (Python, JavaScript) fix some issues but introduce others:</h2>
-	<ul>
-		<li>No compilation means slow code</li>
-		<li>Runtime errors that should be caught statically</li>
-	</ul>
-
-	<h2>Go has the lighter feel of a scripting language but is compiled</h2>
-</div>
-
-<div class="slide">
-	<h1>New</h1>
-
-	<h2>Large C++ programs (e.g. Firefox, OpenOffice, Chromium) have enormous build times:</h2>
-	<ul>
-		<li>XKCD's #1 Programmer Excuse for Legitimately Slacking Off: &quot;<a href="http://xkcd.com/303/">My Code's Compiling</a>&quot;</li>
-	</ul>
-
-	<h2>On a Mac (OS X 10.5.8, gcc 4.0.1):</h2>
-	<ul>
-		<li>C: <code>#include &lt;stdio.h&gt;</code> reads 360 lines from 9 files</li>
-		<li>C++: <code>#include &lt;iostream&gt;</code> reads 25,326 lines from 131 files</li>
-		<li>Objective-C: <code>#include &lt;Carbon/Carbon.h&gt;</code> reads 124,730 lines from 689 files</li>
-		<li>We haven't done any real work yet!</li>
-	</ul>
-				
-	<h2>In Go: <code>import "fmt"</code> reads <i>one</i> file: 184 lines summarizing 7 packages</h2>
-</div>
-
-<div class="slide">
-	<h1>New</h1>
-
-	<h2>Compilation demo</h2>
-</div>
-
-<div class="slide">
-	<h1>Experimental</h1>
-	
-	<h2>Go is still unproven</h2>
-	<h2>Language is still evolving</h2>
-	<h2>Package library is incomplete</h2>
-	<h2>Concurrent garbage collection is an active research problem</h2>
-	<h2>Reviving forgotten concepts:</h2>
-	<ul>
-		<li>Go's concurrency is strongly influenced by <i>Communicating Sequential Processes</i> (Hoare, 1978)</li>
-		<li>Go has types and interfaces, but no inheritance. It is arguably more object-oriented than previously mentioned languages, being closer to the original Smalltalk meaning (1970s)</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>Unix philosophy: write <i>programs</i> that do one thing and do it well</h2>
-	<h2>Connect them with <i>pipes</i>:</h2>
-	<ul>
-		<li>How many lines of test code are there in the Go standard library?</li>
-		<li><code>find ~/go/src/pkg | grep _test.go$ | xargs wc -l</code></li>
-	</ul>
-
-	<h2>Unlike other languages, Go makes it easy to:</h2>
-	<ul>
-		<li>Launch <i>goroutines</i></li>
-		<li>Connect them with <i>channels</i></li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>Start a new flow of control with the <code>go</code> keyword</h2>
-	<h2>Parallel computation is easy:</h2>
-<pre>
-func main() {
-	go expensiveComputation(x, y, z)
-	anotherExpensiveComputation(a, b, c)
-}
-</pre>
-
-	<h2>Roughly speaking, a goroutine is like a thread, but lighter weight:</h2>
-	<ul>
-		<li>Goroutines have segmented stacks, and typically smaller stacks</li>
-		<li>This requires compiler support. Goroutines can't just be a C++ library on top of a thread library</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>Consider web servers ("the C10k problem"):</h2>
-	<ul>
-		<li>"Thread per connection" approach is conceptually neat, but doesn't scale well in practice</li>
-		<li>What does scale well (event-driven callbacks, asynchronous APIs) are harder to understand, maintain, and debug</li>
-		<li>We think "goroutine per connection" can scale well, and is conceptually neat</li>
-	</ul>
-<pre>
-	for {
-		rw := socket.Accept()
-		conn := newConn(rw, handler)
-		go conn.serve()
-	}
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>Let's look again at our simple parallel computation:</h2>
-<pre>
-func main() {
-	go expensiveComputation(x, y, z)
-	anotherExpensiveComputation(a, b, c)
-}
-</pre>
-
-	<h2>This story is incomplete:</h2>
-	<ul>
-		<li>How do we know when the two computations are done?</li>
-		<li>What are their values?</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>Goroutines communicate with other goroutines via channels</h2>
-<pre>
-func computeAndSend(ch chan int, x, y, z int) {
-	ch &lt;- expensiveComputation(x, y, z)
-}
-
-func main() {
-	ch := make(chan int)
-	go computeAndSend(ch, x, y, z)
-	v2 := anotherExpensiveComputation(a, b, c)
-	v1 := &lt;-ch
-	fmt.Println(v1, v2)
-}
-</pre>
-
-</div>
-
-<div class="slide">
-	<h1>Concurrent</h1>
-	
-	<h2>In traditional concurrent programs, you <i>communicate by sharing memory</i>. In Go, you <i>share memory by communicating</i>:</h2>
-	<ul>
-		<li>Communication (the <code>&lt;-</code> operator) is sharing and synchronization</li>
-	</ul>
-
-	<h2>Threads and locks are concurrency primitives; CSP is a concurrency model:</h2>
-	<ul>
-		<li>Analogy: &quot;Go To Statement Considered Harmful&quot; (Dijsktra, 1968)</li>
-		<li><code>goto</code> is a control flow primitive; structured programming (<code>if</code> statements, <code>for</code> loops, function calls) is a control flow model</li>
-	</ul>
-
-	<h2>Learning CSP changes the way you think about concurrent programming:</h2>
-	<ul>
-		<li>Every language has its grain. If your Go program uses mutexes, you're probably working against the grain</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Garbage Collected</h1>
-	
-	<h2>Automatic memory management makes writing (and maintaining) programs easier</h2>
-	<h2>Especially in a concurrent world:</h2>
-	<ul>
-		<li>Who &quot;owns&quot; a shared piece of memory, and is responsible for destroying it?</li>
-	</ul>
-
-	<h2>Large C++ programs usually end up with semi-automatic memory management anyway, via &quot;smart pointers&quot;</h2>
-	<h2>Mixing the two models can be problematic:</h2>
-	<ul>
-		<li>Browsers can leak memory easily; DOM elements are C++ objects, but JavaScript is garbage collected</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Garbage Collected</h1>
-
-	<h2>Go is also a safer language:</h2>
-	<ul>
-		<li>Pointers but no pointer arithmetic</li>
-		<li>No dangling pointers</li>
-		<li>Variables are zero-initialized</li>
-		<li>Array access is bounds-checked</li>
-	</ul>
-
-	<h2>No buffer overflow exploits</h2>
-</div>
-
-<div class="slide">
-	<h1>Systems Language</h1>
-
-	<h2>This just means you could write decently large programs in Go:</h2>
-	<ul>
-		<li>Web servers</li>
-		<li>Web browsers</li>
-		<li>Web crawlers</li>
-		<li>Search indexers</li>
-		<li>Databases</li>
-		<li>Word processors</li>
-		<li>Integrated Development Environments (IDEs)</li>
-		<li>Operating systems</li>
-		<li>...</li>
-	</ul>
-</div>
-
-<div class="slide">
-	<h1>Systems Language</h1>
-
-	<h2>Garbage collection has a reputation for being &quot;slower&quot;</h2>
-	<h2>We're expecting Go to be slightly slower than optimized C, but faster than Java, depending on the task. Nonetheless:</h2>
-	<ul>
-		<li>Fast and buggy is worse than almost-as-fast and correct</li>
-		<li>It is easier to optimize a correct program than to correct an optimized program</li>
-		<li>Fundamentally, it's simply a trade-off we're willing to make</li>
-	</ul>
-
-	<h2>Memory layout can drastically affect performance. These two designs are equivalent in Go, but significantly different in Java:</h2>
-<pre>
-type Point struct { X, Y int }
-type Rect struct { P0, P1 Point }
-
-// or ...
-
-type Rect struct { X0, Y0, X1, Y1 int }
-</pre>
-</div>
-
-<div class="slide">
-	<h1>Systems Language</h1>
-	
-	<h2>Quote from http://loadcode.blogspot.com/2009/12/go-vs-java.html</h2>
-
-<h2>
-&quot;[Git] is known to be very fast. It is written in C. A Java version
-JGit was made. It was considerably slower. Handling of memory and lack
-of unsigned types was some of the important reasons.
-</h2>
-
-<h2>Shawn O. Pearce wrote on the git mailinglist:</h2>
-<ul><li>&quot;JGit struggles with not
-having an efficient way to represent a SHA-1. C can just say &quot;unsigned
-char[20]&quot; and have it inline into the container's memory allocation. A
-byte[20] in Java will cost an *additional* 16 bytes of memory, and be
-slower to access because the bytes themselves are in a different area
-of memory from the container object. We try to work around it by
-converting from a byte[20] to 5 ints, but that costs us machine
-instructions&quot;
-</li></ul>
-
-<h2>
-Like C, Go does allow unsigned types and defining data structures
-containing other data structures as continuous blocks of memory.&quot;
-</h2>
-</div>
-
-<div class="slide">
-	<h1>Go</h1>
-
-	<h2>New</h2>
-	<h2>Experimental</h2>
-	<h2>Concurrent</h2>
-	<h2>Garbage Collected</h2>
-	<h2>Systems Language</h2>
-
-	<h2>And more:</h2>
-	<ul>
-		<li>I haven't talked about the type system, interfaces, slices, closures, selects, ...</li>
-		<li>Documentation, mailing list, source code all online</li>
-	</ul>
-</div>
-
-<div class="slide titlepage">
-	<h1>Questions?</h1>
-	<br><br>
-	<center>
-	<img src="support/bumper640x360.png" width="640px" height="360px">
-	</center>
-</div>
-
-</body></html>
diff --git a/content/2010/gofrontend-gcc-summit-2010.pdf b/content/2010/gofrontend-gcc-summit-2010.pdf
deleted file mode 100644
index 157fd76..0000000
--- a/content/2010/gofrontend-gcc-summit-2010.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2010/io/balance.go b/content/2010/io/balance.go
deleted file mode 100644
index 0214750..0000000
--- a/content/2010/io/balance.go
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"container/heap"
-	"flag"
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-const nRequester = 100
-const nWorker = 10
-
-var roundRobin = flag.Bool("r", false, "use round-robin scheduling")
-
-// Simulation of some work: just sleep for a while and report how long.
-func op() int {
-	n := rand.Int63n(1e9)
-	time.Sleep(time.Duration(nWorker * n))
-	return int(n)
-}
-
-type Request struct {
-	fn func() int
-	c  chan int
-}
-
-func requester(work chan Request) {
-	c := make(chan int)
-	for {
-		time.Sleep(time.Duration(rand.Int63n(nWorker * 2e9)))
-		work <- Request{op, c}
-		<-c
-	}
-}
-
-type Worker struct {
-	i        int
-	requests chan Request
-	pending  int
-}
-
-func (w *Worker) work(done chan *Worker) {
-	for {
-		req := <-w.requests
-		req.c <- req.fn()
-		done <- w
-	}
-}
-
-type Pool []*Worker
-
-func (p Pool) Len() int { return len(p) }
-
-func (p Pool) Less(i, j int) bool {
-	return p[i].pending < p[j].pending
-}
-
-func (p *Pool) Swap(i, j int) {
-	a := *p
-	a[i], a[j] = a[j], a[i]
-	a[i].i = i
-	a[j].i = j
-}
-
-func (p *Pool) Push(x interface{}) {
-	a := *p
-	n := len(a)
-	a = a[0 : n+1]
-	w := x.(*Worker)
-	a[n] = w
-	w.i = n
-	*p = a
-}
-
-func (p *Pool) Pop() interface{} {
-	a := *p
-	*p = a[0 : len(a)-1]
-	w := a[len(a)-1]
-	w.i = -1 // for safety
-	return w
-}
-
-type Balancer struct {
-	pool Pool
-	done chan *Worker
-	i    int
-}
-
-func NewBalancer() *Balancer {
-	done := make(chan *Worker, nWorker)
-	b := &Balancer{make(Pool, 0, nWorker), done, 0}
-	for i := 0; i < nWorker; i++ {
-		w := &Worker{requests: make(chan Request, nRequester)}
-		heap.Push(&b.pool, w)
-		go w.work(b.done)
-	}
-	return b
-}
-
-func (b *Balancer) balance(work chan Request) {
-	for {
-		select {
-		case req := <-work:
-			b.dispatch(req)
-		case w := <-b.done:
-			b.completed(w)
-		}
-		b.print()
-	}
-}
-
-func (b *Balancer) print() {
-	sum := 0
-	sumsq := 0
-	for _, w := range b.pool {
-		fmt.Printf("%d ", w.pending)
-		sum += w.pending
-		sumsq += w.pending * w.pending
-	}
-	avg := float64(sum) / float64(len(b.pool))
-	variance := float64(sumsq)/float64(len(b.pool)) - avg*avg
-	fmt.Printf(" %.2f %.2f\n", avg, variance)
-}
-
-func (b *Balancer) dispatch(req Request) {
-	if *roundRobin {
-		w := b.pool[b.i]
-		w.requests <- req
-		w.pending++
-		b.i++
-		if b.i >= len(b.pool) {
-			b.i = 0
-		}
-		return
-	}
-
-	w := heap.Pop(&b.pool).(*Worker)
-	w.requests <- req
-	w.pending++
-	//	fmt.Printf("started %p; now %d\n", w, w.pending)
-	heap.Push(&b.pool, w)
-}
-
-func (b *Balancer) completed(w *Worker) {
-	if *roundRobin {
-		w.pending--
-		return
-	}
-
-	w.pending--
-	//	fmt.Printf("finished %p; now %d\n", w, w.pending)
-	heap.Remove(&b.pool, w.i)
-	heap.Push(&b.pool, w)
-}
-
-func main() {
-	flag.Parse()
-	work := make(chan Request)
-	for i := 0; i < nRequester; i++ {
-		go requester(work)
-	}
-	NewBalancer().balance(work)
-}
diff --git a/content/2010/io/decrypt.go b/content/2010/io/decrypt.go
deleted file mode 100644
index 5c30fe2..0000000
--- a/content/2010/io/decrypt.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-// This code differs from the slides in that it handles errors.
-
-package main
-
-import (
-	"compress/gzip"
-	"crypto/aes"
-	"crypto/cipher"
-	"io"
-	"log"
-	"os"
-)
-
-func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) error {
-	r, err := os.Open(srcfile)
-	if err != nil {
-		return err
-	}
-	var w io.Writer
-	w, err = os.Create(dstfile)
-	if err != nil {
-		return err
-	}
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return err
-	}
-	w = cipher.StreamWriter{S: cipher.NewOFB(c, iv), W: w}
-	w2, err := gzip.NewWriter(w)
-	if err != nil {
-		return err
-	}
-	defer w2.Close()
-	_, err = io.Copy(w2, r)
-	return err
-}
-
-func DecryptAndGunzip(dstfile, srcfile string, key, iv []byte) error {
-	f, err := os.Open(srcfile)
-	if err != nil {
-		return err
-	}
-	defer f.Close()
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return err
-	}
-	r := cipher.StreamReader{S: cipher.NewOFB(c, iv), R: f}
-	r2, err := gzip.NewReader(r)
-	if err != nil {
-		return err
-	}
-	w, err := os.Create(dstfile)
-	if err != nil {
-		return err
-	}
-	defer w.Close()
-	_, err = io.Copy(w, r2)
-	return err
-}
-
-func main() {
-	err := EncryptAndGzip(
-		"/tmp/passwd.gz",
-		"/etc/passwd",
-		make([]byte, 16),
-		make([]byte, 16),
-	)
-	if err != nil {
-		log.Fatal(err)
-	}
-	err = DecryptAndGunzip(
-		"/dev/stdout",
-		"/tmp/passwd.gz",
-		make([]byte, 16),
-		make([]byte, 16),
-	)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2010/io/encrypt.go b/content/2010/io/encrypt.go
deleted file mode 100644
index c942fe5..0000000
--- a/content/2010/io/encrypt.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-// This code differs from the slides in that it handles errors.
-
-package main
-
-import (
-	"compress/gzip"
-	"crypto/aes"
-	"crypto/cipher"
-	"io"
-	"log"
-	"os"
-)
-
-func EncryptAndGzip(dstfile, srcfile string, key, iv []byte) error {
-	r, err := os.Open(srcfile)
-	if err != nil {
-		return err
-	}
-	var w io.WriteCloser
-	w, err = os.Create(dstfile)
-	if err != nil {
-		return err
-	}
-	defer w.Close()
-	w, err = gzip.NewWriter(w)
-	if err != nil {
-		return err
-	}
-	defer w.Close()
-	c, err := aes.NewCipher(key)
-	if err != nil {
-		return err
-	}
-	_, err = io.Copy(cipher.StreamWriter{S: cipher.NewOFB(c, iv), W: w}, r)
-	return err
-}
-
-func main() {
-	err := EncryptAndGzip(
-		"/tmp/passwd.gz",
-		"/etc/passwd",
-		make([]byte, 16),
-		make([]byte, 16),
-	)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2010/io/eval1.go b/content/2010/io/eval1.go
deleted file mode 100644
index eef7741..0000000
--- a/content/2010/io/eval1.go
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bufio"
-	"fmt"
-	"os"
-	"strconv"
-	"strings"
-)
-
-// Generic expression parser/evaluator
-
-type Value interface {
-	String() string
-	BinaryOp(op string, y Value) Value
-}
-
-type Parser struct {
-	precTab map[string]int
-	newVal  func(string) Value
-	src     string
-	pos     int
-	tok     string
-}
-
-const alphanum = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
-
-func (p *Parser) stop(c uint8) bool {
-	switch {
-	case p.pos >= len(p.src):
-		return true
-	case c == '"':
-		if p.src[p.pos] == '"' {
-			p.pos++
-			return true
-		}
-		return false
-	case strings.IndexRune(alphanum, int(c)) >= 0:
-		return strings.IndexRune(alphanum, int(p.src[p.pos])) < 0
-	}
-	return true
-}
-
-func (p *Parser) next() {
-	// skip blanks
-	for ; p.pos < len(p.src) && p.src[p.pos] <= ' '; p.pos++ {
-	}
-	if p.pos >= len(p.src) {
-		p.tok = ""
-		return
-	}
-	start := p.pos
-	c := p.src[p.pos]
-	for p.pos < len(p.src) {
-		p.pos++
-		if p.stop(c) {
-			break
-		}
-	}
-	p.tok = p.src[start:p.pos]
-}
-
-func (p *Parser) binaryExpr(prec1 int) Value {
-	x := p.newVal(p.tok)
-	p.next()
-	for prec := p.precTab[p.tok]; prec >= prec1; prec-- {
-		for p.precTab[p.tok] == prec {
-			op := p.tok
-			p.next()
-			y := p.binaryExpr(prec + 1)
-			x = x.BinaryOp(op, y)
-		}
-	}
-	return x
-}
-
-func Eval(precTab map[string]int, newVal func(string) Value, src string) Value {
-	var p Parser
-	p.precTab = precTab
-	p.newVal = newVal
-	p.src = src
-	p.next()
-	return p.binaryExpr(1)
-}
-
-// Command-line expression evaluator
-
-func main() {
-	r := bufio.NewReader(os.Stdin)
-	for {
-		fmt.Printf("> ")
-		line, err := r.ReadString('\n')
-		if err != nil {
-			break
-		}
-		fmt.Printf("%s\n", Eval(precTab, trace(newVal), line))
-	}
-}
-
-// Custom grammar and values
-
-var precTab = map[string]int{
-	"&&": 1,
-	"||": 2,
-	"==": 3,
-	"!=": 3,
-	"<":  3,
-	"<=": 3,
-	">":  3,
-	">=": 3,
-	"+":  4,
-	"-":  4,
-	"*":  5,
-	"/":  5,
-	"%":  5,
-}
-
-func newVal(lit string) Value {
-	x, err := strconv.Atoi(lit)
-	if err == nil {
-		return Int(x)
-	}
-	b, err := strconv.ParseBool(lit)
-	if err == nil {
-		return Bool(b)
-	}
-	return Error(fmt.Sprintf("illegal literal '%s'", lit))
-}
-
-type Error string
-
-func (e Error) String() string                    { return string(e) }
-func (e Error) BinaryOp(op string, y Value) Value { return e }
-
-type Int int
-
-func (x Int) String() string { return strconv.Itoa(int(x)) }
-func (x Int) BinaryOp(op string, y Value) Value {
-	switch y := y.(type) {
-	case Error:
-		return y
-	case Int:
-		switch op {
-		case "+":
-			return x + y
-		case "-":
-			return x - y
-		case "*":
-			return x * y
-		case "/":
-			return x / y
-		case "%":
-			return x % y
-		case "==":
-			return Bool(x == y)
-		case "!=":
-			return Bool(x != y)
-		case "<":
-			return Bool(x < y)
-		case "<=":
-			return Bool(x <= y)
-		case ">":
-			return Bool(x > y)
-		case ">=":
-			return Bool(x >= y)
-		}
-	}
-	return Error(fmt.Sprintf("illegal operation: '%v %s %v'", x, op, y))
-}
-
-type Bool bool
-
-func (x Bool) String() string { return strconv.FormatBool(bool(x)) }
-func (x Bool) BinaryOp(op string, y Value) Value {
-	switch y := y.(type) {
-	case Error:
-		return y
-	case Bool:
-		switch op {
-		case "&&":
-			return Bool(x && y)
-		case "||":
-			return Bool(x || y)
-		case "==":
-			return Bool(x == y)
-		case "!=":
-			return Bool(x != y)
-		}
-	}
-	return Error(fmt.Sprintf("illegal operation: '%v %s %v'", x, op, y))
-}
-
-func trace(newVal func(string) Value) func(string) Value {
-	return func(s string) Value {
-		v := newVal(s)
-		fmt.Printf("\tnewVal(%q) = %s\n", s, fmtv(v))
-		return &traceValue{v}
-	}
-}
-
-type traceValue struct {
-	Value
-}
-
-func (x *traceValue) BinaryOp(op string, y Value) Value {
-	z := x.Value.BinaryOp(op, y.(*traceValue).Value)
-	fmt.Printf("\t%s.BinaryOp(%q, %s) = %s\n", fmtv(x.Value), op, fmtv(y.(*traceValue).Value), fmtv(z))
-	return &traceValue{z}
-}
-
-func (x *traceValue) String() string {
-	s := x.Value.String()
-	fmt.Printf("\t%s.String() = %#v\n", fmtv(x.Value), s)
-	return s
-}
-
-func fmtv(v Value) string {
-	t := fmt.Sprintf("%T", v)
-	if i := strings.LastIndex(t, "."); i >= 0 { // strip package
-		t = t[i+1:]
-	}
-	return fmt.Sprintf("%s(%#v)", t, v)
-}
diff --git a/content/2010/io/eval2.go b/content/2010/io/eval2.go
deleted file mode 100644
index d138a51..0000000
--- a/content/2010/io/eval2.go
+++ /dev/null
@@ -1,261 +0,0 @@
-// Copyright 2010 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bufio"
-	"fmt"
-	"os"
-	"strconv"
-	"strings"
-)
-
-// Generic expression parser/evaluator
-
-type Value interface {
-	String() string
-	BinaryOp(op string, y Value) Value
-}
-
-type Parser struct {
-	precTab map[string]int
-	newVal  func(string) Value
-	src     string
-	pos     int
-	tok     string
-}
-
-const alphanum = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
-
-func (p *Parser) stop(c uint8) bool {
-	switch {
-	case p.pos >= len(p.src):
-		return true
-	case c == '"':
-		if p.src[p.pos] == '"' {
-			p.pos++
-			return true
-		}
-		return false
-	case strings.IndexRune(alphanum, int(c)) >= 0:
-		return strings.IndexRune(alphanum, int(p.src[p.pos])) < 0
-	}
-	return true
-}
-
-func (p *Parser) next() {
-	// skip blanks
-	for ; p.pos < len(p.src) && p.src[p.pos] <= ' '; p.pos++ {
-	}
-	if p.pos >= len(p.src) {
-		p.tok = ""
-		return
-	}
-	start := p.pos
-	c := p.src[p.pos]
-	for p.pos < len(p.src) {
-		p.pos++
-		if p.stop(c) {
-			break
-		}
-	}
-	p.tok = p.src[start:p.pos]
-}
-
-func (p *Parser) binaryExpr(prec1 int) Value {
-	x := p.newVal(p.tok)
-	p.next()
-	for prec := p.precTab[p.tok]; prec >= prec1; prec-- {
-		for p.precTab[p.tok] == prec {
-			op := p.tok
-			p.next()
-			y := p.binaryExpr(prec + 1)
-			x = x.BinaryOp(op, y)
-		}
-	}
-	return x
-}
-
-func Eval(precTab map[string]int, newVal func(string) Value, src string) Value {
-	var p Parser
-	p.precTab = precTab
-	p.newVal = newVal
-	p.src = src
-	p.next()
-	return p.binaryExpr(1)
-}
-
-// Command-line expression evaluator
-
-func main() {
-	r := bufio.NewReader(os.Stdin)
-	for {
-		fmt.Printf("> ")
-		line, err := r.ReadString('\n')
-		if err != nil {
-			break
-		}
-		fmt.Printf("%s\n", Eval(precTab, trace(newVal), line))
-	}
-}
-
-// Custom grammar and values
-
-var precTab = map[string]int{
-	"&&": 1,
-	"||": 2,
-	"==": 3,
-	"!=": 3,
-	"<":  3,
-	"<=": 3,
-	">":  3,
-	">=": 3,
-	"+":  4,
-	"-":  4,
-	"*":  5,
-	"/":  5,
-	"%":  5,
-}
-
-func newVal(lit string) Value {
-	x, err := strconv.Atoi(lit)
-	if err == nil {
-		return Int(x)
-	}
-	b, err := strconv.ParseBool(lit)
-	if err == nil {
-		return Bool(b)
-	}
-	s, err := strconv.Unquote(lit)
-	if err == nil {
-		return String(s)
-	}
-	return Error(fmt.Sprintf("illegal literal '%s'", lit))
-}
-
-type Error string
-
-func (e Error) String() string                    { return string(e) }
-func (e Error) BinaryOp(op string, y Value) Value { return e }
-
-type Int int
-
-func (x Int) String() string { return strconv.Itoa(int(x)) }
-func (x Int) BinaryOp(op string, y Value) Value {
-	switch y := y.(type) {
-	case Error:
-		return y
-	case String:
-		switch op {
-		case "*":
-			return String(strings.Repeat(string(y), int(x)))
-		}
-	case Int:
-		switch op {
-		case "+":
-			return x + y
-		case "-":
-			return x - y
-		case "*":
-			return x * y
-		case "/":
-			return x / y
-		case "%":
-			return x % y
-		case "==":
-			return Bool(x == y)
-		case "!=":
-			return Bool(x != y)
-		case "<":
-			return Bool(x < y)
-		case "<=":
-			return Bool(x <= y)
-		case ">":
-			return Bool(x > y)
-		case ">=":
-			return Bool(x >= y)
-		}
-	}
-	return Error(fmt.Sprintf("illegal operation: '%v %s %v'", x, op, y))
-}
-
-type Bool bool
-
-func (x Bool) String() string { return strconv.FormatBool(bool(x)) }
-func (x Bool) BinaryOp(op string, y Value) Value {
-	switch y := y.(type) {
-	case Error:
-		return y
-	case Bool:
-		switch op {
-		case "&&":
-			return Bool(x && y)
-		case "||":
-			return Bool(x || y)
-		case "==":
-			return Bool(x == y)
-		case "!=":
-			return Bool(x != y)
-		}
-	}
-	return Error(fmt.Sprintf("illegal operation: '%v %s %v'", x, op, y))
-}
-
-type String string
-
-func (x String) String() string { return strconv.Quote(string(x)) }
-func (x String) BinaryOp(op string, y Value) Value {
-	switch y := y.(type) {
-	case Error:
-		return y
-	case Int:
-		switch op {
-		case "*":
-			return String(strings.Repeat(string(x), int(y)))
-		}
-	case String:
-		switch op {
-		case "+":
-			return x + y
-		case "<":
-			return Bool(x < y)
-		}
-	}
-	return Error(fmt.Sprintf("illegal operation: '%v %s %v'", x, op, y))
-}
-
-func trace(newVal func(string) Value) func(string) Value {
-	return func(s string) Value {
-		v := newVal(s)
-		fmt.Printf("\tnewVal(%q) = %s\n", s, fmtv(v))
-		return &traceValue{v}
-	}
-}
-
-type traceValue struct {
-	Value
-}
-
-func (x *traceValue) BinaryOp(op string, y Value) Value {
-	z := x.Value.BinaryOp(op, y.(*traceValue).Value)
-	fmt.Printf("\t%s.BinaryOp(%q, %s) = %s\n", fmtv(x.Value), op, fmtv(y.(*traceValue).Value), fmtv(z))
-	return &traceValue{z}
-}
-
-func (x *traceValue) String() string {
-	s := x.Value.String()
-	fmt.Printf("\t%s.String() = %#v\n", fmtv(x.Value), s)
-	return s
-}
-
-func fmtv(v Value) string {
-	t := fmt.Sprintf("%T", v)
-	if i := strings.LastIndex(t, "."); i >= 0 { // strip package
-		t = t[i+1:]
-	}
-	return fmt.Sprintf("%s(%#v)", t, v)
-}
diff --git a/content/2010/io/talk.pdf b/content/2010/io/talk.pdf
deleted file mode 100644
index aff42c2..0000000
--- a/content/2010/io/talk.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2010/support/bumper480x270.png b/content/2010/support/bumper480x270.png
deleted file mode 100644
index cf18715..0000000
--- a/content/2010/support/bumper480x270.png
+++ /dev/null
Binary files differ
diff --git a/content/2010/support/bumper640x360.png b/content/2010/support/bumper640x360.png
deleted file mode 100644
index a5073e0..0000000
--- a/content/2010/support/bumper640x360.png
+++ /dev/null
Binary files differ
diff --git a/content/2010/support/go-logo-white.png b/content/2010/support/go-logo-white.png
deleted file mode 100644
index fa29169..0000000
--- a/content/2010/support/go-logo-white.png
+++ /dev/null
Binary files differ
diff --git a/content/2010/support/java-typing.png b/content/2010/support/java-typing.png
deleted file mode 100644
index 54abf01..0000000
--- a/content/2010/support/java-typing.png
+++ /dev/null
Binary files differ
diff --git a/content/2010/support/slidy.css b/content/2010/support/slidy.css
deleted file mode 100644
index e9ff532..0000000
--- a/content/2010/support/slidy.css
+++ /dev/null
@@ -1,277 +0,0 @@
-/* http://www.w3.org/Talks/Tools/Slidy/slidy.css
-
-   Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
-   W3C liability, trademark, document use and software licensing
-   rules apply, see:
-
-   http://www.w3.org/Consortium/Legal/copyright-documents
-   http://www.w3.org/Consortium/Legal/copyright-software
-*/
-body
-{
-  margin: 0 0 0 0;
-  padding: 0 0 0 0;
-  width: 100%;
-  height: 100%;
-  color: black;
-  background-color: white;
-  font-family: "Lucida Sans", "Lucida Grande", Lucida, sans-serif;
-  font-size: 14pt;
-}
-
-.hidden { display: none; visibility: hidden }
-
-div.toolbar {
-  position: fixed; z-index: 200;
-  top: auto; bottom: 0; left: 0; right: 0;
-  height: 1.2em; text-align: right;
-  padding-left: 1em;
-  padding-right: 1em; 
-  font-size: 60%;
-  color: red; background: rgb(240,240,240);
-}
-
-div.background {
-  display: none;
-}
-
-div.handout {
-  margin-left: 20px;
-  margin-right: 20px;
-}
-
-div.slide.titlepage {
-  color: white;
-  background: black;
-  text-align: center;
-}
-
-div.slide {
-  z-index: 20;
-  margin: 0 0 0 0;
-  padding-top: 0;
-  padding-bottom: 0;
-  padding-left: 20px;
-  padding-right: 20px;
-  border-width: 0;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  line-height: 120%;
-  background-color: transparent;
-}
-
-/* this rule is hidden from IE 6 and below which don't support + selector */
-div.slide + div[class].slide { page-break-before: always;}
-
-div.slide h1 {
-  padding-left: 20px;
-  padding-right: 20px;
-  padding-top: 10px;
-  padding-bottom: 10px;
-  margin-top: 0;
-  margin-left: 0;
-  margin-right: 0;
-  margin-bottom: 0.5em;
-  border-bottom: 4px solid #36c;
-  display: block; 
-  font-size: 160%;
-  line-height: 1.2em;
-}
-
-div.slide h2 {
-  font-size:120%;
-  line-height: 1.2em;
-}
-
-div.toc {
-  position: absolute;
-  top: auto;
-  bottom: 4em;
-  left: 4em;
-  right: auto;
-  width: 60%;
-  max-width: 30em;
-  height: 30em;
-  border: solid thin black;
-  padding: 1em;
-  background: rgb(240,240,240);
-  color: black;
-  z-index: 300;
-  overflow: auto;
-  display: block;
-  visibility: visible;
-}
-
-div.toc-heading {
-  width: 100%;
-  border-bottom: solid 1px rgb(180,180,180);
-  margin-bottom: 1em;
-  text-align: center;
-}
-
-pre {
- font-size: 120%;
- font-weight: bold;
- line-height: 140%;
- padding-top: 0.2em;
- padding-bottom: 0.2em;
- padding-left: 1em;
- padding-right: 1em;
-/*
- border-style: solid;
- border-left-width: 1em;
- border-top-width: thin;
- border-right-width: thin;
- border-bottom-width: thin;
- border-color: #95ABD0;
-*/
- color: #0F398D;
- background-color: #fff8f8;
-}
-
-@media print {
-  div.slide {
-     display: block;
-     visibility: visible;
-     position: relative;
-     border-top-style: solid;
-     border-top-width: thin;
-     border-top-color: black;
-  }
-  div.slide pre { font-size: 60%; padding-left: 0.5em; }
-  div.handout { display: block; visibility: visible; }
-}
-
-blockquote { font-style: italic }
-
-img { background-color: transparent }
-
-p.copyright { font-size: smaller }
-
-.center { text-align: center }
-.footnote { font-size: smaller; margin-left: 2em; }
-
-a img { border-width: 0; border-style: none }
-
-a:visited { color: navy }
-a:link { color: navy }
-a:hover { color: red; text-decoration: underline }
-a:active { color: red; text-decoration: underline }
-
-a {text-decoration: none}
-.navbar a:link {color: white}
-.navbar a:visited {color: yellow}
-.navbar a:active {color: red}
-.navbar a:hover {color: red}
-
-ul { list-style-type: square; }
-ul ul { list-style-type: disc; }
-ul ul ul { list-style-type: circle; }
-ul ul ul ul { list-style-type: disc; }
-li { margin-left: 2em; margin-top: 0.5em; }
-li li { font-size: 85%; font-style: italic }
-li li li { font-size: 85%; font-style: normal }
-
-div dt
-{
-  margin-left: 0;
-  margin-top: 1em;
-  margin-bottom: 0.5em;
-  font-weight: bold;
-}
-div dd
-{
-  margin-left: 2em;
-  margin-bottom: 0.5em;
-}
-
-
-p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
-  margin-left: 1em;
-  margin-right: 1em;
-}
-
-p.subhead { font-weight: bold; margin-top: 2em; }
-
-p.smaller { font-size: smaller }
-
-td,th { padding: 0.2em }
-
-ul {
-  margin: 0.5em 1.5em 0.5em 1.5em;
-  padding: 0;
-}
-
-ol {
-  margin: 0.5em 1.5em 0.5em 1.5em;
-  padding: 0;
-}
-
-ul { list-style-type: square; }
-ul ul { list-style-type: disc; }
-ul ul ul { list-style-type: circle; }
-ul ul ul ul { list-style-type: disc; }
-
-ul li { 
-  list-style: square;
-  //margin: 0.1em 0em 0.6em 0;
-  padding: 0 0 0 0;
-  line-height: 140%;
-}
-
-ol li { 
-  margin: 0.1em 0em 0.6em 1.5em;
-  padding: 0 0 0 0px;
-  line-height: 140%;
-  list-style-type: decimal;
-}
-
-li ul li { 
-  font-size: 85%; 
-  font-style: italic;
-  list-style-type: disc;
-  background: transparent;
-  padding: 0 0 0 0;
-}
-li li ul li { 
-  font-size: 85%; 
-  font-style: normal;
-  list-style-type: circle;
-  background: transparent;
-  padding: 0 0 0 0;
-}
-li li li ul li {
-  list-style-type: disc;
-  background: transparent;
-  padding: 0 0 0 0;
-}
-
-li ol li {
-  list-style-type: decimal;
-}
-
-
-li li ol li {
-  list-style-type: decimal;
-}
-
-/*
- setting class="outline on ol or ul makes it behave as an
- ouline list where blocklevel content in li elements is
- hidden by default and can be expanded or collapsed with
- mouse click. Set class="expand" on li to override default
-*/
-
-ol.outline li:hover { cursor: pointer }
-ol.outline li.nofold:hover { cursor: default }
-
-ul.outline li:hover { cursor: pointer }
-ul.outline li.nofold:hover { cursor: default }
-
-ol.outline { list-style:decimal; }
-ol.outline ol { list-style-type:lower-alpha }
-
-/* for slides with class "title" in table of contents */
-a.titleslide { font-weight: bold; font-style: italic }
diff --git a/content/2010/support/slidy.js b/content/2010/support/slidy.js
deleted file mode 100644
index 6a5561a..0000000
--- a/content/2010/support/slidy.js
+++ /dev/null
@@ -1,2772 +0,0 @@
-/* http://www.w3.org/Talks/Tools/Slidy/slidy.js
-
-   Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
-   W3C liability, trademark, document use and software licensing
-   rules apply, see:
-
-   http://www.w3.org/Consortium/Legal/copyright-documents
-   http://www.w3.org/Consortium/Legal/copyright-software
-*/
-
-var ns_pos = (typeof window.pageYOffset!='undefined');
-var khtml = ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false);
-var opera = ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false);
-var ie7 = (!ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1);
-
-window.onload = startup; // equivalent to onload on body element
-
-// IE only event handlers to ensure all slides are printed
-// I don't yet know how to emulate these for other browsers
-window.onbeforeprint = beforePrint;
-window.onafterprint = afterPrint;
-
-// hack to hide slides while loading
-setTimeout(hideAll, 50);
-
-function hideAll()
-{
-  if (document.body)
-    document.body.style.visibility = "hidden";
-  else
-    setTimeout(hideAll, 50);
-}
-
-var slidenum = 0;     // integer slide count: 0, 1, 2, ...
-var slides;           // set to array of slide div's
-var slideNumElement;  // element containing slide number
-var notes;            // set to array of handout div's
-var backgrounds;      // set to array of background div's
-var toolbar;          // element containing toolbar
-var title;            // document title
-var lastShown = null; // last incrementally shown item
-var eos = null;       // span element for end of slide indicator
-var toc = null;       // table of contents
-var outline = null;   // outline element with the focus
-var selectedTextLen;  // length of drag selection on document
-
-var viewAll = 0;      // 1 to view all slides + handouts
-var wantToolbar = 1;   // 0 if toolbar isn't wanted
-var mouseClickEnabled = true;  // enables left click for next slide
-var scrollhack = 0;   // IE work around for position: fixed
-
-var helpAnchor;  // used for keyboard focus hack in showToolbar()
-var helpPage = "http://www.w3.org/Talks/Tools/Slidy/help.html";
-var helpText = "Navigate with mouse click, space bar, Cursor Left/Right, " +
-               "or Pg Up and Pg Dn. Use S and B to change font size.";
-
-var sizeIndex = 0;
-var sizeAdjustment = 0;
-var sizes = new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",
-                      "22pt", "24pt", "26pt", "28pt", "30pt", "32pt");
-
-var okayForIncremental = incrementalElementList();
-
-// needed for efficient resizing
-var lastWidth = 0;
-var lastHeight = 0;
-
-// Needed for cross browser support for relative width/height on
-// object elements. The work around is to save width/height attributes
-// and then to recompute absolute width/height dimensions on resizing
-var objects;
-
-// updated to language specified by html file
-var lang = "en";
-
-//var localize = {};
-
-// for each language there is an associative array
-var strings_es = {
-  "slide":"pág.",
-  "help?":"Ayuda",
-  "contents?":"Índice",
-  "table of contents":"tabla de contenidos",
-  "Table of Contents":"Tabla de Contenidos",
-  "restart presentation":"Reiniciar presentación",
-  "restart?":"Inicio"
-   };
-
-strings_es[helpText] =
-    "Utilice el ratón, barra espaciadora, teclas Izda/Dhca, " +
-    "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.";
-
-var strings_nl = {
-  "slide":"pagina",
-  "help?":"Help?",
-  "contents?":"Inhoud?",
-  "table of contents":"inhoudsopgave",
-  "Table of Contents":"Inhoudsopgave",
-  "restart presentation":"herstart presentatie",
-  "restart?":"Herstart?"
-   };
-
-strings_nl[helpText] =
-    "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " +
-    "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.";
-
-var strings_de = {
-  "slide":"Seite",
-  "help?":"Hilfe",
-  "contents?":"Übersicht",
-  "table of contents":"Inhaltsverzeichnis",
-  "Table of Contents":"Inhaltsverzeichnis",
-  "restart presentation":"Präsentation neu starten",
-  "restart?":"Neustart"
-   };
-
-strings_de[helpText] =
-    "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts" +
-    "oder Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.";
-
-var strings_pl = {
-  "slide":"slajd",
-  "help?":"pomoc?",
-  "contents?":"spis treści?",
-  "table of contents":"spis treści",
-  "Table of Contents":"Spis Treści",
-  "restart presentation":"Restartuj prezentację",
-  "restart?":"restart?"
-   };
-
-strings_pl[helpText] =
-    "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" +
-    "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.";
-
-var strings_fr = {
-  "slide":"page",
-  "help?":"Aide",
-  "contents?":"Index",
-  "table of contents":"table des matières",
-  "Table of Contents":"Table des matières",
-  "restart presentation":"Recommencer l'exposé",
-  "restart?":"Début"
-  };
-
-strings_fr[helpText] =
-    "Naviguez avec la souris, la barre d'espace, les flèches" +
-    "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " +
-    "les touches S et B pour modifier la taille de la police.";
-
-var strings_hu = {
-  "slide":"oldal",
-  "help?":"segítség",
-  "contents?":"tartalom",
-  "table of contents":"tartalomjegyzék",
-  "Table of Contents":"Tartalomjegyzék",
-  "restart presentation":"bemutató újraindítása",
-  "restart?":"újraindítás"
-   };
-
-strings_hu[helpText] =
-    "Az oldalak közti lépkedéshez kattintson az egérrel, vagy használja a szóköz, a bal, vagy a jobb nyíl, " +
-    "illetve a Page Down, Page Up billentyűket. Az S és a B billentyűkkel változtathatja a szöveg méretét.";
-
-var strings_it = {
-  "slide":"pag.",
-  "help?":"Aiuto",
-  "contents?":"Indice",
-  "table of contents":"indice",
-  "Table of Contents":"Indice",
-  "restart presentation":"Ricominciare la presentazione",
-  "restart?":"Inizio"
-   };
-
-strings_it[helpText] =
-    "Navigare con mouse, barra spazio, frecce sinistra/destra o " +
-    "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.";
-
-var strings_el = {
-  "slide":"σελίδα",
-  "help?":"βοήθεια;",
-  "contents?":"περιεχόμενα;",
-  "table of contents":"πίνακας περιεχομένων",
-  "Table of Contents":"Πίνακας Περιεχομένων",
-  "restart presentation":"επανεκκίνηση παρουσίασης",
-  "restart?":"επανεκκίνηση;"
-   };
-
-strings_el[helpText] =
-  "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " +
-  "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " +
-  "το μέγεθος της γραμματοσειράς.";
-
-var strings_ja = {
-  "slide":"スライド",
-  "help?":"ヘルプ",
-  "contents?":"目次",
-  "table of contents":"目次を表示",
-  "Table of Contents":"目次",
-  "restart presentation":"最初から再生",
-  "restart?":"最初から"
-};
-
-strings_ja[helpText] =
-    "マウス左クリック ・ スペース ・ 左右キー " +
-    "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更";
-
-
-// each such language array is declared in the localize array
-// used indirectly as in help.innerHTML = "help".localize();
-var localize = {
-     "es":strings_es,
-     "nl":strings_nl,
-     "de":strings_de,
-     "pl":strings_pl,
-     "fr":strings_fr,
-     "hu":strings_hu,
-     "it":strings_it,
-     "el":strings_el,
-     "jp":strings_ja
-   };
-
-/* general initialization */
-function startup()
-{
-   // find human language from html element
-   // for use in localizing strings
-   lang = document.body.parentNode.getAttribute("lang");
-
-   if (!lang)
-     lang = document.body.parentNode.getAttribute("xml:lang");
-
-   if (!lang)
-     lang = "en";
-
-   document.body.style.visibility = "visible";
-   title = document.title;
-   toolbar = addToolbar();
-   wrapImplicitSlides();
-   slides = collectSlides();
-   notes = collectNotes();
-   objects = document.body.getElementsByTagName("object");
-   backgrounds = collectBackgrounds();
-   patchAnchors();
-
-   slidenum = findSlideNumber(location.href);
-   window.offscreenbuffering = true;
-   sizeAdjustment = findSizeAdjust();
-   hideImageToolbar();  // suppress IE image toolbar popup
-   initOutliner();  // activate fold/unfold support
-
-   if (slides.length > 0)
-   {
-      var slide = slides[slidenum];
-      slide.style.position = "absolute";
-   
-      if (slidenum > 0)
-      {
-         setVisibilityAllIncremental("visible");
-         lastShown = previousIncrementalItem(null);
-         setEosStatus(true);
-      }
-      else
-      {
-         lastShown = null;
-         setVisibilityAllIncremental("hidden");
-         setEosStatus(!nextIncrementalItem(lastShown));
-      }
-
-      setLocation();
-   }
-
-   toc = tableOfContents();
-   hideTableOfContents();
-
-   // bind event handlers
-   document.onclick = mouseButtonClick;
-   document.onmouseup = mouseButtonUp;
-   document.onkeydown = keyDown;
-   window.onresize  = resized;
-   window.onscroll = scrolled;
-   singleSlideView();
-
-   setLocation();
-   resized();
-
-   if (ie7)
-     setTimeout("ieHack()", 100);
-
-   showToolbar();
-}
-
-// add localize method to all strings for use
-// as in help.innerHTML = "help".localize();
-String.prototype.localize = function()
-{
-  if (this == "")
-    return this;
-
-  // try full language code, e.g. en-US
-  var s, lookup = localize[lang];
-
-  if (lookup)
-  {
-    s = lookup[this];
-
-    if (s)
-      return s;
-  }
-
-  // try en if undefined for en-US
-  var lg = lang.split("-");
-
-  if (lg.length > 1)
-  {
-    lookup = localize[lg[0]];
-
-    if (lookup)
-    {
-      s = lookup[this];
-
-      if (s)
-        return s;
-    }
-  }
-
-  // otherwise string as is
-  return this;
-}
-
-// suppress IE's image toolbar pop up
-function hideImageToolbar()
-{
-  if (!ns_pos)
-  {
-    var images = document.getElementsByTagName("IMG");
-
-    for (var i = 0; i < images.length; ++i)
-      images[i].setAttribute("galleryimg", "no");
-  }
-}
-
-// hack to persuade IE to compute correct document height
-// as needed for simulating fixed positioning of toolbar
-function ieHack()
-{
-   window.resizeBy(0,-1);
-   window.resizeBy(0, 1);
-}
-
-// Firefox reload SVG bug work around
-function reload(e)
-{
-   if (!e)
-      var e = window.event;
-
-   hideBackgrounds();
-   setTimeout("document.reload();", 100);
-
-   stopPropagation(e);
-   e.cancel = true;
-   e.returnValue = false;
-
-   return false;
-}
-
-// Safari and Konqueror don't yet support getComputedStyle()
-// and they always reload page when location.href is updated
-function isKHTML()
-{
-   var agent = navigator.userAgent;
-   return (agent.indexOf("KHTML") >= 0 ? true : false);
-}
-
-function resized()
-{
-   var width = 0;
-
-   if ( typeof( window.innerWidth ) == 'number' )
-      width = window.innerWidth;  // Non IE browser
-   else if (document.documentElement && document.documentElement.clientWidth)
-      width = document.documentElement.clientWidth;  // IE6
-   else if (document.body && document.body.clientWidth)
-      width = document.body.clientWidth; // IE4
-
-   var height = 0;
-
-   if ( typeof( window.innerHeight ) == 'number' )
-      height = window.innerHeight;  // Non IE browser
-   else if (document.documentElement && document.documentElement.clientHeight)
-      height = document.documentElement.clientHeight;  // IE6
-   else if (document.body && document.body.clientHeight)
-      height = document.body.clientHeight; // IE4
-
-   if (height && (width/height > 1.05*1024/768))
-   {
-     width = height * 1024.0/768;
-   }
-
-   // IE fires onresize even when only font size is changed!
-   // so we do a check to avoid blocking < and > actions
-   if (width != lastWidth || height != lastHeight)
-   {
-      if (width >= 1100)
-         sizeIndex = 5;    // 4
-      else if (width >= 1000)
-         sizeIndex = 4;    // 3
-      else if (width >= 800)
-         sizeIndex = 3;    // 2
-      else if (width >= 600)
-         sizeIndex = 2;    // 1
-      else if (width)
-         sizeIndex = 0;
-
-      // add in font size adjustment from meta element e.g.
-      // <meta name="font-size-adjustment" content="-2" />
-      // useful when slides have too much content ;-)
-
-      if (0 <= sizeIndex + sizeAdjustment &&
-             sizeIndex + sizeAdjustment < sizes.length)
-        sizeIndex = sizeIndex + sizeAdjustment;
-
-      // enables cross browser use of relative width/height
-      // on object elements for use with SVG and Flash media
-      adjustObjectDimensions(width, height);
-
-      document.body.style.fontSize = sizes[sizeIndex];
-
-      lastWidth = width;
-      lastHeight = height;
-
-      // force reflow to work around Mozilla bug
-      //if (ns_pos)
-      {
-         var slide = slides[slidenum];
-         hideSlide(slide);
-         showSlide(slide);
-      }
-
-      // force correct positioning of toolbar
-      refreshToolbar(200);
-   }
-}
-
-function scrolled()
-{
-   if (toolbar && !ns_pos && !ie7)
-   {
-      hackoffset = scrollXOffset();
-      // hide toolbar
-      toolbar.style.display = "none";
-
-      // make it reappear later
-      if (scrollhack == 0 && !viewAll)
-      {
-         setTimeout(showToolbar, 1000);
-         scrollhack = 1;
-      }
-   }
-}
-
-// used to ensure IE refreshes toolbar in correct position
-function refreshToolbar(interval)
-{
-   if (!ns_pos && !ie7)
-   {
-     hideToolbar();
-     setTimeout(showToolbar, interval);
-   }
-}
-
-// restores toolbar after short delay
-function showToolbar()
-{
-   if (wantToolbar)
-   {
-      if (!ns_pos)
-      {
-         // adjust position to allow for scrolling
-         var xoffset = scrollXOffset();
-         toolbar.style.left = xoffset;
-         toolbar.style.right = xoffset;
-
-         // determine vertical scroll offset
-         //var yoffset = scrollYOffset();
-
-         // bottom is doc height - window height - scroll offset
-         //var bottom = documentHeight() - lastHeight - yoffset
-
-         //if (yoffset > 0 || documentHeight() > lastHeight)
-         //   bottom += 16;  // allow for height of scrollbar
-
-         toolbar.style.bottom = 0; //bottom;
-      }
-
-      toolbar.style.display = "block";
-      toolbar.style.visibility = "visible";
-   }
-
-   scrollhack = 0;
-
-
-   // set the keyboard focus to the help link on the
-   // toolbar to ensure that document has the focus
-   // IE doesn't always work with window.focus()
-   // and this hack has benefit of Enter for help
-
-   try
-   {
-     if (!opera)
-       helpAnchor.focus();
-   }
-   catch (e)
-   {
-   }
-}
-
-function test()
-{
-   var s = "docH: " + documentHeight() +
-       " winH: " + lastHeight +
-       " yoffset: " + scrollYOffset() +
-       " toolbot: " + (documentHeight() - lastHeight - scrollYOffset());
-
-   //alert(s);
-
-   var slide = slides[slidenum];
-   // IE getAttribute requires "class" to be "className"
-   var name = ns_pos ? "class" : "className";
-   var style = (slide.currentStyle ? slide.currentStyle["backgroundColor"] :
-       document.defaultView.getComputedStyle(slide, '').getPropertyValue("background-color"));
-   alert("class='" + slide.getAttribute(name) + "' backgroundColor: " + style);
-}
-
-function hideToolbar()
-{
-   toolbar.style.display = "none";
-   toolbar.style.visibility = "hidden";
-   window.focus();
-}
-
-// invoked via F key
-function toggleToolbar()
-{
-   if (!viewAll)
-   {
-      if (toolbar.style.display == "none")
-      {
-         toolbar.style.display = "block";
-         toolbar.style.visibility = "visible";
-         wantToolbar = 1;
-      }
-      else
-      {
-         toolbar.style.display = "none";
-         toolbar.style.visibility = "hidden";
-         wantToolbar = 0;
-      }
-   }
-}
-
-function scrollXOffset()
-{
-   if (window.pageXOffset)
-      return self.pageXOffset;
-
-   if (document.documentElement && 
-             document.documentElement.scrollLeft)
-      return document.documentElement.scrollLeft;
-
-   if (document.body)
-      return document.body.scrollLeft;
-
-    return 0;
-}
-
-
-function scrollYOffset()
-{
-   if (window.pageYOffset)
-      return self.pageYOffset;
-
-   if (document.documentElement && 
-             document.documentElement.scrollTop)
-      return document.documentElement.scrollTop;
-
-   if (document.body)
-      return document.body.scrollTop;
-
-    return 0;
-}
-
-// looking for a way to determine height of slide content
-// the slide itself is set to the height of the window
-function optimizeFontSize()
-{
-   var slide = slides[slidenum];
-
-   //var dh = documentHeight(); //getDocHeight(document);
-   var dh = slide.scrollHeight;
-   var wh = getWindowHeight();
-   var u = 100 * dh / wh;
-
-   alert("window utilization = " + u + "% (doc "
-      + dh + " win " + wh + ")");
-}
-
-function getDocHeight(doc) // from document object
-{
-  if (!doc)
-    doc = document;
-
-  if (doc && doc.body && doc.body.offsetHeight)
-    return doc.body.offsetHeight;  // ns/gecko syntax
-
-  if (doc && doc.body && doc.body.scrollHeight)
-    return doc.body.scrollHeight;
-
-  alert("couldn't determine document height");
-}
-
-function getWindowHeight()
-{
-  if ( typeof( window.innerHeight ) == 'number' )
-    return window.innerHeight;  // Non IE browser
-
-  if (document.documentElement && document.documentElement.clientHeight)
-    return document.documentElement.clientHeight;  // IE6
-
-  if (document.body && document.body.clientHeight)
-    return document.body.clientHeight; // IE4
-}
-
-
-
-function documentHeight()
-{
-   var sh, oh;
-
-   sh = document.body.scrollHeight;
-   oh = document.body.offsetHeight;
-
-   if (sh && oh)
-   {
-      return (sh > oh ? sh : oh);
-   }
-
-   // no idea!
-   return 0;
-}
-
-function smaller()
-{
-   if (sizeIndex > 0)
-   {
-      --sizeIndex;
-   }
-
-   toolbar.style.display = "none";
-   document.body.style.fontSize = sizes[sizeIndex];
-   var slide = slides[slidenum];
-   hideSlide(slide);
-   showSlide(slide);
-   setTimeout(showToolbar, 300);
-}
-
-function bigger()
-{
-   if (sizeIndex < sizes.length - 1)
-   {
-      ++sizeIndex;
-   }
-
-   toolbar.style.display = "none";
-   document.body.style.fontSize = sizes[sizeIndex];
-   var slide = slides[slidenum];
-   hideSlide(slide);
-   showSlide(slide);
-   setTimeout(showToolbar, 300);
-}
-
-// enables cross browser use of relative width/height
-// on object elements for use with SVG and Flash media
-// with thanks to Ivan Herman for the suggestion
-function adjustObjectDimensions(width, height)
-{
-   for( var i = 0; i < objects.length; i++ )
-   {
-      var obj = objects[i];
-      var mimeType = obj.getAttribute("type");
-
-      if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")
-      {
-         if ( !obj.initialWidth ) 
-            obj.initialWidth = obj.getAttribute("width");
-
-         if ( !obj.initialHeight ) 
-            obj.initialHeight = obj.getAttribute("height");
-
-         if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )
-         {
-            var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));
-            var newW = width * (w/100.0);
-            obj.setAttribute("width",newW);
-         }
-
-         if ( obj.initialHeight && obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )
-         {
-            var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));
-            var newH = height * (h/100.0);
-            obj.setAttribute("height", newH);
-         }
-      }
-   }
-}
-
-function cancel(event)
-{
-  if (event)
-  {
-     event.cancel = true;
-     event.returnValue = false;
-
-    if (event.preventDefault)
-      event.preventDefault();
-  }
-
-  return false;
-}
-
-//  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
-function keyDown(event)
-{
-    var key;
-
-    if (!event)
-      var event = window.event;
-
-    // kludge around NS/IE differences 
-    if (window.event)
-       key = window.event.keyCode;
-    else if (event.which)
-       key = event.which;
-    else
-       return true; // Yikes! unknown browser
-
-    // ignore event if key value is zero
-    // as for alt on Opera and Konqueror
-    if (!key)
-       return true;
-
-    // check for concurrent control/command/alt key
-    // but are these only present on mouse events?
-
-    if (event.ctrlKey || event.altKey || event.metaKey)
-       return true;
-
-    // dismiss table of contents if visible
-    if (isShownToc() && key != 9 && key != 16 && key != 38 && key != 40)
-    {
-      hideTableOfContents();
-
-      if (key == 27 || key == 84 || key == 67)
-        return cancel(event);
-    }
-
-    if (key == 34) // Page Down
-    {
-       nextSlide(false);
-       return cancel(event);
-    }
-    else if (key == 33) // Page Up
-    {
-       previousSlide(false);
-       return cancel(event);
-    }
-    else if (key == 32) // space bar
-    {
-       nextSlide(true);
-       return cancel(event);
-    }
-    else if (key == 37 || key == 38) // Left arrow || Up arrow
-    {
-       previousSlide(!event.shiftKey);
-       return cancel(event);
-    }
-    else if (key == 36) // Home
-    {
-       firstSlide();
-       return cancel(event);
-    }
-    else if (key == 35) // End
-    {
-       lastSlide();
-       return cancel(event);
-    }
-    else if (key == 39 || key == 40) // Right arrow || Down arrow
-    {
-       nextSlide(!event.shiftKey);
-       return cancel(event);
-    }
-    else if (key == 13) // Enter
-    {
-       if (outline)
-       {
-          if (outline.visible)
-            fold(outline);
-          else
-            unfold(outline);
-          
-         return cancel(event);
-       }
-    }
-    else if (key == 188)  // < for smaller fonts
-    {
-       smaller();
-       return cancel(event);
-    }
-    else if (key == 190)  // > for larger fonts
-    {
-       bigger();
-       return cancel(event);
-    }
-    else if (key == 189 || key == 109)  // - for smaller fonts
-    {
-       smaller();
-       return cancel(event);
-    }
-    else if (key == 187 || key == 191 || key == 107)  // = +  for larger fonts
-    {
-       bigger();
-       return cancel(event);
-    }
-    else if (key == 83)  // S for smaller fonts
-    {
-       smaller();
-       return cancel(event);
-    }
-    else if (key == 66)  // B for larger fonts
-    {
-       bigger();
-       return cancel(event);
-    }
-    else if (key == 90)  // Z for last slide
-    {
-       lastSlide();
-       return cancel(event);
-    }
-    else if (key == 70)  // F for toggle toolbar
-    {
-       toggleToolbar();
-       return cancel(event);
-    }
-    else if (key == 65)  // A for toggle view single/all slides
-    {
-       toggleView();
-       return cancel(event);
-    }
-    else if (key == 75)  // toggle action of left click for next page
-    {
-       mouseClickEnabled = !mouseClickEnabled;
-       alert((mouseClickEnabled ? "enabled" : "disabled") +  " mouse click advance");
-       return cancel(event);
-    }
-    else if (key == 84 || key == 67)  // T or C for table of contents
-    {
-       if (toc)
-         showTableOfContents();
-
-       return cancel(event);
-    }
-    else if (key == 72) // H for help
-    {
-       window.location = helpPage;
-       return cancel(event);
-    }
-
-    //else if (key == 93) // Windows menu key
-      //alert("lastShown is " + lastShown);
-    //else alert("key code is "+ key);
-
-
-    return true;
-}
-
-// make note of length of selected text
-// as this evaluates to zero in click event
-function mouseButtonUp(e)
-{
-  selectedTextLen = getSelectedText().length;
-}
-
-// right mouse button click is reserved for context menus
-// it is more reliable to detect rightclick than leftclick
-function mouseButtonClick(e)
-{
-   var rightclick = false;
-   var leftclick = false;
-   var middleclick = false;
-   var target;
-
-   if (!e)
-      var e = window.event;
-
-   if (e.target)
-      target = e.target;
-   else if (e.srcElement)
-      target = e.srcElement;
-
-   // work around Safari bug
-   if (target.nodeType == 3)
-      target = target.parentNode;
-
-   if (e.which) // all browsers except IE
-   {
-      leftclick = (e.which == 1);
-      middleclick = (e.which == 2);
-      rightclick = (e.which == 3);
-   }
-   else if (e.button)
-   {
-      // Konqueror gives 1 for left, 4 for middle
-      // IE6 gives 0 for left and not 1 as I expected
-
-      if (e.button == 4)
-        middleclick = true;
-
-      // all browsers agree on 2 for right button
-      rightclick = (e.button == 2);
-   }
-   else leftclick = true;
-
-   // dismiss table of contents
-   hideTableOfContents();
-
-   if (selectedTextLen > 0)
-   {
-      stopPropagation(e);
-      e.cancel = true;
-      e.returnValue = false;
-      return false;
-   }
-
-   // check if target is something that probably want's clicks
-   // e.g. embed, object, input, textarea, select, option
-
-   if (mouseClickEnabled && leftclick &&
-        target.nodeName != "EMBED" &&
-        target.nodeName != "OBJECT" &&
-        target.nodeName != "INPUT" &&
-        target.nodeName != "TEXTAREA" &&
-        target.nodeName != "SELECT" &&
-        target.nodeName != "OPTION")
-   {
-      nextSlide(true);
-      stopPropagation(e);
-      e.cancel = true;
-      e.returnValue = false;
-   }
-}
-
-function previousSlide(incremental)
-{
-   if (!viewAll)
-   {
-      var slide;
-
-      if ((incremental || slidenum == 0) && lastShown != null)
-      {
-         lastShown = hidePreviousItem(lastShown);
-         setEosStatus(false);
-      }
-      else if (slidenum > 0)
-      {
-         slide = slides[slidenum];
-         hideSlide(slide);
-
-         slidenum = slidenum - 1;
-         slide = slides[slidenum];
-         setVisibilityAllIncremental("visible");
-         lastShown = previousIncrementalItem(null);
-         setEosStatus(true);
-         showSlide(slide);
-      }
-
-      setLocation();
-
-      if (!ns_pos)
-         refreshToolbar(200);
-   }
-}
-
-function nextSlide(incremental)
-{
-   if (!viewAll)
-   {
-      var slide, last = lastShown;
-
-      if (incremental || slidenum == slides.length - 1)
-         lastShown = revealNextItem(lastShown);
-
-      if ((!incremental || lastShown == null) && slidenum < slides.length - 1)
-      {
-         slide = slides[slidenum];
-         hideSlide(slide);
-
-         slidenum = slidenum + 1;
-         slide = slides[slidenum];
-         lastShown = null;
-         setVisibilityAllIncremental("hidden");
-         showSlide(slide);
-      }
-      else if (!lastShown)
-      {
-         if (last && incremental)
-           lastShown = last;
-      }
-
-      setLocation();
-
-      setEosStatus(!nextIncrementalItem(lastShown));
-
-      if (!ns_pos)
-         refreshToolbar(200);
-   }
-}
-
-// to first slide with nothing revealed
-// i.e. state at start of presentation
-function firstSlide()
-{
-   if (!viewAll)
-   {
-      var slide;
-
-      if (slidenum != 0)
-      {
-         slide = slides[slidenum];
-         hideSlide(slide);
-
-         slidenum = 0;
-         slide = slides[slidenum];
-         lastShown = null;
-         setVisibilityAllIncremental("hidden");
-         showSlide(slide);
-      }
-
-      setEosStatus(!nextIncrementalItem(lastShown));
-      setLocation();
-   }
-}
-
-
-// to last slide with everything revealed
-// i.e. state at end of presentation
-function lastSlide()
-{
-   if (!viewAll)
-   {
-      var slide;
-
-      lastShown = null; //revealNextItem(lastShown);
-
-      if (lastShown == null && slidenum < slides.length - 1)
-      {
-         slide = slides[slidenum];
-         hideSlide(slide);
-         slidenum = slides.length - 1;
-         slide = slides[slidenum];
-         setVisibilityAllIncremental("visible");
-         lastShown = previousIncrementalItem(null);
-
-         showSlide(slide);
-      }
-      else
-      {
-         setVisibilityAllIncremental("visible");
-         lastShown = previousIncrementalItem(null);
-      }
-
-      setEosStatus(true);
-      setLocation();
-   }
-}
-
-function setEosStatus(state)
-{
-   if (eos)
-      eos.style.color = (state ? "rgb(240,240,240)" : "red");
-}
-
-function showSlide(slide)
-{
-   syncBackground(slide);
-   window.scrollTo(0,0);
-   slide.style.visibility = "visible";
-   slide.style.display = "block";
-}
-
-function hideSlide(slide)
-{
-   slide.style.visibility = "hidden";
-   slide.style.display = "none";
-}
-
-function beforePrint()
-{
-   showAllSlides();
-   hideToolbar();
-}
-
-function afterPrint()
-{
-   if (!viewAll)
-   {
-      singleSlideView();
-      showToolbar();
-   }
-}
-
-function printSlides()
-{
-  beforePrint();
-  window.print();
-  afterPrint();
-}
-
-function toggleView()
-{
-   if (viewAll)
-   {
-      singleSlideView();
-      showToolbar();
-      viewAll = 0;
-   }
-   else
-   {
-      showAllSlides();
-      hideToolbar();
-      viewAll = 1;
-   }
-}
-
-// prepare for printing
-function showAllSlides()
-{
-   var slide;
-
-   for (var i = 0; i < slides.length; ++i)
-   {
-      slide = slides[i];
-
-      slide.style.position = "relative";
-      slide.style.borderTopStyle = "solid";
-      slide.style.borderTopWidth = "thin";
-      slide.style.borderTopColor = "black";
-
-      try {
-        if (i == 0)
-          slide.style.pageBreakBefore = "avoid";
-        else
-          slide.style.pageBreakBefore = "always";
-      }
-      catch (e)
-      {
-        //do nothing
-      }
-
-      setVisibilityAllIncremental("visible");
-      showSlide(slide);
-   }
-
-   var note;
-
-   for (var i = 0; i < notes.length; ++i)
-   {
-      showSlide(notes[i]);
-   }
-
-   // no easy way to render background under each slide
-   // without duplicating the background divs for each slide
-   // therefore hide backgrounds to avoid messing up slides
-   hideBackgrounds();
-}
-
-// restore after printing
-function singleSlideView()
-{
-   var slide;
-
-   for (var i = 0; i < slides.length; ++i)
-   {
-      slide = slides[i];
-
-      slide.style.position = "absolute";
-
-      if (i == slidenum)
-      {
-         slide.style.borderStyle = "none";
-         showSlide(slide);
-      }
-      else
-      {
-         slide.style.borderStyle = "none";
-         hideSlide(slide);
-      }
-   }
-
-   setVisibilityAllIncremental("visible");
-   lastShown = previousIncrementalItem(null);
-
-   var note;
-
-   for (var i = 0; i < notes.length; ++i)
-   {
-      hideSlide(notes[i]);
-   }
-}
-
-// the string str is a whitespace separated list of tokens
-// test if str contains a particular token, e.g. "slide"
-function hasToken(str, token)
-{
-   if (str)
-   {
-      // define pattern as regular expression
-      var pattern = /\w+/g;
-
-      // check for matches
-      // place result in array
-      var result = str.match(pattern);
-
-      // now check if desired token is present
-      for (var i = 0; i < result.length; i++)
-      {
-         if (result[i] == token)
-            return true;
-      }
-   }
-
-   return false;
-}
-
-function getClassList(element)
-{
-  if (typeof window.pageYOffset =='undefined')
-    return element.getAttribute("className");
-
-  return element.getAttribute("class");
-}
-
-function hasClass(element, name)
-{
-  var regexp = new RegExp("(^| )" + name + "\W*");
-
-  if (regexp.test(getClassList(element)))
-    return true;
-
-  return false;
-
-}
-
-function removeClass(element, name)
-{
-  // IE getAttribute requires "class" to be "className"
-  var clsname = ns_pos ? "class" : "className";
-  var clsval = element.getAttribute(clsname);
-
-  var regexp = new RegExp("(^| )" + name + "\W*");
-
-  if (clsval)
-  {
-    clsval = clsval.replace(regexp, "");
-    element.setAttribute(clsname, clsval);
-  }
-}
-
-function addClass(element, name)
-{
-  if (!hasClass(element, name))
-  {
-    // IE getAttribute requires "class" to be "className"
-    var clsname = ns_pos ? "class" : "className";
-    var clsval = element.getAttribute(clsname);
-    element.setAttribute(clsname, (clsval ? clsval + " " + name : name));
-  }
-}
-
-// wysiwyg editors make it hard to use div elements
-// e.g. amaya loses the div when you copy and paste
-// this function wraps div elements around implicit
-// slides which start with an h1 element and continue
-// up to the next heading or div element
-function wrapImplicitSlides()
-{
-   var i, heading, node, next, div;
-   var headings = document.getElementsByTagName("h1");
-
-   if (!headings)
-     return;
-
-   for (i = 0; i < headings.length; ++i)
-   {
-      heading = headings[i];
-
-      if (heading.parentNode != document.body)
-         continue;
-
-      node = heading.nextSibling;
-
-      div = document.createElement("div");
-      div.setAttribute((ns_pos ? "class" : "className"), "slide");
-      document.body.replaceChild(div, heading);
-      div.appendChild(heading);
-
-      while (node)
-      {
-         if (node.nodeType == 1 &&    // an element
-                  (node.nodeName == "H1" ||
-                   node.nodeName == "h1" ||
-                   node.nodeName == "DIV" ||
-                   node.nodeName == "div"))
-            break;
-
-         next = node.nextSibling;
-         node = document.body.removeChild(node);
-         div.appendChild(node);
-         node = next;
-      } 
-   }
-}
-
-// return new array of all slides
-function collectSlides()
-{
-   var slides = new Array();
-   var divs = document.body.getElementsByTagName("div");
-
-   for (var i = 0; i < divs.length; ++i)
-   {
-      div = divs.item(i);
-
-      if (hasClass(div, "slide"))
-      {
-         // add slide to collection
-         slides[slides.length] = div;
-
-         // hide each slide as it is found
-         div.style.display = "none";
-         div.style.visibility = "hidden";
-
-         // add dummy <br/> at end for scrolling hack
-         var node1 = document.createElement("br");
-         div.appendChild(node1);
-         var node2 = document.createElement("br");
-         div.appendChild(node2);
-      }
-      else if (hasClass(div, "background"))
-      {  // work around for Firefox SVG reload bug
-         // which otherwise replaces 1st SVG graphic with 2nd
-         div.style.display = "block";
-      }
-   }
-
-   return slides;
-}
-
-// return new array of all <div class="handout">
-function collectNotes()
-{
-   var notes = new Array();
-   var divs = document.body.getElementsByTagName("div");
-
-   for (var i = 0; i < divs.length; ++i)
-   {
-      div = divs.item(i);
-
-      if (hasClass(div, "handout"))
-      {
-         // add slide to collection
-         notes[notes.length] = div;
-
-         // hide handout notes as they are found
-         div.style.display = "none";
-         div.style.visibility = "hidden";
-      }
-   }
-
-   return notes;
-}
-
-// return new array of all <div class="background">
-// including named backgrounds e.g. class="background titlepage"
-function collectBackgrounds()
-{
-   var backgrounds = new Array();
-   var divs = document.body.getElementsByTagName("div");
-
-   for (var i = 0; i < divs.length; ++i)
-   {
-      div = divs.item(i);
-
-      if (hasClass(div, "background"))
-      {
-         // add slide to collection
-         backgrounds[backgrounds.length] = div;
-
-         // hide named backgrounds as they are found
-         // e.g. class="background epilog"
-         if (getClassList(div) != "background")
-         {
-            div.style.display = "none";
-            div.style.visibility = "hidden";
-         }
-      }
-   }
-
-   return backgrounds;
-}
-
-// show just the backgrounds pertinent to this slide
-function syncBackground(slide)
-{
-   var background;
-   var bgColor;
-
-   if (slide.currentStyle)
-      bgColor = slide.currentStyle["backgroundColor"];
-   else if (document.defaultView)
-   {
-      var styles = document.defaultView.getComputedStyle(slide,null);
-
-      if (styles)
-          bgColor = styles.getPropertyValue("background-color");
-      else // broken implementation probably due Safari or Konqueror
-      {
-          //alert("defective implementation of getComputedStyle()");
-          bgColor = "transparent";
-      }
-   }
-   else
-      bgColor == "transparent";
-
-   if (bgColor == "transparent")
-   {
-      var slideClass = getClassList(slide);
-
-      for (var i = 0; i < backgrounds.length; i++)
-      {
-         background = backgrounds[i];
-
-         var bgClass = getClassList(background);
-
-         if (matchingBackground(slideClass, bgClass))
-         {
-            background.style.display = "block";
-            background.style.visibility = "visible";
-         }
-         else
-         {
-            background.style.display = "none";
-            background.style.visibility = "hidden";
-         }
-      }
-   }
-   else // forcibly hide all backgrounds
-      hideBackgrounds();
-}
-
-function hideBackgrounds()
-{
-   for (var i = 0; i < backgrounds.length; i++)
-   {
-      background = backgrounds[i];
-      background.style.display = "none";
-      background.style.visibility = "hidden";
-   }
-}
-
-// compare classes for slide and background
-function matchingBackground(slideClass, bgClass)
-{
-   if (bgClass == "background")
-      return true;
-
-   // define pattern as regular expression
-   var pattern = /\w+/g;
-
-   // check for matches and place result in array
-   var result = slideClass.match(pattern);
-
-   // now check if desired name is present for background
-   for (var i = 0; i < result.length; i++)
-   {
-      if (hasToken(bgClass, result[i]))
-         return true;
-   }
-
-   return false;
-}
-
-// left to right traversal of root's content
-function nextNode(root, node)
-{
-   if (node == null)
-      return root.firstChild;
-
-   if (node.firstChild)
-      return node.firstChild;
-
-   if (node.nextSibling)
-      return node.nextSibling;
-
-   for (;;)
-   {
-      node = node.parentNode;
-
-      if (!node || node == root)
-         break;
-
-      if (node && node.nextSibling)
-         return node.nextSibling;
-   }
-
-   return null;
-}
-
-// right to left traversal of root's content
-function previousNode(root, node)
-{
-   if (node == null)
-   {
-      node = root.lastChild;
-
-      if (node)
-      {
-         while (node.lastChild)
-            node = node.lastChild;
-      }
-
-      return node;
-   }
-
-   if (node.previousSibling)
-   {
-      node = node.previousSibling;
-
-      while (node.lastChild)
-         node = node.lastChild;
-
-      return node;
-   }
-
-   if (node.parentNode != root)
-      return node.parentNode;
-
-   return null;
-}
-
-// HTML elements that can be used with class="incremental"
-// note that you can also put the class on containers like
-// up, ol, dl, and div to make their contents appear
-// incrementally. Upper case is used since this is what
-// browsers report for HTML node names (text/html).
-function incrementalElementList()
-{
-   var inclist = new Array();
-   inclist["P"] = true;
-   inclist["PRE"] = true;
-   inclist["LI"] = true;
-   inclist["BLOCKQUOTE"] = true;
-   inclist["DT"] = true;
-   inclist["DD"] = true;
-   inclist["H2"] = true;
-   inclist["H3"] = true;
-   inclist["H4"] = true;
-   inclist["H5"] = true;
-   inclist["H6"] = true;
-   inclist["SPAN"] = true;
-   inclist["ADDRESS"] = true;
-   inclist["TABLE"] = true;
-   inclist["TR"] = true;
-   inclist["TH"] = true;
-   inclist["TD"] = true;
-   inclist["IMG"] = true;
-   inclist["OBJECT"] = true;
-   return inclist;
-}
-
-function nextIncrementalItem(node)
-{
-   var slide = slides[slidenum];
-
-   for (;;)
-   {
-      node = nextNode(slide, node);
-
-      if (node == null || node.parentNode == null)
-         break;
-
-      if (node.nodeType == 1)  // ELEMENT
-      {
-         if (node.nodeName == "BR")
-           continue;
-
-         if (hasClass(node, "incremental")
-             && okayForIncremental[node.nodeName])
-            return node;
-
-         if (hasClass(node.parentNode, "incremental")
-             && !hasClass(node, "non-incremental"))
-            return node;
-      }
-   }
-
-   return node;
-}
-
-function previousIncrementalItem(node)
-{
-   var slide = slides[slidenum];
-
-   for (;;)
-   {
-      node = previousNode(slide, node);
-
-      if (node == null || node.parentNode == null)
-         break;
-
-      if (node.nodeType == 1)
-      {
-         if (node.nodeName == "BR")
-           continue;
-
-         if (hasClass(node, "incremental")
-             && okayForIncremental[node.nodeName])
-            return node;
-
-         if (hasClass(node.parentNode, "incremental")
-             && !hasClass(node, "non-incremental"))
-            return node;
-      }
-   }
-
-   return node;
-}
-
-// set visibility for all elements on current slide with
-// a parent element with attribute class="incremental"
-function setVisibilityAllIncremental(value)
-{
-   var node = nextIncrementalItem(null);
-
-   while (node)
-   {
-      node.style.visibility = value;
-      node = nextIncrementalItem(node);
-   }
-}
-
-// reveal the next hidden item on the slide
-// node is null or the node that was last revealed
-function revealNextItem(node)
-{
-   node = nextIncrementalItem(node);
-
-   if (node && node.nodeType == 1)  // an element
-      node.style.visibility = "visible";
-
-   return node;
-}
-
-
-// exact inverse of revealNextItem(node)
-function hidePreviousItem(node)
-{
-   if (node && node.nodeType == 1)  // an element
-      node.style.visibility = "hidden";
-
-   return previousIncrementalItem(node);
-}
-
-
-/* set click handlers on all anchors */
-function patchAnchors()
-{
-   var anchors = document.body.getElementsByTagName("a");
-
-   for (var i = 0; i < anchors.length; ++i)
-   {
-      anchors[i].onclick = clickedAnchor;
-   }
-}
-
-function clickedAnchor(e)
-{
-   if (!e)
-      var e = window.event;
-
-   // compare this.href with location.href
-   // for link to another slide in this doc
-
-   if (pageAddress(this.href) == pageAddress(location.href))
-   {
-      // yes, so find new slide number
-      var newslidenum = findSlideNumber(this.href);
-
-      if (newslidenum != slidenum)
-      {
-         slide = slides[slidenum];
-         hideSlide(slide);
-         slidenum = newslidenum;
-         slide = slides[slidenum];
-         showSlide(slide);
-         setLocation();
-      }
-   }
-   else if (this.target == null)
-      location.href = this.href;
-
-   this.blur();
-   stopPropagation(e);
-}
-
-function pageAddress(uri)
-{
-   var i = uri.indexOf("#");
-
-   // check if anchor is entire page
-
-   if (i < 0)
-      return uri;  // yes
-
-   return uri.substr(0, i);
-}
-
-function showSlideNumber()
-{
-   slideNumElement.innerHTML = "slide".localize() + " " +
-           (slidenum + 1) + "/" + slides.length;
-}
-
-function setLocation()
-{
-   var uri = pageAddress(location.href);
-
-   //if (slidenum > 0)
-      uri = uri + "#(" + (slidenum+1) + ")";
-
-   if (uri != location.href && !khtml)
-      location.href = uri;
-
-   document.title = title + " (" + (slidenum+1) + ")";
-   //document.title = (slidenum+1) + ") " + slideName(slidenum);
-
-   showSlideNumber();
-}
-
-// find current slide based upon location
-// first find target anchor and then look
-// for associated div element enclosing it
-// finally map that to slide number
-function findSlideNumber(uri)
-{
-   // first get anchor from page location
-
-   var i = uri.indexOf("#");
-
-   // check if anchor is entire page
-
-   if (i < 0)
-      return 0;  // yes
-
-   var anchor = unescape(uri.substr(i+1));
-
-   // now use anchor as XML ID to find target
-   var target = document.getElementById(anchor);
-
-   if (!target)
-   {
-      // does anchor look like "(2)" for slide 2 ??
-      // where first slide is (1)
-      var re = /\((\d)+\)/;
-
-      if (anchor.match(re))
-      {
-         var num = parseInt(anchor.substring(1, anchor.length-1));
-
-         if (num > slides.length)
-            num = 1;
-
-         if (--num < 0)
-            num = 0;
-
-         return num;
-      }
-
-      // accept [2] for backwards compatibility
-      re = /\[(\d)+\]/;
-
-      if (anchor.match(re))
-      {
-         var num = parseInt(anchor.substring(1, anchor.length-1));
-
-         if (num > slides.length)
-            num = 1;
-
-         if (--num < 0)
-            num = 0;
-
-         return num;
-      }
-
-      // oh dear unknown anchor
-      return 0;
-   }
-
-   // search for enclosing slide
-
-   while (true)
-   {
-      // browser coerces html elements to uppercase!
-      if (target.nodeName.toLowerCase() == "div" &&
-            hasClass(target, "slide"))
-      {
-         // found the slide element
-         break;
-      }
-
-      // otherwise try parent element if any
-
-      target = target.parentNode;
-
-      if (!target)
-      {
-         return 0;   // no luck!
-      }
-   };
-
-   for (i = 0; i < slides.length; ++i)
-   {
-      if (slides[i] == target)
-         return i;  // success
-   }
-
-   // oh dear still no luck
-   return 0;
-}
-
-// find slide name from first h1 element
-// default to document title + slide number
-function slideName(index)
-{
-   var name = null;
-   var slide = slides[index];
-
-   var heading = findHeading(slide);
-
-   if (heading)
-     name = extractText(heading);
-
-   if (!name)
-     name = title + "(" + (index + 1) + ")";
-
-   name.replace(/\&/g, "&amp;");
-   name.replace(/\</g, "&lt;");
-   name.replace(/\>/g, "&gt;");
-
-   return name;
-}
-
-// find first h1 element in DOM tree
-function findHeading(node)
-{
-  if (!node || node.nodeType != 1)
-    return null;
-
-  if (node.nodeName == "H1" || node.nodeName == "h1")
-    return node;
-
-  var child = node.firstChild;
-
-  while (child)
-  {
-    node = findHeading(child);
-
-    if (node)
-      return node;
-
-    child = child.nextSibling;
-  }
-
-  return null;
-}
-
-// recursively extract text from DOM tree
-function extractText(node)
-{
-  if (!node)
-    return "";
-
-  // text nodes
-  if (node.nodeType == 3)
-    return node.nodeValue;
-
-  // elements
-  if (node.nodeType == 1)
-  {
-    node = node.firstChild;
-    var text = "";
-
-    while (node)
-    {
-      text = text + extractText(node);
-      node = node.nextSibling;
-    }
-
-    return text;
-  }
-
-  return "";
-}
-
-
-// find copyright text from meta element
-function findCopyright()
-{
-   var name, content;
-   var meta = document.getElementsByTagName("meta");
-
-   for (var i = 0; i < meta.length; ++i)
-   {
-      name = meta[i].getAttribute("name");
-      content = meta[i].getAttribute("content");
-
-      if (name == "copyright")
-         return content;
-   }
-
-   return null;
-}
-
-function findSizeAdjust()
-{
-   var name, content, offset;
-   var meta = document.getElementsByTagName("meta");
-
-   for (var i = 0; i < meta.length; ++i)
-   {
-      name = meta[i].getAttribute("name");
-      content = meta[i].getAttribute("content");
-
-      if (name == "font-size-adjustment")
-         return 1 * content;
-   }
-
-   return 0;
-}
-
-function addToolbar()
-{
-   var slideCounter, page;
-
-   var toolbar = createElement("div");
-   toolbar.setAttribute("class", "toolbar");
-
-   if (ns_pos) // a reasonably behaved browser
-   {
-      var right = document.createElement("div");
-      right.setAttribute("style", "float: right; text-align: right");
-
-      slideCounter = document.createElement("div")
-      slideCounter.innerHTML = "slide".localize() + " n/m";
-      right.appendChild(slideCounter);
-      toolbar.appendChild(right);
-
-      var left = document.createElement("div");
-      left.setAttribute("style", "text-align: left");
-
-      // global end of slide indicator
-      eos = document.createElement("span");
-      eos.innerHTML = "* ";
-      left.appendChild(eos);
-
-      var help = document.createElement("a");
-      help.setAttribute("href", helpPage);
-      help.setAttribute("title", helpText.localize());
-      help.innerHTML = "help?".localize();
-      left.appendChild(help);
-      helpAnchor = help;  // save for focus hack
-
-      var gap1 = document.createTextNode(" ");
-      left.appendChild(gap1);
-
-      var contents = document.createElement("a");
-      contents.setAttribute("href", "javascript:toggleTableOfContents()");
-      contents.setAttribute("title", "table of contents".localize());
-      contents.innerHTML = "contents?".localize();
-      left.appendChild(contents);
-
-      var gap2 = document.createTextNode(" ");
-      left.appendChild(gap2);
-
-      var i = location.href.indexOf("#");
-
-      // check if anchor is entire page
-
-      if (i > 0)
-         page = location.href.substr(0, i);
-      else
-         page = location.href;
-
-      var start = document.createElement("a");
-      start.setAttribute("href", page);
-      start.setAttribute("title", "restart presentation".localize());
-      start.innerHTML = "restart?".localize();
-//    start.setAttribute("href", "javascript:printSlides()");
-//    start.setAttribute("title", "print all slides".localize());
-//    start.innerHTML = "print!".localize();
-      left.appendChild(start);
-
-      var copyright = findCopyright();
-
-      if (copyright)
-      {
-         var span = document.createElement("span");
-         span.innerHTML = copyright;
-         span.style.color = "black";
-         span.style.marginLeft = "4em";
-         left.appendChild(span);
-      }
-
-      toolbar.appendChild(left);
-   }
-   else // IE so need to work around its poor CSS support
-   {
-      toolbar.style.position = (ie7 ? "fixed" : "absolute");
-      toolbar.style.zIndex = "200";
-      toolbar.style.width = "99.9%";
-      toolbar.style.height = "1.2em";
-      toolbar.style.top = "auto";
-      toolbar.style.bottom = "0";
-      toolbar.style.left = "0";
-      toolbar.style.right = "0";
-      toolbar.style.textAlign = "left";
-      toolbar.style.fontSize = "60%";
-      toolbar.style.color = "red";
-      toolbar.borderWidth = 0;
-      toolbar.style.background = "rgb(240,240,240)";
-
-      // would like to have help text left aligned
-      // and page counter right aligned, floating
-      // div's don't work, so instead use nested
-      // absolutely positioned div's.
-
-      var sp = document.createElement("span");
-      sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";
-      toolbar.appendChild(sp);
-      eos = sp;  // end of slide indicator
-
-      var help = document.createElement("a");
-      help.setAttribute("href", helpPage);
-      help.setAttribute("title", helpText.localize());
-      help.innerHTML = "help?".localize();
-      toolbar.appendChild(help);
-      helpAnchor = help;  // save for focus hack
-
-      var gap1 = document.createTextNode(" ");
-      toolbar.appendChild(gap1);
-
-      var contents = document.createElement("a");
-      contents.setAttribute("href", "javascript:toggleTableOfContents()");
-      contents.setAttribute("title", "table of contents".localize());
-      contents.innerHTML = "contents?".localize();
-      toolbar.appendChild(contents);
-
-      var gap2 = document.createTextNode(" ");
-      toolbar.appendChild(gap2);
-
-      var i = location.href.indexOf("#");
-
-      // check if anchor is entire page
-
-      if (i > 0)
-         page = location.href.substr(0, i);
-      else
-         page = location.href;
-
-      var start = document.createElement("a");
-      start.setAttribute("href", page);
-      start.setAttribute("title", "restart presentation".localize());
-      start.innerHTML = "restart?".localize();
-//    start.setAttribute("href", "javascript:printSlides()");
-//    start.setAttribute("title", "print all slides".localize());
-//    start.innerHTML = "print!".localize();
-      toolbar.appendChild(start);
-
-      var copyright = findCopyright();
-
-      if (copyright)
-      {
-         var span = document.createElement("span");
-         span.innerHTML = copyright;
-         span.style.color = "black";
-         span.style.marginLeft = "2em";
-         toolbar.appendChild(span);
-      }
-
-      slideCounter = document.createElement("div")
-      slideCounter.style.position = "absolute";
-      slideCounter.style.width = "auto"; //"20%";
-      slideCounter.style.height = "1.2em";
-      slideCounter.style.top = "auto";
-      slideCounter.style.bottom = 0;
-      slideCounter.style.right = "0";
-      slideCounter.style.textAlign = "right";
-      slideCounter.style.color = "red";
-      slideCounter.style.background = "rgb(240,240,240)";
-
-      slideCounter.innerHTML = "slide".localize() + " n/m";
-      toolbar.appendChild(slideCounter);
-   }
-
-   // ensure that click isn't passed through to the page
-   toolbar.onclick = stopPropagation;
-   document.body.appendChild(toolbar);
-   slideNumElement = slideCounter;
-   setEosStatus(false);
-
-   return toolbar;
-}
-
-function isShownToc()
-{
-  if (toc && toc.style.visible == "visible")
-    return true;
-
-  return false;
-}
-
-function showTableOfContents()
-{
-  if (toc)
-  {
-    if (toc.style.visibility != "visible")
-    {
-      toc.style.visibility = "visible";
-      toc.style.display = "block";
-      toc.focus();
-
-      if (ie7 && slidenum == 0)
-        setTimeout("ieHack()", 100);
-    }
-    else
-      hideTableOfContents();
-  }
-}
-
-function hideTableOfContents()
-{
-  if (toc && toc.style.visibility != "hidden")
-  {
-    toc.style.visibility = "hidden";
-    toc.style.display = "none";
-
-    try
-    {
-       if (!opera)
-         helpAnchor.focus();
-    }
-    catch (e)
-    {
-    }
-  }
-}
-
-function toggleTableOfContents()
-{
-  if (toc)
-  {
-     if (toc.style.visible != "visible")
-       showTableOfContents();
-     else
-       hideTableOfContents();
-  }
-}
-
-// called on clicking toc entry
-function gotoEntry(e)
-{
-   var target;
-
-   if (!e)
-      var e = window.event;
-
-   if (e.target)
-      target = e.target;
-   else if (e.srcElement)
-      target = e.srcElement;
-
-   // work around Safari bug
-   if (target.nodeType == 3)
-      target = target.parentNode;
-
-   if (target && target.nodeType == 1)
-   {
-     var uri = target.getAttribute("href");
-
-     if (uri)
-     {
-        //alert("going to " + uri);
-        var slide = slides[slidenum];
-        hideSlide(slide);
-        slidenum = findSlideNumber(uri);
-        slide = slides[slidenum];
-        lastShown = null;
-        setLocation();
-        setVisibilityAllIncremental("hidden");
-        setEosStatus(!nextIncrementalItem(lastShown));
-        showSlide(slide);
-        //target.focus();
-
-        try
-        {
-           if (!opera)
-             helpAnchor.focus();
-        }
-        catch (e)
-        {
-        }
-     }
-   }
-
-   hideTableOfContents(e);
-   if (ie7) ieHack();
-   stopPropagation(e);
-   return cancel(e);
-}
-
-// called onkeydown for toc entry
-function gotoTocEntry(event)
-{
-  var key;
-
-  if (!event)
-    var event = window.event;
-
-  // kludge around NS/IE differences 
-  if (window.event)
-    key = window.event.keyCode;
-  else if (event.which)
-    key = event.which;
-  else
-    return true; // Yikes! unknown browser
-
-  // ignore event if key value is zero
-  // as for alt on Opera and Konqueror
-  if (!key)
-     return true;
-
-  // check for concurrent control/command/alt key
-  // but are these only present on mouse events?
-
-  if (event.ctrlKey || event.altKey)
-     return true;
-
-  if (key == 13)
-  {
-    var uri = this.getAttribute("href");
-
-    if (uri)
-    {
-      //alert("going to " + uri);
-      var slide = slides[slidenum];
-      hideSlide(slide);
-      slidenum = findSlideNumber(uri);
-      slide = slides[slidenum];
-      lastShown = null;
-      setLocation();
-      setVisibilityAllIncremental("hidden");
-      setEosStatus(!nextIncrementalItem(lastShown));
-      showSlide(slide);
-      //target.focus();
-
-      try
-      {
-         if (!opera)
-           helpAnchor.focus();
-      }
-      catch (e)
-      {
-      }
-    }
-
-    hideTableOfContents();
-    if (ie7) ieHack();
-    return cancel(event);
-  }
-
-  if (key == 40 && this.next)
-  {
-    this.next.focus();
-    return cancel(event);
-  }
-
-  if (key == 38 && this.previous)
-  {
-    this.previous.focus();
-    return cancel(event);
-  }
-
-  return true;
-}
-
-function isTitleSlide(slide)
-{
-   return hasClass(slide, "title");
-}
-
-// create div element with links to each slide
-function tableOfContents()
-{
-  var toc = document.createElement("div");
-  addClass(toc, "toc");
-  //toc.setAttribute("tabindex", "0");
-
-  var heading = document.createElement("div");
-  addClass(heading, "toc-heading");
-  heading.innerHTML = "Table of Contents".localize();
-
-  heading.style.textAlign = "center";
-  heading.style.width = "100%";
-  heading.style.margin = "0";
-  heading.style.marginBottom = "1em";
-  heading.style.borderBottomStyle = "solid";
-  heading.style.borderBottomColor = "rgb(180,180,180)";
-  heading.style.borderBottomWidth = "1px";
-
-  toc.appendChild(heading);
-  var previous = null;
-
-  for (var i = 0; i < slides.length; ++i)
-  {
-    var title = hasClass(slides[i], "title");
-    var num = document.createTextNode((i + 1) + ". ");
-
-    toc.appendChild(num);
-
-    var a = document.createElement("a");
-    a.setAttribute("href", "#(" + (i+1) + ")");
-
-    if (title)
-      addClass(a, "titleslide");
-
-    var name = document.createTextNode(slideName(i));
-    a.appendChild(name);
-    a.onclick = gotoEntry;
-    a.onkeydown = gotoTocEntry;
-    a.previous = previous;
-
-    if (previous)
-      previous.next = a;
-
-    toc.appendChild(a);
-
-    if (i == 0)
-      toc.first = a;
-
-    if (i < slides.length - 1)
-    {
-      var br = document.createElement("br");
-      toc.appendChild(br);
-    }
-
-    previous = a;
-  }
-
-  toc.focus = function () {
-    if (this.first)
-      this.first.focus();
-  }
-
-  toc.onclick = function (e) {
-    e||(e=window.event);
-    hideTableOfContents();
-    stopPropagation(e);
-    
-    if (e.cancel != undefined)
-      e.cancel = true;
-      
-    if (e.returnValue != undefined)
-      e.returnValue = false;
-      
-    return false;
-  };
-
-  toc.style.position = "absolute";
-  toc.style.zIndex = "300";
-  toc.style.width = "60%";
-  toc.style.maxWidth = "30em";
-  toc.style.height = "30em";
-  toc.style.overflow = "auto";
-  toc.style.top = "auto";
-  toc.style.right = "auto";
-  toc.style.left = "4em";
-  toc.style.bottom = "4em";
-  toc.style.padding = "1em";
-  toc.style.background = "rgb(240,240,240)";
-  toc.style.borderStyle = "solid";
-  toc.style.borderWidth = "2px";
-  toc.style.fontSize = "60%";
-
-  document.body.insertBefore(toc, document.body.firstChild);
-  return toc;
-}
-
-function replaceByNonBreakingSpace(str)
-{
-   for (var i = 0; i < str.length; ++i)
-      str[i] = 160;
-}
-
-
-function initOutliner()
-{
-  var items = document.getElementsByTagName("LI");
-
-  for (var i = 0; i < items.length; ++i)
-  {
-     var target = items[i];
-
-     if (!hasClass(target.parentNode, "outline"))
-        continue;
-
-     target.onclick = outlineClick;
-
-     if (!ns_pos)
-     {
-        target.onmouseover = hoverOutline;
-        target.onmouseout = unhoverOutline;
-     }
-
-     if (foldable(target))
-     {
-       target.foldable = true;
-       target.onfocus = function () {outline = this;};
-       target.onblur = function () {outline = null;};
-
-       if (!target.getAttribute("tabindex"))
-         target.setAttribute("tabindex", "0");
-
-       if (hasClass(target, "expand"))
-         unfold(target);
-       else
-         fold(target);
-     }
-     else
-     {
-       addClass(target, "nofold");
-       target.visible = true;
-       target.foldable = false;
-     }
-  }
-}
-
-function foldable(item)
-{
-   if (!item || item.nodeType != 1)
-      return false;
-
-   var node = item.firstChild;
-
-   while (node)
-   {
-     if (node.nodeType == 1 && isBlock(node))
-       return true;
-
-      node = node.nextSibling;
-   }
-
-   return false;
-}
-
-function fold(item)
-{
-  if (item)
-  {
-    removeClass(item, "unfolded");
-    addClass(item, "folded");
-  }
-
-  var node = item ? item.firstChild : null;
-
-  while (node)
-  {
-    if (node.nodeType == 1 && isBlock(node)) // element
-    {
-      // note that getElementStyle won't work for Safari 1.3
-      node.display = getElementStyle(node, "display", "display");
-      node.style.display = "none";
-      node.style.visibility = "hidden";
-    }
-
-    node = node.nextSibling;
-  }
-
-  item.visible = false;
-}
-
-function unfold(item)
-{
-   if (item)
-   {
-     addClass(item, "unfolded");
-     removeClass(item, "folded");
-   }
-
-  var node = item ? item.firstChild : null;
-
-  while (node)
-  {
-    if (node.nodeType == 1 && isBlock(node)) // element
-    {
-      // with fallback for Safari, see above
-      node.style.display = (node.display ? node.display : "block");
-      node.style.visibility = "visible";
-    }
-
-    node = node.nextSibling;
-  }
-
-  item.visible = true;
-}
-
-function outlineClick(e)
-{
-   var rightclick = false;
-   var target;
-
-   if (!e)
-      var e = window.event;
-
-   if (e.target)
-      target = e.target;
-   else if (e.srcElement)
-      target = e.srcElement;
-
-   // work around Safari bug
-   if (target.nodeType == 3)
-      target = target.parentNode;
-
-   while (target && target.visible == undefined)
-      target = target.parentNode;
-
-   if (!target)
-      return true;
-
-   if (e.which)
-      rightclick = (e.which == 3);
-   else if (e.button)
-      rightclick = (e.button == 2);
-
-   if (!rightclick && target.visible != undefined)
-   {
-      if (target.foldable)
-      {
-         if (target.visible)
-           fold(target);
-         else
-           unfold(target);
-      }
-
-      stopPropagation(e);
-      e.cancel = true;
-      e.returnValue = false;
-   }
-
-   return false;
-}
-
-function hoverOutline(e)
-{
-   var target;
-
-   if (!e)
-      var e = window.event;
-
-   if (e.target)
-      target = e.target;
-   else if (e.srcElement)
-      target = e.srcElement;
-
-   // work around Safari bug
-   if (target.nodeType == 3)
-      target = target.parentNode;
-
-   while (target && target.visible == undefined)
-      target = target.parentNode;
-
-   if (target && target.foldable)
-      target.style.cursor = "pointer";
-
-   return true;
-}
-
-function unhoverOutline(e)
-{
-   var target;
-
-   if (!e)
-      var e = window.event;
-
-   if (e.target)
-      target = e.target;
-   else if (e.srcElement)
-      target = e.srcElement;
-
-   // work around Safari bug
-   if (target.nodeType == 3)
-      target = target.parentNode;
-
-   while (target && target.visible == undefined)
-      target = target.parentNode;
-
-   if (target)
-     target.style.cursor = "default";
-
-   return true;
-}
-
-
-function stopPropagation(e)
-{
-   if (window.event)
-   {
-      window.event.cancelBubble = true;
-      //window.event.returnValue = false;
-   }
-   else if (e)
-   {
-      e.cancelBubble = true;
-      e.stopPropagation();
-      //e.preventDefault();
-   }
-}
-
-/* can't rely on display since we set that to none to hide things */
-function isBlock(elem)
-{
-   var tag = elem.nodeName;
-
-   return tag == "OL" || tag == "UL" || tag == "P" ||
-          tag == "LI" || tag == "TABLE" || tag == "PRE" ||
-          tag == "H1" || tag == "H2" || tag == "H3" ||
-          tag == "H4" || tag == "H5" || tag == "H6" ||
-          tag == "BLOCKQUOTE" || tag == "ADDRESS"; 
-}
-
-function getElementStyle(elem, IEStyleProp, CSSStyleProp)
-{
-   if (elem.currentStyle)
-   {
-      return elem.currentStyle[IEStyleProp];
-   }
-   else if (window.getComputedStyle)
-   {
-      var compStyle = window.getComputedStyle(elem, "");
-      return compStyle.getPropertyValue(CSSStyleProp);
-   }
-   return "";
-}
-
-// works with text/html and text/xhtml+xml with thanks to Simon Willison
-function createElement(element)
-{
-   if (typeof document.createElementNS != 'undefined')
-   {
-      return document.createElementNS('http://www.w3.org/1999/xhtml', element);
-   }
-
-   if (typeof document.createElement != 'undefined')
-   {
-      return document.createElement(element);
-   }
-
-   return false;
-}
-
-// designed to work with both text/html and text/xhtml+xml
-function getElementsByTagName(name)
-{
-   if (typeof document.getElementsByTagNameNS != 'undefined')
-   {
-      return document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', name);
-   }
-
-   if (typeof document.getElementsByTagName != 'undefined')
-   {
-      return document.getElementsByTagName(name);
-   }
-
-   return null;
-}
-
-/*
-// clean alternative to innerHTML method, but on IE6
-// it doesn't work with named entities like &nbsp;
-// which need to be replaced by numeric entities
-function insertText(element, text)
-{
-   try
-   {
-     element.textContent = text;  // DOM3 only
-   }
-   catch (e)
-   {
-      if (element.firstChild)
-      {
-         // remove current children
-         while (element.firstChild)
-            element.removeChild(element.firstChild);
-      }
-
-      element.appendChild(document.createTextNode(text));
-   }
-}
-
-// as above, but as method of all element nodes
-// doesn't work in IE6 which doesn't allow you to
-// add methods to the HTMLElement prototype
-if (HTMLElement != undefined)
-{
-  HTMLElement.prototype.insertText = function(text) {
-    var element = this;
-
-    try
-    {
-      element.textContent = text;  // DOM3 only
-    }
-    catch (e)
-    {
-      if (element.firstChild)
-      {
-         // remove current children
-         while (element.firstChild)
-           element.removeChild(element.firstChild);
-      }
-
-      element.appendChild(document.createTextNode(text));
-    }
-  };
-}
-*/
-
-function getSelectedText()
-{
-  try
-  {
-    if (window.getSelection)
-      return window.getSelection().toString();
-
-    if (document.getSelection)
-      return document.getSelection().toString();
-
-    if (document.selection)
-      return document.selection.createRange().text;
-  }
-  catch (e)
-  {
-    return "";
-  }
-  return "";
-}
diff --git a/content/2011/Real_World_Go.pdf b/content/2011/Real_World_Go.pdf
deleted file mode 100644
index 2a18711..0000000
--- a/content/2011/Real_World_Go.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2011/Writing_Web_Apps_in_Go.pdf b/content/2011/Writing_Web_Apps_in_Go.pdf
deleted file mode 100644
index ca4702e..0000000
--- a/content/2011/Writing_Web_Apps_in_Go.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2011/lex.slide b/content/2011/lex.slide
deleted file mode 100644
index d2fed7b..0000000
--- a/content/2011/lex.slide
+++ /dev/null
@@ -1,351 +0,0 @@
-Lexical Scanning in Go
-GTUG Sydney
-30 Aug 2011
-
-Rob Pike
-r@golang.org
-
-
-* Video
-
-A video of this talk was recorded at the Go Sydney Meetup.
-
-.link https://www.youtube.com/watch?v=HxaD_trXwRE Watch the talk on YouTube
-
-
-* Structural mismatch
-
-Many programming problems realign one data structure to fit another structure.
-
-- breaking text into lines
-- "blocking" and "deblocking"
-- packet assembly and disassembly
-- parsing
-- lexing
-
-* Sometimes hard
-
-The pieces on either side have independent state, lookahead, buffers, ...
-Can be messy to do well.
-
-Coroutines were invented to solve this problem!
-They enable us to write the two pieces independently.
-
-Let's look at this topic in the context of a lexer.
-
-
-* A new template system
-
-Wanted to replace the old Go template package.
-It had many problems:
-
-- inflexible
-- inexpressive
-- code too fragile
-
-* A new template system
-
-Key change was re-engineering with a true lexer, parser, and evaluator.
-Has arbitrary text plus actions in `{{` `}}`.
-
-.code lex/snippets /Evaluation/,/Control.structures/
-
-* Today we focus on the lexer
-
-Must tokenize:
-
-- the stuff outside actions
-- action delimiters
-- identifiers
-- numeric constants
-- string constants
-- and others
-
-* Lex items
-
-Two things identify each lexed item:
-
-- its type
-- its value; a string is all we need
-
-.code lex/lex1.oldgo /item.represents/,/^}/
-
-* Lex type
-
-The type is just an integer constant.
-We use `iota` to define the values.
-
-.code lex/lex1.oldgo /itemType.identifies/,/type/
-.code lex/lex1.oldgo /const/,/itemEOF/
-
-* Lex type values (continued)
-
-.code lex/lex1.oldgo /itemElse/,/^\)/
-
-* Printing a lex item
-
-`Printf` has a convention making it easy to print any type: just define a `String()` method:
-
-.code lex/lex1.oldgo /func.*item.*String/,/^}/
-
-* How to tokenize?
-
-Many approaches available:
-
-- use a tool such as lex or ragel
-- use regular expressions
-- use states, actions, and a switch statement
-
-* Tools
-
-Nothing wrong with using a tool but:
-
-- hard to get good errors (can be very important)
-- tend to require learning another language
-- result can be large, even slow
-- often a poor fit
-- but lexing is easy to do yourself!
-
-* Regular expressions
-
-Blogged about this last week.
-
-- overkill
-- slow
-- can explore the state space too much
-- misuse of a dynamic engine to ask static questions
-
-* Let's write our own
-
-It's easy!
-
-Plus, most programming languages lex pretty much the same tokens, so once we learn how it's trivial to adapt the lexer for the next purpose.
-
-- an argument both for and against tools
-
-* State machine
-
-Many people will tell you to write a switch statement,
-something like this:
-
-.code lex/snippets /One/,/^}/
-
-* State machines are forgetful
-
-Boring and repetitive and error-prone, but anyway:
-
-Why switch?
-
-After each action, you know where you want to be;
-the new state is the result of the action.
-
-But we throw the info away and recompute it from the state.
-
-(A consequence of returning to the caller.)
-
-A tool can compile that out, but so can we.
-
-* What is a state? An action?
-
-State represents where we are and what we expect.
-
-Action represents what we do.
-
-Actions result in a new state.
-
-* State function
-
-Let's put them together: a state function.
-
-Executes an action, returns the next state—as a state function.
-
-Recursive definition but simple and clear.
-
-.code lex/lex1.oldgo /stateFn/,/type/
-
-* The run loop
-
-Our state machine is trivial:
-just run until the state goes to `nil`, representing "done".
-
-.code lex/snippets /run.lexes/,/^}/
-
-* The concurrent step
-
-How do we make tokens available to the client?
-Tokens can emerge at times that are inconvenient to stop to return to the caller.
-
-Use concurrency:
-Run the state machine as a goroutine,
-emit values on a channel.
-
-* The lexer type
-
-Here is the `lexer` type. Notice the channel of items; ignore the rest for now.
-
-.code lex/lex1.oldgo /lexer.holds/,/^}/
-
-* Starting the lexer
-
-A `lexer` initializes itself to lex a string and launches the state machine as a goroutine, returning the lexer itself and a channel of items.
-
-The API will change, don't worry about it now.
-
-.code lex/lex1.oldgo /func.lex/,/^}/
-
-* The real run routine
-
-Here's the real state machine run function, which runs as a goroutine.
-
-.code lex/lex1.oldgo /run.lexes/,/^}/
-
-* The token emitter
-
-A token is a type and a value, but (yay Go) the value can just be sliced from the input string.
-The `lexer` remembers where it is in the input and the emit routine just lobs that substring to the caller as the token's value.
-
-.code lex/lex1.oldgo /input.*scanned/,/pos.*position/
-.code lex/lex1.oldgo /emit.passes/,/^}/
-
-* Starting the machine
-
-As the `lexer` begins it's looking for plain text, so the initial state is the function `lexText`.
-It absorbs plain text until a "left meta" is encountered.
-
-.code lex/lex1.oldgo /run.lexes/,/^}/
-.code lex/lex1.oldgo /leftMeta/
-
-* lexText
-
-.code lex/lex1.oldgo /^func.lexText/,/^}/
-
-* lexLeftMeta
-
-A trivial state function.
-When we get here, we know there's a `leftMeta` in the input.
-
-.code lex/lex1.oldgo /^func.lexLeftMeta/,/^}/
-
-* lexInsideAction
-
-.code lex/lex1.oldgo /^func.lexInsideAction/,/itemPipe/
-
-* More of lexInsideAction
-
-This will give you the flavor.
-
-.code lex/lex1.oldgo /case.*"/,/lexRawQuote/
-.code lex/lex1.oldgo /case.*9/,/lexIdentifier/
-
-* The next function
-
-.code lex/lex1.oldgo /next.returns.the/,/^}/
-
-* Some lexing helpers
-
-.code lex/lex1.oldgo /ignore.skips/,/^}/
-.code lex/lex1.oldgo /backup.steps/,/^}/
-
-* The peek function
-
-.code lex/lex1.oldgo /peek.returns.but/,/^}/
-
-* The accept functions
-
-.code lex/lex1.oldgo /accept.consumes/,/^}/
-.code lex/lex1.oldgo /acceptRun.consumes/,/^}/
-
-* Lexing a number, including floating point
-
-.code lex/lex1.oldgo /^func.lexNumber/,/imaginary/
-
-* Lexing a number, continued
-
-This is more accepting than it should be, but not by much. Caller must call `Atof` to validate.
-
-.code lex/lex1.oldgo /Is.it.imaginary/,/^}/
-
-* Errors
-
-Easy to handle: emit the bad token and shut down the machine.
-
-.code lex/lex1.oldgo /error.returns/,/^}/
-
-* Summary
-
-Concurrency makes the lexer easy to design.
-
-Goroutines allow lexer and caller (parser) each to run at its own rate, as clean sequential code.
-
-Channels give us a clean way to emit tokens.
-
-* A problem
-
-Can't run a goroutine to completion during initialization.
-Forbidden by the language specification.
-(Raises awful issues about order of init, best avoided.)
-
-That means we can't lex & parse a template during init.
-
-The goroutine is a problem....
-
-_(Note:_This_restriction_was_lifted_in_Go_version_1_but_the_discussion_is_still_interesting.)_
-
-* Design vs. implementation
-
-…but it's not necessary anyway.
-
-The work is done by the design; now we just adjust the API.
-
-We can change the API to hide the channel, provide a function to get the next token, and rewrite the run function.
-
-It's easy.
-
-* A new API
-
-Hide the channel and buffer it slightly, turning it into a ring buffer.
-
-.code lex/r59-lex.go /lex.creates.a.new/,/^}/
-
-* A function for the next item
-
-Traditional lexer API: return next item.
-Includes the modified state machine runner.
-
-.code lex/r59-lex.go /nextItem.returns/,/^}/
-
-* That's it
-
-We now have a traditional API for a lexer with a simple, concurrent implementation under the covers.
-
-Even though the implementation is no longer truly concurrent, it still has all the advantages of concurrent design.
-
-We wouldn't have such a clean, efficient design if we hadn't thought about the problem in a concurrent way, without worrying about "restart".
-
-Model completely removes concerns about "structural mismatch".
-
-* Concurrency is a design approach
-
-Concurrency is not about parallelism.
-
-(Although it can enable parallelism).
-
-Concurrency is a way to design a program by decomposing it into independently executing pieces.
-
-The result can be clean, efficient, and very adaptable.
-
-* Conclusion
-
-Lexers are fun.
-
-Concurrency is fun.
-
-Go is fun.
-
-* For more information
-
-Go: [[http://golang.org]]
-
-New templates: http://golang.org/pkg/exp/template/
-
-(Next release will move them out of experimental.)
diff --git a/content/2011/lex/lex1.oldgo b/content/2011/lex/lex1.oldgo
deleted file mode 100644
index 0a1b1d4..0000000
--- a/content/2011/lex/lex1.oldgo
+++ /dev/null
@@ -1,386 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// reformatted, slightly edited version of lex.go from weekly.11-06-23
-
-package template
-
-import (
-	"fmt"
-	"strings"
-	"unicode"
-	"utf8"
-)
-
-// item represents a token returned from the scanner.
-type item struct {
-	typ itemType  // Type, such as itemNumber.
-	val string    // Value, such as "23.2".
-}
-
-func (i item) String() string {
-	switch i.typ {
-	case itemEOF:
-		return "EOF"
-	case itemError:
-		return i.val
-	}
-	if len(i.val) > 10 {
-		return fmt.Sprintf("%.10q...", i.val)
-	}
-	return fmt.Sprintf("%q", i.val)
-}
-
-// itemType identifies the type of lex items.
-type itemType int
-
-const (
-	itemError itemType = iota // error occurred;
-	                          // value is text of error
-	itemDot                   // the cursor, spelled '.'
-	itemEOF
-	itemElse       // else keyword
-	itemEnd        // end keyword
-	itemField      // identifier, starting with '.'
-	itemIdentifier // identifier
-	itemIf         // if keyword
-	itemLeftMeta   // left meta-string
-	itemNumber     // number
-	itemPipe       // pipe symbol
-	itemRange      // range keyword
-	itemRawString  // raw quoted string (includes quotes)
-	itemRightMeta  // right meta-string
-	itemString     // quoted string (includes quotes)
-	itemText       // plain text
-)
-
-// Make the types prettyprint.
-var itemName = map[itemType]string{
-	itemError:      "error",
-	itemDot:        ".",
-	itemEOF:        "EOF",
-	itemElse:       "else",
-	itemEnd:        "end",
-	itemField:      "field",
-	itemIdentifier: "identifier",
-	itemIf:         "if",
-	itemLeftMeta:   "left meta",
-	itemNumber:     "number",
-	itemPipe:       "pipe",
-	itemRange:      "range",
-	itemRawString:  "raw string",
-	itemRightMeta:  "rightMeta",
-	itemString:     "string",
-	itemText:       "text",
-}
-
-func (i itemType) String() string {
-	s := itemName[i]
-	if s == "" {
-		return fmt.Sprintf("item%d", int(i))
-	}
-	return s
-}
-
-var key = map[string]itemType{
-	".":     itemDot,
-	"else":  itemElse,
-	"end":   itemEnd,
-	"if":    itemIf,
-	"range": itemRange,
-}
-
-const eof = -1
-
-// stateFn represents the state of the scanner
-// as a function that returns the next state.
-type stateFn func(*lexer) stateFn
-
-// lexer holds the state of the scanner.
-type lexer struct {
-	name  string    // used only for error reports.
-	input string    // the string being scanned.
-	start int       // start position of this item.
-	pos   int       // current position in the input.
-	width int       // width of last rune read from input.
-	items chan item // channel of scanned items.
-}
-
-// next returns the next rune in the input.
-func (l *lexer) next() (rune int) {
-	if l.pos >= len(l.input) {
-		l.width = 0
-		return eof
-	}
-	rune, l.width =
-		utf8.DecodeRuneInString(l.input[l.pos:])
-	l.pos += l.width
-	return rune
-}
-
-// peek returns but does not consume
-// the next rune in the input.
-func (l *lexer) peek() int {
-	rune := l.next()
-	l.backup()
-	return rune
-}
-
-// backup steps back one rune.
-// Can be called only once per call of next.
-func (l *lexer) backup() {
-	l.pos -= l.width
-}
-
-// emit passes an item back to the client.
-func (l *lexer) emit(t itemType) {
-	l.items <- item{t, l.input[l.start:l.pos]}
-	l.start = l.pos
-}
-
-// ignore skips over the pending input before this point.
-func (l *lexer) ignore() {
-	l.start = l.pos
-}
-
-// accept consumes the next rune
-// if it's from the valid set.
-func (l *lexer) accept(valid string) bool {
-	if strings.IndexRune(valid, l.next()) >= 0 {
-		return true
-	}
-	l.backup()
-	return false
-}
-
-// acceptRun consumes a run of runes from the valid set.
-func (l *lexer) acceptRun(valid string) {
-	for strings.IndexRune(valid, l.next()) >= 0 {
-	}
-	l.backup()
-}
-
-// lineNumber reports which line we're on. Doing it this way
-// means we don't have to worry about peek double counting.
-func (l *lexer) lineNumber() int {
-	return 1 + strings.Count(l.input[:l.pos], "\n")
-}
-
-// error returns an error token and terminates the scan
-// by passing back a nil pointer that will be the next
-// state, terminating l.run.
-func (l *lexer) errorf(format string, args ...interface{})
-  stateFn {
-	l.items <- item{
-		itemError,
-		fmt.Sprintf(format, args...),
-	}
-	return nil
-}
-
-// run lexes the input by executing state functions until
-// the state is nil.
-func (l *lexer) run() {
-	for state := lexText; state != nil; {
-		state = state(l)
-	}
-	close(l.items) // No more tokens will be delivered.
-}
-
-// lex launches a new scanner and returns the channel of items.
-func lex(name, input string) (*lexer, chan item) {
-	l := &lexer{
-		name:  name,
-		input: input,
-		items: make(chan item),
-	}
-	go l.run()  // Concurrently run state machine.
-	return l, l.items
-}
-
-// state functions
-
-const leftMeta = "{{"
-const rightMeta = "}}"
-
-// lexText scans until a metacharacter
-func lexText(l *lexer) stateFn {
-	for {
-		if strings.HasPrefix(l.input[l.pos:], leftMeta) {
-			if l.pos > l.start {
-				l.emit(itemText)
-			}
-			return lexLeftMeta    // Next state.
-		}
-		if l.next() == eof { break }
-	}
-	// Correctly reached EOF.
-	if l.pos > l.start {
-		l.emit(itemText)
-	}
-	l.emit(itemEOF)  // Useful to make EOF a token.
-	return nil       // Stop the run loop.
-}
-
-// leftMeta scans the left "metacharacter", which is known to be present.
-func lexLeftMeta(l *lexer) stateFn {
-	l.pos += len(leftMeta)
-	l.emit(itemLeftMeta)
-	return lexInsideAction    // Now inside {{ }}.
-}
-
-// rightMeta scans the right "metacharacter", which is known to be present.
-func lexRightMeta(l *lexer) stateFn {
-	l.pos += len(rightMeta)
-	l.emit(itemRightMeta)
-	return lexText
-}
-
-// lexInsideAction scans the elements inside "metacharacters".
-func lexInsideAction(l *lexer) stateFn {
-	// Either number, quoted string, or identifier.
-	// Spaces separate and are ignored.
-	// Pipe symbols separate and are emitted.
-	for {
-		if strings.HasPrefix(l.input[l.pos:], rightMeta) {
-			return lexRightMeta
-		}
-		switch r := l.next(); {
-		case r == eof || r == '\n':
-			return l.errorf("unclosed action")
-		case isSpace(r):
-			l.ignore()
-		case r == '|':
-			l.emit(itemPipe)
-		case r == '"':
-			return lexQuote
-		case r == '`':
-			return lexRawQuote
-		case r == '.':
-			// special look-ahead for ".field" so we don't break l.backup().
-			if l.pos < len(l.input) {
-				r := l.input[l.pos]
-				if r < '0' || '9' < r {
-					return lexIdentifier // itemDot comes from the keyword table.
-				}
-			}
-			fallthrough // '.' can start a number.
-		case r == '+' || r == '-' || '0' <= r && r <= '9':
-			l.backup()
-			return lexNumber
-		case isAlphaNumeric(r):
-			l.backup()
-			return lexIdentifier
-		default:
-			return l.errorf("unrecognized character in action: %#U", r)
-		}
-	}
-	return nil
-}
-
-// lexIdentifier scans an alphanumeric or field.
-func lexIdentifier(l *lexer) stateFn {
-Loop:
-	for {
-		switch r := l.next(); {
-		case isAlphaNumeric(r):
-			// absorb
-		default:
-			l.backup()
-			word := l.input[l.start:l.pos]
-			switch {
-			case key[word] != itemError:
-				l.emit(key[word])
-			case word[0] == '.':
-				l.emit(itemField)
-			default:
-				l.emit(itemIdentifier)
-			}
-			break Loop
-		}
-	}
-	return lexInsideAction
-}
-
-// lexNumber scans a number: decimal, octal, hex, float, or imaginary.  This
-// isn't a perfect number scanner - for instance it accepts "." and "0x0.2"
-// and "089" - but when it's wrong the input is invalid and the parser (via
-// strconv) will notice.
-// TODO: without expressions you can do imaginary but not complex.
-func lexNumber(l *lexer) stateFn {
-	// Optional leading sign.
-	l.accept("+-")
-	// Is it hex?
-	digits := "0123456789"
-	if l.accept("0") && l.accept("xX") {
-		digits = "0123456789abcdefABCDEF"
-	}
-	l.acceptRun(digits)
-	if l.accept(".") {
-		l.acceptRun(digits)
-	}
-	if l.accept("eE") {
-		l.accept("+-")
-		l.acceptRun("0123456789")
-	}
-	// Is it imaginary?
-	l.accept("i")
-	// Next thing mustn't be alphanumeric.
-	if isAlphaNumeric(l.peek()) {
-		l.next()
-		return l.errorf("bad number syntax: %q",
-			l.input[l.start:l.pos])
-	}
-	l.emit(itemNumber)
-	return lexInsideAction
-}
-
-// lexQuote scans a quoted string.
-func lexQuote(l *lexer) stateFn {
-Loop:
-	for {
-		switch l.next() {
-		case '\\':
-			if r := l.next(); r != eof && r != '\n' {
-				break
-			}
-			fallthrough
-		case eof, '\n':
-			return l.errorf("unterminated quoted string")
-		case '"':
-			break Loop
-		}
-	}
-	l.emit(itemString)
-	return lexInsideAction
-}
-
-// lexRawQuote scans a raw quoted string.
-func lexRawQuote(l *lexer) stateFn {
-Loop:
-	for {
-		switch l.next() {
-		case eof, '\n':
-			return l.errorf("unterminated raw quoted string")
-		case '`':
-			break Loop
-		}
-	}
-	l.emit(itemRawString)
-	return lexInsideAction
-}
-
-// isSpace reports whether r is a space character.
-func isSpace(r int) bool {
-	switch r {
-	case ' ', '\t', '\n', '\r':
-		return true
-	}
-	return false
-}
-
-// isAlphaNumeric reports whether r is an alphabetic, digit, or underscore.
-func isAlphaNumeric(r int) bool {
-	return r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r)
-}
diff --git a/content/2011/lex/r59-lex.go b/content/2011/lex/r59-lex.go
deleted file mode 100644
index 33af2db..0000000
--- a/content/2011/lex/r59-lex.go
+++ /dev/null
@@ -1,433 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package template
-
-import (
-	"fmt"
-	"strings"
-	"unicode"
-	"utf8"
-)
-
-// item represents a token or text string returned from the scanner.
-type item struct {
-	typ itemType
-	val string
-}
-
-func (i item) String() string {
-	switch {
-	case i.typ == itemEOF:
-		return "EOF"
-	case i.typ == itemError:
-		return i.val
-	case i.typ > itemKeyword:
-		return fmt.Sprintf("<%s>", i.val)
-	case len(i.val) > 10:
-		return fmt.Sprintf("%.10q...", i.val)
-	}
-	return fmt.Sprintf("%q", i.val)
-}
-
-// itemType identifies the type of lex items.
-type itemType int
-
-const (
-	itemError   itemType = iota // error occurred; value is text of error
-	itemBool                    // boolean constant
-	itemComplex                 // complex constant (1+2i); imaginary is just a number
-	itemEOF
-	itemField      // alphanumeric identifier, starting with '.', possibly chained ('.x.y')
-	itemIdentifier // alphanumeric identifier
-	itemLeftDelim  // left action delimiter
-	itemNumber     // simple number, including imaginary
-	itemPipe       // pipe symbol
-	itemRawString  // raw quoted string (includes quotes)
-	itemRightDelim // right action delimiter
-	itemString     // quoted string (includes quotes)
-	itemText       // plain text
-	// Keywords appear after all the rest.
-	itemKeyword  // used only to delimit the keywords
-	itemDot      // the cursor, spelled '.'.
-	itemDefine   // define keyword
-	itemElse     // else keyword
-	itemEnd      // end keyword
-	itemIf       // if keyword
-	itemRange    // range keyword
-	itemTemplate // template keyword
-	itemWith     // with keyword
-)
-
-// Make the types prettyprint.
-var itemName = map[itemType]string{
-	itemError:      "error",
-	itemBool:       "bool",
-	itemComplex:    "complex",
-	itemEOF:        "EOF",
-	itemField:      "field",
-	itemIdentifier: "identifier",
-	itemLeftDelim:  "left delim",
-	itemNumber:     "number",
-	itemPipe:       "pipe",
-	itemRawString:  "raw string",
-	itemRightDelim: "right delim",
-	itemString:     "string",
-	// keywords
-	itemDot:      ".",
-	itemDefine:   "define",
-	itemElse:     "else",
-	itemIf:       "if",
-	itemEnd:      "end",
-	itemRange:    "range",
-	itemTemplate: "template",
-	itemWith:     "with",
-}
-
-func (i itemType) String() string {
-	s := itemName[i]
-	if s == "" {
-		return fmt.Sprintf("item%d", int(i))
-	}
-	return s
-}
-
-var key = map[string]itemType{
-	".":        itemDot,
-	"define":   itemDefine,
-	"else":     itemElse,
-	"end":      itemEnd,
-	"if":       itemIf,
-	"range":    itemRange,
-	"template": itemTemplate,
-	"with":     itemWith,
-}
-
-const eof = -1
-
-// stateFn represents the state of the scanner as a function that returns the next state.
-type stateFn func(*lexer) stateFn
-
-// lexer holds the state of the scanner.
-type lexer struct {
-	name  string    // the name of the input; used only for error reports.
-	input string    // the string being scanned.
-	state stateFn   // the next lexing function to enter
-	pos   int       // current position in the input.
-	start int       // start position of this item.
-	width int       // width of last rune read from input.
-	items chan item // channel of scanned items.
-}
-
-// next returns the next rune in the input.
-func (l *lexer) next() (rune int) {
-	if l.pos >= len(l.input) {
-		l.width = 0
-		return eof
-	}
-	rune, l.width = utf8.DecodeRuneInString(l.input[l.pos:])
-	l.pos += l.width
-	return rune
-}
-
-// peek returns but does not consume the next rune in the input.
-func (l *lexer) peek() int {
-	rune := l.next()
-	l.backup()
-	return rune
-}
-
-// backup steps back one rune. Can only be called once per call of next.
-func (l *lexer) backup() {
-	l.pos -= l.width
-}
-
-// emit passes an item back to the client.
-func (l *lexer) emit(t itemType) {
-	l.items <- item{t, l.input[l.start:l.pos]}
-	l.start = l.pos
-}
-
-// ignore skips over the pending input before this point.
-func (l *lexer) ignore() {
-	l.start = l.pos
-}
-
-// accept consumes the next rune if it's from the valid set.
-func (l *lexer) accept(valid string) bool {
-	if strings.IndexRune(valid, l.next()) >= 0 {
-		return true
-	}
-	l.backup()
-	return false
-}
-
-// acceptRun consumes a run of runes from the valid set.
-func (l *lexer) acceptRun(valid string) {
-	for strings.IndexRune(valid, l.next()) >= 0 {
-	}
-	l.backup()
-}
-
-// lineNumber reports which line we're on. Doing it this way
-// means we don't have to worry about peek double counting.
-func (l *lexer) lineNumber() int {
-	return 1 + strings.Count(l.input[:l.pos], "\n")
-}
-
-// error returns an error token and terminates the scan by passing
-// back a nil pointer that will be the next state, terminating l.run.
-func (l *lexer) errorf(format string, args ...interface{}) stateFn {
-	l.items <- item{itemError, fmt.Sprintf(format, args...)}
-	return nil
-}
-
-// nextItem returns the next item from the input.
-func (l *lexer) nextItem() item {
-	for {
-		select {
-		case item := <-l.items:
-			return item
-		default:
-			l.state = l.state(l)
-		}
-	}
-	panic("not reached")
-}
-
-// lex creates a new scanner for the input string.
-func lex(name, input string) *lexer {
-	l := &lexer{
-		name:  name,
-		input: input,
-		state: lexText,
-		items: make(chan item, 2), // Two items sufficient.
-	}
-	return l
-}
-
-// state functions
-
-const (
-	leftDelim    = "{{"
-	rightDelim   = "}}"
-	leftComment  = "{{/*"
-	rightComment = "*/}}"
-)
-
-// lexText scans until an opening action delimiter, "{{".
-func lexText(l *lexer) stateFn {
-	for {
-		if strings.HasPrefix(l.input[l.pos:], leftDelim) {
-			if l.pos > l.start {
-				l.emit(itemText)
-			}
-			return lexLeftDelim
-		}
-		if l.next() == eof {
-			break
-		}
-	}
-	// Correctly reached EOF.
-	if l.pos > l.start {
-		l.emit(itemText)
-	}
-	l.emit(itemEOF)
-	return nil
-}
-
-// lexLeftDelim scans the left delimiter, which is known to be present.
-func lexLeftDelim(l *lexer) stateFn {
-	if strings.HasPrefix(l.input[l.pos:], leftComment) {
-		return lexComment
-	}
-	l.pos += len(leftDelim)
-	l.emit(itemLeftDelim)
-	return lexInsideAction
-}
-
-// lexComment scans a comment. The left comment marker is known to be present.
-func lexComment(l *lexer) stateFn {
-	i := strings.Index(l.input[l.pos:], rightComment)
-	if i < 0 {
-		return l.errorf("unclosed comment")
-	}
-	l.pos += i + len(rightComment)
-	l.ignore()
-	return lexText
-}
-
-// lexRightDelim scans the right delimiter, which is known to be present.
-func lexRightDelim(l *lexer) stateFn {
-	l.pos += len(rightDelim)
-	l.emit(itemRightDelim)
-	return lexText
-}
-
-// lexInsideAction scans the elements inside action delimiters.
-func lexInsideAction(l *lexer) stateFn {
-	// Either number, quoted string, or identifier.
-	// Spaces separate and are ignored.
-	// Pipe symbols separate and are emitted.
-	for {
-		if strings.HasPrefix(l.input[l.pos:], rightDelim) {
-			return lexRightDelim
-		}
-		switch r := l.next(); {
-		case r == eof || r == '\n':
-			return l.errorf("unclosed action")
-		case isSpace(r):
-			l.ignore()
-		case r == '|':
-			l.emit(itemPipe)
-		case r == '"':
-			return lexQuote
-		case r == '`':
-			return lexRawQuote
-		case r == '.':
-			// special look-ahead for ".field" so we don't break l.backup().
-			if l.pos < len(l.input) {
-				r := l.input[l.pos]
-				if r < '0' || '9' < r {
-					return lexIdentifier // itemDot comes from the keyword table.
-				}
-			}
-			fallthrough // '.' can start a number.
-		case r == '+' || r == '-' || ('0' <= r && r <= '9'):
-			l.backup()
-			return lexNumber
-		case isAlphaNumeric(r):
-			l.backup()
-			return lexIdentifier
-		default:
-			return l.errorf("unrecognized character in action: %#U", r)
-		}
-	}
-	return nil
-}
-
-// lexIdentifier scans an alphanumeric or field.
-func lexIdentifier(l *lexer) stateFn {
-Loop:
-	for {
-		switch r := l.next(); {
-		case isAlphaNumeric(r):
-			// absorb.
-		case r == '.' && l.input[l.start] == '.':
-			// field chaining; absorb into one token.
-		default:
-			l.backup()
-			word := l.input[l.start:l.pos]
-			switch {
-			case key[word] > itemKeyword:
-				l.emit(key[word])
-			case word[0] == '.':
-				l.emit(itemField)
-			case word == "true", word == "false":
-				l.emit(itemBool)
-			default:
-				l.emit(itemIdentifier)
-			}
-			break Loop
-		}
-	}
-	return lexInsideAction
-}
-
-// lexNumber scans a number: decimal, octal, hex, float, or imaginary.  This
-// isn't a perfect number scanner - for instance it accepts "." and "0x0.2"
-// and "089" - but when it's wrong the input is invalid and the parser (via
-// strconv) will notice.
-func lexNumber(l *lexer) stateFn {
-	if !l.scanNumber() {
-		return l.errorf("bad number syntax: %q", l.input[l.start:l.pos])
-	}
-	if sign := l.peek(); sign == '+' || sign == '-' {
-		// Complex: 1+2i.  No spaces, must end in 'i'.
-		if !l.scanNumber() || l.input[l.pos-1] != 'i' {
-			return l.errorf("bad number syntax: %q", l.input[l.start:l.pos])
-		}
-		l.emit(itemComplex)
-	} else {
-		l.emit(itemNumber)
-	}
-	return lexInsideAction
-}
-
-func (l *lexer) scanNumber() bool {
-	// Optional leading sign.
-	l.accept("+-")
-	// Is it hex?
-	digits := "0123456789"
-	if l.accept("0") && l.accept("xX") {
-		digits = "0123456789abcdefABCDEF"
-	}
-	l.acceptRun(digits)
-	if l.accept(".") {
-		l.acceptRun(digits)
-	}
-	if l.accept("eE") {
-		l.accept("+-")
-		l.acceptRun("0123456789")
-	}
-	// Is it imaginary?
-	l.accept("i")
-	// Next thing mustn't be alphanumeric.
-	if isAlphaNumeric(l.peek()) {
-		l.next()
-		return false
-	}
-	return true
-}
-
-// lexQuote scans a quoted string.
-func lexQuote(l *lexer) stateFn {
-Loop:
-	for {
-		switch l.next() {
-		case '\\':
-			if r := l.next(); r != eof && r != '\n' {
-				break
-			}
-			fallthrough
-		case eof, '\n':
-			return l.errorf("unterminated quoted string")
-		case '"':
-			break Loop
-		}
-	}
-	l.emit(itemString)
-	return lexInsideAction
-}
-
-// lexRawQuote scans a raw quoted string.
-func lexRawQuote(l *lexer) stateFn {
-Loop:
-	for {
-		switch l.next() {
-		case eof, '\n':
-			return l.errorf("unterminated raw quoted string")
-		case '`':
-			break Loop
-		}
-	}
-	l.emit(itemRawString)
-	return lexInsideAction
-}
-
-// isSpace reports whether r is a space character.
-func isSpace(r int) bool {
-	switch r {
-	case ' ', '\t', '\n', '\r':
-		return true
-	}
-	return false
-}
-
-// isAlphaNumeric reports whether r is an alphabetic, digit, or underscore.
-func isAlphaNumeric(r int) bool {
-	return r == '_' || unicode.IsLetter(r) || unicode.IsDigit(r)
-}
diff --git a/content/2011/lex/snippets b/content/2011/lex/snippets
deleted file mode 100644
index c00822b..0000000
--- a/content/2011/lex/snippets
+++ /dev/null
@@ -1,21 +0,0 @@
-Evaluation: {{.Title}}
-Constants and functions: {{printf "%g: %#3X" 1.2+2i 123}}
-Control structures {{range $s.Text}} {{.}} {{end}}
-
-// One iteration:
-switch state {
-case state1: 
-	state = action1()
-case state2:
-	state = action2()
-case state3: 
-	state = action3()
-}
-
-// run lexes the input by executing state functions
-// until the state is nil.
-func run() {
-	for state := startState; state != nil; {
-		state = state(lexer)
-	}
-}
diff --git a/content/2012/10things.slide b/content/2012/10things.slide
deleted file mode 100644
index 4ec3f88..0000000
--- a/content/2012/10things.slide
+++ /dev/null
@@ -1,214 +0,0 @@
-10 things you (probably) don't know about Go
-
-Andrew Gerrand
-Gopher
-https://plus.google.com/106356964679457436995
-@enneff
-http://golang.org
-
-* 1. Anonymous structs
-
-- Grouped globals
-
-	var config struct {
-		APIKey      string
-		OAuthConfig oauth.Config
-	}
-
-	config.APIKey = "BADC0C0A"
-
-- Template data
-
-	data := struct {
-		Title string
-		Users []*User
-	}{
-		title,
-		users,
-	}
-	err := tmpl.Execute(w, data)
-
-(Cheaper and safer than using `map[string]interface{}`.)
-
-* 1b. Anonymous structs
-
-- Test tables
-
-	var indexRuneTests = []struct {
-		s    string
-		rune rune
-		out  int
-	}{
-		{"a A x", 'A', 2},
-		{"some_text=some_value", '=', 9},
-		{"☺a", 'a', 3},
-		{"a☻☺b", '☺', 4},
-	}
-
-- Embedded lock
-
-	var hits struct {
-		sync.Mutex
-		n int
-	}
-
-	hits.Lock()
-	hits.n++
-	hits.Unlock()
-
-
-* 2. Nested structs
-
-- Decoding deeply nested JSON data
-
-  {"data": {"children": [
-    {"data": {
-      "title": "The Go homepage",
-      "url": "http://golang.org/"
-    }},
-    ...
-  ]}}
-
-	type Item struct {
-		Title string
-		URL   string
-	}
-
-	type Response struct {
-		Data struct {
-			Children []struct {
-				Data Item
-			}
-		}
-	}
-
-
-* 3. Command-line godoc
-
-  % godoc sync Mutex
-  PACKAGE
-  
-  package sync
-      import "sync"
-  
-  TYPES
-  
-  type Mutex struct {
-      // contains filtered or unexported fields
-  }
-      A Mutex is a mutual exclusion lock. Mutexes can be created as part of
-      other structures; the zero value for a Mutex is an unlocked mutex.
-  
-  func (m *Mutex) Lock()
-      Lock locks m. If the lock is already in use, the calling goroutine
-      blocks until the mutex is available.
-  
-  func (m *Mutex) Unlock()
-      Unlock unlocks m. It is a run-time error if m is not locked on entry to
-      Unlock.
-  
-      A locked Mutex is not associated with a particular goroutine. It is
-      allowed for one goroutine to lock a Mutex and then arrange for another
-      goroutine to unlock it.
-
-
-* 4. godoc -src
-
-  % godoc -src sync Mutex
-  // A Mutex is a mutual exclusion lock.
-  // Mutexes can be created as part of other structures;
-  // the zero value for a Mutex is an unlocked mutex.
-  type Mutex struct {
-      state int32
-      sema  uint32
-  }
-
-Also shows unexported state! Great for digging around.
-
-
-* 5. go get supports custom domains
-
-Yep:
-
-	go get camlistore.org/pkg/netutil
-
-See `go help importpath` for the details.
-
-
-* 6. Mock out the file system
-
-Got a package that works with the file system, but don't want your tests to actually use the disk?
-
-  var fs fileSystem = osFS{}
-  
-  type fileSystem interface {
-  	Open(name string) (file, error)
-  	Stat(name string) (os.FileInfo, error)
-  }
-  
-  type file interface {
-  	io.Closer
-  	io.Reader
-  	io.ReaderAt
-  	io.Seeker
-  	Stat() (os.FileInfo, error)
-  }
-  
-  // osFS implements fileSystem using the local disk.
-  type osFS struct{}
-  
-  func (osFS) Open(name string) (file, error)        { return os.Open(name) }
-  func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) }
-
-Implement your own fake `fileSystem` in and put it in `fs` while testing.
-
-
-* 7. Method expressions
-
-  type T struct {}
-  func (T) Foo(s string) { println(s) }
-
-  var fn func(T, string) = T.Foo
-
-Real example from `os/exec`:
-
-  func (c *Cmd) stdin() (f *os.File, err error)
-  func (c *Cmd) stdout() (f *os.File, err error)
-  func (c *Cmd) stderr() (f *os.File, err error)
-
-	type F func(*Cmd) (*os.File, error)
-	for _, setupFd := range []F{(*Cmd).stdin, (*Cmd).stdout, (*Cmd).stderr} {
-		fd, err := setupFd(c)
-		if err != nil {
-			c.closeDescriptors(c.closeAfterStart)
-			c.closeDescriptors(c.closeAfterWait)
-			return err
-		}
-		c.childFiles = append(c.childFiles, fd)
-	}
-
-
-* 8. Send and receive on the same channel
-
-.play 10things/8.go
-
-
-* 9. Using close to broadcast
-
-.play 10things/9.go /func.waiter/,/endmain/
-
-
-* 9b. Using close to broadcast
-
-.play 10things/9b.go /func.worker/,/endmain/
-
-
-* 10. Nil channel in select
-
-.play 10things/10.go /func.worker/,/endmain/
-
-
-* 11. The gopher's name
-
-.image 10things/gopher.jpg
-
diff --git a/content/2012/10things/10.go b/content/2012/10things/10.go
deleted file mode 100644
index 986cb87..0000000
--- a/content/2012/10things/10.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func worker(i int, ch chan Work, quit chan struct{}) {
-	for {
-		select {
-		case w := <-ch:
-			if quit == nil { // HL
-				w.Refuse(); fmt.Println("worker", i, "refused", w)
-				break
-			}
-			w.Do(); fmt.Println("worker", i, "processed", w)
-		case <-quit:
-			fmt.Println("worker", i, "quitting")
-			quit = nil // HL
-		}
-	}
-}
-
-func main() {
-	ch, quit := make(chan Work), make(chan struct{})
-	go makeWork(ch)
-	for i := 0; i < 4; i++ { go worker(i, ch, quit) }
-	time.Sleep(5 * time.Second)
-	close(quit)
-	time.Sleep(2 * time.Second)
-}
-// endmain OMIT
-
-type Work string
-func (w Work) Do() {
-	time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
-}
-func (w Work) Refuse() {
-	time.Sleep(time.Duration(rand.Intn(10)) * time.Millisecond)
-}
-
-func makeWork(ch chan Work) {
-	for i := 0; ; i++ {
-		ch <- Work(fmt.Sprintf("job %x", i))
-	}
-}
diff --git a/content/2012/10things/8.go b/content/2012/10things/8.go
deleted file mode 100644
index 9be9a4d..0000000
--- a/content/2012/10things/8.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-var battle = make(chan string)
-
-func warrior(name string, done chan struct{}) {
-	select {
-	case opponent := <-battle:
-		fmt.Printf("%s beat %s\n", name, opponent)
-	case battle <- name:
-		// I lost :-(
-	}
-	done <- struct{}{}
-}
-
-func main() {
-	done := make(chan struct{})
-	langs := []string{"Go", "C", "C++", "Java", "Perl", "Python"}
-	for _, l := range langs { go warrior(l, done) }
-	for _ = range langs { <-done }
-}
diff --git a/content/2012/10things/9.go b/content/2012/10things/9.go
deleted file mode 100644
index ce6791f..0000000
--- a/content/2012/10things/9.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-	"math/rand"
-)
-
-func waiter(i int, block, done chan struct{}) {
-	time.Sleep(time.Duration(rand.Intn(3000)) * time.Millisecond)
-	fmt.Println(i, "waiting...")
-	<-block // HL
-	fmt.Println(i, "done!")
-	done <- struct{}{}
-}
-
-func main() {
-	block, done := make(chan struct{}), make(chan struct{})
-	for i := 0; i < 4; i++ {
-		go waiter(i, block, done)
-	}
-	time.Sleep(5 * time.Second)
-	close(block) // HL
-	for i := 0; i < 4; i++ {
-		<-done
-	}
-}
-// endmain OMIT
diff --git a/content/2012/10things/9b.go b/content/2012/10things/9b.go
deleted file mode 100644
index 577b016..0000000
--- a/content/2012/10things/9b.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func worker(i int, ch chan Work, quit chan struct{}) {
-	var quitting bool
-	for {
-		select {
-		case w := <-ch:
-			if quitting {
-				w.Refuse(); fmt.Println("worker", i, "refused", w)
-				break
-			}
-			w.Do(); fmt.Println("worker", i, "processed", w)
-		case <-quit:
-			fmt.Println("worker", i, "quitting")
-			quitting = true
-		}
-	}
-}
-
-func main() {
-	ch, quit := make(chan Work), make(chan struct{})
-	go makeWork(ch)
-	for i := 0; i < 4; i++ { go worker(i, ch, quit) }
-	time.Sleep(5 * time.Second)
-	close(quit)
-	time.Sleep(2 * time.Second)
-}
-// endmain OMIT
-
-type Work string
-func (w Work) Do() {
-	time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
-}
-func (w Work) Refuse() {
-	time.Sleep(time.Duration(rand.Intn(10)) * time.Millisecond)
-}
-
-func makeWork(ch chan Work) {
-	for i := 0; ; i++ {
-		ch <- Work(fmt.Sprintf("job %x", i))
-	}
-}
diff --git a/content/2012/10things/gopher.jpg b/content/2012/10things/gopher.jpg
deleted file mode 100644
index b3d3327..0000000
--- a/content/2012/10things/gopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/README b/content/2012/README
deleted file mode 100644
index 8be91a0..0000000
--- a/content/2012/README
+++ /dev/null
@@ -1,5 +0,0 @@
-These slide files are intended to be viewed with the 'present' tool.
-To install 'present':
-
-	go get code.google.com/p/go.talks/present
-
diff --git a/content/2012/chat.slide b/content/2012/chat.slide
deleted file mode 100644
index 727a121..0000000
--- a/content/2012/chat.slide
+++ /dev/null
@@ -1,300 +0,0 @@
-Go: code that grows with grace
-
-Andrew Gerrand
-Google Sydney
-http://andrewgerrand.com
-@enneff
-http://golang.org
-
-* Video
-
-A video of this talk was recorded at Øredev in Malmö, Sweden in November 2012.
-
-.link http://vimeo.com/53221560 Watch the talk on Vimeo
-
-* Go
-
-You may have heard of Go.
-
-It's my favorite language. I think you'll like it, too.
-
-* What is Go?
-
-An open source (BSD licensed) project:
-
-- Language specification,
-- Small runtime (garbage collector, scheduler, etc),
-- Two compilers (`gc` and `gccgo`),
-- 'Batteries included' standard library,
-- Tools (build, fetch, test, document, profile, format),
-- Documentation.
-
-As of September 2012 we have more than 300 contributors.
-
-* Go is about composition
-
-Go is Object Oriented, but not in the usual way.
-
-- no classes (methods may be declared on any type)
-- no subtype inheritance
-- interfaces are satisfied implicitly (structural typing)
-
-The result: simple pieces connected by small interfaces.
-
-* Go is about concurrency
-
-Go provides CSP-like concurrency primitives.
-
-- lightweight threads (goroutines)
-- typed thread-safe communication and synchronization (channels)
-
-The result: comprehensible concurrent code.
-
-* Go is about gophers
-
-.image chat/gophers.jpg
-
-* Core values
-
-Go is about composition, concurrency, and gophers.
-
-Keep that in mind.
-
-* Hello, go
-
-.play chat/support/hello.go
-
-* Hello, net
-
-.play chat/support/hello-net.go
-
-* Interfaces
-
-Hey neato! We just used `Fprintln` to write to a net connection.
-
-That's because a `Fprintln` writes to an `io.Writer`, and `net.Conn` is an `io.Writer`.
-
-.code chat/support/hello-net.go /Fprintln/
-.code chat/support/defs.go /Fprintln/
-.code chat/support/defs.go /type.Writer/,/^}/
-.code chat/support/defs.go /type.Conn/,/^}/
-
-* An echo server
-
-.play chat/support/echo-no-concurrency.go
-
-* A closer look at io.Copy
-
-.code chat/support/echo-no-concurrency.go /Copy/
-.code chat/support/defs.go /Copy/,/func/
-.code chat/support/defs.go /type.Conn/,/^}/
-.code chat/support/defs.go /type.Writer/,/^}/
-.code chat/support/defs.go /type.Reader/,/^}/
-
-* Goroutines
-
-Goroutines are lightweight threads that are managed by the Go runtime. To run a function in a new goroutine, just put `"go"` before the function call.
-
-.play chat/support/goroutines.go
-
-* A concurrent echo server
-
-.play chat/support/echo.go
-
-* "Chat roulette"
-
-In this talk we'll look at a simple program, based on the popular "chat roulette" site.
-
-In short:
-
-- a user connects,
-- another user connects,
-- everything one user types is sent to the other.
-
-* Design
-
-The chat program is similar to the echo program. With echo, we copy a connection's incoming data back to the same connection.
-
-For chat, we must copy the incoming data from one user's connection to another's.
-
-Copying the data is easy. As in real life, the hard part is matching one partner with another.
-
-* Design diagram
-
-.image chat/diagrams.png
-
-* Channels
-
-Goroutines communicate via channels. A channel is a typed conduit that may be synchronous (unbuffered) or asynchronous (buffered).
-
-.play chat/support/chan.go
-
-* Select
-
-A select statement is like a switch, but it selects over channel operations (and chooses exactly one of them).
-
-.play chat/support/select.go
-
-* Modifying echo to create chat
-
-In the accept loop, we replace the call to `io.Copy`:
-
-.code chat/support/echo.go /for {/,/\n	}/
-
-with a call to a new function, `match`:
-
-.code chat/tcp-simple/chat.go /for {/,/\n	}/
-
-* The matcher
-
-The `match` function simultaneously tries to send and receive a connection on a channel.
-
-- If the send succeeds, the connection has been handed off to another goroutine, so the function exits and the goroutine shuts down.
-- If the receive succeeds, a connection has been received from another goroutine. The current goroutine then has two connections, so it starts a chat session between them.
-
-.code chat/tcp-simple/chat.go /var.partner/,/^}/
-
-* The conversation
-
-The chat function sends a greeting to each connection and then copies data from one to the other, and vice versa.
-
-Notice that it launches another goroutine so that the copy operations may happen concurrently.
-
-.code chat/tcp-simple/chat.go /func.chat/,/^}/
-
-* Demo
-
-* Error handling
-
-It's important to clean up when the conversation is over. To do this we send the error value from each `io.Copy` call to a channel, log any non-nil errors, and close both connections.
-
-.code chat/tcp/chat.go /func.chat/,/^}/
-.code chat/tcp/chat.go /func.cp/,/^}/
-
-* Demo
-
-* Taking it to the web 
-
-"Cute program," you say, "But who wants to chat over a raw TCP connection?"
-
-Good point. Let's modernize it by turning it a web application.
-
-Instead of TCP sockets, we'll use websockets.
-
-We'll serve the user interface with Go's standard `net/http` package, and websocket support is provided by the `websocket` package from the `go.net` sub-repository,
-
-* Hello, web
-
-.play chat/support/hello-web.go
-
-* Hello, WebSocket
-
-.code chat/support/websocket.js
-.play chat/support/websocket.go
-
-* Using the http and websocket packages
-
-.code chat/http/chat.go /package/,/^}/
-
-* Serving the HTML and JavaScript
-
-.code chat/http/html.go /import/
-.code chat/http/html.go /func/,/<script>/
-.code chat/http/html.go /websocket.=/,/onClose/
-.code chat/http/html.go /<\/html>/,$
-
-* Adding a socket type
-
-We can't just use a `websocket.Conn` instead of the `net.Conn`, because a `websocket.Conn` is held open by its handler function. Here we use a channel to keep the handler running until the socket's `Close` method is called.
-
-.code chat/http-noembed/chat.go /type.socket/,/END/
-
-* Struct embedding
-
-Go supports a kind of "mix-in" functionality with a feature known as "struct embedding". The embedding struct delegates calls to the embedded type's methods.
-
-.play chat/support/embed.go /type/,$
-
-* Embedding the websocket connection
-
-By embedding the `*websocket.Conn` as an `io.ReadWriter`, we can drop the explicit `socket` `Read` and `Write` methods. 
-
-.code chat/http/chat.go /type.socket/,/END/
-
-* Demo
-
-* Relieving loneliness
-
-What if you connect, but there's noone there?
-
-Wouldn't it be nice if we could synthesize a chat partner?
-
-Let's do it.
-
-* Generating text with markov chains
-
-.code chat/support/markov.txt
-
-* Generating text with markov chains
-
-Fortunately, the Go docs include a markov chain implementation:
-
-.link http://golang.org/doc/codewalk/markov
-
-We'll use a version that has been modified to be safe for concurrent use.
-
-.code chat/markov/markov.go /Chain/,/{/
-.code chat/markov/markov.go /Write/,/{/
-.code chat/markov/markov.go /Generate/,/{/
-
-* Feeding the chain
-
-We will use all text that enters the system to build the markov chains.
-To do this we split the socket's `ReadWriter` into a `Reader` and a `Writer`,
-and feed all incoming data to the `Chain` instance.
-
-.code chat/markov/chat.go /type.socket/,/^}/
-.code chat/markov/chat.go /var.chain/,/^}/
-
-* The markov bot
-
-.code chat/markov/chat.go /\/\/.Bot/,/^}/
-.code chat/markov/chat.go /type.bot/,/^}/
-.code chat/markov/chat.go /func.+bot.+Write/,/^}/
-.code chat/markov/chat.go /func.+bot.+speak/,/^}/
-
-* Integrating the markov bot
-
-The bot should jump in if a real partner doesn't join.
-To do this, we add a case to the select that triggers after 5 seconds, starting a chat between the user's socket and a bot.
-
-.code chat/markov/chat.go /func.match/,/^}/
-
-The `chat` function remains untouched.
-
-* Demo
-
-* One more thing
-
-* TCP and HTTP at the same time
-
-.code chat/both/chat.go /func main/,/^}/
-.code chat/both/chat.go /func netListen/,/^}/
-
-* Demo
-
-* Discussion
-
-* Further reading
-
-All about Go:
-
-.link http://golang.org
-
-The slides for this talk:
-
-.link http://talks.golang.org/2012/chat.slide
-
-"Go Concurrency Patterns" by Rob Pike:
-
-.link http://golang.org/s/concurrency-patterns
diff --git a/content/2012/chat/both/chat.go b/content/2012/chat/both/chat.go
deleted file mode 100644
index d712b91..0000000
--- a/content/2012/chat/both/chat.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net"
-	"net/http"
-	"time"
-
-	"golang.org/x/net/websocket"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	go netListen() // HL
-	http.HandleFunc("/", rootHandler)
-	http.Handle("/socket", websocket.Handler(socketHandler))
-	err := http.ListenAndServe(listenAddr, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-func netListen() {
-	l, err := net.Listen("tcp", "localhost:4001")
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go match(c)
-	}
-}
-
-type socket struct {
-	io.Reader
-	io.Writer
-	done chan bool
-}
-
-func (s socket) Close() error {
-	s.done <- true
-	return nil
-}
-
-var chain = NewChain(2) // 2-word prefixes
-
-func socketHandler(ws *websocket.Conn) {
-	r, w := io.Pipe()
-	go func() {
-		_, err := io.Copy(io.MultiWriter(w, chain), ws)
-		w.CloseWithError(err)
-	}()
-	s := socket{r, ws, make(chan bool)}
-	go match(s)
-	<-s.done
-}
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	case <-time.After(5 * time.Second):
-		chat(Bot(), c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	errc := make(chan error, 1)
-	go cp(a, b, errc)
-	go cp(b, a, errc)
-	if err := <-errc; err != nil {
-		log.Println(err)
-	}
-	a.Close()
-	b.Close()
-}
-
-func cp(w io.Writer, r io.Reader, errc chan<- error) {
-	_, err := io.Copy(w, r)
-	errc <- err
-}
-
-// Bot returns an io.ReadWriteCloser that responds to
-// each incoming write with a generated sentence.
-func Bot() io.ReadWriteCloser {
-	r, out := io.Pipe() // for outgoing data
-	return bot{r, out}
-}
-
-type bot struct {
-	io.ReadCloser
-	out io.Writer
-}
-
-func (b bot) Write(buf []byte) (int, error) {
-	go b.speak()
-	return len(buf), nil
-}
-
-func (b bot) speak() {
-	time.Sleep(time.Second)
-	msg := chain.Generate(10) // at most 10 words
-	b.out.Write([]byte(msg))
-}
diff --git a/content/2012/chat/both/html.go b/content/2012/chat/both/html.go
deleted file mode 100644
index 090e80d..0000000
--- a/content/2012/chat/both/html.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "html/template"
-import "net/http"
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
-	rootTemplate.Execute(w, listenAddr)
-}
-
-var rootTemplate = template.Must(template.New("root").Parse(`
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8" />
-<script>
-
-var input, output, websocket;
-
-function showMessage(m) {
-	var p = document.createElement("p");
-	p.innerHTML = m;
-	output.appendChild(p);
-}
-
-function onMessage(e) {
-	showMessage(e.data);
-}
-
-function onClose() {
-	showMessage("Connection closed.");
-}
-
-function sendMessage() {
-	var m = input.value;
-	input.value = "";
-	websocket.send(m + "\n");
-	showMessage(m);
-}
-
-function onKey(e) {
-	if (e.keyCode == 13) {
-		sendMessage();
-	}
-}
-
-function init() {
-	input = document.getElementById("input");
-	input.addEventListener("keyup", onKey, false);
-
-	output = document.getElementById("output");
-
-	websocket = new WebSocket("ws://{{.}}/socket");
-	websocket.onmessage = onMessage;
-	websocket.onclose = onClose;
-}
-
-window.addEventListener("load", init, false);
-
-</script>
-</head>
-<body>
-<input id="input" type="text">
-<div id="output"></div>
-</body>
-</html>
-`))
diff --git a/content/2012/chat/both/markov.go b/content/2012/chat/both/markov.go
deleted file mode 100644
index 97dfe41..0000000
--- a/content/2012/chat/both/markov.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// This Markov chain code is taken from the "Generating arbitrary text"
-// codewalk: http://golang.org/doc/codewalk/markov/
-
-import (
-	"bytes"
-	"fmt"
-	"math/rand"
-	"strings"
-	"sync"
-)
-
-// Prefix is a Markov chain prefix of one or more words.
-type Prefix []string
-
-// String returns the Prefix as a string (for use as a map key).
-func (p Prefix) String() string {
-	return strings.Join(p, " ")
-}
-
-// Shift removes the first word from the Prefix and appends the given word.
-func (p Prefix) Shift(word string) {
-	copy(p, p[1:])
-	p[len(p)-1] = word
-}
-
-// Chain contains a map ("chain") of prefixes to a list of suffixes.
-// A prefix is a string of prefixLen words joined with spaces.
-// A suffix is a single word. A prefix can have multiple suffixes.
-type Chain struct {
-	chain     map[string][]string
-	prefixLen int
-	mu        sync.Mutex
-}
-
-// NewChain returns a new Chain with prefixes of prefixLen words.
-func NewChain(prefixLen int) *Chain {
-	return &Chain{
-		chain:     make(map[string][]string),
-		prefixLen: prefixLen,
-	}
-}
-
-// Write parses the bytes into prefixes and suffixes that are stored in Chain.
-func (c *Chain) Write(b []byte) (int, error) {
-	br := bytes.NewReader(b)
-	p := make(Prefix, c.prefixLen)
-	for {
-		var s string
-		if _, err := fmt.Fscan(br, &s); err != nil {
-			break
-		}
-		key := p.String()
-		c.mu.Lock()
-		c.chain[key] = append(c.chain[key], s)
-		c.mu.Unlock()
-		p.Shift(s)
-	}
-	return len(b), nil
-}
-
-// Generate returns a string of at most n words generated from Chain.
-func (c *Chain) Generate(n int) string {
-	c.mu.Lock()
-	defer c.mu.Unlock()
-	p := make(Prefix, c.prefixLen)
-	var words []string
-	for i := 0; i < n; i++ {
-		choices := c.chain[p.String()]
-		if len(choices) == 0 {
-			break
-		}
-		next := choices[rand.Intn(len(choices))]
-		words = append(words, next)
-		p.Shift(next)
-	}
-	return strings.Join(words, " ")
-}
diff --git a/content/2012/chat/diagrams.png b/content/2012/chat/diagrams.png
deleted file mode 100644
index 8c8ceac..0000000
--- a/content/2012/chat/diagrams.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/chat/gophers.jpg b/content/2012/chat/gophers.jpg
deleted file mode 100644
index 2158dee..0000000
--- a/content/2012/chat/gophers.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/chat/http-noembed/chat.go b/content/2012/chat/http-noembed/chat.go
deleted file mode 100644
index 095934a..0000000
--- a/content/2012/chat/http-noembed/chat.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-
-	"golang.org/x/net/websocket"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	http.HandleFunc("/", rootHandler)
-	http.Handle("/socket", websocket.Handler(socketHandler))
-	err := http.ListenAndServe(listenAddr, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-type socket struct {
-	conn *websocket.Conn
-	done chan bool
-}
-
-func (s socket) Read(b []byte) (int, error)  { return s.conn.Read(b) }
-func (s socket) Write(b []byte) (int, error) { return s.conn.Write(b) }
-
-func (s socket) Close() error {
-	s.done <- true
-	return nil
-}
-
-func socketHandler(ws *websocket.Conn) {
-	s := socket{conn: ws, done: make(chan bool)}
-	go match(s)
-	<-s.done
-}
-
-// END OMIT
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	errc := make(chan error, 1)
-	go cp(a, b, errc)
-	go cp(b, a, errc)
-	if err := <-errc; err != nil {
-		log.Println(err)
-	}
-	a.Close()
-	b.Close()
-}
-
-func cp(w io.Writer, r io.Reader, errc chan<- error) {
-	_, err := io.Copy(w, r)
-	errc <- err
-}
diff --git a/content/2012/chat/http-noembed/html.go b/content/2012/chat/http-noembed/html.go
deleted file mode 100644
index b4e1fdc..0000000
--- a/content/2012/chat/http-noembed/html.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "html/template"
-import "net/http"
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
-	rootTemplate.Execute(w, listenAddr)
-}
-
-var rootTemplate = template.Must(template.New("root").Parse(`
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8" />
-<script>
-
-var input, output, websocket;
-
-function showMessage(m) {
-	var p = document.createElement("p");
-	p.innerHTML = m;
-	output.appendChild(p);
-}
-
-function onMessage(e) {
-	showMessage(e.data);
-}
-
-function onClose() {
-	showMessage("Connection closed.");
-}
-
-function sendMessage() {
-	var m = input.value;
-	input.value = "";
-	websocket.send(m);
-	showMessage(m);
-}
-
-function onKey(e) {
-	if (e.keyCode == 13) {
-		sendMessage();
-	}
-}
-
-function init() {
-	input = document.getElementById("input");
-	input.addEventListener("keyup", onKey, false);
-
-	output = document.getElementById("output");
-
-	websocket = new WebSocket("ws://{{.}}/socket");
-	websocket.onmessage = onMessage;
-	websocket.onclose = onClose;
-}
-
-window.addEventListener("load", init, false);
-
-</script>
-</head>
-<body>
-<input id="input" type="text">
-<div id="output"></div>
-</body>
-</html>
-`))
diff --git a/content/2012/chat/http/chat.go b/content/2012/chat/http/chat.go
deleted file mode 100644
index 031a518..0000000
--- a/content/2012/chat/http/chat.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-
-	"golang.org/x/net/websocket"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	http.HandleFunc("/", rootHandler)
-	http.Handle("/socket", websocket.Handler(socketHandler))
-	err := http.ListenAndServe(listenAddr, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-type socket struct {
-	io.ReadWriter // HL
-	done          chan bool
-}
-
-func (s socket) Close() error {
-	s.done <- true
-	return nil
-}
-
-func socketHandler(ws *websocket.Conn) {
-	s := socket{ws, make(chan bool)} // HL
-	go match(s)
-	<-s.done
-}
-
-// END OMIT
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	errc := make(chan error, 1)
-	go cp(a, b, errc)
-	go cp(b, a, errc)
-	if err := <-errc; err != nil {
-		log.Println(err)
-	}
-	a.Close()
-	b.Close()
-}
-
-func cp(w io.Writer, r io.Reader, errc chan<- error) {
-	_, err := io.Copy(w, r)
-	errc <- err
-}
diff --git a/content/2012/chat/http/html.go b/content/2012/chat/http/html.go
deleted file mode 100644
index b4e1fdc..0000000
--- a/content/2012/chat/http/html.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "html/template"
-import "net/http"
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
-	rootTemplate.Execute(w, listenAddr)
-}
-
-var rootTemplate = template.Must(template.New("root").Parse(`
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8" />
-<script>
-
-var input, output, websocket;
-
-function showMessage(m) {
-	var p = document.createElement("p");
-	p.innerHTML = m;
-	output.appendChild(p);
-}
-
-function onMessage(e) {
-	showMessage(e.data);
-}
-
-function onClose() {
-	showMessage("Connection closed.");
-}
-
-function sendMessage() {
-	var m = input.value;
-	input.value = "";
-	websocket.send(m);
-	showMessage(m);
-}
-
-function onKey(e) {
-	if (e.keyCode == 13) {
-		sendMessage();
-	}
-}
-
-function init() {
-	input = document.getElementById("input");
-	input.addEventListener("keyup", onKey, false);
-
-	output = document.getElementById("output");
-
-	websocket = new WebSocket("ws://{{.}}/socket");
-	websocket.onmessage = onMessage;
-	websocket.onclose = onClose;
-}
-
-window.addEventListener("load", init, false);
-
-</script>
-</head>
-<body>
-<input id="input" type="text">
-<div id="output"></div>
-</body>
-</html>
-`))
diff --git a/content/2012/chat/markov/chat.go b/content/2012/chat/markov/chat.go
deleted file mode 100644
index 5654f3c..0000000
--- a/content/2012/chat/markov/chat.go
+++ /dev/null
@@ -1,103 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-	"time"
-
-	"golang.org/x/net/websocket"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	http.HandleFunc("/", rootHandler)
-	http.Handle("/socket", websocket.Handler(socketHandler))
-	err := http.ListenAndServe(listenAddr, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-type socket struct {
-	io.Reader
-	io.Writer
-	done chan bool
-}
-
-func (s socket) Close() error {
-	s.done <- true
-	return nil
-}
-
-var chain = NewChain(2) // 2-word prefixes
-
-func socketHandler(ws *websocket.Conn) {
-	r, w := io.Pipe() // HL
-	go func() {       // HL
-		_, err := io.Copy(io.MultiWriter(w, chain), ws) // HL
-		w.CloseWithError(err)                           // HL
-	}() // HL
-	s := socket{r, ws, make(chan bool)}
-	go match(s)
-	<-s.done
-}
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	case <-time.After(5 * time.Second): // HL
-		chat(Bot(), c) // HL
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	errc := make(chan error, 1)
-	go cp(a, b, errc)
-	go cp(b, a, errc)
-	if err := <-errc; err != nil {
-		log.Println(err)
-	}
-	a.Close()
-	b.Close()
-}
-
-func cp(w io.Writer, r io.Reader, errc chan<- error) {
-	_, err := io.Copy(w, r)
-	errc <- err
-}
-
-// Bot returns an io.ReadWriteCloser that responds to
-// each incoming write with a generated sentence.
-func Bot() io.ReadWriteCloser {
-	r, out := io.Pipe() // for outgoing data
-	return bot{r, out}
-}
-
-type bot struct {
-	io.ReadCloser
-	out io.Writer
-}
-
-func (b bot) Write(buf []byte) (int, error) {
-	go b.speak()
-	return len(buf), nil
-}
-
-func (b bot) speak() {
-	time.Sleep(time.Second)
-	msg := chain.Generate(10) // at most 10 words
-	b.out.Write([]byte(msg))
-}
diff --git a/content/2012/chat/markov/html.go b/content/2012/chat/markov/html.go
deleted file mode 100644
index b4e1fdc..0000000
--- a/content/2012/chat/markov/html.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "html/template"
-import "net/http"
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
-	rootTemplate.Execute(w, listenAddr)
-}
-
-var rootTemplate = template.Must(template.New("root").Parse(`
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="utf-8" />
-<script>
-
-var input, output, websocket;
-
-function showMessage(m) {
-	var p = document.createElement("p");
-	p.innerHTML = m;
-	output.appendChild(p);
-}
-
-function onMessage(e) {
-	showMessage(e.data);
-}
-
-function onClose() {
-	showMessage("Connection closed.");
-}
-
-function sendMessage() {
-	var m = input.value;
-	input.value = "";
-	websocket.send(m);
-	showMessage(m);
-}
-
-function onKey(e) {
-	if (e.keyCode == 13) {
-		sendMessage();
-	}
-}
-
-function init() {
-	input = document.getElementById("input");
-	input.addEventListener("keyup", onKey, false);
-
-	output = document.getElementById("output");
-
-	websocket = new WebSocket("ws://{{.}}/socket");
-	websocket.onmessage = onMessage;
-	websocket.onclose = onClose;
-}
-
-window.addEventListener("load", init, false);
-
-</script>
-</head>
-<body>
-<input id="input" type="text">
-<div id="output"></div>
-</body>
-</html>
-`))
diff --git a/content/2012/chat/markov/markov.go b/content/2012/chat/markov/markov.go
deleted file mode 100644
index 97dfe41..0000000
--- a/content/2012/chat/markov/markov.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// This Markov chain code is taken from the "Generating arbitrary text"
-// codewalk: http://golang.org/doc/codewalk/markov/
-
-import (
-	"bytes"
-	"fmt"
-	"math/rand"
-	"strings"
-	"sync"
-)
-
-// Prefix is a Markov chain prefix of one or more words.
-type Prefix []string
-
-// String returns the Prefix as a string (for use as a map key).
-func (p Prefix) String() string {
-	return strings.Join(p, " ")
-}
-
-// Shift removes the first word from the Prefix and appends the given word.
-func (p Prefix) Shift(word string) {
-	copy(p, p[1:])
-	p[len(p)-1] = word
-}
-
-// Chain contains a map ("chain") of prefixes to a list of suffixes.
-// A prefix is a string of prefixLen words joined with spaces.
-// A suffix is a single word. A prefix can have multiple suffixes.
-type Chain struct {
-	chain     map[string][]string
-	prefixLen int
-	mu        sync.Mutex
-}
-
-// NewChain returns a new Chain with prefixes of prefixLen words.
-func NewChain(prefixLen int) *Chain {
-	return &Chain{
-		chain:     make(map[string][]string),
-		prefixLen: prefixLen,
-	}
-}
-
-// Write parses the bytes into prefixes and suffixes that are stored in Chain.
-func (c *Chain) Write(b []byte) (int, error) {
-	br := bytes.NewReader(b)
-	p := make(Prefix, c.prefixLen)
-	for {
-		var s string
-		if _, err := fmt.Fscan(br, &s); err != nil {
-			break
-		}
-		key := p.String()
-		c.mu.Lock()
-		c.chain[key] = append(c.chain[key], s)
-		c.mu.Unlock()
-		p.Shift(s)
-	}
-	return len(b), nil
-}
-
-// Generate returns a string of at most n words generated from Chain.
-func (c *Chain) Generate(n int) string {
-	c.mu.Lock()
-	defer c.mu.Unlock()
-	p := make(Prefix, c.prefixLen)
-	var words []string
-	for i := 0; i < n; i++ {
-		choices := c.chain[p.String()]
-		if len(choices) == 0 {
-			break
-		}
-		next := choices[rand.Intn(len(choices))]
-		words = append(words, next)
-		p.Shift(next)
-	}
-	return strings.Join(words, " ")
-}
diff --git a/content/2012/chat/support/chan.go b/content/2012/chat/support/chan.go
deleted file mode 100644
index fa27d24..0000000
--- a/content/2012/chat/support/chan.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	ch := make(chan int)
-	go fibs(ch)
-	for i := 0; i < 20; i++ {
-		fmt.Println(<-ch)
-	}
-}
-
-func fibs(ch chan int) {
-	i, j := 0, 1
-	for {
-		ch <- j
-		i, j = j, i+j
-	}
-}
diff --git a/content/2012/chat/support/defs.go b/content/2012/chat/support/defs.go
deleted file mode 100644
index 1da4ee4..0000000
--- a/content/2012/chat/support/defs.go
+++ /dev/null
@@ -1,82 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
-
-// Writer is the interface that wraps the basic Write method.
-//
-// Write writes len(p) bytes from p to the underlying data stream. It
-// returns the number of bytes written from p (0 <= n <= len(p)) and any
-// error encountered that caused the write to stop early. Write must return
-// a non-nil error if it returns n < len(p).
-type Writer interface {
-	Write(p []byte) (n int, err error)
-}
-
-// Reader is the interface that wraps the basic Read method.
-//
-// Read reads up to len(p) bytes into p.  It returns the number of bytes
-// read (0 <= n <= len(p)) and any error encountered.  Even if Read
-// returns n < len(p), it may use all of p as scratch space during the call.
-// If some data is available but not len(p) bytes, Read conventionally
-// returns what is available instead of waiting for more.
-//
-// When Read encounters an error or end-of-file condition after
-// successfully reading n > 0 bytes, it returns the number of
-// bytes read.  It may return the (non-nil) error from the same call
-// or return the error (and n == 0) from a subsequent call.
-// An instance of this general case is that a Reader returning
-// a non-zero number of bytes at the end of the input stream may
-// return either err == EOF or err == nil.  The next Read should
-// return 0, EOF regardless.
-//
-// Callers should always process the n > 0 bytes returned before
-// considering the error err.  Doing so correctly handles I/O errors
-// that happen after reading some bytes and also both of the
-// allowed EOF behaviors.
-type Reader interface {
-	Read(p []byte) (n int, err error)
-}
-
-// ReadWriter is the interface that groups the basic Read and Write methods.
-type ReadWriter interface {
-	Reader
-	// contains filtered or unexported methods
-}
-
-// ReadCloser is the interface that groups the basic Read and Close methods.
-type ReadCloser interface {
-	Reader
-	// contains filtered or unexported methods
-}
-
-// ReadWriteCloser is the interface that groups the basic Read, Write and Close methods.
-type ReadWriteCloser interface {
-	Reader
-	// contains filtered or unexported methods
-}
-
-// ReadSeeker is the interface that groups the basic Read and Seek methods.
-type ReadSeeker interface {
-	Reader
-	// contains filtered or unexported methods
-}
-
-// ReadWriteSeeker is the interface that groups the basic Read, Write and Seek methods.
-type ReadWriteSeeker interface {
-	Reader
-	// contains filtered or unexported methods
-}
-
-type Conn interface {
-	Read(b []byte) (n int, err error)
-	Write(b []byte) (n int, err error)
-	Close() error
-	// ... some additional methods omitted ...
-}
-
-// Copy copies from src to dst until either EOF is reached
-// on src or an error occurs.  It returns the number of bytes
-// copied and the first error encountered while copying, if any.
-func Copy(dst Writer, src Reader) (written int64, err error)
diff --git a/content/2012/chat/support/echo-no-concurrency.go b/content/2012/chat/support/echo-no-concurrency.go
deleted file mode 100644
index a6aa2d7..0000000
--- a/content/2012/chat/support/echo-no-concurrency.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		io.Copy(c, c)
-	}
-}
diff --git a/content/2012/chat/support/echo.go b/content/2012/chat/support/echo.go
deleted file mode 100644
index 37dce1e..0000000
--- a/content/2012/chat/support/echo.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go io.Copy(c, c)
-	}
-}
diff --git a/content/2012/chat/support/embed.go b/content/2012/chat/support/embed.go
deleted file mode 100644
index fdecb21..0000000
--- a/content/2012/chat/support/embed.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type A struct{}
-
-func (A) Hello() {
-	fmt.Println("Hello!")
-}
-
-type B struct {
-	A
-}
-
-// func (b B) Hello() { b.A.Hello() } // (implicitly!)
-
-func main() {
-	var b B
-	b.Hello()
-}
diff --git a/content/2012/chat/support/goroutines.go b/content/2012/chat/support/goroutines.go
deleted file mode 100644
index b86d97b..0000000
--- a/content/2012/chat/support/goroutines.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	go say("let's go!", 3)
-	go say("ho!", 2)
-	go say("hey!", 1)
-	time.Sleep(4 * time.Second)
-}
-
-func say(text string, secs int) {
-	time.Sleep(time.Duration(secs) * time.Second)
-	fmt.Println(text)
-}
diff --git a/content/2012/chat/support/hello-net.go b/content/2012/chat/support/hello-net.go
deleted file mode 100644
index 298e5c7..0000000
--- a/content/2012/chat/support/hello-net.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		fmt.Fprintln(c, "Hello!")
-		c.Close()
-	}
-}
diff --git a/content/2012/chat/support/hello-web.go b/content/2012/chat/support/hello-web.go
deleted file mode 100644
index 020fb48..0000000
--- a/content/2012/chat/support/hello-web.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	http.HandleFunc("/", handler)
-	err := http.ListenAndServe(listenAddr, nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprint(w, "Hello, web")
-}
diff --git a/content/2012/chat/support/hello.go b/content/2012/chat/support/hello.go
deleted file mode 100644
index 0757c53..0000000
--- a/content/2012/chat/support/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, go")
-}
diff --git a/content/2012/chat/support/markov.txt b/content/2012/chat/support/markov.txt
deleted file mode 100644
index 8d84c04..0000000
--- a/content/2012/chat/support/markov.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Source
-"I am not a number! I am a free man!"
-
-Prefix           Suffix 
-"" ""            "I"
-"" "I"           "am"
-"I" "am"         "a"
-"I" "am"         "not"
-"a" "free"       "man!"
-"am" "a"         "free"
-"am" "not"       "a"
-"a" "number!"    "I"
-"number!" "I"    "am"
-"not" "a"        "number!"
-
-Generated sentences beginning with the prefix "I am"
-"I am a free man!"
-"I am not a number! I am a free man!"
-"I am not a number! I am not a number! I am a free man!"
-"I am not a number! I am not a number! I am not a number! I am a free man!"
-
diff --git a/content/2012/chat/support/select.go b/content/2012/chat/support/select.go
deleted file mode 100644
index b236f41..0000000
--- a/content/2012/chat/support/select.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	ticker := time.NewTicker(time.Millisecond * 250)
-	boom := time.After(time.Second * 1)
-	for {
-		select {
-		case <-ticker.C:
-			fmt.Println("tick")
-		case <-boom:
-			fmt.Println("boom!")
-			return
-		}
-	}
-}
diff --git a/content/2012/chat/support/websocket.go b/content/2012/chat/support/websocket.go
deleted file mode 100644
index 5b056ca..0000000
--- a/content/2012/chat/support/websocket.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"golang.org/x/net/websocket"
-	"net/http"
-)
-
-func main() {
-	http.Handle("/", websocket.Handler(handler))
-	http.ListenAndServe("localhost:4000", nil)
-}
-
-func handler(c *websocket.Conn) {
-	var s string
-	fmt.Fscan(c, &s)
-	fmt.Println("Received:", s)
-	fmt.Fprint(c, "How do you do?")
-}
diff --git a/content/2012/chat/support/websocket.js b/content/2012/chat/support/websocket.js
deleted file mode 100644
index f9809d6..0000000
--- a/content/2012/chat/support/websocket.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var sock = new WebSocket("ws://localhost:4000/");
-sock.onmessage = function(m) { console.log("Received:", m.data); }
-sock.send("Hello!\n")
diff --git a/content/2012/chat/tcp-simple/chat.go b/content/2012/chat/tcp-simple/chat.go
deleted file mode 100644
index 9333691..0000000
--- a/content/2012/chat/tcp-simple/chat.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go match(c) // HL
-	}
-}
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	go io.Copy(a, b)
-	io.Copy(b, a)
-}
diff --git a/content/2012/chat/tcp/chat.go b/content/2012/chat/tcp/chat.go
deleted file mode 100644
index c07fa27..0000000
--- a/content/2012/chat/tcp/chat.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go match(c)
-	}
-}
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	errc := make(chan error, 1)
-	go cp(a, b, errc)
-	go cp(b, a, errc)
-	if err := <-errc; err != nil {
-		log.Println(err)
-	}
-	a.Close()
-	b.Close()
-}
-
-func cp(w io.Writer, r io.Reader, errc chan<- error) {
-	_, err := io.Copy(w, r)
-	errc <- err
-}
diff --git a/content/2012/concurrency.slide b/content/2012/concurrency.slide
deleted file mode 100644
index 2d2f3d1..0000000
--- a/content/2012/concurrency.slide
+++ /dev/null
@@ -1,467 +0,0 @@
-Go Concurrency Patterns
-
-Rob Pike
-Google
-http://golang.org/s/plusrob
-@rob_pike
-http://golang.org
-
-* Video
-
-This talk was presented at Google I/O in June 2012.
-
-.link http://www.youtube.com/watch?v=f6kdp27TYZs Watch the talk on YouTube
-
-* Introduction
-
-* Concurrency features in Go
-
-People seemed fascinated by the concurrency features of Go when the language was first announced.
-
-Questions:
-
-- Why is concurrency supported?
-- What is concurrency, anyway?
-- Where does the idea come from?
-- What is it good for?
-- How do I use it?
-
-* Why?
-
-Look around you. What do you see?
-
-Do you see a single-stepping world doing one thing at a time?
-
-Or do you see a complex world of interacting, independently behaving pieces?
-
-That's why. Sequential processing on its own does not model the world's behavior.
-
-* What is concurrency?
-
-Concurrency is the composition of independently executing computations.
-
-Concurrency is a way to structure software, particularly as a way to write clean code that interacts well with the real world.
-
-It is not parallelism.
-
-* Concurrency is not parallelism
-
-Concurrency is not parallelism, although it enables parallelism.
-
-If you have only one processor, your program can still be concurrent  but it cannot be parallel.
-
-On the other hand, a well-written concurrent program might run efficiently in parallel on a multiprocessor. That property could be important...
-
-For more on that distinction, see the link below. Too much to discuss here.
-
-.link http://golang.org/s/concurrency-is-not-parallelism
-
-* A model for software construction
-
-Easy to understand.
-
-Easy to use.
-
-Easy to reason about.
-
-You don't need to be an expert!
-
-(Much nicer than dealing with the minutiae of parallelism (threads, semaphores, locks, barriers, etc.))
-
-* History
-
-To many, the concurrency features of Go seemed new.
-
-But they are rooted in a long history, reaching back to Hoare's CSP in 1978 and even Dijkstra's guarded commands (1975).
-
-Languages with similar features:
-
-- Occam (May, 1983)
-- Erlang (Armstrong, 1986)
-- Newsqueak (Pike, 1988)
-- Concurrent ML (Reppy, 1993)
-- Alef (Winterbottom, 1995)
-- Limbo (Dorward, Pike, Winterbottom, 1996).
-
-* Distinction
-
-Go is the latest on the Newsqueak-Alef-Limbo branch, distinguished by first-class channels.
-
-Erlang is closer to the original CSP, where you communicate to a process by name rather than over a channel.
-
-The models are equivalent but express things differently.
-
-Rough analogy: writing to a file by name (process, Erlang) vs. writing to a file descriptor (channel, Go).
-
-* Basic Examples
-
-* A boring function
-
-We need an example to show the interesting properties of the concurrency primitives.
-
-To avoid distraction, we make it a boring example.
-
-.play concurrency/support/boring.go /START/,/STOP.*/
-
-* Slightly less boring
-
-Make the intervals between messages unpredictable (still under a second).
-
-.play concurrency/support/lessboring.go /START/,/STOP/
-
-* Running it
-
-The boring function runs on forever, like a boring party guest.
-
-.play concurrency/support/lessboring.go /^func.main/,$
-
-* Ignoring it
-
-The go statement runs the function as usual, but doesn't make the caller wait.
-
-It launches a goroutine.
-
-The functionality is analogous to the & on the end of a shell command.
-
-.play concurrency/support/goboring.go 1,/^}/
-
-* Ignoring it a little less
-
-When main returns, the program exits and takes the boring function down with it.
-
-We can hang around a little, and on the way show that both main and the launched goroutine are running.
-
-.play concurrency/support/waitgoboring.go /func.main/,/^}/
-
-* Goroutines
-
-What is a goroutine? It's an independently executing function, launched by a go statement.
-
-It has its own call stack, which grows and shrinks as required.
-
-It's very cheap. It's practical to have thousands, even hundreds of thousands of goroutines.
-
-It's not a thread.
-
-There might be only one thread in a program with thousands of goroutines.
-
-Instead, goroutines are multiplexed dynamically onto threads as needed to keep all the goroutines running.
-
-But if you think of it as a very cheap thread, you won't be far off.
-
-* Communication
-
-Our boring examples cheated: the main function couldn't see the output from the other goroutine.
-
-It was just printed to the screen, where we pretended we saw a conversation.
-
-Real conversations require communication.
-
-* Channels
-
-A channel in Go provides a connection between two goroutines, allowing them to communicate.
-
-.code concurrency/support/helpers.go /START1/,/STOP1/
-.code concurrency/support/helpers.go /START2/,/STOP2/
-.code concurrency/support/helpers.go /START3/,/STOP3/
-
-* Using channels
-
-A channel connects the main and boring goroutines so they can communicate.
-
-.play concurrency/support/changoboring.go /START1/,/STOP1/
-.code concurrency/support/changoboring.go /START2/,/STOP2/
-
-* Synchronization
-
-When the main function executes <–c, it will wait for a value to be sent.
-
-Similarly, when the boring function executes c <– value, it waits for a receiver to be ready.
-
-A sender and receiver must both be ready to play their part in the communication. Otherwise we wait until they are.
-
-Thus channels both communicate and synchronize.
-
-* An aside about buffered channels
-
-Note for experts: Go channels can also be created with a buffer.
-
-Buffering removes synchronization.
-
-Buffering makes them more like Erlang's mailboxes.
-
-Buffered channels can be important for some problems but they are more subtle to reason about.
-
-We won't need them today.
-
-* The Go approach
-
-Don't communicate by sharing memory, share memory by communicating.
-
-* "Patterns"
-
-* Generator: function that returns a channel
-
-Channels are first-class values, just like strings or integers.
-
-.play concurrency/support/generatorboring.go /START1/,/STOP1/
-.code concurrency/support/generatorboring.go /START2/,/STOP2/
-
-* Channels as a handle on a service
-
-Our boring function returns a channel that lets us communicate with the boring service it provides.
-
-We can have more instances of the service.
-
-.play concurrency/support/generator2boring.go /START1/,/STOP1/
-
-* Multiplexing
-
-These programs make Joe and Ann count in lockstep.
-We can instead use a fan-in function to let whosoever is ready talk.
-
-.code concurrency/support/faninboring.go /START3/,/STOP3/
-.play concurrency/support/faninboring.go /START1/,/STOP1/
-
-* Fan-in
-
-.image concurrency/images/gophermegaphones.jpg
-
-* Restoring sequencing
-
-Send a channel on a channel, making goroutine wait its turn.
-
-Receive all messages, then enable them again by sending on a private channel.
-
-First we define a message type that contains a channel for the reply.
-
-.code concurrency/support/sequenceboring.go /START0/,/STOP0/
-
-* Restoring sequencing.
-
-Each speaker must wait for a go-ahead.
-
-.code concurrency/support/sequenceboring.go /START1/,/STOP1/
-.code concurrency/support/sequenceboring.go /START2/,/STOP2/
-.play concurrency/support/sequenceboring.go /START3/,/STOP3/
-
-* Select
-
-A control structure unique to concurrency.
-
-The reason channels and goroutines are built into the language.
-
-* Select
-
-The select statement provides another way to handle multiple channels.
-It's like a switch, but each case is a communication:
-- All channels are evaluated.
-- Selection blocks until one communication can proceed, which then does.
-- If multiple can proceed, select chooses pseudo-randomly.
-- A default clause, if present, executes immediately if no channel is ready.
-
-.code concurrency/support/select.go /START0/,/STOP0/
-
-* Fan-in again
-
-Rewrite our original fanIn function. Only one goroutine is needed. Old:
-
-.code concurrency/support/faninboring.go /START3/,/STOP3/
-
-* Fan-in using select
-
-Rewrite our original fanIn function. Only one goroutine is needed. New:
-
-.play concurrency/support/selectboring.go /START3/,/STOP3/
-
-* Timeout using select
-
-The time.After function returns a channel that blocks for the specified duration.
-After the interval, the channel delivers the current time, once.
-
-.play concurrency/support/timeout.go /START1/,/STOP1/
-
-* Timeout for whole conversation using select
-
-Create the timer once, outside the loop, to time out the entire conversation.
-(In the previous program, we had a timeout for each message.)
-
-.play concurrency/support/timeoutall.go /START1/,/STOP1/
-
-
-* Quit channel
-
-We can turn this around and tell Joe to stop when we're tired of listening to him.
-
-.code concurrency/support/quit.go /START1/,/STOP1/
-.play concurrency/support/quit.go /START2/,/STOP2/
-
-
-* Receive on quit channel
-
-How do we know it's finished? Wait for it to tell us it's done: receive on the quit channel
-
-.code concurrency/support/rcvquit.go /START1/,/STOP1/
-.play concurrency/support/rcvquit.go /START2/,/STOP2/
-
-* Daisy-chain
-
-.play concurrency/support/daisy.go /func/,$
-
-* Chinese whispers, gopher style
-
-.image concurrency/images/gophereartrumpet.jpg
-
-* Systems software
-
-Go was designed for writing systems software.
-Let's see how the concurrency features come into play.
-
-* Example: Google Search
-	
-Q: What does Google search do?
-
-A: Given a query, return a page of search results (and some ads).
-
-Q: How do we get the search results?
-
-A: Send the query to Web search, Image search, YouTube, Maps, News,etc., then mix the results.
-
-How do we implement this?
-
-* Google Search: A fake framework
-
-We can simulate the search function, much as we simulated conversation before.
-
-.code concurrency/support/google.go /START2/,/STOP2/
-
-* Google Search: Test the framework
-
-.play concurrency/support/google.go /func.main/,/}/
-
-* Google Search 1.0
-
-The Google function takes a query and returns a slice of Results (which are just strings).
-
-Google invokes Web, Image, and Video searches serially, appending them to the results slice.
-
-.play concurrency/support/google.go /START1/,/STOP1/
-
-* Google Search 2.0
-
-Run the Web, Image, and Video searches concurrently, and wait for all results.
-
-No locks.  No condition variables.  No callbacks.
-
-.play concurrency/support/google2.1.go /Google/,/^}/
-
-* Google Search 2.1
-
-Don't wait for slow servers. No locks.  No condition variables.  No callbacks.
-
-.play concurrency/support/google2.2.go /START/,/STOP/
-
-* Avoid timeout
-
-Q: How do we avoid discarding results from slow servers?
-
-A: Replicate the servers.  Send requests to multiple replicas, and use the first response.
-
-.code concurrency/support/google2.3.go /START1/,/STOP1/
-
-* Using the First function
-
-.play concurrency/support/google2.3.go /START2/,/STOP2/
-
-* Google Search 3.0
-
-Reduce tail latency using replicated search servers.
-
-.play concurrency/support/google3.0.go /START/,/STOP/
-
-* And still…
-
-No locks.  No condition variables.  No callbacks.
-
-* Summary
-
-In just a few simple transformations we used Go's concurrency primitives to convert a
-
-- slow
-- sequential
-- failure-sensitive
-
-program into one that is
-
-- fast
-- concurrent
-- replicated
-- robust.
-
-* More party tricks
-
-There are endless ways to use these tools, many presented elsewhere.
-
-Chatroulette toy:
-
-.link http://golang.org/s/chat-roulette
-
-Load balancer:
-
-.link http://golang.org/s/load-balancer
-
-Concurrent prime sieve:
-
-.link http://golang.org/s/prime-sieve
-
-Concurrent power series (by McIlroy):
-
-.link http://golang.org/s/power-series
-
-* Don't overdo it
-
-They're fun to play with, but don't overuse these ideas.
-
-Goroutines and channels are big ideas. They're tools for program construction.
-
-But sometimes all you need is a reference counter.
-
-Go has "sync" and "sync/atomic" packages that provide mutexes, condition variables, etc. They provide tools for smaller problems.
-
-Often, these things will work together to solve a bigger problem.
-
-Always use the right tool for the job.
-
-* Conclusions
-
-Goroutines and channels make it easy to express complex operations dealing with
-
-- multiple inputs
-- multiple outputs
-- timeouts
-- failure
-
-And they're fun to use.
-
-
-* Links
-
-Go Home Page:
-
-.link http://golang.org
-
-Go Tour (learn Go in your browser)
-
-.link http://tour.golang.org
-
-Package documentation:
-
-.link http://golang.org/pkg
-
-Articles galore:
-
-.link http://golang.org/doc
-
-Concurrency is not parallelism:
-
-.link http://golang.org/s/concurrency-is-not-parallelism
diff --git a/content/2012/concurrency/images/gophereartrumpet.jpg b/content/2012/concurrency/images/gophereartrumpet.jpg
deleted file mode 100644
index 87f8571..0000000
--- a/content/2012/concurrency/images/gophereartrumpet.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/concurrency/images/gophermegaphones.jpg b/content/2012/concurrency/images/gophermegaphones.jpg
deleted file mode 100644
index 2bf6873..0000000
--- a/content/2012/concurrency/images/gophermegaphones.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/concurrency/support/boring.go b/content/2012/concurrency/support/boring.go
deleted file mode 100644
index b049ee0..0000000
--- a/content/2012/concurrency/support/boring.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	boring("boring!")
-}
-
-// START OMIT
-func boring(msg string) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(time.Second)
-	}
-}
-// STOP OMIT
diff --git a/content/2012/concurrency/support/changoboring.go b/content/2012/concurrency/support/changoboring.go
deleted file mode 100644
index f534359..0000000
--- a/content/2012/concurrency/support/changoboring.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := make(chan string)
-	go boring("boring!", c)
-	for i := 0; i < 5; i++ {
-		fmt.Printf("You say: %q\n", <-c) // Receive expression is just a value. // HL
-	}
-	fmt.Println("You're boring; I'm leaving.")
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string, c chan string) {
-	for i := 0; ; i++ {
-		c <- fmt.Sprintf("%s %d", msg, i) // Expression to be sent can be any suitable value. // HL
-		time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-	}
-}
-// STOP2 OMIT
-
diff --git a/content/2012/concurrency/support/chat.go b/content/2012/concurrency/support/chat.go
deleted file mode 100644
index 200451a..0000000
--- a/content/2012/concurrency/support/chat.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net"
-)
-
-const listenAddr = "localhost:4000"
-
-func main() {
-	l, err := net.Listen("tcp", listenAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go match(c)
-	}
-}
-
-var partner = make(chan io.ReadWriteCloser)
-
-func match(c io.ReadWriteCloser) {
-	fmt.Fprint(c, "Waiting for a partner...")
-	select {
-	case partner <- c:
-		// now handled by the other goroutine
-	case p := <-partner:
-		chat(p, c)
-	}
-}
-
-func chat(a, b io.ReadWriteCloser) {
-	fmt.Fprintln(a, "Found one! Say hi.")
-	fmt.Fprintln(b, "Found one! Say hi.")
-	go io.Copy(a, b)
-	io.Copy(b, a)
-}
diff --git a/content/2012/concurrency/support/daisy.go b/content/2012/concurrency/support/daisy.go
deleted file mode 100644
index 0f39812..0000000
--- a/content/2012/concurrency/support/daisy.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func f(left, right chan int) {
-	left <- 1 + <-right
-}
-
-func main() {
-	const n = 10000
-	leftmost := make(chan int)
-	right := leftmost
-	left := leftmost
-	for i := 0; i < n; i++ {
-		right = make(chan int)
-		go f(left, right)
-		left = right
-	}
-	go func(c chan int) { c <- 1 }(right)
-	fmt.Println(<-leftmost)
-}
diff --git a/content/2012/concurrency/support/faninboring.go b/content/2012/concurrency/support/faninboring.go
deleted file mode 100644
index 08b3d80..0000000
--- a/content/2012/concurrency/support/faninboring.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := fanIn(boring("Joe"), boring("Ann")) // HL
-	for i := 0; i < 10; i++ {
-		fmt.Println(<-c) // HL
-	}
-	fmt.Println("You're both boring; I'm leaving.")
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(2e3)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
-
-// START3 OMIT
-func fanIn(input1, input2 <-chan string) <-chan string { // HL
-	c := make(chan string)
-	go func() { for { c <- <-input1 } }() // HL
-	go func() { for { c <- <-input2 } }() // HL
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/concurrency/support/generator2boring.go b/content/2012/concurrency/support/generator2boring.go
deleted file mode 100644
index 45be6f8..0000000
--- a/content/2012/concurrency/support/generator2boring.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	joe := boring("Joe") // HL
-	ann := boring("Ann") // HL
-	for i := 0; i < 5; i++ {
-		fmt.Println(<-joe)
-		fmt.Println(<-ann)
-	}
-	fmt.Println("You're both boring; I'm leaving.")
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
diff --git a/content/2012/concurrency/support/generatorboring.go b/content/2012/concurrency/support/generatorboring.go
deleted file mode 100644
index eeae3ca..0000000
--- a/content/2012/concurrency/support/generatorboring.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-// START1 OMIT
-	c := boring("boring!") // Function returning a channel. // HL
-	for i := 0; i < 5; i++ {
-		fmt.Printf("You say: %q\n", <-c)
-	}
-	fmt.Println("You're boring; I'm leaving.")
-// STOP1 OMIT
-}
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
diff --git a/content/2012/concurrency/support/goboring.go b/content/2012/concurrency/support/goboring.go
deleted file mode 100644
index e28b6a3..0000000
--- a/content/2012/concurrency/support/goboring.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-	go boring("boring!") // HL
-}
-// STOP OMIT
-
-func boring(msg string) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-	}
-}
diff --git a/content/2012/concurrency/support/google.go b/content/2012/concurrency/support/google.go
deleted file mode 100644
index 10089d3..0000000
--- a/content/2012/concurrency/support/google.go
+++ /dev/null
@@ -1,47 +0,0 @@
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-
-// START1 OMIT
-func Google(query string) (results []Result) {
-	results = append(results, Web(query))
-	results = append(results, Image(query))
-	results = append(results, Video(query))
-	return
-}
-// STOP1 OMIT
-
-// START2 OMIT
-var (
-	Web = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-type Search func(query string) Result // HL
-
-func fakeSearch(kind string) Search {
-        return func(query string) Result {
-	          time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-	          return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-        }
-}
-// STOP2 OMIT
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	results := Google("golang") // HL
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2012/concurrency/support/google2.1.go b/content/2012/concurrency/support/google2.1.go
deleted file mode 100644
index 53be753..0000000
--- a/content/2012/concurrency/support/google2.1.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-
-func Google(query string) (results []Result) {
-	c := make(chan Result)
-	go func() { c <- Web(query) } ()
-	go func() { c <- Image(query) } ()
-	go func() { c <- Video(query) } ()
-
-	for i := 0; i < 3; i++ {
-		result := <-c
-		results = append(results, result)
-	}
-	return
-}
-
-func fakeSearch(kind string) Search {
-        return func(query string) Result {
-	          time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-	          return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-        }
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
-
-
diff --git a/content/2012/concurrency/support/google2.2.go b/content/2012/concurrency/support/google2.2.go
deleted file mode 100644
index 2dac79f..0000000
--- a/content/2012/concurrency/support/google2.2.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-func Google(query string) (results []Result) {
-// START OMIT
-	c := make(chan Result)
-	go func() { c <- Web(query) } ()
-	go func() { c <- Image(query) } ()
-	go func() { c <- Video(query) } ()
-
-	timeout := time.After(80 * time.Millisecond)
-	for i := 0; i < 3; i++ {
-		select {
-		case result := <-c:
-			results = append(results, result)
-		case <-timeout:
-			fmt.Println("timed out")
-			return
-		}
-	}
-	return
-// STOP OMIT
-}
-
-func fakeSearch(kind string) Search {
-        return func(query string) Result {
-	          time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-	          return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-        }
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
-
diff --git a/content/2012/concurrency/support/google2.3.go b/content/2012/concurrency/support/google2.3.go
deleted file mode 100644
index 9382430..0000000
--- a/content/2012/concurrency/support/google2.3.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-// START1 OMIT
-func First(query string, replicas ...Search) Result {
-	c := make(chan Result)
-	searchReplica := func(i int) { c <- replicas[i](query) }
-	for i := range replicas {
-		go searchReplica(i)
-	}
-	return <-c
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	result := First("golang",
-		fakeSearch("replica 1"),
-		fakeSearch("replica 2"))
-	elapsed := time.Since(start)
-	fmt.Println(result)
-	fmt.Println(elapsed)
-}
-// STOP2 OMIT
-
-func fakeSearch(kind string) Search {
-        return func(query string) Result {
-	          time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-	          return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-        }
-}
-
diff --git a/content/2012/concurrency/support/google3.0.go b/content/2012/concurrency/support/google3.0.go
deleted file mode 100644
index 4188fcd..0000000
--- a/content/2012/concurrency/support/google3.0.go
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web1 = fakeSearch("web1")
-        Web2 = fakeSearch("web2")
-	Image1 = fakeSearch("image1")
-	Image2 = fakeSearch("image2")
-	Video1 = fakeSearch("video1")
-	Video2 = fakeSearch("video2")
-)
-
-func Google(query string) (results []Result) {
-// START OMIT
-	c := make(chan Result)
-	go func() { c <- First(query, Web1, Web2) } ()
-	go func() { c <- First(query, Image1, Image2) } ()
-	go func() { c <- First(query, Video1, Video2) } ()
-	timeout := time.After(80 * time.Millisecond)
-	for i := 0; i < 3; i++ {
-		select {
-		case result := <-c:
-			results = append(results, result)
-		case <-timeout:
-			fmt.Println("timed out")
-			return
-		}
-	}
-	return
-// STOP OMIT
-}
-
-func First(query string, replicas ...Search) Result {
-	c := make(chan Result)
-	searchReplica := func(i int) {
-		c <- replicas[i](query)
-	}
-	for i := range replicas {
-		go searchReplica(i)
-	}
-        return <-c
-}
-
-func fakeSearch(kind string) Search {
-        return func(query string) Result {
-	          time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-	          return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-        }
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2012/concurrency/support/helpers.go b/content/2012/concurrency/support/helpers.go
deleted file mode 100644
index a10c9cb..0000000
--- a/content/2012/concurrency/support/helpers.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	var value int
-
-	// START1 OMIT
-	// Declaring and initializing.
-	var c chan int
-	c = make(chan int)
-	// or
-	c := make(chan int) // HL
-	// STOP1 OMIT
-
-	// START2 OMIT
-	// Sending on a channel.
-	c <- 1 // HL
-	// STOP2 OMIT
-
-	// START3 OMIT
-	// Receiving from a channel.
-	// The "arrow" indicates the direction of data flow.
-	value = <-c // HL
-	// STOP3 OMIT
-
-	_ = value
-}
diff --git a/content/2012/concurrency/support/lessboring.go b/content/2012/concurrency/support/lessboring.go
deleted file mode 100644
index 5549d51..0000000
--- a/content/2012/concurrency/support/lessboring.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-	boring("boring!") // HL
-}
-
-// START OMIT
-func boring(msg string) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-	}
-}
-// STOP OMIT
diff --git a/content/2012/concurrency/support/mainboring.go b/content/2012/concurrency/support/mainboring.go
deleted file mode 100644
index 31f1c1e..0000000
--- a/content/2012/concurrency/support/mainboring.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-	boring("boring!")
-}
-// STOP OMIT
-
-func boring(msg string) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-	}
-}
diff --git a/content/2012/concurrency/support/quit.go b/content/2012/concurrency/support/quit.go
deleted file mode 100644
index 9e16caf..0000000
--- a/content/2012/concurrency/support/quit.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-// START1 OMIT
-	quit := make(chan bool) // HL
-	c := boring("Joe", quit)
-	for i := rand.Intn(10); i >= 0; i-- { fmt.Println(<-c) }
-	quit <- true // HL
-// STOP1 OMIT
-}
-
-func boring(msg string, quit <-chan bool) <-chan string {
-	c := make(chan string)
-	go func() { // HL
-		for i := 0; ; i++ {
-			time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-// START2 OMIT
-			select {
-			case c <- fmt.Sprintf("%s: %d", msg, i):
-				// do nothing
-			case <-quit: // HL
-				return
-			}
-// STOP2 OMIT
-		}
-	}()
-	return c
-}
diff --git a/content/2012/concurrency/support/rcvquit.go b/content/2012/concurrency/support/rcvquit.go
deleted file mode 100644
index 855332e..0000000
--- a/content/2012/concurrency/support/rcvquit.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func cleanup() {
-}
-
-func main() {
-// START1 OMIT
-	quit := make(chan string) // HL
-	c := boring("Joe", quit) // HL
-	for i := rand.Intn(10); i >= 0; i-- { fmt.Println(<-c) }
-	quit <- "Bye!" // HL
-	fmt.Printf("Joe says: %q\n", <-quit) // HL
-// STOP1 OMIT
-}
-
-func boring(msg string, quit chan string) <-chan string {
-	c := make(chan string) // HL
-	go func() {
-		for i := 0; ; i++ {
-			time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-// START2 OMIT
-			select {
-			case c <- fmt.Sprintf("%s: %d", msg, i):
-				// do nothing
-			case <-quit: // HL
-				cleanup()
-				quit <- "See you!" // HL
-				return
-			}
-// STOP2 OMIT
-		}
-	}()
-	return c
-}
diff --git a/content/2012/concurrency/support/select.go b/content/2012/concurrency/support/select.go
deleted file mode 100644
index aa707af..0000000
--- a/content/2012/concurrency/support/select.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	var c1, c2, c3 chan int
-	// START0 OMIT
-	select {
-	case v1 := <-c1:
-		fmt.Printf("received %v from c1\n", v1)
-	case v2 := <-c2:
-		fmt.Printf("received %v from c2\n", v1)
-	case c3 <- 23:
-		fmt.Printf("sent %v to c3\n", 23)
-	default:
-		fmt.Printf("no one was ready to communicate\n")
-	}
-	// STOP0 OMIT
-}
diff --git a/content/2012/concurrency/support/selectboring.go b/content/2012/concurrency/support/selectboring.go
deleted file mode 100644
index 78cb5c7..0000000
--- a/content/2012/concurrency/support/selectboring.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := fanIn(boring("Joe"), boring("Ann")) // HL
-	for i := 0; i < 10; i++ {
-		fmt.Println(<-c) // HL
-	}
-	fmt.Println("You're both boring; I'm leaving.")
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
-
-// START3 OMIT
-func fanIn(input1, input2 <-chan string) <-chan string { // HL
-	c := make(chan string)
-	go func() { // HL
-		for {
-			select { // HL
-			case s := <-input1:  c <- s  // HL
-			case s := <-input2:  c <- s  // HL
-			}  // HL
-		}
-	}()
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/concurrency/support/sequenceboring.go b/content/2012/concurrency/support/sequenceboring.go
deleted file mode 100644
index 1117466..0000000
--- a/content/2012/concurrency/support/sequenceboring.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START0 OMIT
-type Message struct {
-	str string
-	wait chan bool // HL
-}
-// STOP0 OMIT
-
-func main() {
-	c := fanIn(boring("Joe"), boring("Ann")) // HL
-// START1 OMIT
-	for i := 0; i < 5; i++ {
-		msg1 := <-c; fmt.Println(msg1.str)
-		msg2 := <-c; fmt.Println(msg2.str)
-		msg1.wait <- true
-		msg2.wait <- true
-	}
-// STOP1 OMIT
-	fmt.Println("You're all boring; I'm leaving.")
-}
-
-func boring(msg string) <-chan Message { // Returns receive-only channel of strings. // HL
-	c := make(chan Message)
-// START2 OMIT
-	waitForIt := make(chan bool) // Shared between all messages.
-// STOP2 OMIT
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-// START3 OMIT
-			c <- Message{ fmt.Sprintf("%s: %d", msg, i), waitForIt }
-			time.Sleep(time.Duration(rand.Intn(2e3)) * time.Millisecond)
-			<-waitForIt
-// STOP3 OMIT
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-
-
-// START3 OMIT
-func fanIn(inputs ... <-chan Message) <-chan Message { // HL
-	c := make(chan Message)
-	for i := range inputs {
-		input := inputs[i] // New instance of 'input' for each loop.
-		go func() { for { c <- <-input } }()
-	}
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/concurrency/support/timeout.go b/content/2012/concurrency/support/timeout.go
deleted file mode 100644
index 7d8cab9..0000000
--- a/content/2012/concurrency/support/timeout.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := boring("Joe")
-	for {
-		select {
-		case s := <-c:
-			fmt.Println(s)
-		case <-time.After(1 * time.Second): // HL
-			fmt.Println("You're too slow.")
-			return
-		}
-	}
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
-
-// START3 OMIT
-func fanIn(input1, input2 <-chan string) <-chan string { // HL
-	c := make(chan string)
-	go func() {
-		for {
-			select {
-			case s := <-input1:
-				c <- s
-			case s := <-input2:
-				c <- s
-			}
-		}
-	}()
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/concurrency/support/timeoutall.go b/content/2012/concurrency/support/timeoutall.go
deleted file mode 100644
index 5dd4a89..0000000
--- a/content/2012/concurrency/support/timeoutall.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := boring("Joe")
-	timeout := time.After(5 * time.Second) // HL
-	for {
-		select {
-		case s := <-c:
-			fmt.Println(s)
-		case <-timeout: // HL
-			fmt.Println("You talk too much.")
-			return
-		}
-	}
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(1500)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
-
-// START3 OMIT
-func fanIn(input1, input2 <-chan string) <-chan string { // HL
-	c := make(chan string)
-	go func() {
-		for {
-			select {
-			case s := <-input1:
-				c <- s
-			case s := <-input2:
-				c <- s
-			}
-		}
-	}()
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/concurrency/support/waitgoboring.go b/content/2012/concurrency/support/waitgoboring.go
deleted file mode 100644
index 3fb1fb8..0000000
--- a/content/2012/concurrency/support/waitgoboring.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func main() {
-	go boring("boring!")
-	fmt.Println("I'm listening.")
-	time.Sleep(2 * time.Second)
-	fmt.Println("You're boring; I'm leaving.")
-}
-// STOP OMIT
-
-func boring(msg string) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
-	}
-}
diff --git a/content/2012/go-docs.slide b/content/2012/go-docs.slide
deleted file mode 100644
index b160c6c..0000000
--- a/content/2012/go-docs.slide
+++ /dev/null
@@ -1,242 +0,0 @@
-Go docs
-Golang-Syd, Oct 17, 2012
-
-Rob Pike
-Google, Inc.
-@rob_pike
-http://golang.org/s/plusrob
-http://golang.org
-
-* Documentation
-
-* Text
-
-There are many ways to show documentation as text
-
-* Man pages: Unix 1st Edition, 1971
-
-.image go-docs/seek.png
-
-* Man pages: Apple OS X 10.8, 2012
-
-.image go-docs/lseek.png
-
-* Javadoc 1996+
-
-.image go-docs/javadoc.png
-
-* Javadoc 1996+
-
-.image go-docs/javadoc1.png
-
-* Godoc 2009+
-
-.image go-docs/godoc.png
-
-* Godoc 2009+
-
-.image go-docs/godoc1.png
-
-* Godoc
-
-.link http://golang.org/pkg/utf16
-
-* blog.golang.org
-
-.image go-docs/blog.png
-
-* Code walks
-
-.image go-docs/codewalk.png
-
-* Community contributions
-
-* Go wiki
-
-.link http://golang.org/wiki
-
-.image go-docs/gowiki.png
-
-* Gopkgdoc
-
-.link http://go.pkgdoc.org
-
-.image go-docs/gopkgdoc.png
-
-* Gopkgdoc
-
-.link http://go.pkgdoc.org/code.google.com/p/goauth2/oauth
-
-* Go By Example
-
-.link https://gobyexample.com
-
-.image go-docs/gobyexample.png
-
-* Go By Example
-
-.link https://gobyexample.com/timeouts
-
-* Talks
-
-* Presentations
-
-We give a lot of talks.
-
-Most of the tools for presentations focus on style, not ease of creation.
-
-* Present
-
-In the `go.talks` repo, have a new tool: `present`.
-
-	go get code.google.com/p/go.talks/present
-
-- Simple
-- Easy to use
-- Easy, smooth to present
-
-Took about an hour to put this talk together.
-
-Docs:
-
-.link http://go.pkgdoc.org/code.google.com/p/go.talks/present
-
-* Input for the previous slide
-
-.code go-docs.slide /^\* Present$/,/^\.link/
-
-* Input for the previous slide redux
-
-.code go-docs.slide /^\*.*previous/,/^\.code/
-
-* Revenge of the input for the the previous slide 
-
-.code go-docs.slide /^\*.*redux/,/^\.code/
-
-
-* Many choices
-
-Lots of presentations, different styles.
-
-* Fatal flaw
-
-They all have code.
-
-Can't execute the code!
-
-Want to edit and play.
-
-* The playground
-
-.image go-docs/play.png
-
-* Can run code from the browser
-
-.link http://play.golang.org
-
-* The tour
-
-.image go-docs/tour.png
-
-* Can run code from the browser
-
-.link http://tour.golang.org
-
-* Use this technology
-
-Want to embed the playground technology in the other media.
-
-Triggering example: Go Concurrency Patterns, Google I/O, 2012
-
-Needed to demonstrate concurrency and the passage of time.
-
-* Go Concurrency Patterns
-
-An extract from the talk.
-
-* Multiplexing
-
-These programs make Joe and Ann count in lockstep.
-We can instead use a fan-in function to let whosoever is ready talk.
-
-.code go-docs/faninboring.go /START3/,/STOP3/
-.play go-docs/faninboring.go /START1/,/STOP1/
-
-* .code and .play
-
-Input for the previous slide:
-
-.code go-docs.slide /^\* Multiplexing/,/^.play/
-
-* faninboring.go (I)
-
-	package main
-
-	import (
-		"fmt"
-		"math/rand"
-		"time"
-	)
-
-	// START1 OMIT
-	func main() {
-		c := fanIn(boring("Joe"), boring("Ann")) // HL
-		for i := 0; i < 10; i++ {
-			fmt.Println(<-c) // HL
-		}
-		fmt.Println("You're both boring; I'm leaving.")
-	}
-	// STOP1 OMIT
-	
-* faninboring.go (II)
-
-	// START2 OMIT
-	func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-		c := make(chan string)
-		go func() { // We launch the goroutine from inside the function. // HL
-			for i := 0; ; i++ {
-				c <- fmt.Sprintf("%s: %d", msg, i)
-				time.Sleep(time.Duration(rand.Intn(2e3)) * time.Millisecond)
-			}
-		}()
-		return c // Return the channel to the caller. // HL
-	}
-	// STOP2 OMIT
-
-
-	// START3 OMIT
-	func fanIn(input1, input2 <-chan string) <-chan string { // HL
-		c := make(chan string)
-		go func() { for { c <- <-input1 } }() // HL
-		go func() { for { c <- <-input2 } }() // HL
-		return c
-	}
-	// STOP3 OMIT
-
-* .code and .play again
-
-The input for the Multiplexing slide again:
-
-.code go-docs.slide /^\* Multiplexing/,/^.play/
-
-* Multiplexing again
-
-These programs make Joe and Ann count in lockstep.
-We can instead use a fan-in function to let whosoever is ready talk.
-
-.code go-docs/faninboring.go /START3/,/STOP3/
-.play go-docs/faninboring.go /START1/,/STOP1/
-
-* Executable documentation
-
-* Plans
-
-Deploy executable examples throughout:
-
-- godoc (already done)
-- blog
-- code walks
-- Go By Example
-- wiki
-
-.link http://golang.org/pkg/strings/#example_Contains
diff --git a/content/2012/go-docs/blog.png b/content/2012/go-docs/blog.png
deleted file mode 100644
index d0a63fd..0000000
--- a/content/2012/go-docs/blog.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/codewalk.png b/content/2012/go-docs/codewalk.png
deleted file mode 100644
index 7cfcaca..0000000
--- a/content/2012/go-docs/codewalk.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/faninboring.go b/content/2012/go-docs/faninboring.go
deleted file mode 100644
index 08b3d80..0000000
--- a/content/2012/go-docs/faninboring.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := fanIn(boring("Joe"), boring("Ann")) // HL
-	for i := 0; i < 10; i++ {
-		fmt.Println(<-c) // HL
-	}
-	fmt.Println("You're both boring; I'm leaving.")
-}
-// STOP1 OMIT
-
-// START2 OMIT
-func boring(msg string) <-chan string { // Returns receive-only channel of strings. // HL
-	c := make(chan string)
-	go func() { // We launch the goroutine from inside the function. // HL
-		for i := 0; ; i++ {
-			c <- fmt.Sprintf("%s: %d", msg, i)
-			time.Sleep(time.Duration(rand.Intn(2e3)) * time.Millisecond)
-		}
-	}()
-	return c // Return the channel to the caller. // HL
-}
-// STOP2 OMIT
-
-
-// START3 OMIT
-func fanIn(input1, input2 <-chan string) <-chan string { // HL
-	c := make(chan string)
-	go func() { for { c <- <-input1 } }() // HL
-	go func() { for { c <- <-input2 } }() // HL
-	return c
-}
-// STOP3 OMIT
diff --git a/content/2012/go-docs/gobyexample.png b/content/2012/go-docs/gobyexample.png
deleted file mode 100644
index 48e5f5c..0000000
--- a/content/2012/go-docs/gobyexample.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/godoc.png b/content/2012/go-docs/godoc.png
deleted file mode 100644
index 7582f9c..0000000
--- a/content/2012/go-docs/godoc.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/godoc1.png b/content/2012/go-docs/godoc1.png
deleted file mode 100644
index 013e1cd..0000000
--- a/content/2012/go-docs/godoc1.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/gopkgdoc.png b/content/2012/go-docs/gopkgdoc.png
deleted file mode 100644
index 49a2709..0000000
--- a/content/2012/go-docs/gopkgdoc.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/gowiki.png b/content/2012/go-docs/gowiki.png
deleted file mode 100644
index c00702e..0000000
--- a/content/2012/go-docs/gowiki.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/javadoc.png b/content/2012/go-docs/javadoc.png
deleted file mode 100644
index 1930159..0000000
--- a/content/2012/go-docs/javadoc.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/javadoc1.png b/content/2012/go-docs/javadoc1.png
deleted file mode 100644
index 5dde5a7..0000000
--- a/content/2012/go-docs/javadoc1.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/lseek.png b/content/2012/go-docs/lseek.png
deleted file mode 100644
index 4e88af9..0000000
--- a/content/2012/go-docs/lseek.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/play.png b/content/2012/go-docs/play.png
deleted file mode 100644
index 546914b..0000000
--- a/content/2012/go-docs/play.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/seek.png b/content/2012/go-docs/seek.png
deleted file mode 100644
index 7a89771..0000000
--- a/content/2012/go-docs/seek.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go-docs/tour.png b/content/2012/go-docs/tour.png
deleted file mode 100644
index 998787a..0000000
--- a/content/2012/go-docs/tour.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go1.slide b/content/2012/go1.slide
deleted file mode 100644
index be0eb63..0000000
--- a/content/2012/go1.slide
+++ /dev/null
@@ -1,507 +0,0 @@
-The Path to Go 1
-
-Rob Pike
-Google
-http://golang.org/s/plusrob
-@rob_pike
-http://golang.org
-
-Andrew Gerrand
-Google
-http://andrewgerrand.com
-@go_nuts
-http://golang.org
-
-
-* Introduction
-
-Go is a concurrent open source programming language developed at Google.
-
-Combines native compilation and static types with a lightweight dynamic feel.
-
-Fast, fun, and productive.
-
-
-* What is Go?
-
-Features:
-
-- Native code generation (compiled)
-- Statically typed
-- Composition via interfaces
-- Memory safe
-- Garbage collected
-- Native concurrency support
-- Excellent standard library
-- Great tools
-
-
-* History
-
-
-* History
-
-Began as a Google 20% project in late 2007.
-
-Released as an open source project in November 2009.
-
-Go 1 released in March 2012.
-
-
-* The Go project
-
-Planned from the start as an open source project.
-
-Publicly released under a BSD license.
-
-To date: 28 committers from Google and elsewhere.
-
-More than 200 other people have contributed to the project.
-
-9735 changes committed since release.
-
-
-* Development process
-
-Mercurial version control system with plugin for code review.
-
-No branches; linear history.
-
-Code review central to the project. All changes reviewed on golang-dev list using Rietveld (codereview.appspot.com).
-
-Custom continuous build system tests across all supported platforms.
-
-Contributions accepted on a "Discuss first, code later" basis.
-
-
-* Contributions over time
-
-The project moves fast:
-
-.image go1/changes.png
-
-Windows, FreeBSD, OpenBSD, NetBSD, and Plan 9 ports are community-driven.
-
-
-* Managing the project
-
-* Development cycle
-
-Changes are made continuously.
-
-Things break. Things get fixed.
-Some days are better than others.
-
-Continuous builders help, but don't reveal all issues.
-
-We needed to provide some stability for our users.
-
-
-* Weekly snapshots
-
-Attempt to keep everyone in sync.
-
-- Apply a Mercurial tag to a specific, stable revision.
-- Announce to user mailing list with detailed changelog.
-
-Great for early adopters and core developers.
-
-
-* Problems with weeklies
-
-Contributors work at tip; users sync to weeklies.
-
-Burden on users:
-
-- annoying to update weekly,
-- painful to update less often.
-
-Version skew results because users are at different weeklies.
-
-Skew fragments the community and slows adoption.
-
-
-* Formal release process
-
-March 2011: introduced releases every 1-2 months.
-
-- Pick the most stable of the past few snapshots and tag it.
-- Announce with abridged "must read" release notes.
-
-Keeps the community more in sync. Reduces churn.
-
-Popular with users.
-
-
-* Problem with releases
-
-Easy to make a few small changes once a week...
-
-\...but hard to make many small changes once a month.
-
-Skew still prevalent: adventurers and core devs still use weeklies (or tip!).
-
-
-* Introducing Gofix
-
-A tool to mechanically update code to accommodate language and library changes.
-
-  gofix prog.go
-
-Announced in May 2011.
-Gofix automates updates for backward-incompatible changes.
-Eases the burden of staying current.
-
-Release notes now mostly say "run gofix."
-
-Not a sed script. Works on the AST.
-
-
-* Gofix
-
-Gofix enables sweeping changes without fear of breaking the code base.
-
-Gofix gave us the freedom to make widespread changes that would have been too daunting otherwise.
-
-Can even update foreign code:
-
-"Yesterday I gofixed some third-party packages without even reading their code and without waiting for the authors to update them." - Dmitry Chestnykh
-
-
-* Versioning issues persist
-
-Gofix is no panacea.
-
-As the root of the dependency graph, a programming language can suffer acutely from version skew.
-
-The fundamental issue remains:
-Code you write today may not compile tomorrow.
-
-Some companies unwilling to bet on Go as they saw it as unstable.
-
-
-* A need for stability
-
-Gofix makes changes very easy, and also makes it easy to experiment.
-But it can't do everything.
-
-Priorities: If change is easy, what change is important?
-
-Wanted to make major changes to the language and libraries but, even with gofix, some things are too disruptive without proper planning.
-
-Decision: design and implement a stable version of Go, its libraries, and its tools.
-
-
-* Go 1
-
-* What is Go 1?
-
-A specification of the language and libraries that will be supported for years.
-
-Available as downloadable binary packages.
-
-An opportunity to:
-
-- fix minor language irritations,
-- fix inconsistencies in the standard library,
-- focus on bug fixing and cleaning up TODOs,
-- design and build a strong build tool set (get rid of make),
-- bring Windows support up to par.
-
-Polish and refine, not redesign.
-
-
-* Planning Go 1
-
-Wrote a detailed proposal document.
-
-Implemented (but not committed) many of the proposed changes.
-
-Core team met for a week to discuss and refine the document (October 2011).
-
-Presented the document to the community for discussion.
-
-Community feedback essential in refining the proposal.
-
-
-* Preparing Go 1
-
-
-Create many new issues on the tracker.
-
-Categorize new and existing issues as either "Go 1" or "after Go 1".
-
-Contributors nominate themselves to address specific issues.
-
-Stop developing new features; prioritize stability.
-
-
-* Rolling it out
-
-Daily number of lines changed in the months leading up to Go 1:
-
-.image go1/go1lines.png
-
-
-* Gofix and Go 1
-
-The largest Go 1 edits were performed by gofix.
-
-Gofix made it easy to try out a change and refine it incrementally.
-
-Some significant changes were tried and abandoned.
-
-
-* Gofix work flow
-
-Scripted work flow allowed us to avoid branches and merging nightmares.
-#Total automation of edits makes it easy to do large changes without branching.
-
-Process:
-
-  while !satisfied {
-    in tree 1:
-      refine gofix module in tree 1, build binary
-    in tree 2:
-      revert to tip (note: tip)
-      apply gofix binary from tree 2
-      build and test
-  }
-  commit tree 1
-  commit tree 2
-
-Even as other changes are happening, this leads to no branching or skew.
-
-* Sample change
-
-.image go1/errordiff1.png
-.image go1/errordiff2.png
-
-* Go 1 release process
-
-Releases paused from r60 (August 2011).
-Weeklies continued as normal.
-
-Issued release candidates in the weeks leading up to launch.
-
-Release candidates included binary distributions for the supported operating systems (FreeBSD, Linux, Mac OS X, and Windows).
-
-
-* What is in Go 1?
-
-* Go 1
-
-Specification of the language.
-
-Specification of the libraries.
-
-Promise of long term compatibility.
-
-Windows as a first class citizen.
-
-New tool chain centered around the `go` tool.
-
-"Phase change" in the way the project runs.
-
-
-* Language changes
-
-A new `rune` type to represent a Unicode code point.
-(Important step in making `int` either 32 or 64 bits; currently just 32.)
-
-A new built-in `error` type to replace `os.Error`.
-This affected almost all Go code in existence.
-
-Equality defined on structs.
-
-Cleaned up some clumsy operations.
-
-
-* API changes
-
-A re-designed `time` package with a clean, simple interface.
-
-Regularization of `strconv`, breaking away from the old C-style API.
-
-Widespread package re-organization. Put things in more appropriate places.
-
-Dozens of lesser changes.
-
-
-* Time
-
-Old time package was based on the Unix epoch. Limited range, poor features,
-no type safety (just integer nanoseconds).
-
-Substantial redesign creates separate Time and Duration types.
-Time can represent huge range of times with nanosecond precision.
-
-Duration specifies intervals. Example:
-
-  time.Sleep(2)             // Old API, unsafe: How long is this?
-  time.Sleep(2*time.Second) // New API: type-safe, readable.
-
-  fmt.Println(time.Now().Add(1e6*time.Hour))
-
-Also a new flag type!
-
-  $ command -timeout 1m30s
-
-* Re-organization
-
-Rearranged the organically constructed tree to group related things together.
-Examples:
-
-  Old         New
-
-  "asn1"      "encoding/asn1"
-  "csv"       "encoding/csv"
-  "gob"       "encoding/gob"
-  "json"      "encoding/json"
-  "xml"       "encoding/xml"
-  
-  "unicode"   "unicode"
-  "utf8"      "unicode/utf8"
-  "utf16"     "unicode/utf16"
-
-All updated by gofix, of course.
-
-* Demoting immature packages and commands
-
-Parts of the tree deemed unready should not be part of Go 1.
-
-Working but immature packages were moved to sub-repositories of the main Go repository. (They remain installable.)
-
-Unfinished and old packages and tools were left out.
-
-
-* How to build
-
-Before Go 1, Go programs were built with make, but Makefiles are annoying to write and, for Go, redundant.
-
-From the beginning, a goal of Go was good dependency management.
-
-By design, Go source code contains all the information necessary to build.
-
-Go 1 includes a new "go tool" that eliminates the need for make.
-
-Given a Go tree (including remote dependencies), can build and install directly:
-
-  $ go build file.go
-
-* The go tool
-
-A complete build, test, and install tool for Go programs.
-
-Some realistic examples:
-
-  $ go run hello.go       # Compile-and-go. (Ha!).
-  $ go build package      # Build everything in directory (and deps).
-  $ go install            # Install everything in dir and (and deps).
-  $ go test archive/zip   # Compile and run unit tests for package.
-
-The go tool also wraps `gofmt`, `gofix`, etc.:
-
-  $ go fmt                # Run gofmt on package in current dir.
-  $ go fix                # Run gofix on package in current dir.
-
-* The go tool and remote repositories
-
-The go tool automates installation of remote packages.
-
-Packages are addressed by import strings.
-Import strings are just source repository URLs.
-Go tool downloads and installs all dependencies, transitively.
-
-  $ go get code.google.com/p/myrepo/mypackage
-
-Installs my package, plus any remote dependencies it may have.
-And to use the package in Go source:
-
-	import "code.google.com/p/myrepo/mypackage"
-
-The tool can even run gofix as it installs:
-
-  $ go get -fix code.google.com/p/myrepo/mypackage
-
-
-* Documentation
-
-Complete reworking:
-
-- updated,
-- unified,
-- added new documents,
-- added new (executable) examples,
-- redesigned web site.
-
-
-* API compatibility tool
-
-Scans the entire standard library and checks it against a master list (`go1.txt`).
-
-Helps guarantee compatibility as development continues.
-
-Part of our build process in the lead up to Go 1 (and continues today).
-
-
-* Today and tomorrow
-
-* What are we working on?
-
-The goal for Go 1 was a stable, productive environment.
-
-Now that Go 1 is out, we are shifting our focus to using Go more than just developing it.
-
-Only through using Go extensively can we learn what might be needed in a future version, say Go 2.
-
-* There is still active development
-
-The design is locked down but work continues.
-
-Stability: bug fixes.
-
-Efficiency:
-
-- code generation,
-- garbage collection,
-- scheduling,
-- hot spots in standard libraries.
-
-Portability: NetBSD, OpenBSD, and Plan 9 ports in progress.
-
-New libraries: HTML parsing and Unicode collation packages, for example.
-
-* Releases after Go 1
-
-Two minor point releases (`go1.0.1` and `go1.0.2`) have been issued to fix bugs.
-
-The next major point release (`go1.1`) is planned for the end of 2012.
-It will include:
-
-- code generation improvements to the `gc` compiler,
-- performance and accuracy improvements to the garbage collector,
-- (possibly) an improved scheduler,
-- a slew of bug fixes.
-
-Go 2 is likely years away.
-
-
-* Learn more
-
-The Go web site has a huge amount of documentation:
-
-.link http://golang.org
-
-Learn Go from a web browser:
-
-.link http://tour.golang.org
-
-"Meet the Go team" panel from Google I/O 2012:
-
-.link http://golang.org/s/meet-the-go-team
-
-Google Code project:
-
-.link http://code.google.com/p/go
-
diff --git a/content/2012/go1/changes.png b/content/2012/go1/changes.png
deleted file mode 100644
index 3406e97..0000000
--- a/content/2012/go1/changes.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go1/errordiff1.png b/content/2012/go1/errordiff1.png
deleted file mode 100644
index 4e2b951..0000000
--- a/content/2012/go1/errordiff1.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go1/errordiff2.png b/content/2012/go1/errordiff2.png
deleted file mode 100644
index 3eae7d4..0000000
--- a/content/2012/go1/errordiff2.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/go1/go1lines.png b/content/2012/go1/go1lines.png
deleted file mode 100644
index 100f6c7..0000000
--- a/content/2012/go1/go1lines.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/goforc.slide b/content/2012/goforc.slide
deleted file mode 100644
index 14ce425..0000000
--- a/content/2012/goforc.slide
+++ /dev/null
@@ -1,726 +0,0 @@
-Go for C programmers
-ACCU, Silicon Valley Chapter, Nov. 14, 2012
-
-# Go is a general-purpose programming language developed at Google.
-# Go's design is influenced by the C and Pascal lineage, but instead of providing
-# a conglomerate of features, Go takes a fresh look at the essential mechanisms
-# required for modern programming tasks. As a result, Go has evolved to a compact
-# language of surprising power. In this presentation we give a brief introduction
-# to Go, slightly slanted towards programmers with a C/C++ background, and then
-# talk about particularly interesting aspects of Go.
-
-Robert Griesemer
-Google Inc.
-gri@golang.org
-
-* Organization of this talk
-
-Part 1: Introduction to Go
-
-Break
-
-Part 2: Object-oriented and concurrent programming in Go
-
-# if time permits and desire exists
-
-* Motivation
-
-* Have
-
-Incomprehensible and unsafe code.
-
-Extremely slow builds.
-
-Missing concurrency support.
-
-Outdated tools.
-
-# C, C++ are > 30 years old!
-# Java is 15 years old, but not really a systems-programming language.
-# (No control over data layout, no unsigned, verbose, etc.)
-
-* Want
-
-Readable, safe, and efficient code.
-
-A build system that scales.
-
-Good concurrency support.
-
-Tools that can operate at Google-scale.
-
-# A language for the 21. century!
-
-* Meet Go
-
-Compact, yet expressive
-# spec is ~50 pages
-
-Statically typed and garbage collected
-
-Object- but not type-oriented
-
-Strong concurrency support
-
-Efficient implementation
-
-Rich standard library
-
-Fast compilers
-
-Scalable tools
-
-* Hello, World
-
-.play goforc/hello.go
-
-# the canonical first program
-# note: immediately readable for a C programmer even without prior knowledge of Go
-# (not the case with C++'s Hello, World, which is using the << operator)
-# which bring us to the first item on the "Want" list: readable code.
-
-* Syntax
-
-* Syntax
-
-_Syntax_is_not_important..._-_unless_you_are_a_programmer._
-Rob Pike.
-
-_The_readability_of_programs_is_immeasurably_more_important_than_their_writeability._
-Hints on Programming Language Design
-C. A. R. Hoare 1973
-
-# A lot of effort has gone into honing Go's syntax over more than 3 years.
-# The result is a clutter- and stutter-free, compact, yet readable notation.
-# Consider some alternatives...
-
-* Too verbose
-
-	scoped_ptr<logStats::LogStats>
-		logStats(logStats::LogStats::NewLogStats(FLAGS_logStats, logStats::LogStats::kFIFO));
-
-# real example from C++ (2012) (names changed)
-# logStats mentioned 9 times!
-# too much clutter
-
-* Too dense
-
-	(n: Int) => (2 to n) |> (r => r.foldLeft(r.toSet)((ps, x) =>
-		if (ps(x)) ps -- (x * x to n by x) else ps))
-
-# prime sieve in Scala
-# pretty and short but incomprehensible
-
-* Just right
-
-	t := time.Now()
-	switch {
-	case t.Hour() < 12:
-	    return "morning"
-	case t.Hour() < 18:
-	    return "afternoon"
-	default:
-	    return "evening"
-	}
-
-# looks like pseudo code
-# readable even w/o knowing Go
-# lots of things are going on but not relevant for understanding
-# no clutter
-
-* Reading Go code
-
-* Packages
-
-A Go program consists of _packages_.
-
-A _package_ consists of one or more _source_files_ (`.go` files).
-
-Each _source_file_ starts with a _package_clause_ followed by declarations.
-
-.code goforc/hello.go
-
-By convention, all files belonging to a single package are located in a single directory.
-
-* Declarations, "Pascal-style" (left to right)
-
-Pattern: keyword names [type] [initializer]
-
-.code goforc/decls.go /START/,/STOP/
-
-* Why?
-
-	p, q *Point
-
-	func adder(delta int) func(x int) int
-
-# try this in C
-# composition of types straight-forward
-
-* Constants
-
-In Go, constants are _mathematically_precise_.
-
-There is no need for qualifiers (`-42LL`, `7UL`, etc.)
-
-.code goforc/consts.go /START1/,/STOP1/
-
-Only when used, constants are truncated to size:
-
-.play goforc/consts.go /START2/,/STOP2/
-
-Huge win in readability and ease of use.
-
-* Types
-
-Familiar:
-- Basic types, arrays, structs, pointers, functions.
-
-But:
-- `string` is a basic type.
-- No automatic conversion of basic types in expressions.
-- No pointer arithmetic; pointers and arrays are different.
-- A function type represents a function; context and all.
-
-New:
-- _Slices_ instead of array pointers + separate length: `[]int`
-- _Maps_ because everybody needs them: `map[string]int`
-- _Interfaces_ for polymorphism: `interface{}`
-- _Channels_ for communication between goroutines: `chan` `int`
-
-* Variables
-
-Familiar:
-
-.code goforc/vars.go /START1/,/STOP1/
-
-New: Type can be inferred from type of initializing expression.
-
-.code goforc/vars.go /START2/,/STOP2/
-
-Shortcut (inside functions):
-
-.code goforc/vars.go /i :=/
-
-It is _safe_ to take the address of _any_ variable:
-
-.code goforc/vars.go /return/
-
-* Functions
-
-Functions may have multiple return values:
-
-	func atoi(s string) (i int, err error)
-
-Functions are first-class citizens (_closures_):
-
-.code goforc/adder.go /START1/,/STOP1/
-.play goforc/adder.go /START2/,/STOP2/
-
-* Statements
-
-.code goforc/stmts.go /START/,/STOP/
-
-* Go statements for C programmers
-
-Cleanups:
-
-- No semicolons
-- Multiple assignments
-- `++` and `--` are statements
-- No parentheses around conditions; curly braces mandatory
-- Implicit `break` in `switch`; explicit `fallthrough`
-
-New:
-
-- `for` `range`
-- type `switch`
-- `go`, `select`
-- `defer`
-
-* Assignments
-
-Assignments may assign multiple values simultaneously:
-
-	a, b = x, y
-
-Equivalent to:
-
-	t1 := x
-	t2 := y
-	a = t1
-	b = t2
-
-For instance:
-
-	a, b = b, a       // swap a and b
-	i, err = atoi(s)  // assign results of atoi
-	i, _ = atoi(991)  // discard 2nd value
-
-* Switch statements
-
-Switch statements may have multiple case values, and `break` is implicit:
-
-	switch day {
-	case 1, 2, 3, 4, 5:
-		tag = "workday"
-	case 0, 6:
-		tag = "weekend"
-	default:
-		tag = "invalid"
-	}
-
-The case values don't have to be constants:
-
-	switch {
-	case day < 0 || day > 6:
-		tag = "invalid"
-	case day == 0 || day == 6:
-		tag = "weekend"
-	default:
-		tag = "workday"
-	}
-
-* For loops
-
-.code goforc/forloop.go /START1/,/STOP1/
-
-A `range` clause permits easy iteration over arrays and slices:
-
-.play goforc/forloop.go /START3/,/STOP3/
-
-Unused values are discarded by assigning to the blank (_) identifier:
-
-.code goforc/forloop.go /START2/,/STOP2/
-
-* Dependencies
-
-* Dependencies in Go
-
-An _import_declaration_ is used to express a _dependency_ on another package:
-
-	import "net/rpc"
-
-Here, the importing package depends on the Go package "rpc".
-
-The _import_path_ ("net/rpc") uniquely identifies a package; multiple packages may have the same name, but they all reside at different locations (directories).
-
-By convention, the package name matches the last element of the import path (here: "rpc").
-
-_Exported_ functionality of the `rpc` package is available via the _package_qualifier_ (`rpc`):
-
-	rpc.Call
-
-A Go import declaration takes the place of a C _include_.
-
-* Naming: An excursion
-
-How names work in a programming language is critical to readability.
-Scopes control how names work.
-Go has very simple scope hierarchy:
-
-- universe
-- package
-- file (for imports only)
-- function
-- block
-
-* Locality of names
-
-Upper case names are _exported_: `Name` _vs._ `name`.
-
-The package qualifier is always present for imported names.
-
-(First component of) every name is always declared in the current package.
-
-One of the best (and hardest!) decisions made in Go.
-
-* Locality scales
-
-No surprises when importing:
-
-- Adding an exported name to my package cannot break your package!
-
-Names do not leak across boundaries.
-
-In C, C++, Java the name `y` could refer to anything.
-In Go, `y` (or even `Y`) is always defined within the package.
-In Go, `x.Y` is clear: find `x` locally, `Y` belongs to it, and there is only one such `Y`.
-
-Immediate consequences for readability.
-
-* Back to imports
-
-Importing a package means reading a package's exported API.
-
-This export information is self-contained. For instance:
-
-- A imports B
-- B imports C
-- B exports contain references to C
-
-B's export data contains all necessary information about C. There is no need for a compiler to read the export data of C.
-
-This has huge consequences for build times!
-
-* Dependencies in C
-
-`.h` files are not self-contained.
-
-As a result, a compiler ends up reading core header files over and over again.
-
-`ifdef` still requires the preprocessor to read a lot of code.
-
-No wonder it takes a long time to compile...
-
-At Google scale: dependencies explode, are exponential, become almost non-computable.
-
-A large Google C++ build can read the same header file tens of thousands of times!
-
-# it is real work, too, teaching the compiler what a string is each time
-
-* Tools
-
-* A brief overview
-
-Two compilers: gc, gccgo
-
-Support for multiple platforms: x86 (32/64bit), ARM (32bit), Linux, BSD, OS X, ...
-
-Automatic formatting of source code: `gofmt`
-
-Automatic documentation extraction: `godoc`
-
-Automatic API adaption: `gofix`
-
-All (and more!) integrated into the `go` command.
-
-* Building a Go program
-
-A Go program can be compiled and linked without additional build information (`make` files, etc.).
-
-By convention, all files belonging to a package are found in the same directory.
-
-All depending packages are found by inspecting the import paths of the top-most (_main_) package.
-
-A single integrated tool takes care of compiling individual files or entire systems.
-
-* The go command
-
-Usage:
-
-	go command [arguments]
-
-Selected commands:
-
-	build       compile packages and dependencies
-	clean       remove object files
-	doc         run godoc on package sources
-	fix         run go tool fix on packages
-	fmt         run gofmt on package sources
-	get         download and install packages and dependencies
-	install     compile and install packages and dependencies
-	list        list packages
-	run         compile and run Go program
-	test        test packages
-	vet         run go tool vet on packages
-
-.link http://golang.org/cmd/go/
-
-* Break
-
-# After the break, we will discuss OOP and concurrency in Go.
-
-* Object-oriented programming
-
-* What is object-oriented programming?
-
-"Object-oriented programming (OOP) is a programming paradigm using _objects_ – usually instances of a class – consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, messaging, modularity, polymorphism, and inheritance. Many modern programming languages now support forms of OOP, at least as an option."
-
-(Wikipedia)
-
-# Important:
-# Notion of _objects_
-# _Objects_ have _state_ (data fields), and _methods_ (for interactions)
-
-* OOP requires very little extra programming language support
-
-We only need
-
-- the notion of an _Object_,
-- a mechanism to interact with them (_Methods_),
-- and support for polymorphism (_Interfaces_).
-
-Claim: Data abstraction, encapsulation, and modularity are mechanisms
-in their own right, not OOP specific, and a modern language (OO or not)
-should have support for them independently.
-
-
-* Object-oriented programming in Go
-
-Methods without classes
-
-Interfaces without hierarchies
-
-Code reuse without inheritance
-
-Specifically:
-
-- Any _value_ can be an _object_
-- Any _type_ can play the role of a _class_
-- _Methods_ can be attached to any _type_
-- _Interfaces_ implement polymorphism.
-
-* Methods
-
-.play goforc/point.go
-
-* Methods can be attached to any type
-
-.play goforc/celsius.go
-
-* Interfaces
-
-	type Stringer interface {
-	     String() string
-	}
-
-	type Reader interface {
-	     Read(p []byte) (n int, err error)
-	}
-
-	type Writer interface {
-	     Write(p []byte) (n int, err error)
-	}
-
-	type Empty interface{}
-
-An interface defines a set of methods.
-A type that implements all methods of an interface is said to implement the interface.
-All types implement the empty interface interface{}.
-
-* Dynamic dispatch
-
-.play goforc/interface.go /START/,/STOP/
-
-A value (here: `corner`, `boiling`) of a type (`Point`, `Celsius`) that implements
-an interface (`Stringer`) can be assigned to a variable (`v`) of that interface type.
-
-* Composition and chaining
-
-Typically, interfaces are small (1-3 methods).
-
-Pervasive use of key interfaces in the standard library make it easy to chain APIs together.
-
-	package io
-	func Copy(dst Writer, src Reader) (int64, error)
-
-The io.Copy function copies by reading from any Reader and writing to any Writer.
-
-Interfaces are often introduced ad-hoc, and after the fact.
-
-There is no explicit hierarchy and thus no need to design one!
-
-* cat
-
-.code goforc/cat.go
-
-# An `os.File` implements the `Reader` interface;
-# `os.Stdout` implements the `Writer` interface.
-
-* Interfaces in practice
-
-Methods on any types and _ad_hoc_ interfaces make for a light-weight OO programming style.
-
-Go interfaces enable post-facto abstraction.
-# Existing code may not know about a new interface
-
-No explicit type hierarchies.
-# Coming up with the correct type hierarchy is hard
-# They are often wrong
-# They are difficult and time-consuming to change
-
-"Plug'n play" in a type-safe way.
-
-# There's much more but we won't have time for more detail.
-
-* Concurrency
-
-* What is concurrency?
-
-Concurrency is the composition of independently executing computations.
-
-Concurrency is a way to structure software, particularly as a way to write clean code that interacts well with the real world.
-
-It is not parallelism.
-
-* Concurrency is not parallelism
-
-Concurrency is not parallelism, although it enables parallelism.
-
-If you have only one processor, your program can still be concurrent  but it cannot be parallel.
-
-On the other hand, a well-written concurrent program might run efficiently in parallel on a multiprocessor. That property could be important...
-
-For more on that distinction, see the link below. Too much to discuss here.
-
-.link http://golang.org/s/concurrency-is-not-parallelism
-
-* A model for software construction
-
-Easy to understand.
-
-Easy to use.
-
-Easy to reason about.
-
-You don't need to be an expert!
-
-(Much nicer than dealing with the minutiae of parallelism (threads, semaphores, locks, barriers, etc.))
-
-There is a long history behind Go's concurrency features, going back to Hoare's CSP in 1978 and even Dijkstra's guarded commands (1975).
-
-* Basic Examples
-
-* A boring function
-
-We need an example to show the interesting properties of the concurrency primitives.
-
-To avoid distraction, we make it a boring example.
-
-.code goforc/example0.go /START1/,/STOP1/
-.play goforc/example0.go /START2/,/STOP2/
-
-* Ignoring it
-
-The `go` statement runs the function as usual, but doesn't make the caller wait.
-
-It launches a goroutine.
-
-The functionality is analogous to the & on the end of a shell command.
-
-.play goforc/example1.go /START/,/STOP/
-
-* Ignoring it a little less
-
-When main returns, the program exits and takes the function `f` down with it.
-
-We can hang around a little, and on the way show that both main and the launched goroutine are running.
-
-.play goforc/example2.go /START/,/STOP/
-
-* Goroutines
-
-What is a goroutine? It's an independently executing function, launched by a `go` statement.
-
-It has its own call stack, which grows and shrinks as required.
-
-It's very cheap. It's practical to have thousands, even hundreds of thousands of goroutines.
-
-It's not a thread.
-
-There might be only one thread in a program with thousands of goroutines.
-
-Instead, goroutines are multiplexed dynamically onto threads as needed to keep all the goroutines running.
-
-But if you think of it as a very cheap thread, you won't be far off.
-
-* Channels
-
-A channel in Go provides a connection between two goroutines, allowing them to communicate.
-
-.code goforc/channels.go /START1/,/STOP1/
-.code goforc/channels.go /START2/,/STOP2/
-.code goforc/channels.go /START3/,/STOP3/
-
-* Using channels
-
-A channel connects the `main` and `f` goroutines so they can communicate.
-
-.play goforc/communication1.go /START1/,/STOP1/
-.code goforc/communication1.go /START2/,/STOP2/
-
-* Synchronization
-
-When the main function executes `<–c`, it will wait for a value to be sent.
-
-Similarly, when the function `f` executes `c<–value`, it waits for a receiver to be ready.
-
-A sender and receiver must both be ready to play their part in the communication. Otherwise we wait until they are.
-
-Thus channels both communicate and synchronize.
-
-Channels can be unbuffered or buffered.
-
-* Using channels between many goroutines
-
-.play goforc/communication2.go /START1/,/STOP1/
-
-A single channel may be used to communicate between many (not just two) goroutines; many goroutines may communicate via one or multiple channels.
-
-This enables a rich variety of concurrency patterns.
-
-# There's enough material for several talks on this subject alone.
-
-* Elements of a work-stealing scheduler
-
-.code goforc/worker1.go /START2/,/STOP2/
-
-The `worker` uses two channels to communicate:
-- The `in` channel waits for some work order.
-- The `out` channel communicates the result.
-- As work load, a worker (very slowly) computes the list of prime factors for a given order.
-
-* A matching producer and consumer
-
-.code goforc/worker1.go /START3/,/STOP3/
-
-The `producer` produces and endless supply of work orders and sends them `out`.
-
-The `consumer` receives `n` results from the `in` channel and then terminates.
-
-* Putting it all together
-
-.play goforc/worker1.go /START1/,/STOP1/
-
-We use one worker to handle the entire work load.
-
-Because there is only one worker, we see the result coming back in order.
-
-This is running rather slow...
-
-* Using 10 workers
-
-.play goforc/worker2.go /START1/,/STOP1/
-
-A ready worker will read the next order from the `in` channel and start working on it. Another ready worker will proceed with the next order, and so forth.
-
-Because we have many workers and since different orders take different amounts of time to work on, we see the results coming back out-of-order.
-
-On a multi-core system, many workers may truly run in parallel.
-
-This is running much faster...
-
-* The Go approach
-
-Don't communicate by sharing memory, share memory by communicating.
-
-* There's much more...
-
-* Links
-
-Go Home Page:
-
-.link http://golang.org
-
-Go Tour (learn Go in your browser)
-
-.link http://tour.golang.org
-
-Package documentation:
-
-.link http://golang.org/pkg
-
-Articles galore:
-
-.link http://golang.org/doc
diff --git a/content/2012/goforc/adder.go b/content/2012/goforc/adder.go
deleted file mode 100644
index 1ebc71a..0000000
--- a/content/2012/goforc/adder.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START1 OMIT
-func adder(delta int) func(x int) int {
-	f := func(x int) int { // HL
-		return x + delta // HL
-	} // HL
-	return f
-}
-
-// STOP1 OMIT
-
-func main() {
-	// START2 OMIT
-	var inc = adder(1)
-	fmt.Println(inc(0))
-	fmt.Println(adder(-1)(10))
-	// STOP2 OMIT
-}
diff --git a/content/2012/goforc/cat.go b/content/2012/goforc/cat.go
deleted file mode 100644
index 3979df1..0000000
--- a/content/2012/goforc/cat.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-	"io"
-	"os"
-)
-
-func main() {
-	flag.Parse()
-	for _, arg := range flag.Args() {
-		f, err := os.Open(arg)
-		if err != nil {
-			panic(err)
-		}
-		defer f.Close()
-		_, err = io.Copy(os.Stdout, f) // HL
-		if err != nil {
-			panic(err)
-		}
-	}
-}
diff --git a/content/2012/goforc/celsius.go b/content/2012/goforc/celsius.go
deleted file mode 100644
index ffb4572..0000000
--- a/content/2012/goforc/celsius.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Celsius float32
-type Fahrenheit float32
-
-func (t Celsius) String() string           { return fmt.Sprintf("%g°C", t) }
-func (t Fahrenheit) String() string        { return fmt.Sprintf("%g°F", t) }
-func (t Celsius) ToFahrenheit() Fahrenheit { return Fahrenheit(t*9/5 + 32) }
-
-func main() {
-	var t Celsius = 21
-	fmt.Println(t.String())
-	fmt.Println(t)
-	fmt.Println(t.ToFahrenheit())
-}
diff --git a/content/2012/goforc/channels.go b/content/2012/goforc/channels.go
deleted file mode 100644
index a10c9cb..0000000
--- a/content/2012/goforc/channels.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	var value int
-
-	// START1 OMIT
-	// Declaring and initializing.
-	var c chan int
-	c = make(chan int)
-	// or
-	c := make(chan int) // HL
-	// STOP1 OMIT
-
-	// START2 OMIT
-	// Sending on a channel.
-	c <- 1 // HL
-	// STOP2 OMIT
-
-	// START3 OMIT
-	// Receiving from a channel.
-	// The "arrow" indicates the direction of data flow.
-	value = <-c // HL
-	// STOP3 OMIT
-
-	_ = value
-}
diff --git a/content/2012/goforc/communication1.go b/content/2012/goforc/communication1.go
deleted file mode 100644
index 4825227..0000000
--- a/content/2012/goforc/communication1.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := make(chan string)
-	go f("three", 300*time.Millisecond, c)
-	for i := 0; i < 10; i++ {
-		fmt.Println("Received", <-c) // Receive expression is just a value. // HL
-	}
-	fmt.Println("Done.")
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func f(msg string, delay time.Duration, c chan string) {
-	for i := 0; ; i++ {
-		c <- fmt.Sprintf("%s %d", msg, i) // Any suitable value can be sent. // HL
-		time.Sleep(delay)
-	}
-}
-
-// STOP2 OMIT
diff --git a/content/2012/goforc/communication2.go b/content/2012/goforc/communication2.go
deleted file mode 100644
index 20c815b..0000000
--- a/content/2012/goforc/communication2.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	c := make(chan string)
-	go f("three", 300*time.Millisecond, c) // HL
-	go f("six", 600*time.Millisecond, c)   // HL
-	go f("nine", 900*time.Millisecond, c)  // HL
-	for i := 0; i < 10; i++ {
-		fmt.Println("Received", <-c)
-	}
-	fmt.Println("Done.")
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func f(msg string, delay time.Duration, c chan string) {
-	for i := 0; ; i++ {
-		c <- fmt.Sprintf("%s %d", msg, i) // Any suitable value can be sent. // HL
-		time.Sleep(delay)
-	}
-}
-
-// STOP2 OMIT
diff --git a/content/2012/goforc/consts.go b/content/2012/goforc/consts.go
deleted file mode 100644
index 33cf221..0000000
--- a/content/2012/goforc/consts.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START1 OMIT
-const (
-	MaxUInt = 1<<64 - 1
-	Pi      = 3.14159265358979323846264338327950288419716939937510582097494459
-	Pi2     = Pi * Pi
-	Delta   = 2.0
-)
-
-// STOP1 OMIT
-
-func main() {
-	// START2 OMIT
-	var x uint64 = MaxUInt
-	var pi2 float32 = Pi2
-	var delta int = Delta
-	// STOP2 OMIT
-	fmt.Println("x =", x)
-	fmt.Println("pi2 =", pi2)
-	fmt.Println("delta =", delta)
-}
diff --git a/content/2012/goforc/decls.go b/content/2012/goforc/decls.go
deleted file mode 100644
index b49dd4f..0000000
--- a/content/2012/goforc/decls.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// START OMIT
-import "fmt"
-
-const digits = "0123456789abcdef"
-
-type Point struct {
-	x, y int
-	tag  string
-}
-
-var s [32]byte
-
-var msgs = []string{"Hello, 世界", "Ciao, Mondo"}
-
-func itoa(x, base int) string
-
-// STOP OMIT
-
-func main() {
-	fmt.Println() // use fmt
-}
diff --git a/content/2012/goforc/example0.go b/content/2012/goforc/example0.go
deleted file mode 100644
index fa1d0f7..0000000
--- a/content/2012/goforc/example0.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START1 OMIT
-func main() {
-	f("Hello, World", 500*time.Millisecond)
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func f(msg string, delay time.Duration) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(delay)
-	}
-}
-
-// STOP2 OMIT
diff --git a/content/2012/goforc/example1.go b/content/2012/goforc/example1.go
deleted file mode 100644
index ced6d0e..0000000
--- a/content/2012/goforc/example1.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START OMIT
-func main() {
-	go f("three", 300*time.Millisecond)
-	go f("six", 600*time.Millisecond)
-	go f("nine", 900*time.Millisecond)
-}
-
-// STOP OMIT
-
-func f(msg string, delay time.Duration) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(delay)
-	}
-}
diff --git a/content/2012/goforc/example2.go b/content/2012/goforc/example2.go
deleted file mode 100644
index 3b8504f..0000000
--- a/content/2012/goforc/example2.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START OMIT
-func main() {
-	go f("three", 300*time.Millisecond)
-	go f("six", 600*time.Millisecond)
-	go f("nine", 900*time.Millisecond)
-	time.Sleep(3 * time.Second)
-	fmt.Println("Done.")
-}
-
-// STOP OMIT
-
-func f(msg string, delay time.Duration) {
-	for i := 0; ; i++ {
-		fmt.Println(msg, i)
-		time.Sleep(delay)
-	}
-}
diff --git a/content/2012/goforc/forloop.go b/content/2012/goforc/forloop.go
deleted file mode 100644
index 12975c4..0000000
--- a/content/2012/goforc/forloop.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-var primes = [...]int{2, 3, 5, 7, 11, 13, 17, 19}
-
-func _() {
-	// START1 OMIT
-	for i := 0; i < len(primes); i++ {
-		fmt.Println(i, primes[i])
-	}
-	// STOP1 OMIT
-
-	// START2 OMIT
-	var sum int
-	for _, x := range primes {
-		sum += x
-	}
-	// STOP2 OMIT
-}
-
-func main() {
-	// START3 OMIT
-	for i, x := range primes {
-		fmt.Println(i, x)
-	}
-	// STOP3 OMIT
-}
diff --git a/content/2012/goforc/hello.go b/content/2012/goforc/hello.go
deleted file mode 100644
index e4f48ab..0000000
--- a/content/2012/goforc/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, 世界")
-}
diff --git a/content/2012/goforc/interface.go b/content/2012/goforc/interface.go
deleted file mode 100644
index 02bc0f6..0000000
--- a/content/2012/goforc/interface.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Point struct{ x, y int }
-
-func (p Point) String() string { return fmt.Sprintf("Point{%d, %d}", p.x, p.y) }
-
-type Celsius float32
-type Fahrenheit float32
-
-func (t Celsius) String() string           { return fmt.Sprintf("%g°C", t) }
-func (t Fahrenheit) String() string        { return fmt.Sprintf("%g°F", t) }
-func (t Celsius) ToFahrenheit() Fahrenheit { return Fahrenheit(t*9/5 + 32) }
-
-func main() {
-	// START OMIT
-	type Stringer interface {
-		String() string
-	}
-
-	var v Stringer // HL
-	var corner = Point{1, 1}
-	var boiling = Celsius(100)
-
-	v = corner
-	fmt.Println(v.String()) // dynamic dispatch
-	fmt.Println(v)
-
-	v = boiling.ToFahrenheit()
-	fmt.Println(v.String()) // dynamic dispatch
-	fmt.Println(v)
-	// STOP OMIT
-}
diff --git a/content/2012/goforc/point.go b/content/2012/goforc/point.go
deleted file mode 100644
index 2973d77..0000000
--- a/content/2012/goforc/point.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Point struct{ x, y int }
-
-func PointToString(p Point) string {
-	return fmt.Sprintf("Point{%d, %d}", p.x, p.y)
-}
-
-func (p Point) String() string { // HL
-	return fmt.Sprintf("Point{%d, %d}", p.x, p.y)
-}
-
-func main() {
-	p := Point{3, 5}
-	fmt.Println(PointToString(p)) // static dispatch // HL
-	fmt.Println(p.String())       // static dispatch // HL
-	fmt.Println(p)
-}
diff --git a/content/2012/goforc/stmts.go b/content/2012/goforc/stmts.go
deleted file mode 100644
index ae6a5c7..0000000
--- a/content/2012/goforc/stmts.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-const digits = "0123456789abcdef"
-
-func itoa(x, base int) string {
-	// START OMIT
-	t := x
-	switch {
-	case x == 0:
-		return "0"
-	case x < 0:
-		t = -x
-	}
-	var s [32]byte
-	i := len(s)
-	for t != 0 { // Look, ma, no ()'s!
-		i--
-		s[i] = digits[t%base]
-		t /= base
-	}
-	if x < 0 {
-		i--
-		s[i] = '-'
-	}
-	return string(s[i:])
-	// STOP OMIT
-}
-
-func main() {
-	fmt.Println(itoa(-42, 2))
-}
diff --git a/content/2012/goforc/vars.go b/content/2012/goforc/vars.go
deleted file mode 100644
index 101eaa7..0000000
--- a/content/2012/goforc/vars.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// START1 OMIT
-var i int
-var p, q *Point
-var threshold float64 = 0.75
-
-// STOP1 OMIT
-
-// START2 OMIT
-var i = 42       // type of i is int
-var z = 1 + 2.3i // type of z is complex128
-// STOP2 OMIT
-
-func _() int {
-	i := 42 // type of i is int
-	return &i
-}
diff --git a/content/2012/goforc/worker1.go b/content/2012/goforc/worker1.go
deleted file mode 100644
index 585af16..0000000
--- a/content/2012/goforc/worker1.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-import "time"
-
-// START1 OMIT
-func main() {
-	start := time.Now()
-
-	in := make(chan int)    // Channel on which work orders are received.
-	out := make(chan []int) // Channel on which results are returned.
-	go producer(in)
-	go worker(in, out) // Launch one worker. // HL
-	consumer(out, 100)
-
-	fmt.Println(time.Since(start))
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func worker(in chan int, out chan []int) {
-	for {
-		order := <-in           // Receive a work order. // HL
-		result := factor(order) // Do some work. // HL
-		out <- result           // Send the result back. // HL
-	}
-}
-
-// STOP2 OMIT
-
-// START3 OMIT
-func producer(out chan int) {
-	for order := 0; ; order++ {
-		out <- order // Produce a work order. // HL
-	}
-}
-
-func consumer(in chan []int, n int) {
-	for i := 0; i < n; i++ {
-		result := <-in // Consume a result. // HL
-		fmt.Println("Consumed", result)
-	}
-}
-
-// STOP3 OMIT
-
-// factor returns a list containing x and its prime factors.
-func factor(x int) (list []int) {
-	list = append(list, x)
-	for f := 2; x >= f; f++ {
-		for x%f == 0 {
-			x /= f
-			list = append(list, f)
-			// Slow down so we can see what happens.
-			time.Sleep(50 * time.Millisecond)
-		}
-	}
-	return
-}
diff --git a/content/2012/goforc/worker2.go b/content/2012/goforc/worker2.go
deleted file mode 100644
index f995e9b..0000000
--- a/content/2012/goforc/worker2.go
+++ /dev/null
@@ -1,64 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-import "time"
-
-func main() {
-	start := time.Now()
-
-	// START1 OMIT
-	in := make(chan int)
-	out := make(chan []int)
-	go producer(in)
-	// Launch 10 workers. // HL
-	for i := 0; i < 10; i++ { // HL
-		go worker(in, out) // HL
-	} // HL
-	consumer(out, 100)
-	// STOP1 OMIT
-
-	fmt.Println(time.Since(start))
-}
-
-// START2 OMIT
-func worker(in chan int, out chan []int) {
-	for {
-		order := <-in           // Receive a work order. // HL
-		result := factor(order) // Do some work. // HL
-		out <- result           // Send the result back. // HL
-	}
-}
-
-// STOP2 OMIT
-
-// START3 OMIT
-func producer(out chan int) {
-	for order := 0; ; order++ {
-		out <- order // Produce a work order. // HL
-	}
-}
-
-func consumer(in chan []int, n int) {
-	for i := 0; i < n; i++ {
-		result := <-in // Consume a result. // HL
-		fmt.Println("Consumed", result)
-	}
-}
-
-// STOP3 OMIT
-
-// factor returns a list containing x and its prime factors.
-func factor(x int) (list []int) {
-	list = append(list, x)
-	for f := 2; x >= f; f++ {
-		for x%f == 0 {
-			x /= f
-			list = append(list, f)
-			// Slow down so we can see what happens.
-			time.Sleep(50 * time.Millisecond)
-		}
-	}
-	return
-}
diff --git a/content/2012/insidepresent.slide b/content/2012/insidepresent.slide
deleted file mode 100644
index 2e33886..0000000
--- a/content/2012/insidepresent.slide
+++ /dev/null
@@ -1,144 +0,0 @@
-Inside the "present" tool
-
-Andrew Gerrand
-Google
-@enneff
-adg@golang.org
-http://golang.org
-
-
-* The Playground API
-
-The API used by the Playground (and the Tour) is a simple HTTP POST request
-that returns a JSON-encoded response.
-
-Request:
-
-	POST /compile HTTP/1.1
-	Host:play.golang.org
-	Content-Length:113
-	Content-Type:application/x-www-form-urlencoded; charset=UTF-8
-	
-	body=package+main%0A%0Aimport+%22fmt%22%0A%0Afunc+main()+%7B%0A%09fmt.Println(%22Hello%2C+playground%22)%0A%7D%0A
-
-Response body:
-
-	{"compile_errors":"","output":"Hello, playground\n"}
-
-
-* Playground drawbacks
-
-The compile service has no concept of time. (Necessary to limit resource use.)
-
-The API reflects this; output is sent in one blob, not streamed.
-
-Even when running locally, the API is bad for demonstrating code that uses time.
-
-Rob needed to use time in his _Go_Concurrency_Patterns_ talk.
-
-
-* Enter WebSockets
-
-WebSockets are a bi-directional communication channel between a JavaScript program running in a web browser and a web server. They are part of HTML 5. 
-
-The `websocket` package in Go's `go.net` sub-repository provides a WebSocket client and server.
-
-I thought I could use WebSockets to stream program output to a running
-presentation.
-
-And thus the `present` tool was born.
-
-
-* Hello, WebSocket
-
-.code insidepresent/websocket.js
-.play insidepresent/websocket.go
-
-
-* Messages
-
-The client (browser) and server (present) communicate with JSON-encoded messages.
-
-.code insidepresent/socket.go /Message is/,/^}/
-
-Go's `encoding/json` format can convert these `Message` values to and from JSON.
-
-Go:
-
-	Message{Id: "0", Kind: "run", Body: `package main; func main() { print("hello"); }`}
-
-JSON:
-
-	{"Id":"0","Kind":"run","Body":"package main; func main() { print(\"hello\"); }"}
-
-
-* On the wire
-
-.play insidepresent/hello.go
-
-.html insidepresent/wire.html
-
-
-* Implementation
-
-* socketHandler (1/3)
-
-First, register the handler with the `net/http` package:
-
-	http.Handle("/socket", websocket.Handler(socketHandler))
-
-Implementation:
-
-.code insidepresent/socket.go /func socketHandler/,/errc/
-
-* socketHandler (2/3)
-
-.code insidepresent/socket.go /Decode messages/,/END/
-
-* socketHandler (3/3)
-
-.code insidepresent/socket-simple.go /Start and kill/,/^}/
-
-
-* Process
-
-.code insidepresent/socket.go /Process represents/,/^}/
-
-* StartProcess
-
-.code insidepresent/socket.go /StartProcess builds/,/^}/
-
-* Process.start (1/2)
-
-.code insidepresent/socket.go /start builds/,/END/
-
-* Process.start (2/2)
-
-.code insidepresent/socket.go /build x\.go/,/^}/
-
-* Process.cmd
-
-.code insidepresent/socket.go /cmd builds/,/^}/
-.code insidepresent/socket.go /messageWriter is/,/END/
-
-* Process.wait and Process.end
-
-.code insidepresent/socket.go /wait waits/,/^}/
-.code insidepresent/socket.go /end sends/,/^}/
-
-* Process.Kill
-
-.code insidepresent/socket.go /Kill stops/,/^}/
-
-
-* One more thing
-
-* Limiting output (1/2)
-
-.code insidepresent/socket.go /switch m\.Kind/,/^			}/
-
-* Limiting output (2/2)
-
-.code insidepresent/socket.go /limiter returns/,/^}/
-
-
diff --git a/content/2012/insidepresent/hello.go b/content/2012/insidepresent/hello.go
deleted file mode 100644
index b62da0a..0000000
--- a/content/2012/insidepresent/hello.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import ( "fmt"; "time" )
-
-func main() {
-	for {
-		fmt.Println("Hello, Gophers!")
-		time.Sleep(time.Second)
-	}
-}
diff --git a/content/2012/insidepresent/socket-simple.go b/content/2012/insidepresent/socket-simple.go
deleted file mode 100644
index 20d5dde..0000000
--- a/content/2012/insidepresent/socket-simple.go
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2012 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"runtime"
-	"strconv"
-
-	"golang.org/x/net/websocket"
-)
-
-const socketPresent = true
-
-func HandleSocket(path string) {
-	http.Handle(path, websocket.Handler(socketHandler))
-}
-
-const msgLimit = 1000 // max number of messages to send per session
-
-var uniq = make(chan int) // a source of numbers for naming temporary files
-
-func init() {
-	go func() {
-		for i := 0; ; i++ {
-			uniq <- i
-		}
-	}()
-}
-
-// Message is the wire format for the websocket connection to the browser.
-// It is used for both sending output messages and receiving commands, as
-// distinguished by the Kind field.
-type Message struct {
-	Id   string // client-provided unique id for the process
-	Kind string // in: "run", "kill" out: "stdout", "stderr", "end"
-	Body string
-}
-
-// socketHandler handles the websocket connection for a given present session.
-// It handles transcoding Messages to and from JSON format, and starting
-// and killing Processes.
-func socketHandler(c *websocket.Conn) {
-	in, out := make(chan *Message), make(chan *Message)
-	errc := make(chan error, 1)
-
-	// Decode messages from client and send to the in channel.
-	go func() {
-		dec := json.NewDecoder(c)
-		for {
-			var m Message
-			if err := dec.Decode(&m); err != nil {
-				errc <- err
-				return
-			}
-			in <- &m
-		}
-	}()
-
-	// Receive messages from the out channel and encode to the client.
-	go func() {
-		enc := json.NewEncoder(c)
-		for m := range out {
-			if err := enc.Encode(m); err != nil {
-				errc <- err
-				return
-			}
-		}
-	}()
-	// END OMIT
-
-	// Start and kill Processes and handle errors.
-	proc := make(map[string]*Process)
-	for {
-		select {
-		case m := <-in:
-			switch m.Kind {
-			case "run":
-				proc[m.Id].Kill()
-				proc[m.Id] = StartProcess(m.Id, m.Body, out)
-			case "kill":
-				proc[m.Id].Kill()
-			}
-		case err := <-errc:
-			// A encode or decode has failed; bail.
-			log.Println(err)
-			// Shut down any running processes.
-			for _, p := range proc {
-				p.Kill()
-			}
-			return
-		}
-	}
-}
-
-// Process represents a running process.
-type Process struct {
-	id   string
-	out  chan<- *Message
-	done chan struct{} // closed when wait completes
-	run  *exec.Cmd
-}
-
-// StartProcess builds and runs the given program, sending its output
-// and end event as Messages on the provided channel.
-func StartProcess(id, body string, out chan<- *Message) *Process {
-	p := &Process{
-		id:   id,
-		out:  out,
-		done: make(chan struct{}),
-	}
-	cmd, err := p.start(body)
-	if err != nil {
-		p.end(err)
-		return nil
-	}
-	p.run = cmd
-	go p.wait(cmd)
-	return p
-}
-
-// Kill stops the process if it is running and waits for it to exit.
-func (p *Process) Kill() {
-	if p == nil {
-		return
-	}
-	if p.run != nil {
-		p.run.Process.Kill()
-	}
-	<-p.done
-}
-
-// start builds and starts the given program, sending its output to p.out,
-// and returns the associated *exec.Cmd.
-func (p *Process) start(body string) (*exec.Cmd, error) {
-	// x is the base name for .go and executable files
-	x := filepath.Join(tmpdir, "compile"+strconv.Itoa(<-uniq))
-	src := x + ".go"
-	bin := x
-	if runtime.GOOS == "windows" {
-		bin += ".exe"
-	}
-
-	// write body to x.go
-	defer os.Remove(src)
-	if err := ioutil.WriteFile(src, []byte(body), 0666); err != nil {
-		return nil, err
-	}
-	// END OMIT
-
-	// build x.go, creating x
-	dir, file := filepath.Split(src)
-	err := p.cmd(dir, "go", "build", "-o", bin, file).Run()
-	defer os.Remove(bin)
-	if err != nil {
-		return nil, err
-	}
-
-	// run x
-	cmd := p.cmd("", bin)
-	if err = cmd.Start(); err != nil {
-		return nil, err
-	}
-	return cmd, nil
-}
-
-// wait waits for the running process to complete and returns its error state.
-func (p *Process) wait(cmd *exec.Cmd) {
-	defer close(p.done)
-	p.end(cmd.Wait())
-}
-
-// end sends an "end" message to the client, containing the process id and the
-// given error value.
-func (p *Process) end(err error) {
-	m := &Message{Id: p.id, Kind: "end"}
-	if err != nil {
-		m.Body = err.Error()
-	}
-	p.out <- m
-}
-
-// cmd builds an *exec.Cmd that writes its standard output and error to the
-// Process' output channel.
-func (p *Process) cmd(dir string, args ...string) *exec.Cmd {
-	cmd := exec.Command(args[0], args[1:]...)
-	cmd.Dir = dir
-	cmd.Stdout = &messageWriter{p.id, "stdout", p.out}
-	cmd.Stderr = &messageWriter{p.id, "stderr", p.out}
-	return cmd
-}
-
-// messageWriter is an io.Writer that converts all writes to Message sends on
-// the out channel with the specified id and kind.
-type messageWriter struct {
-	id, kind string
-	out      chan<- *Message
-}
-
-func (w *messageWriter) Write(b []byte) (n int, err error) {
-	w.out <- &Message{Id: w.id, Kind: w.kind, Body: string(b)}
-	return len(b), nil
-}
-
-// END OMIT
-
-var tmpdir string
-
-func init() {
-	// find real path to temporary directory
-	var err error
-	tmpdir, err = filepath.EvalSymlinks(os.TempDir())
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2012/insidepresent/socket.go b/content/2012/insidepresent/socket.go
deleted file mode 100644
index f53fa2a..0000000
--- a/content/2012/insidepresent/socket.go
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright 2012 The Go Authors.  All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"os"
-	"os/exec"
-	"path/filepath"
-	"runtime"
-	"strconv"
-
-	"golang.org/x/net/websocket"
-)
-
-const socketPresent = true
-
-func HandleSocket(path string) {
-	http.Handle(path, websocket.Handler(socketHandler))
-}
-
-const msgLimit = 1000 // max number of messages to send per session
-
-var uniq = make(chan int) // a source of numbers for naming temporary files
-
-func init() {
-	go func() {
-		for i := 0; ; i++ {
-			uniq <- i
-		}
-	}()
-}
-
-// Message is the wire format for the websocket connection to the browser.
-// It is used for both sending output messages and receiving commands, as
-// distinguished by the Kind field.
-type Message struct {
-	Id   string // client-provided unique id for the process
-	Kind string // in: "run", "kill" out: "stdout", "stderr", "end"
-	Body string
-}
-
-// socketHandler handles the websocket connection for a given present session.
-// It handles transcoding Messages to and from JSON format, and starting
-// and killing Processes.
-func socketHandler(c *websocket.Conn) {
-	in, out := make(chan *Message), make(chan *Message)
-	errc := make(chan error, 1)
-
-	// Decode messages from client and send to the in channel.
-	go func() {
-		dec := json.NewDecoder(c)
-		for {
-			var m Message
-			if err := dec.Decode(&m); err != nil {
-				errc <- err
-				return
-			}
-			in <- &m
-		}
-	}()
-
-	// Receive messages from the out channel and encode to the client.
-	go func() {
-		enc := json.NewEncoder(c)
-		for m := range out {
-			if err := enc.Encode(m); err != nil {
-				errc <- err
-				return
-			}
-		}
-	}()
-	// END OMIT
-
-	// Start and kill Processes and handle errors.
-	proc := make(map[string]*Process)
-	for {
-		select {
-		case m := <-in:
-			switch m.Kind {
-			case "run":
-				proc[m.Id].Kill()
-				lOut := limiter(in, out)                      // HL
-				proc[m.Id] = StartProcess(m.Id, m.Body, lOut) // HL
-			case "kill":
-				proc[m.Id].Kill()
-			}
-		case err := <-errc:
-			// A encode or decode has failed; bail.
-			log.Println(err)
-			// Shut down any running processes.
-			for _, p := range proc {
-				p.Kill()
-			}
-			return
-		}
-	}
-}
-
-// Process represents a running process.
-type Process struct {
-	id   string
-	out  chan<- *Message
-	done chan struct{} // closed when wait completes
-	run  *exec.Cmd
-}
-
-// StartProcess builds and runs the given program, sending its output
-// and end event as Messages on the provided channel.
-func StartProcess(id, body string, out chan<- *Message) *Process {
-	p := &Process{
-		id:   id,
-		out:  out,
-		done: make(chan struct{}),
-	}
-	if err := p.start(body); err != nil {
-		p.end(err)
-		return nil
-	}
-	go p.wait()
-	return p
-}
-
-// Kill stops the process if it is running and waits for it to exit.
-func (p *Process) Kill() {
-	if p == nil {
-		return
-	}
-	p.run.Process.Kill()
-	<-p.done
-}
-
-// start builds and starts the given program, sends its output to p.out,
-// and stores the running *exec.Cmd in the run field.
-func (p *Process) start(body string) error {
-	// x is the base name for .go and executable files
-	x := filepath.Join(tmpdir, "compile"+strconv.Itoa(<-uniq))
-	src := x + ".go"
-	bin := x
-	if runtime.GOOS == "windows" {
-		bin += ".exe"
-	}
-
-	// write body to x.go
-	defer os.Remove(src)
-	if err := ioutil.WriteFile(src, []byte(body), 0666); err != nil {
-		return err
-	}
-	// END OMIT
-
-	// build x.go, creating x
-	dir, file := filepath.Split(src)
-	err := p.cmd(dir, "go", "build", "-o", bin, file).Run()
-	defer os.Remove(bin)
-	if err != nil {
-		return err
-	}
-
-	// run x
-	cmd := p.cmd("", bin)
-	if err = cmd.Start(); err != nil {
-		return err
-	}
-
-	p.run = cmd
-	return nil
-}
-
-// wait waits for the running process to complete
-// and sends its error state to the client.
-func (p *Process) wait() {
-	defer close(p.done)
-	p.end(p.run.Wait())
-}
-
-// end sends an "end" message to the client, containing the process id and the
-// given error value.
-func (p *Process) end(err error) {
-	m := &Message{Id: p.id, Kind: "end"}
-	if err != nil {
-		m.Body = err.Error()
-	}
-	p.out <- m
-}
-
-// cmd builds an *exec.Cmd that writes its standard output and error to the
-// Process' output channel.
-func (p *Process) cmd(dir string, args ...string) *exec.Cmd {
-	cmd := exec.Command(args[0], args[1:]...)
-	cmd.Dir = dir
-	cmd.Stdout = &messageWriter{p.id, "stdout", p.out}
-	cmd.Stderr = &messageWriter{p.id, "stderr", p.out}
-	return cmd
-}
-
-// messageWriter is an io.Writer that converts all writes to Message sends on
-// the out channel with the specified id and kind.
-type messageWriter struct {
-	id, kind string
-	out      chan<- *Message
-}
-
-func (w *messageWriter) Write(b []byte) (n int, err error) {
-	w.out <- &Message{Id: w.id, Kind: w.kind, Body: string(b)}
-	return len(b), nil
-}
-
-// END OMIT
-
-// limiter returns a channel that wraps dest. Messages sent to the channel are
-// sent to dest. After msgLimit Messages have been passed on, a "kill" Message
-// is sent to the kill channel, and only "end" messages are passed.
-func limiter(kill chan<- *Message, dest chan<- *Message) chan<- *Message {
-	ch := make(chan *Message)
-	go func() {
-		n := 0
-		for m := range ch {
-			switch {
-			case n < msgLimit || m.Kind == "end":
-				dest <- m
-				if m.Kind == "end" {
-					return
-				}
-			case n == msgLimit:
-				// Process produced too much output. Kill it.
-				kill <- &Message{Id: m.Id, Kind: "kill"}
-			}
-			n++
-		}
-	}()
-	return ch
-}
-
-var tmpdir string
-
-func init() {
-	// find real path to temporary directory
-	var err error
-	tmpdir, err = filepath.EvalSymlinks(os.TempDir())
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2012/insidepresent/websocket.go b/content/2012/insidepresent/websocket.go
deleted file mode 100644
index 5b056ca..0000000
--- a/content/2012/insidepresent/websocket.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"golang.org/x/net/websocket"
-	"net/http"
-)
-
-func main() {
-	http.Handle("/", websocket.Handler(handler))
-	http.ListenAndServe("localhost:4000", nil)
-}
-
-func handler(c *websocket.Conn) {
-	var s string
-	fmt.Fscan(c, &s)
-	fmt.Println("Received:", s)
-	fmt.Fprint(c, "How do you do?")
-}
diff --git a/content/2012/insidepresent/websocket.js b/content/2012/insidepresent/websocket.js
deleted file mode 100644
index f9809d6..0000000
--- a/content/2012/insidepresent/websocket.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var sock = new WebSocket("ws://localhost:4000/");
-sock.onmessage = function(m) { console.log("Received:", m.data); }
-sock.send("Hello!\n")
diff --git a/content/2012/insidepresent/wire.html b/content/2012/insidepresent/wire.html
deleted file mode 100644
index 2a98a7d..0000000
--- a/content/2012/insidepresent/wire.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<style>
-#wire {
-	border: 1px solid #E0E0E0;
-	background: #F0F0F0;
-	height: 300px;
-	font-family: 'Droid Sans Mono', 'Courier New', monospace;
-	font-size: 18px;
-	line-height: 24px;
-	overflow: auto;
-}
-#wire div { margin-bottom: 10px; }
-#wire .send { color: #900; }
-#wire .recv { color: #009; }
-</style>
-<div id="wire"></div>
diff --git a/content/2012/simple.slide b/content/2012/simple.slide
deleted file mode 100644
index 3b49a7c..0000000
--- a/content/2012/simple.slide
+++ /dev/null
@@ -1,384 +0,0 @@
-Go: a simple programming environment
-
-9 Nov 2012
-
-# Go is a general-purpose language that bridges the gap between efficient
-# statically typed languages and productive dynamic language. But it’s not just
-# the language that makes Go special – Go has broad and consistent standard
-# libraries and powerful but simple tools.
-# 
-# This talk gives an introduction to Go, followed by a tour of some real
-# programs that demonstrate the power, scope, and simplicity of the Go
-# programming environment.
-
-Andrew Gerrand
-Google Inc.
-@enneff
-adg@golang.org
-http://golang.org
-
-* Video
-
-A video of this talk was recorded at Øredev in Malmö, Sweden in November 2012.
-
-.link http://vimeo.com/53221558 Watch the talk on Vimeo
-
-* Background
-
-* Why a new language?
-
-Motivated by our needs at Google.
-
-We need:
-
-- Efficiency
-- Safety
-- Concurrency
-- Scalability
-- Fast development cycle
-- No surprises
-- A cute mascot
-
-* Design
-
-"Consensus drove the design. Nothing went into the language until [Ken Thompson, Robert Griesemer, and myself] all agreed that it was right. Some features didn’t get resolved until after a year or more of discussion." - Rob Pike
-
-Go is:
-
-- Lightweight, avoids unnecessary repetition
-- Object Oriented, but not in the usual way
-- Concurrent, in a way that keeps you sane
-- Designed for working programmers
-
-* Go 1
-
-Released in March 2012
-
-A specification of the language and libraries that will be supported for years.
-
-The guarantee: code written for Go 1.0 will build and run with Go 1.x.
-
-Best thing we ever did.
-
-* The gopher
-
-.image simple/gopher.jpg
-
-* Hello, go
-
-.play simple/hello.go
-
-* Standard library
-
-* Packages
-
-Go code lives in packages.
-
-Packages contain type, function, variable, and constant declarations.
-
-Packages can be very small (package `errors` has just one declaration) or very large (package `net/http` has >100 declarations). Most are somewhere in between.
-
-Case determines visibility: `Foo` is exported, `foo` is not
-
-* io
-
-The `io` package provides fundamental I/O interfaces that are used throughout most Go code.
-
-The most ubiquitous are the `Reader` and `Writer` types, which describe streams of data.
-
-.code simple/io/io.go
-
-`Reader` and `Writer` implementations include files, sockets, (de)compressors, image and JSON codecs, and many more.
-
-* Chaining io.Readers
-
-.play simple/reader.go
-
-* net/http
-
-The `net/http` package implements an HTTP server and client.
-
-.play simple/hello-web.go
-
-* encoding/json
-
-The `encoding/json` package converts JSON-encoded data to and from native Go data structures.
-
-.play simple/json.go /const/,$
-
-* time
-
-The `time` package provides a representation of time and duration, and other time-related functions.
-
-.play simple/time.go /START/,/END/
-.play simple/time2.go /START/,/END/
-
-`time.Time` values also contain a `time.Location` (for display only):
-
-.play simple/time3.go /START/,/END/
-
-* flag
-
-The `flag` package provides a simple API for parsing command-line flags.
-
-.play simple/flag.go
-
-	$ flag -message 'Hold on...' -delay 5m
-
-* Tools
-
-* The go tool
-
-The `go` tool is the de facto standard for building and installing Go code.
-
-Compile and run a single-file program:
-
-	$ go run hello.go
-
-Build and install the package in the current directory (and its dependencies):
-
-	$ go install
-
-Build and install the `fmt` package (and its dependencies):
-
-	$ go install fmt
-
-This tool also acts as an interface for most of the Go tools.
-
-* Import paths
-
-The `go` tool is a "zero configuration" tool. No Makefiles or scripts. Just Go code.
-Your build schema and code are always in sync; they are one and the same.
-
-Package import paths mirror the code's location in the file system:
-
-  src/
-    github.com/nf/
-      gosynth/
-        main.go
-        note.go
-        osc.go
-      wav/
-        writer.go
-
-The `gosynth` program imports the `wav` package:
-
-  import "github.com/nf/wav"
-
-Installing `gosynth` will automatically install the `wav` package:
-
-  $ go install github.com/nf/gosynth
-
-* Remote dependencies
-
-The `go` tool also fetches Go code from remote repositories.
-
-Import paths can be URLs:
-
-	import "golang.org/x/net/websocket"
-
-To fetch, build and install a package:
-
-	$ go get code.google.com/p/go.net/websocket
-
-To fetch, build, and install `gosynth` and its dependencies:
-
-	$ go get github.com/nf/gosynth
-
-This simple design leads to other cool tools:
-
-.link http://go.pkgdoc.org
-
-* Godoc
-
-Godoc extracts documentation from Go code and presents it in a variety of forms.
-
-Comments need no special format, they just need to precede what they document.
-
-	// Split slices s into all substrings separated by sep and returns a slice of
-	// the substrings between those separators.
-	// If sep is empty, Split splits after each UTF-8 sequence.
-	// It is equivalent to SplitN with a count of -1.
-	func Split(s, sep string) []string {
-
-.image simple/split.png
-
-Documentation that lives with code is easy to keep up-to-date.
-
-* Gofmt
-
-The `gofmt` tool is a pretty-printer for Go source code.
-
-All Go code in the core is gofmt'd, as is ~70% of open source Go code.
-
-Ends boring formatting discussions.
-
-Improves readability. Improves writability.
-
-Saves a _huge_ amount of time.
-
-* Tests: writing
-
-The `go` tool and the `testing` package provide a lightweight test framework.
-
-.code simple/test/string_test.go /func TestIndex/,/^}/
-
-* Tests: running
-
-The go tool runs tests.
-
-	$ go test
-	PASS
-
-	$ go test -v
-	=== RUN TestIndex
-	--- PASS: TestIndex (0.00 seconds)
-	PASS
-
-To run the tests for all my projects:
-
-	$ go test github.com/nf/...
-
-* Tests: benchmarks
-
-The `testing` package also supports benchmarks.
-	
-A sample benchmark function:
-
-.code simple/test/string_test.go /func BenchmarkIndex/,/^}/
- 
-The benchmark package will vary `b.N` until the benchmark function lasts long enough to be timed reliably.
-
-	$ go test -test.bench=Index
-	PASS
-	BenchmarkIndex	50000000	        37.3 ns/op
-
-* Tests: doc examples
-
-The `testing` package also supports testable examples.
-
-.code simple/test/string_test.go /func ExampleIndex/,/^}/
-
-Examples and built and run as part of the normal test suite:
-
-	$ go test -v
-	=== RUN: ExampleIndex
-	--- PASS: ExampleIndex (0.00 seconds)
-	PASS
-
-The example is displayed in `godoc` alongside the thing it demonstrates:
-
-.link http://golang.org/pkg/strings/#Index
-
-* And there's more
-
-- `vet`: checks code for common programmer mistakes
-- `pprof`: CPU and memory profiling
-- `fix`: automatically migrate code as APIs change
-- GDB support
-- Editor support: Vim, Emacs, Eclipse, Sublime Text
-
-* An example
-
-* Webfront
-
-`Webfront` is an HTTP server and reverse proxy.
-
-It reads a JSON-formatted rule file like this:
-
-.code simple/webfront/main.go /^\[/,/\]/
-
-For all requests to the host `example.com` (or any name ending in `".example.com"`) it serves files from the `/var/www` directory.
-
-For requests to `example.org`, it forwards the request to the HTTP server listening on localhost port 8080.
-
-* The Rule type
-
-A `Rule` value specifies what to do for a request to a specific host.
-
-.code simple/webfront/main.go /Rule represents/,/^}/
-
-It corresponds directly with the entries in the JSON configuration file.
-
-.code simple/webfront/main.go /^\[/,/\]/
-
-* Rule methods
-
-.code simple/webfront/main.go /Match returns/,/^}/
-.code simple/webfront/main.go /Handler returns/,/^}/
-
-* The Server type
-
-The `Server` type is responsible for loading (and refreshing) the rules from the rule file and serving HTTP requests with the appropriate handler.
-
-.code simple/webfront/main.go /Server implements/,/^}/
-.code simple/webfront/main.go /ServeHTTP matches/,/^}/
-
-* The handler method
-
-.code simple/webfront/main.go /handler returns/,/^}/
-
-* Parsing rules
-
-The `parseRules` function uses the `encoding/json` package to read the rule file into a Go data structure.
-
-.code simple/webfront/main.go /parseRules reads/,/^}/
-
-* The loadRules method
-
-.code simple/webfront/main.go /loadRules tests/,/^}/
-
-* Constructing the server
-
-.code simple/webfront/main.go /NewServer constructs/,/^}/
-
-This constructor function launches a goroutine running the `refreshRules` method.
-
-* Refreshing the rules
-
-.code simple/webfront/main.go /refreshRules polls/,/^}/
-
-* Bringing it all together
-
-The main function parses command-line flags, constructs a `Server`, and launches an HTTP server that serves all requests with the `Server`.
-
-.code simple/webfront/main.go /^var/,/^}/
-
-* Demo
-
-* Testing (1/3)
-
-The `Server` integration test uses the `httptest` package to construct a dummy HTTP server, synthesizes a set of rules, and constructs a `Server` instance that uses those rules.
-
-.code simple/webfront/server_test.go /^func testHandler/,/STOP/
-
-* Testing (2/3)
-
-Each test case in the table specifies a request URL and the expected response code and body.
-
-.code simple/webfront/server_test.go /TESTS START/,/STOP/
-
-* Testing (3/3)
-
-For each test case, construct an `http.Request` for the url and an `httptest.ResponseRecorder` to capture the response, and pass them to the `Server.ServeHTTP` method. Then check that the response matches the test case.
-
-.code simple/webfront/server_test.go /RANGE START/,/^}/
-
-* Demo
-
-* Conclusions
-
-* Further reading
-
-All about Go:
-
-.link http://golang.org
-
-The slides for this talk:
-
-.link http://talks.golang.org/2012/simple.slide
-
-webfront:
-
-.link https://github.com/nf/webfront
-
diff --git a/content/2012/simple/flag.go b/content/2012/simple/flag.go
deleted file mode 100644
index 2606af3..0000000
--- a/content/2012/simple/flag.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-	"fmt"
-	"time"
-)
-
-var (
-	message = flag.String("message", "Hello!", "what to say")
-	delay   = flag.Duration("delay", 2*time.Second, "how long to wait")
-)
-
-func main() {
-	flag.Parse()
-	fmt.Println(*message)
-	time.Sleep(*delay)
-}
diff --git a/content/2012/simple/gopher.jpg b/content/2012/simple/gopher.jpg
deleted file mode 100644
index 0e886e4..0000000
--- a/content/2012/simple/gopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/simple/hello-web.go b/content/2012/simple/hello-web.go
deleted file mode 100644
index 05d1439..0000000
--- a/content/2012/simple/hello-web.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-type Greeting string
-
-func (g Greeting) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprint(w, g)
-}
-
-func main() {
-	err := http.ListenAndServe("localhost:4000", Greeting("Hello, go"))
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2012/simple/hello.go b/content/2012/simple/hello.go
deleted file mode 100644
index 0757c53..0000000
--- a/content/2012/simple/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, go")
-}
diff --git a/content/2012/simple/io/io.go b/content/2012/simple/io/io.go
deleted file mode 100644
index d0d975a..0000000
--- a/content/2012/simple/io/io.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package io
-
-type Writer interface {
-	Write(p []byte) (n int, err error)
-}
-
-type Reader interface {
-	Read(p []byte) (n int, err error)
-}
diff --git a/content/2012/simple/json.go b/content/2012/simple/json.go
deleted file mode 100644
index aa91a92..0000000
--- a/content/2012/simple/json.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"strings"
-)
-
-const blob = `[
-	{"Title":"Øredev", "URL":"http://oredev.org"},
-	{"Title":"Strange Loop", "URL":"http://thestrangeloop.com"}
-]`
-
-type Item struct {
-	Title string
-	URL   string
-}
-
-func main() {
-	var items []*Item
-	json.NewDecoder(strings.NewReader(blob)).Decode(&items)
-	for _, item := range items {
-		fmt.Printf("Title: %v URL: %v\n", item.Title, item.URL)
-	}
-}
diff --git a/content/2012/simple/reader.go b/content/2012/simple/reader.go
deleted file mode 100644
index 1aa4415..0000000
--- a/content/2012/simple/reader.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"compress/gzip"
-	"encoding/base64"
-	"io"
-	"os"
-	"strings"
-)
-
-func main() {
-	var r io.Reader
-	r = strings.NewReader(data)
-	r = base64.NewDecoder(base64.StdEncoding, r)
-	r, _ = gzip.NewReader(r)
-	io.Copy(os.Stdout, r)
-}
-
-const data = `
-H4sIAAAJbogA/1SOO5KDQAxE8zlFZ5tQXGCjjfYIjoURoPKgcY0E57f4VZlQXf2e+r8yOYbMZJhoZWRxz3wkCVjeReETS0VHz5fBCzpxxg/PbfrT/gacCjbjeiRNOChaVkA9RAdR8eVEw4vxa0Dcs3Fe2ZqowpeqG79L995l3VaMBUV/02OS+B6kMWikwG51c8n5GnEPr11F2/QJAAD//z9IppsHAQAA
-`
diff --git a/content/2012/simple/split.png b/content/2012/simple/split.png
deleted file mode 100644
index 5140229..0000000
--- a/content/2012/simple/split.png
+++ /dev/null
Binary files differ
diff --git a/content/2012/simple/test.go b/content/2012/simple/test.go
deleted file mode 100644
index 1e67361..0000000
--- a/content/2012/simple/test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "strings"
-
-import "testing"
-
-func TestToUpper(t *testing.T) {
-	in := "loud noises"
-	want := "LOUD NOISES"
-	got := strings.ToUpper(in)
-	if got != want {
-		t.Errorf("ToUpper(%v) = %v, want %v", in, got, want)
-	}
-}
-
-func TestContains(t *testing.T) {
-	var tests = []struct {
-		str, substr string
-		expected    bool
-	}{
-		{"abc", "bc", true},
-		{"abc", "bcd", false},
-		{"abc", "", true},
-		{"", "a", false},
-	}
-	for _, ct := range tests {
-		if strings.Contains(ct.str, ct.substr) != ct.expected {
-			t.Errorf("Contains(%s, %s) = %v, want %v",
-				ct.str, ct.substr, !ct.expected, ct.expected)
-		}
-	}
-}
diff --git a/content/2012/simple/test/string_test.go b/content/2012/simple/test/string_test.go
deleted file mode 100644
index a65ff9d..0000000
--- a/content/2012/simple/test/string_test.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build ignore,OMIT
-
-package string_test
-
-import (
-	"fmt"
-	"strings"
-	"testing"
-)
-
-func TestIndex(t *testing.T) {
-	var tests = []struct {
-		s   string
-		sep string
-		out int
-	}{
-		{"", "", 0},
-		{"", "a", -1},
-		{"fo", "foo", -1},
-		{"foo", "foo", 0},
-		{"oofofoofooo", "f", 2},
-		// etc
-	}
-	for _, test := range tests {
-		actual := strings.Index(test.s, test.sep)
-		if actual != test.out {
-			t.Errorf("Index(%q,%q) = %v; want %v", test.s, test.sep, actual, test.out)
-		}
-	}
-}
-
-func BenchmarkIndex(b *testing.B) {
-	const s = "some_text=some☺value"
-	for i := 0; i < b.N; i++ {
-		strings.Index(s, "v")
-	}
-}
-
-func ExampleIndex() {
-	fmt.Println(strings.Index("chicken", "ken"))
-	fmt.Println(strings.Index("chicken", "dmr"))
-	// Output:
-	// 4
-	// -1
-}
diff --git a/content/2012/simple/time.go b/content/2012/simple/time.go
deleted file mode 100644
index c73963f..0000000
--- a/content/2012/simple/time.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	// START OMIT
-	if time.Now().Hour() < 12 {
-		fmt.Println("Good morning.")
-	} else {
-		fmt.Println("Good afternoon (or evening).")
-	}
-	// END OMIT
-}
diff --git a/content/2012/simple/time2.go b/content/2012/simple/time2.go
deleted file mode 100644
index bd7273c..0000000
--- a/content/2012/simple/time2.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	// START OMIT
-	birthday, _ := time.Parse("Jan 2 2006", "Nov 10 2009") // time.Time
-	age := time.Since(birthday)                            // time.Duration
-	fmt.Printf("Go is %d days old\n", age/(time.Hour*24))
-	// END OMIT
-}
diff --git a/content/2012/simple/time3.go b/content/2012/simple/time3.go
deleted file mode 100644
index d0e1ba3..0000000
--- a/content/2012/simple/time3.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	// START OMIT
-	t := time.Now()
-	fmt.Println(t.In(time.UTC))
-	home, _ := time.LoadLocation("Australia/Sydney")
-	fmt.Println(t.In(home))
-	// END OMIT
-}
diff --git a/content/2012/simple/webfront/main.go b/content/2012/simple/webfront/main.go
deleted file mode 100644
index bf28dec..0000000
--- a/content/2012/simple/webfront/main.go
+++ /dev/null
@@ -1,196 +0,0 @@
-// +build ignore,OMIT
-
-// This is a somewhat cut back version of webfront, available at
-// http://github.com/nf/webfront
-
-/*
-Copyright 2011 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-/*
-webfront is an HTTP server and reverse proxy.
-
-It reads a JSON-formatted rule file like this:
-
-[
-	{"Host": "example.com", "Serve": "/var/www"},
-	{"Host": "example.org", "Forward": "localhost:8080"}
-]
-
-For all requests to the host example.com (or any name ending in
-".example.com") it serves files from the /var/www directory.
-
-For requests to example.org, it forwards the request to the HTTP
-server listening on localhost port 8080.
-
-Usage of webfront:
-  -http=":80": HTTP listen address
-  -poll=10s: file poll interval
-  -rules="": rule definition file
-
-webfront was written by Andrew Gerrand <adg@golang.org>
-*/
-package main
-
-import (
-	"encoding/json"
-	"flag"
-	"fmt"
-	"log"
-	"net/http"
-	"net/http/httputil"
-	"os"
-	"strings"
-	"sync"
-	"time"
-)
-
-var (
-	httpAddr     = flag.String("http", ":80", "HTTP listen address")
-	ruleFile     = flag.String("rules", "", "rule definition file")
-	pollInterval = flag.Duration("poll", time.Second*10, "file poll interval")
-)
-
-func main() {
-	flag.Parse()
-
-	s, err := NewServer(*ruleFile, *pollInterval)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	err = http.ListenAndServe(*httpAddr, s)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
-
-// Server implements an http.Handler that acts as either a reverse proxy or
-// a simple file server, as determined by a rule set.
-type Server struct {
-	mu    sync.RWMutex // guards the fields below
-	mtime time.Time    // when the rule file was last modified
-	rules []*Rule
-}
-
-// Rule represents a rule in a configuration file.
-type Rule struct {
-	Host    string // to match against request Host header
-	Forward string // non-empty if reverse proxy
-	Serve   string // non-empty if file server
-}
-
-// Match returns true if the Rule matches the given Request.
-func (r *Rule) Match(req *http.Request) bool {
-	return req.Host == r.Host || strings.HasSuffix(req.Host, "."+r.Host)
-}
-
-// Handler returns the appropriate Handler for the Rule.
-func (r *Rule) Handler() http.Handler {
-	if h := r.Forward; h != "" {
-		return &httputil.ReverseProxy{
-			Director: func(req *http.Request) {
-				req.URL.Scheme = "http"
-				req.URL.Host = h
-			},
-		}
-	}
-	if d := r.Serve; d != "" {
-		return http.FileServer(http.Dir(d))
-	}
-	return nil
-}
-
-// NewServer constructs a Server that reads rules from file with a period
-// specified by poll.
-func NewServer(file string, poll time.Duration) (*Server, error) {
-	s := new(Server)
-	if err := s.loadRules(file); err != nil {
-		return nil, err
-	}
-	go s.refreshRules(file, poll)
-	return s, nil
-}
-
-// ServeHTTP matches the Request with a Rule and, if found, serves the
-// request with the Rule's handler.
-func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
-	if h := s.handler(r); h != nil {
-		h.ServeHTTP(w, r)
-		return
-	}
-	http.Error(w, "Not found.", http.StatusNotFound)
-}
-
-// handler returns the appropriate Handler for the given Request,
-// or nil if none found.
-func (s *Server) handler(req *http.Request) http.Handler {
-	s.mu.RLock()
-	defer s.mu.RUnlock()
-	for _, r := range s.rules {
-		if r.Match(req) {
-			return r.Handler()
-		}
-	}
-	return nil
-}
-
-// refreshRules polls file periodically and refreshes the Server's rule
-// set if the file has been modified.
-func (s *Server) refreshRules(file string, poll time.Duration) {
-	for {
-		if err := s.loadRules(file); err != nil {
-			log.Println(err)
-		}
-		time.Sleep(poll)
-	}
-}
-
-// loadRules tests whether file has been modified
-// and, if so, loads the rule set from file.
-func (s *Server) loadRules(file string) error {
-	fi, err := os.Stat(file)
-	if err != nil {
-		return err
-	}
-	mtime := fi.ModTime()
-	if mtime.Before(s.mtime) && s.rules != nil {
-		return nil // no change
-	}
-	rules, err := parseRules(file)
-	if err != nil {
-		return fmt.Errorf("parsing %s: %v", file, err)
-	}
-	s.mu.Lock()
-	s.mtime = mtime
-	s.rules = rules
-	s.mu.Unlock()
-	return nil
-}
-
-// parseRules reads rule definitions from file returns the resultant Rules.
-func parseRules(file string) ([]*Rule, error) {
-	f, err := os.Open(file)
-	if err != nil {
-		return nil, err
-	}
-	defer f.Close()
-	var rules []*Rule
-	err = json.NewDecoder(f).Decode(&rules)
-	if err != nil {
-		return nil, err
-	}
-	return rules, nil
-}
diff --git a/content/2012/simple/webfront/server_test.go b/content/2012/simple/webfront/server_test.go
deleted file mode 100644
index 5fe9a78..0000000
--- a/content/2012/simple/webfront/server_test.go
+++ /dev/null
@@ -1,99 +0,0 @@
-// +build ignore,OMIT
-
-/*
-Copyright 2011 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"io/ioutil"
-	"net/http"
-	"net/http/httptest"
-	"os"
-	"testing"
-	"time"
-)
-
-func testHandler(w http.ResponseWriter, r *http.Request) {
-	w.Write([]byte("OK"))
-}
-
-func TestServer(t *testing.T) {
-	dummy := httptest.NewServer(http.HandlerFunc(testHandler))
-	defer dummy.Close()
-
-	ruleFile := writeRules([]*Rule{
-		{Host: "example.com", Forward: dummy.Listener.Addr().String()},
-		{Host: "example.org", Serve: "testdata"},
-	})
-	defer os.Remove(ruleFile)
-
-	s, err := NewServer(ruleFile, time.Hour)
-	if err != nil {
-		t.Fatal(err)
-	}
-	// continued next slide
-	// STOP OMIT
-
-	// TESTS START OMIT
-	// continued from previous slide
-
-	var tests = []struct {
-		url  string
-		code int
-		body string
-	}{
-		{"http://example.com/", 200, "OK"},
-		{"http://foo.example.com/", 200, "OK"},
-		{"http://example.org/", 200, "contents of index.html\n"},
-		{"http://example.net/", 404, "Not found.\n"},
-		{"http://fooexample.com/", 404, "Not found.\n"},
-	}
-
-	// continued next slide
-	// STOP OMIT
-
-	// RANGE START OMIT
-	// continued from previous slide
-
-	for _, test := range tests {
-		req, _ := http.NewRequest("GET", test.url, nil)
-		rw := httptest.NewRecorder()
-		rw.Body = new(bytes.Buffer)
-		s.ServeHTTP(rw, req)
-		if g, w := rw.Code, test.code; g != w {
-			t.Errorf("%s: code = %d, want %d", test.url, g, w)
-		}
-		if g, w := rw.Body.String(), test.body; g != w {
-			t.Errorf("%s: body = %q, want %q", test.url, g, w)
-		}
-	}
-}
-
-func writeRules(rules []*Rule) (name string) {
-	f, err := ioutil.TempFile("", "webfront-rules")
-	if err != nil {
-		panic(err)
-	}
-	defer f.Close()
-	err = json.NewEncoder(f).Encode(rules)
-	if err != nil {
-		panic(err)
-	}
-	return f.Name()
-}
diff --git a/content/2012/simple/webfront/testdata/index.html b/content/2012/simple/webfront/testdata/index.html
deleted file mode 100644
index 583e54d..0000000
--- a/content/2012/simple/webfront/testdata/index.html
+++ /dev/null
@@ -1 +0,0 @@
-contents of index.html
diff --git a/content/2012/splash.article b/content/2012/splash.article
deleted file mode 100644
index 39b9104..0000000
--- a/content/2012/splash.article
+++ /dev/null
@@ -1,1180 +0,0 @@
-Go at Google: Language Design in the Service of Software Engineering
-
-Rob Pike
-Google, Inc.
-@rob_pike
-http://golang.org/s/plusrob
-http://golang.org
-
-* Abstract
-
-(This is a modified version of the keynote talk given by Rob Pike
-at the SPLASH 2012 conference in Tucson, Arizona, on October 25, 2012.)
-
-The Go programming language was conceived in late 2007 as an answer to
-some of the problems we were seeing developing software infrastructure
-at Google.
-The computing landscape today is almost unrelated to the environment
-in which the languages being used, mostly C++, Java, and Python, had
-been created.
-The problems introduced by multicore processors, networked systems,
-massive computation clusters, and the web programming model were being
-worked around rather than addressed head-on.
-Moreover, the scale has changed: today's server programs comprise tens
-of millions of lines of code, are worked on by hundreds or even
-thousands of programmers, and are updated literally every day.
-To make matters worse, build times, even on large compilation
-clusters, have stretched to many minutes, even hours.
-
-Go was designed and developed to make working in this environment more
-productive.
-Besides its better-known aspects such as built-in concurrency and
-garbage collection, Go's design considerations include rigorous
-dependency management, the adaptability of software architecture as
-systems grow, and robustness across the boundaries between components.
-
-This article explains how these issues were addressed while building
-an efficient, compiled programming language that feels lightweight and
-pleasant.
-Examples and explanations will be taken from the real-world problems
-faced at Google.
-
-* Introduction
-
-Go is a compiled, concurrent, garbage-collected, statically typed language
-developed at Google.
-It is an open source project: Google
-imports the public repository rather than the other way around.
-
-Go is efficient, scalable, and productive. Some programmers find it fun
-to work in; others find it unimaginative, even boring.
-In this article we
-will explain why those are not contradictory positions.
-Go was designed to address the problems faced in software development
-at Google, which led to a language that is not a breakthrough research language
-but is nonetheless an excellent tool for engineering large software projects.
-
-* Go at Google
-
-Go is a programming language designed by Google to help solve Google's problems, and Google has big problems.
-
-The hardware is big and the software is big.
-There are many millions of lines of software, with servers mostly in C++
-and lots of Java and Python for the other pieces.
-Thousands of engineers work on the code,
-at the "head" of a single tree comprising all the software,
-so from day to day there are significant changes to all levels of the tree.
-A large
-[[http://google-engtools.blogspot.com/2011/06/build-in-cloud-accessing-source-code.html][custom-designed distributed build system]]
-makes development at this scale feasible, but it's still big.
-
-And of course, all this software runs on zillions of machines, which are treated as a modest number of independent, networked compute clusters.
-
-.image splash/datacenter.jpg
-
-In short, development at Google is big, can be slow, and is often clumsy. But it _is_ effective.
-
-The goals of the Go project were to eliminate the slowness and clumsiness of software development at Google,
-and thereby to make the process more productive and scalable.
-The language was designed by and for people who write—and read and debug and maintain—large software systems.
-
-Go's purpose is therefore _not_ to do research into programming language design;
-it is to improve the working environment for its designers and their coworkers.
-Go is more about software engineering than programming language research.
-Or to rephrase, it is about language design in the service of software engineering.
-
-But how can a language help software engineering?
-The rest of this article is an answer to that question.
-
-* Pain points
-
-When Go launched, some claimed it was missing particular features or methodologies that were regarded as _de_rigueur_ for a modern language.
-How could Go be worthwhile in the absence of these facilities?
-Our answer to that is that the properties Go _does_ have address the issues that make large-scale software development difficult.
-These issues include:
-
-- slow builds
-- uncontrolled dependencies
-- each programmer using a different subset of the language
-- poor program understanding (code hard to read, poorly documented, and so on)
-- duplication of effort
-- cost of updates
-- version skew
-- difficulty of writing automatic tools
-- cross-language builds
-
-Individual features of a language don't address these issues.
-A larger view of software engineering is required, and
-in the design of Go we tried to focus on solutions to _these_ problems.
-
-As a simple, self-contained example, consider the representation of program structure.
-Some observers objected to Go's C-like block structure with braces, preferring the use of spaces for indentation, in the style of Python or Haskell.
-However, we have had extensive experience tracking down build and test failures caused by cross-language builds where a Python snippet embedded in another language,
-for instance through a SWIG invocation,
-is subtly and _invisibly_ broken by a change in the indentation of the surrounding code.
-Our position is therefore that, although spaces for indentation is nice for small programs, it doesn't scale well,
-and the bigger and more heterogeneous the code base, the more trouble it can cause.
-It is better to forgo convenience for safety and dependability, so Go has brace-bounded blocks.
-
-* Dependencies in C and C++
-
-A more substantial illustration of scaling and other issues arises in the handling of package dependencies.
-We begin the discussion with a review of how they work in C and C++.
-
-ANSI C, first standardized in 1989, promoted the idea of  `#ifndef` "guards" in the standard header files.
-The idea, which is ubiquitous now, is that each header file be bracketed with a conditional compilation clause so that the file may be included multiple times without error.
-For instance, the Unix header file `<sys/stat.h>` looks schematically like this:
-
-	/* Large copyright and licensing notice */
-	#ifndef _SYS_STAT_H_
-	#define _SYS_STAT_H_
-	/* Types and other definitions */
-	#endif
-
-The intent is that the C preprocessor reads in the file but disregards the contents on
-the second and subsequent
-readings of the file.
-The symbol `_SYS_STAT_H_`, defined the first time the file is read, "guards" the invocations that follow.
-
-This design has some nice properties, most important that each header file can safely `#include`
-all its dependencies, even if other header files will also include them.
-If that rule is followed, it permits orderly code that, for instance, sorts the `#include`
-clauses alphabetically.
-
-But it scales very badly.
-
-In 1984, a compilation of `ps.c`, the source to the Unix `ps` command, was observed
-to `#include` `<sys/stat.h>` 37 times by the time all the preprocessing had been done.
-Even though the contents are discarded 36 times while doing so, most C
-implementations would open the file, read it, and scan it all 37 times.
-Without great cleverness, in fact, that behavior is required by the potentially
-complex macro semantics of the C preprocessor.
-
-The effect on software is the gradual accumulation of `#include` clauses in C programs.
-It won't break a program to add them, and it's very hard to know when they are no
-longer needed.
-Deleting a `#include` and compiling the program again isn't even sufficient to test that,
-since another `#include` might itself contain a `#include` that pulls it in anyway.
-
-Technically speaking, it does not have to be like that.
-Realizing the long-term problems with the use of `#ifndef` guards, the designers
-of the Plan 9 libraries took a different, non-ANSI-standard approach.
-In Plan 9, header files were forbidden from containing further `#include` clauses; all
-`#includes` were required to be in the top-level C file.
-This required some discipline, of course—the programmer was required to list
-the necessary dependencies exactly once, in the correct order—but documentation
-helped and in practice it worked very well.
-The result was that, no matter how many dependencies a C source file had,
-each `#include` file was read exactly once when compiling that file.
-And, of course, it was also easy to see if an `#include` was necessary by taking
-it out: the edited program would compile if and only if the dependency was unnecessary.
-
-The most important result of the Plan 9 approach was much faster compilation: the amount of
-I/O the compilation requires can be dramatically less than when compiling a program
-using libraries with `#ifndef` guards.
-
-Outside of Plan 9, though, the "guarded" approach is accepted practice for C and C++.
-In fact, C++ exacerbates the problem by using the same approach at finer granularity.
-By convention, C++ programs are usually structured with one header file per class, or perhaps
-small set of related classes, a grouping much smaller than, say, `<stdio.h>`.
-The dependency tree is therefore much more intricate, reflecting not library dependencies but the full type hierarchy.
-Moreover, C++ header files usually contain real code—type, method, and template
-declarations—not just the simple constants and function signatures typical of a C header file.
-Thus not only does C++ push more to the compiler, what it pushes is harder to compile,
-and each invocation of the compiler must reprocess this information.
-When building a large C++ binary, the compiler might be taught thousands of times how to
-represent a string by processing the header file `<string>`.
-(For the record, around 1984 Tom Cargill observed that the use of the
-C preprocessor for dependency management would be a long-term liability for C++ and
-should be addressed.)
-
-The construction of a single C++ binary at Google can open and read hundreds of individual header files
-tens of thousands of times.
-In 2007, build engineers at Google instrumented the compilation of a major Google binary.
-The file contained about two thousand files that, if simply concatenated together, totaled 4.2 megabytes.
-By the time the `#includes` had been expanded, over 8 gigabytes were being delivered to the input of the compiler, a blow-up of 2000 bytes for every C++ source byte.
-
-As another data point, in 2003 Google's build system was moved from a single Makefile to a per-directory design
-with better-managed, more explicit dependencies.
-A typical binary shrank about 40% in file size, just from having more accurate dependencies recorded.
-Even so, the properties of C++ (or C for that matter) make it impractical to verify those dependencies automatically,
-and today we still do not have an accurate understanding of the dependency requirements
-of large Google C++ binaries.
-
-The consequence of these uncontrolled dependencies and massive scale is that it is
-impractical to build Google server binaries on a single computer, so
-a large distributed compilation system was created.
-With this system, involving many machines, much caching, and
-much complexity (the build system is a large program in its own right), builds at
-Google are practical, if still cumbersome.
-
-Even with the distributed build system, a large Google build can still take many minutes.
-That 2007 binary took 45 minutes using a precursor distributed build system; today's
-version of the same program takes 27 minutes, but of course the program and its
-dependencies have grown in the interim.
-The engineering effort required to scale up the build system has barely been able
-to stay ahead of the growth of the software it is constructing.
-
-* Enter Go
-
-When builds are slow, there is time to think.
-The origin myth for Go states that it was during one of those 45 minute builds
-that Go was conceived. It was believed to be worth trying to design a new language
-suitable for writing large Google programs such as web servers,
-with software engineering considerations that would improve the quality
-of life of Google programmers.
-
-Although the discussion so far has focused on dependencies,
-there are many other issues that need attention.
-The primary considerations for any language to succeed in this context are:
-
-- It must work at scale, for large programs with large numbers of dependencies, with large teams of programmers working on them.
-
-- It must be familiar, roughly C-like. Programmers working at Google are early in their careers and are most familiar with procedural languages, particularly from the C family. The need to get programmers productive quickly in a new language means that the language cannot be too radical.
-
-- It must be modern. C, C++, and to some extent Java are quite old, designed before the advent of multicore machines, networking, and web application development. There are features of the modern world that are better met by newer approaches, such as built-in concurrency.
-
-With that background, then, let us look at the design of Go from a software engineering perspective.
-
-* Dependencies in Go
-
-Since we've taken a detailed look at dependencies in C and C++, a good place to start
-our tour is to see how Go handles them.
-Dependencies are defined, syntactically and semantically, by the language.
-They are explicit, clear, and "computable", which is to say, easy to write tools to analyze.
-
-The syntax is that, after the `package` clause (the subject of the next section),
-each source file may have one or more import statements, comprising the
-`import` keyword and a string constant identifying the package to be imported
-into this source file (only):
-
-	import "encoding/json"
-
-The first step to making Go scale, dependency-wise, is that the _language_ defines
-that unused dependencies are a compile-time error (not a warning, an _error_).
-If the source file imports a package it does not use, the program will not compile.
-This guarantees by construction that the dependency tree for any Go program
-is precise, that it has no extraneous edges. That, in turn, guarantees that no
-extra code will be compiled when building the program, which minimizes
-compilation time.
-
-There's another step, this time in the implementation of the compilers, that
-goes even further to guarantee efficiency.
-Consider a Go program with three packages and this dependency graph:
-
--  package `A` imports package `B`;
--  package `B` imports package `C`;
--  package `A` does _not_ import package `C`
-
-This means that package `A` uses `C` only transitively through its use of `B`;
-that is, no identifiers from `C` are mentioned in the source code to `A`,
-even if some of the items `A` is using from `B` do mention `C`.
-For instance, package `A` might reference a  `struct` type defined in `B` that has a field with
-a type defined in `C` but that `A` does not reference itself.
-As a motivating example, imagine that `A` imports a formatted I/O package
-`B` that uses a buffered I/O implementation provided by `C`, but that `A` does
-not itself invoke buffered I/O.
-
-To build this program, first, `C` is compiled;
-dependent packages must be built before the packages that depend on them.
-Then `B` is compiled; finally `A` is compiled, and then the program can be linked.
-
-When `A` is compiled, the compiler reads the object file for `B`, not its source code.
-That object file for `B` contains all the type information necessary for the compiler
-to execute the
-
-	import "B"
-
-clause in the source code for `A`. That information includes whatever information
-about `C` that clients of `B` will need at compile time.
-In other words, when `B` is compiled, the generated object file includes type
-information for all dependencies of `B` that affect the public interface of `B`.
-
-This design has the important
-effect that when the compiler executes an import clause,
-_it_opens_exactly_one_file_, the object file identified by the string in the import clause.
-This is, of course, reminiscent of the Plan 9 C (as opposed to ANSI C)
-approach to dependency management, except that, in effect, the compiler
-writes the header file when the Go source file is compiled.
-The process is more automatic and even
-more efficient than in Plan 9 C, though: the data being read when evaluating the import is just
-"exported" data, not general program source code. The effect on overall
-compilation time can be huge, and scales well as
-the code base grows. The time to execute the dependency graph, and
-hence to compile, can be exponentially less than in the "include of
-include file" model of C and C++.
-
-It's worth mentioning that this general approach to dependency management
-is not original; the ideas go back to the 1970s and flow through languages like
-Modula-2 and Ada. In the C family Java has elements of this approach.
-
-To make compilation even more efficient, the object file is arranged so the export
-data is the first thing in the file, so the compiler can stop reading as soon
-as it reaches the end of that section.
-
-This approach to dependency management is the single biggest reason
-why Go compilations are faster than C or C++ compilations.
-Another factor is that Go places the export data in the object file; some
-languages require the author to write or the compiler to
-generate a second file with that information. That's twice as many files
-to open. In Go there is only one file to open to import a package.
-Also, the single file approach means that the export data (or header
-file, in C/C++) can never go out of date relative to the object file.
-
-For the record, we measured the compilation of a large Google program
-written in Go to see how the source code fanout compared to the C++
-analysis done earlier. We found it was about 40X, which is
-fifty times better than C++ (as well as being simpler and hence faster
-to process), but it's still bigger than we expected. There are two reasons for
-this. First, we found a bug: the Go compiler was generating a substantial
-amount of data in the export section that did not need to be there. Second,
-the export data uses a verbose encoding that could be improved.
-We plan to address these issues.
-
-Nonetheless, a factor of fifty less to do turns minutes into seconds,
-coffee breaks into interactive builds.
-
-Another feature of the Go dependency graph is that it has no cycles.
-The language defines that there can be no circular imports in the graph,
-and the compiler and linker both check that they do not exist.
-Although they are occasionally useful, circular imports introduce
-significant problems at scale.
-They require the compiler to deal with larger sets of source files
-all at once, which slows down incremental builds.
-More important, when allowed, in our experience such imports end up
-entangling huge swaths of the source tree into large subpieces that are
-difficult to manage independently, bloating binaries and complicating
-initialization, testing, refactoring, releasing, and other tasks of
-software development.
-
-The lack of circular imports causes occasional annoyance but keeps the tree clean,
-forcing a clear demarcation between packages. As with many of the
-design decisions in Go, it forces the programmer to think earlier about a
-larger-scale issue (in this case, package boundaries) that if left until
-later may never be addressed satisfactorily.
-
-Through the design of the standard library, great effort was spent on controlling
-dependencies. It can be better to copy a little code than to pull in a big
-library for one function. (A test in the system build complains if new core
-dependencies arise.) Dependency hygiene trumps code reuse.
-One example of this in practice is that
-the (low-level) `net` package has its own integer-to-decimal conversion routine
-to avoid depending on the bigger and dependency-heavy formatted I/O package.
-Another is that the string conversion package `strconv` has a private implementation
-of the definition of 'printable' characters rather than pull in the large Unicode
-character class tables; that `strconv` honors the Unicode standard is verified by the
-package's tests.
-
-* Packages
-
-The design of Go's package system combines some of the properties of libraries,
-name spaces, and modules into a single construct.
-
-Every Go source file, for instance `"encoding/json/json.go"`, starts with a package clause, like this:
-
-	package json
-
-where `json` is the "package name", a simple identifier.
-Package names are usually concise.
-
-To use a package, the importing source file identifies it by its _package_path_
-in the import clause.
-The meaning of "path" is not specified by the language, but in
-practice and by convention it is the slash-separated directory path of the
-source package in the repository, here:
-
-	import "encoding/json"
-
-Then the package name (as distinct from path) is used to qualify items from
-the package in the importing source file:
-
-	var dec = json.NewDecoder(reader)
-
-This design provides clarity.
-One may always tell whether a name is local to package from its syntax: `Name` vs. `pkg.Name`.
-(More on this later.)
-
-For our example, the package path is `"encoding/json"` while the package name is `json`.
-Outside the standard repository, the convention is to place the 
-project or company name at the root of the name space:
-
-	import "google/base/go/log"
-
-It's important to recognize that package _paths_ are unique,
-but there is no such requirement for package _names_.
-The path must uniquely identify the package to be imported, while the
-name is just a convention for how clients of the package can refer to its
-contents.
-The package name need not be unique and can be overridden
-in each importing source file by providing a local identifier in the
-import clause. These two imports both reference packages that
-call themselves `package` `log`, but to import them in a single source
-file one must be (locally) renamed:
-
-	import "log"                          // Standard package
-	import googlelog "google/base/go/log" // Google-specific package
-
-Every company might have its own `log` package but
-there is no need to make the package name unique.
-Quite the opposite: Go style suggests keeping package names short and clear
-and obvious in preference to worrying about collisions.
-
-Another example: there are many `server` packages in Google's code base.
-
-* Remote packages
-
-An important property of Go's package system is that the package path,
-being in general an arbitrary string, can be co-opted to refer to remote
-repositories by having it identify the URL of the site serving the repository.
-
-Here is how to use the `doozer` package from `github`. The `go` `get` command
-uses the `go` build tool to fetch the repository from the site and install it.
-Once installed, it can be imported and used like any regular package.
-
-	$ go get github.com/4ad/doozer // Shell command to fetch package
-
-	import "github.com/4ad/doozer" // Doozer client's import statement
-
-	var client doozer.Conn         // Client's use of package
-
-It's worth noting that the `go` `get` command downloads dependencies
-recursively, a property made possible only because the dependencies are
-explicit.
-Also, the allocation of the space of import paths is delegated to URLs,
-which makes the naming of packages decentralized and therefore scalable,
-in contrast to centralized registries used by other languages.
-
-* Syntax
-
-Syntax is the user interface of a programming language. Although it has
-limited effect on the semantics of the language, which is arguably the
-more important component, syntax determines the readability and hence
-clarity of the language. Also, syntax is critical to tooling: if the language
-is hard to parse, automated tools are hard to write.
-
-Go was therefore designed with clarity and tooling in mind, and has
-a clean syntax.
-Compared to other languages in the C family, its
-grammar is modest in size, with only 25 keywords (C99 has
-37; C++11 has 84; the numbers continue to grow).
-More important,
-the grammar is regular and therefore easy to parse (mostly; there
-are a couple of quirks we might have fixed but didn't discover early
-enough).
-Unlike C and Java and especially C++, Go can be parsed without
-type information or a symbol table;
-there is no type-specific context. The grammar is
-easy to reason about and therefore tools are easy to write.
-
-One of the details of Go's syntax that surprises C programmers is that
-the declaration syntax is closer to Pascal's than to C's.
-The declared name appears before the type and there are more keywords:
-
-	var fn func([]int) int
-	type T struct { a, b int }
-
-as compared to C's
-
-	int (*fn)(int[]);
-	struct T { int a, b; }
-
-Declarations introduced by keyword are easier to parse both for people and
-for computers, and having the type syntax not be the expression syntax
-as it is in C has a significant effect on parsing: it adds grammar
-but eliminates ambiguity.
-But there is a nice side effect, too: for initializing declarations,
-one can drop the `var` keyword and just take the type of the variable
-from that of the expression. These two declarations are equivalent;
-the second is shorter and idiomatic:
-
-	var buf *bytes.Buffer = bytes.NewBuffer(x) // explicit
-	buf := bytes.NewBuffer(x)                  // derived
-
-There is a blog post at [[http://golang.org/s/decl-syntax][golang.org/s/decl-syntax]] with more detail about the syntax of declarations in Go and
-why it is so different from C.
-
-Function syntax is straightforward for simple functions.
-This example declares the function  `Abs`, which accepts a single
-variable `x` of type `T` and returns a single `float64` value:
-
-	func Abs(x T) float64
-
-A method is just a function with a special parameter, its _receiver_,
-which can be passed to the function using the standard "dot" notation.
-Method declaration syntax places the receiver in parentheses before the
-function name. Here is the same function, now as a method of type `T`:
-
-	func (x T) Abs() float64
-
-And here is a variable (closure) with a type `T` argument; Go has first-class
-functions and closures:
-
-	negAbs := func(x T) float64 { return -Abs(x) }
-	
-Finally, in Go functions can return multiple values. A common case is to
-return the function result and an `error` value as a pair, like this:
-
-	func ReadByte() (c byte, err error)
-
-	c, err := ReadByte()
-	if err != nil { ... }
-
-We'll talk more about errors later.
-
-One feature missing from Go is that it
-does not support default function arguments. This was a deliberate
-simplification. Experience tells us that defaulted arguments make it
-too easy to patch over API design flaws by adding more arguments,
-resulting in too many arguments with interactions that are
-difficult to disentangle or even understand.
-The lack of default arguments requires more functions or methods to be defined,
-as one function cannot hold the entire interface,
-but that leads to a clearer API that is easier to understand.
-Those functions all need separate names, too, which makes it clear
-which combinations exist, as well as encouraging more
-thought about naming, a critical aspect of clarity and readability.
-
-One mitigating factor for the lack of default arguments is that Go
-has easy-to-use, type-safe support for variadic functions.
-
-* Naming
-
-Go takes an unusual approach to defining the _visibility_ of an identifier,
-the ability for a client of a package to use the item named by the identifier.
-Unlike, for instance, `private` and `public` keywords, in Go the name itself
-carries the information: the case of the initial letter of the identifier
-determines the visibility. If the initial character is an upper case letter,
-the identifier is _exported_ (public); otherwise it is not:
-
-- upper case initial letter: `Name` is visible to clients of package
-- otherwise: `name` (or `_Name`) is not visible to clients of package
-
-This rule applies to variables, types, functions, methods, constants, fields...
-everything. That's all there is to it.
-
-This was not an easy design decision.
-We spent over a year struggling to
-define the notation to specify an identifier's visibility.
-Once we settled on using the case of the name, we soon realized it had
-become one of the most important properties about the language.
-The name is, after all, what clients of the package use; putting
-the visibility in the name rather than its type means that it's always
-clear when looking at an identifier whether it is part of the public API.
-After using Go for a while, it feels burdensome when going back to
-other languages that require looking up the declaration to discover
-this information.
-
-The result is, again, clarity: the program source text expresses the
-programmer's meaning simply.
-
-Another simplification is that Go has a very compact scope hierarchy:
-
-- universe (predeclared identifiers such as `int` and `string`)
-- package (all the source files of a package live at the same scope)
-- file (for package import renames only; not very important in practice)
-- function (the usual)
-- block (the usual)
-
-There is no scope for name space or class or other wrapping
-construct. Names come from very few places in Go, and all names
-follow the same scope hierarchy: at any given location in the source,
-an identifier denotes exactly one language object, independent of how
-it is used. (The only exception is statement labels, the targets of `break`
-statements and the like; they always have function scope.)
-
-This has consequences for clarity. Notice for instance that methods
-declare an explicit receiver and that it must be used to access fields and
-methods of the type. There is no implicit `this`. That is, one always
-writes
-
-	rcvr.Field
-
-(where rcvr is whatever name is chosen for the receiver variable)
-so all the elements of the type always appear lexically bound to
-a value of the receiver type. Similarly, a package qualifier is always present
-for imported names; one writes `io.Reader` not `Reader`.
-Not only is this clear, it frees up the identifier `Reader` as a useful
-name to be used in any package. There are in fact multiple exported
-identifiers in the standard library with name `Reader`, or `Printf`
-for that matter, yet which one is being referred to is always unambiguous.
-
-Finally, these rules combine to guarantee that, other than the top-level
-predefined names such as `int`, (the first component of) every name is
-always declared in the current package.
-
-In short, names are local. In C, C++, or Java the name `y` could refer to anything.
-In Go, `y` (or even `Y`) is always defined within the package,
-while the interpretation of `x.Y` is clear: find `x` locally, `Y` belongs to it.
-
-These rules provide an important property for scaling because they guarantee
-that adding an exported name to a package can never break a client
-of that package. The naming rules decouple packages, providing
-scaling, clarity, and robustness.
-
-There is one more aspect of naming to be mentioned: method lookup
-is always by name only, not by signature (type) of the method.
-In other words, a single type can never have two methods with the same name.
-Given a method `x.M`, there's only ever one `M` associated with `x`.
-Again, this makes it easy to identify which method is referred to given
-only the name.
-It also makes the implementation of method invocation simple.
-
-* Semantics
-
-The semantics of Go statements is generally C-like. It is a compiled, statically typed,
-procedural language with pointers and so on. By design, it should feel
-familiar to programmers accustomed to languages in the C family.
-When launching a new language
-it is important that the target audience be able to learn it quickly; rooting Go
-in the C family helps make sure that young programmers, most of whom
-know Java, JavaScript, and maybe C, should find Go easy to learn.
-
-That said, Go makes many small changes to C semantics, mostly in the
-service of robustness. These include:
-
-- there is no pointer arithmetic
-- there are no implicit numeric conversions
-- array bounds are always checked
-- there are no type aliases (after `type`X`int`, `X` and `int` are distinct types not aliases)
-- `++` and `--` are statements not expressions
-- assignment is not an expression
-- it is legal (encouraged even) to take the address of a stack variable
-- and many more
-
-There are some much bigger changes too, stepping far from the traditional
-C, C++, and even Java models. These include linguistic support for:
-
-- concurrency
-- garbage collection
-- interface types
-- reflection
-- type switches
-
-The following sections provide brief discussions of two of these topics in Go,
-concurrency and garbage collection,
-mostly from a software engineering perspective.
-For a full discussion of the language semantics and uses see the many
-resources on the [[http://golang.org]] web site.
-
-* Concurrency
-
-Concurrency is important to the modern computing environment with its
-multicore machines running web servers with multiple clients,
-what might be called the typical Google program.
-This kind of software is not especially well served by C++ or Java,
-which lack sufficient concurrency support at the language level.
-
-Go embodies a variant of CSP with first-class channels.
-CSP was chosen partly due to familiarity (one of us had worked on
-predecessor languages that built on CSP's ideas), but also because
-CSP has the property that it is easy to add to a procedural programming
-model without profound changes to that model.
-That is, given a C-like language, CSP can be added to the language
-in a mostly orthogonal way, providing extra expressive power without
-constraining the language's other uses. In short, the rest of the
-language can remain "ordinary".
-
-The approach is thus the composition of independently executing
-functions of otherwise regular procedural code.
-
-The resulting language allows us to couple concurrency with computation
-smoothly. Consider a web server that must verify security certificates for
-each incoming client call; in Go it is easy to construct the software using
-CSP to manage the clients as independently executing procedures but
-to have the full power of an efficient compiled language available for
-the expensive cryptographic calculations.
-
-In summary, CSP is practical for Go and for Google. When writing
-a web server, the canonical Go program, the model is a great fit.
-
-There is one important caveat: Go is not purely memory safe in the presence
-of concurrency. Sharing is legal and passing a pointer over a channel is idiomatic
-(and efficient).
-
-Some concurrency and functional programming experts are disappointed
-that Go does not take a write-once approach to value semantics
-in the context of concurrent computation, that Go is not more like
-Erlang for example.
-Again, the reason is largely about familiarity and suitability for the
-problem domain. Go's concurrent features work well in a context
-familiar to most programmers.
-Go _enables_ simple, safe concurrent
-programming but does not _forbid_ bad programming.
-We compensate by convention, training programmers to think
-about message passing as a version of ownership control. The motto is,
-"Don't communicate by sharing memory, share memory by communicating."
-
-Our limited experience with programmers new to both Go and concurrent
-programming shows that this is a practical approach. Programmers
-enjoy the simplicity that support for concurrency brings to network
-software, and simplicity engenders robustness.
-
-* Garbage collection
-
-For a systems language, garbage collection can be a controversial feature,
-yet we spent very little time deciding that Go would be a
-garbage-collected language.
-Go has no explicit memory-freeing operation: the only way allocated
-memory returns to the pool is through the garbage collector.
-
-It was an easy decision to make because memory management
-has a profound effect on the way a language works in practice. 
-In C and C++, too much programming effort is spent on memory allocation
-and freeing.
-The resulting designs tend to expose details of memory management
-that could well be hidden; conversely memory considerations
-limit how they can be used. By contrast, garbage collection makes interfaces
-easier to specify.
-
-Moreover, in a concurrent object-oriented language it's almost essential
-to have automatic memory management because the ownership of a piece
-of memory can be tricky to manage as it is passed around among concurrent
-executions. It's important to separate behavior from resource management.
-
-The language is much easier to use because of garbage collection.
-
-Of course, garbage collection brings significant costs: general overhead,
-latency, and complexity of the implementation. Nonetheless, we believe
-that the benefits, which are mostly felt by the programmer, outweigh
-the costs, which are largely borne by the language implementer.
-
-Experience with Java in particular as a server language has made some
-people nervous about garbage collection in a user-facing system.
-The overheads are uncontrollable, latencies can be large, and much
-parameter tuning is required for good performance.
-Go, however, is different. Properties of the language mitigate some of these
-concerns. Not all of them of course, but some.
-
-The key point is that Go gives the programmer tools to limit allocation
-by controlling the layout of data structures. Consider this simple
-type definition of a data structure containing a buffer (array) of bytes:
-
-	type X struct {
-		a, b, c int
-		buf [256]byte
-	}
-
-In Java, the `buf` field would require a second allocation and accesses
-to it a second level of indirection. In Go, however, the buffer is allocated
-in a single block of memory along with the containing struct and no
-indirection is required. For systems programming, this design can have a
-better performance as well as reducing the number
-of items known to the collector. At scale it can make a significant
-difference.
-
-As a more direct example, in Go it is easy and efficient to provide
-second-order allocators, for instance an arena allocator that allocates
-a large array of structs and links them together with a free list.
-Libraries that repeatedly use many small structures like this can,
-with modest prearrangement, generate no garbage yet
-be efficient and responsive.
-
-Although Go is a garbage collected language, therefore, a knowledgeable
-programmer can limit the pressure placed on the collector and thereby
-improve performance. (Also, the Go installation comes with good tools
-for studying the dynamic memory performance of a running program.)
-
-To give the programmer this flexibility, Go must support
-what we call _interior_pointers_ to objects
-allocated in the heap. The `X.buf` field in the example above lives
-within the struct but it is legal to capture the address of this inner field,
-for instance to pass it to an I/O routine. In Java, as in many garbage-collected
-languages, it is not possible to construct an interior pointer like this,
-but in Go it is idiomatic.
-This design point affects which collection algorithms can be used,
-and may make them more difficult, but after careful thought we decided
-that it was necessary to allow interior pointers because of the benefits
-to the programmer and the ability to reduce pressure on the (perhaps
-harder to implement) collector.
-So far, our experience comparing similar Go and Java programs shows
-that use of interior pointers can have a significant effect on total arena size,
-latency, and collection times.
-
-In summary, Go is garbage collected but gives the programmer
-some tools to control collection overhead.
-
-The garbage collector remains an active area of development.
-The current design is a parallel mark-and-sweep collector and there remain
-opportunities to improve its performance or perhaps even its design.
-(The language specification does not mandate any particular implementation
-of the collector.)
-Still, if the programmer takes care to use memory wisely,
-the current implementation works well for production use.
-
-* Composition not inheritance
-
-Go takes an unusual approach to object-oriented programming, allowing
-methods on any type, not just classes, but without any form of type-based inheritance
-like subclassing.
-This means there is no type hierarchy.
-This was an intentional design choice.
-Although type hierarchies have been used to build much successful
-software, it is our opinion that the model has been overused and that it
-is worth taking a step back.
-
-Instead, Go has _interfaces_, an idea that has been discussed at length elsewhere (see
-[[http://research.swtch.com/interfaces]]
-for example), but here is a brief summary.
-
-In Go an interface is _just_ a set of methods. For instance, here is the definition
-of the `Hash` interface from the standard library.
-
-	type Hash interface {
-		Write(p []byte) (n int, err error)
-		Sum(b []byte) []byte
-		Reset()
-		Size() int
-		BlockSize() int
-	}
-
-All data types that implement these methods satisfy this interface implicitly;
-there is no `implements` declaration.
-That said, interface satisfaction is statically checked at compile time
-so despite this decoupling interfaces are type-safe.
-
-A type will usually satisfy many interfaces, each corresponding
-to a subset of its methods. For example, any type that satisfies the `Hash`
-interface also satisfies the `Writer` interface:
-
-	type Writer interface {
-		Write(p []byte) (n int, err error)
-	}
-
-This fluidity of interface satisfaction encourages a different approach
-to software construction. But before explaining that, we should explain
-why Go does not have subclassing.
-
-Object-oriented programming provides a powerful insight: that the
-_behavior_ of data can be generalized independently of the
-_representation_ of that data.
-The model works best when the behavior (method set) is fixed,
-but once you subclass a type and add a method,
-_the_behaviors_are_no_longer_identical_.
-If instead the set of behaviors is fixed, such as in Go's statically
-defined interfaces, the uniformity of behavior enables data and
-programs to be composed uniformly, orthogonally, and safely.
-
-One extreme example is the Plan 9 kernel, in which all system data items
-implemented exactly the same interface, a file system API defined
-by 14 methods.
-This uniformity permitted a level of object composition seldom
-achieved in other systems, even today.
-Examples abound. Here's one: A system could import (in Plan 9 terminology) a TCP
-stack to a computer that didn't have TCP or even Ethernet, and over that network
-connect to a machine with a different CPU architecture, import its `/proc` tree,
-and run a local debugger to do breakpoint debugging of the remote process.
-This sort of operation was workaday on Plan 9, nothing special at all.
-The ability to do such things fell out of the design; it required no special
-arrangement (and was all done in plain C).
-
-We argue that this compositional style of system construction has been
-neglected by the languages that push for design by type hierarchy.
-Type hierarchies result in brittle code.
-The hierarchy must be designed early, often as the first step of
-designing the program, and early decisions can be difficult to change once
-the program is written.
-As a consequence, the model encourages early overdesign as the
-programmer tries to predict every possible use the software might
-require, adding layers of type and abstraction just in case.
-This is upside down.
-The way pieces of a system interact should adapt as it grows,
-not be fixed at the dawn of time.
-
-Go therefore encourages _composition_ over inheritance, using
-simple, often one-method interfaces to define trivial behaviors
-that serve as clean, comprehensible boundaries between components.
-
-Consider the `Writer` interface shown above, which is defined in
-package `io`: Any item that has a `Write` method with this
-signature works well with the complementary `Reader` interface:
-
-	type Reader interface {
-		Read(p []byte) (n int, err error)
-	}
-
-These two complementary methods allow type-safe chaining
-with rich behaviors, like generalized Unix pipes.
-Files, buffers, networks,
-encryptors, compressors, image encoders, and so on can all be
-connected together.
-The `Fprintf` formatted I/O routine takes an `io.Writer` rather than,
-as in C, a `FILE*`.
-The formatted printer has no knowledge of what it is writing to; it may
-be a image encoder that is in turn writing to a compressor that
-is in turn writing to an encryptor that is in turn writing to a network
-connection.
-
-Interface composition is a different style of programming, and
-people accustomed to type hierarchies need to adjust their thinking to
-do it well, but the result is an adaptability of
-design that is harder to achieve through type hierarchies.
-
-Note too that the elimination of the type hierarchy also eliminates
-a form of dependency hierarchy.
-Interface satisfaction allows the program to grow organically without
-predetermined contracts.
-And it is a linear form of growth; a change to an interface affects
-only the immediate clients of that interface; there is no subtree to update.
-The lack of `implements` declarations disturbs some people but
-it enables programs to grow naturally, gracefully, and safely.
-
-Go's interfaces have a major effect on program design.
-One place we see this is in the use of functions that take interface
-arguments. These are _not_ methods, they are functions.
-Some examples should illustrate their power.
-`ReadAll` returns a byte slice (array) holding all the data that can
-be read from an `io.Reader`:
-
-	func ReadAll(r io.Reader) ([]byte, error)
-
-Wrappers—functions that take an interface and return an interface—are
-also widespread.
-Here are some prototypes.
-`LoggingReader` logs every `Read` call on the incoming `Reader`.
-`LimitingReader` stops reading after `n` bytes.
-`ErrorInjector` aids testing by simulating I/O errors.
-And there are many more.
-
-	func LoggingReader(r io.Reader) io.Reader
-	func LimitingReader(r io.Reader, n int64) io.Reader
-	func ErrorInjector(r io.Reader) io.Reader
-
-The designs are nothing like hierarchical, subtype-inherited methods.
-They are looser (even _ad_hoc_), organic, decoupled, independent, and therefore scalable.
-
-* Errors
-
-Go does not have an exception facility in the conventional sense,
-that is, there is no control structure associated with error handling.
-(Go does provide mechanisms for handling exceptional situations
-such as division by zero. A pair of built-in functions
-called `panic` and `recover` allow the programmer to protect
-against such things. However, these functions
-are intentionally clumsy, rarely used, and not integrated
-into the library the way, say, Java libraries use exceptions.)
-
-The key language feature for error handling is a pre-defined
-interface type called `error` that represents a value that has an
-`Error` method returning a string:
-
-	type error interface {
-		Error() string
-	}
-
-Libraries use the `error` type to return a description of the error.
-Combined with the ability for functions to return multiple
-values, it's easy to return the computed result along with an
-error value, if any.
-For instance, the equivalent
-to C's `getchar` does not return an out-of-band value at EOF,
-nor does it throw an exception; it just returns an `error` value
-alongside the character, with a `nil` `error` value signifying success.
-Here is the signature of the `ReadByte` method of the buffered
-I/O package's `bufio.Reader` type:
-
-	func (b *Reader) ReadByte() (c byte, err error)
-
-This is a clear and simple design, easily understood.
-Errors are just values and programs compute with
-them as they would compute with values of any other type.
-
-It was a deliberate choice not to incorporate exceptions in Go.
-Although a number of critics disagree with this decision, there
-are several reasons we believe it makes for better software.
-
-First, there is nothing truly exceptional about errors in computer programs.
-For instance, the inability to open a file is a common issue that
-does not deserve special linguistic constructs; `if` and `return` are fine.
-
-	f, err := os.Open(fileName)
-	if err != nil {
-		return err
-	}
-
-Also, if errors use special control structures, error handling distorts
-the control flow for a program that handles errors.
-The Java-like style of `try-catch-finally` blocks interlaces multiple overlapping flows
-of control that interact in complex ways.
-Although in contrast Go makes it more
-verbose to check errors, the explicit design keeps the flow of control
-straightforward—literally.
-
-There is no question the resulting code can be longer,
-but the clarity and simplicity of such code offsets its verbosity.
-Explicit error checking forces the programmer to think about
-errors—and deal with them—when they arise. Exceptions make
-it too easy to _ignore_ them rather than _handle_ them, passing
-the buck up the call stack until it is too late to fix the problem or
-diagnose it well.
-
-* Tools
-
-Software engineering requires tools.
-Every language operates in an environment with other languages
-and myriad tools to compile, edit, debug, profile, test, and run programs.
-
-Go's syntax, package system, naming conventions, and other features
-were designed to make tools easy to write, and the library
-includes a lexer, parser, and type checker for the language.
-
-Tools to manipulate Go programs are so easy to write that
-many such tools have been created,
-some with interesting consequences for software engineering.
-
-The best known of these is `gofmt`, the Go source code formatter.
-From the beginning of the project, we  intended Go programs
-to be formatted by machine, eliminating an entire class of argument
-between programmers: how do I lay out my code?
-`Gofmt` is run on all Go programs we write, and most of the open
-source community uses it too.
-It is run as a "presubmit" check for the code repositories to
-make sure that all checked-in Go programs are formatted the same.
-
-`Gofmt` is often cited by users as one of Go's best features even
-though it is not part of the language.
-The existence and use of `gofmt` means that
-from the beginning, the community has always
-seen Go code as `gofmt` formats it, so Go programs have a single
-style that is now familiar to everyone. Uniform presentation
-makes code easier to read and therefore faster to work on.
-Time not spent on formatting is time saved.
-`Gofmt` also affects scalability: since all code looks the same,
-teams find it easier to work together or with others' code.
-
-`Gofmt` enabled another class of tools that we did not foresee as clearly.
-The program works by parsing the source code and reformatting it
-from the parse tree itself.
-This makes it possible to _edit_ the parse tree before formatting it,
-so a suite of automatic refactoring tools sprang up.
-These are easy to write, can be semantically rich because they work
-directly on the parse tree, and automatically produce canonically
-formatted code.
-
-The first example was a `-r` (rewrite) flag on `gofmt` itself, which
-uses a simple pattern-matching language to enable expression-level
-rewrites. For instance, one day we introduced a default value for the
-right-hand side of a slice expression: the length itself. The entire
-Go source tree was updated to use this default with the single
-command:
-
-	gofmt -r 'a[b:len(a)] -> a[b:]'
-
-A key point about this transformation is that, because the input and
-output are both in the canonical format, the only changes made to
-the source code are semantic ones.
-
-A similar but more intricate process allowed `gofmt` to be used to
-update the tree when the language no longer required semicolons
-as statement terminators if the statement ended at a newline.
-
-Another important tool is `gofix`, which runs tree-rewriting modules
-written in Go itself that are therefore are capable of more advanced
-refactorings.
-The `gofix` tool allowed us to make sweeping changes to APIs and language
-features leading up to the release of Go 1, including a change to the syntax
-for deleting entries from a map, a radically different API for manipulating
-time values, and many more.
-As these changes rolled out, users could update all their code by running
-the simple command
-
-	gofix
-
-Note that these tools allow us to _update_ code even if the old code still
-works.
-As a result, Go repositories are easy to keep up to date as libraries evolve.
-Old APIs can be deprecated quickly and automatically so only one version
-of the API needs to be maintained.
-For example, we recently changed Go's protocol buffer implementation to use
-"getter" functions, which were not in the interface before.
-We ran `gofix` on _all_ of Google's Go code to update all programs that
-use protocol buffers, and now there is only one version of the API in use.
-Similar sweeping changes to the C++ or Java libraries are almost infeasible
-at the scale of Google's code base.
-
-The existence of a parsing package in the standard Go library has enabled
-a number of other tools as well. Examples include the `go` tool, which
-manages program construction including acquiring packages from
-remote repositories;
-the `godoc` document extractor,
-a program to verify that the API compatibility contract is maintained as
-the library is updated, and many more.
-
-Although tools like these are rarely mentioned in the context of language
-design, they are an integral part of a language's ecosystem and the fact
-that Go was designed with tooling in mind has a huge effect on the
-development of the language, its libraries, and its community.
-
-* Conclusion
-
-Go's use is growing inside Google.
-
-Several big user-facing services use it, including `youtube.com` and `dl.google.com`
-(the download server that delivers Chrome, Android and other downloads),
-as well as our own [[http://golang.org][golang.org]].
-And of course many small ones do, mostly
-built using Google App Engine's native support for Go.
-
-Many other companies use Go as well; the list is very long, but a few of the
-better known are:
-
-- BBC Worldwide
-- Canonical
-- Heroku
-- Nokia
-- SoundCloud
-
-It looks like Go is meeting its goals. Still, it's too early to declare it a success.
-We don't have enough experience yet, especially with big programs (millions
-of lines of code) to know whether the attempts to build a scalable language
-have paid off. All the indicators are positive though.
-
-On a smaller scale, some minor things aren't quite right and might get
-tweaked in a later (Go 2?) version of the language. For instance, there are
-too many forms of variable declaration syntax, programmers are
-easily confused by the behavior of nil values inside non-nil interfaces,
-and there are many library and interface details that could use another
-round of design.
-
-It's worth noting, though, that `gofix` and `gofmt` gave us the opportunity to
-fix many other problems during the leadup to Go version 1.
-Go as it is today is therefore much closer to what the designers wanted
-than it would have been without these tools, which were themselves
-enabled by the language's design.
-
-Not everything was fixed, though. We're still learning (but the language
-is frozen for now).
-
-A significant weakness of the language is that the implementation still
-needs work. The compilers' generated code and the performance of the
-runtime in particular should be better, and work continues on them.
-There is progress already; in fact some benchmarks show a
-doubling of performance with the development version today compared
-to the first release of Go version 1 early in 2012.
-
-* Summary
-
-Software engineering guided the design of Go.
-More than most general-purpose
-programming languages, Go was designed to address a set of software engineering
-issues that we had been exposed to in the construction of large server software.
-Offhand, that might make Go sound rather dull and industrial, but in fact
-the focus on clarity, simplicity and composability throughout the design
-instead resulted in a productive, fun language that many programmers
-find expressive and powerful.
-
-The properties that led to that include:
-
-- Clear dependencies
-- Clear syntax
-- Clear semantics
-- Composition over inheritance
-- Simplicity provided by the programming model (garbage collection, concurrency)
-- Easy tooling (the `go` tool, `gofmt`, `godoc`, `gofix`)
-
-If you haven't tried Go already, we suggest you do.
-
-
-.link http://golang.org http://golang.org
-
-.image splash/appenginegophercolor.jpg
-
diff --git a/content/2012/splash.slide b/content/2012/splash.slide
deleted file mode 100644
index 039edcd..0000000
--- a/content/2012/splash.slide
+++ /dev/null
@@ -1,832 +0,0 @@
-Go at Google
-SPLASH, Tucson, Oct 25, 2012
-
-Rob Pike
-Google, Inc.
-@rob_pike
-http://golang.org/s/plusrob
-http://golang.org
-
-* Preamble
-
-* What is Go?
-
-Go is:
-
-- open source
-- concurrent
-- garbage-collected
-- efficient
-- scalable
-- simple
-- fun
-- boring (to some)
-
-.link http://golang.org http://golang.org
-
-* History
-
-Design began in late 2007.
-
-Key players:
-
-- Robert Griesemer, Rob Pike, Ken Thompson
-- Later: Ian Lance Taylor, Russ Cox
-
-Became open source in November 2009.
-
-Developed entirely in the open; very active community.
-Language stable as of Go 1, early 2012.
-
-* Go at Google
-
-Go is a programming language designed by Google to help solve Google's problems.
-
-Google has big problems.
-
-* Big hardware
-
-.image splash/datacenter.jpg
-
-* Big software
-
-- C++ (mostly) for servers, plus lots of Java and Python
-- thousands of engineers
-- gazillions of lines of code
-- distributed build system
-- one tree
-
-And of course:
-
-- zillions of machines, which we treat as a modest number of compute clusters
-
-Development at Google can be slow, often clumsy.
-
-But it _is_ effective.
-
-* The reason for Go
-
-Goals:
-
-- eliminate slowness
-- eliminate clumsiness
-- improve effectiveness
-- maintain (even improve) scale
-
-Go was designed by and for people who write—and read and debug and maintain—large software systems.
-
-Go's purpose is _not_ research into programming language design.
-
-Go's purpose is to make its designers' programming lives better.
-
-* Today's theme
-
-A talk about software engineering more than language design.
-
-To be more accurate:
-
-- Language design in the service of software engineering.
-
-In short:
-
-- How does a language help software engineering?
-
-* Features?
-
-Reaction upon launch:
-My favorite feature isn't in Go! Go Sucks!
-
-This misses the point.
-
-* Pain
-
-What makes large-scale development hard with C++ or Java (at least):
-
-- slow builds
-- uncontrolled dependencies
-- each programmer using a different subset of the language
-- poor program understanding (documentation, etc.)
-- duplication of effort
-- cost of updates
-- version skew
-- difficulty of automation (auto rewriters etc.): tooling
-- cross-language builds
-
-Language _features_ don't usually address these.
-
-* Focus
-
-In the design of Go, we tried to focus on solutions to _these_ problems.
-
-Example: indentation for structure vs. C-like braces
-
-* Dependencies in C and C++
-
-* A personal history of dependencies in C
-
-`#ifdef`
-
-`#ifndef` "guards":
-
-	#ifndef _SYS_STAT_H_
-
-1984: `<sys/stat.h>` times 37
-
-ANSI C and `#ifndef` guards:
-
-- dependencies accumulate
-- throw includes at the program until it compiles
-- no way to know what can be removed
-
-* A personal history of dependencies in Plan 9's C
-
-Plan 9, another take:
-
-- no `#ifdefs` (or `#ifndefs`)
-- documentation and topological sort
-- easy to find out what can be removed
-
-Need to document dependencies, but much faster compilation.
-
-In short:
-
-- _ANSI_C_made_a_costly_mistake_ in requiring `#ifndef` guards.
-
-* A personal history of dependencies in C++
-
-C++ exacerbated the problem:
-
-- one `#include` file per class
-- code (not just declarations) in `#include` files
-- `#ifndef` guards persist
-
-2004: Mike Burrows and Chubby: `<xxx>` times 37,000
-
-1984: Tom Cargill and pi
-
-* A personal history of dependencies at Google
-
-Plan 9 demo: a story
-
-Early Google: one `Makefile`
-
-2003: `Makefile` generated from per-directory `BUILD` files
-
-- explicit dependencies
-- 40% smaller binaries
-
-Dependencies still not checkable!
-
-* Result
-
-To build a large Google binary on a single computer is impractical.
-
-In 2007, instrumented the build of a major Google binary:
-
-- 2000 files
-- 4.2 megabytes 
-- 8 gigabytes delivered to compiler
-- 2000 bytes sent to compiler for every C++ source byte
-- it's real work too: `<string>` for example
-- hours to build
-
-* Tools can help
-
-New distributed build system:
-
-- no more `Makefile` (still uses `BUILD` files)
-- many buildbots
-- much caching
-- much complexity (a large program in its own right)
-
-Even with Google's massive distributed build system, a large build still takes minutes.
-(In 2007 that binary took 45 minutes; today, 27 minutes.)
-
-Poor quality of life.
-
-* Enter Go
-
-While that build runs, we have time to think.
-
-Want a language to improve the quality of life.
-
-And dependencies are only one such problem....
-
-* Primary considerations
-
-Must work at scale:
-
-- large programs
-- large teams
-- large number of dependencies
-
-Must be familiar, roughly C-like
-
-* Modernize
-
-The old ways are _old_.
-
-Go should be:
-
-- suitable for multicore machines
-- suitable for networked machines
-- suitable for web stuff
-
-* The design of Go
-
-From a software engineering perspective.
-
-* Dependencies in Go
-
-* Dependencies
-
-Dependencies are defined (syntactically) in the language.
-
-Explicit, clear, computable.
-
-	import "encoding/json"
-
-Unused dependencies cause error at compile time.
-
-Efficient: dependencies traversed once per source file...
-
-* Hoisting dependencies
-
-Consider:
-`A` imports `B` imports `C` but `A` does not directly import `C`.
-
-The object code for `B` includes all the information about `C` needed to import `B`.
-Therefore in `A` the line
-
-	import "B"
-
-does not require the compiler to read `C` when compiling `A`.
-
-Also, the object files are designed so the "export" information comes first; compiler doing import does not need to read whole file.
-
-Exponentially less data read than with `#include` files.
-
-With Go in Google, about 40X fanout (recall C++ was 2000x)
-Plus in C++ it's general code that must be parsed; in Go it's just export data.
-
-* No circular imports
-
-Circular imports are illegal in Go.
-
-The big picture in a nutshell:
-
-- occasional minor pain,
-- but great reduction in annoyance overall 
-- structural typing makes it less important than with type hierarchies
-- keeps us honest!
-
-Forces clear demarcation between packages.
-
-Simplifies compilation, linking, initialization.
-
-* API design
-
-Through the design of the standard library, great effort spent on controlling dependencies.
-
-It can be better to copy a little code than to pull in a big library for one function.
-(A test in the system build complains if new core dependencies arise.)
-
-Dependency hygiene trumps code reuse.
-
-Example:
-The (low-level) `net` package has own `itoa` to avoid dependency on the big formatted I/O package.
-
-* Packages
-
-* Packages
-
-Every Go source file, e.g. `"encoding/json/json.go"`, starts
-
-	package json
-
-where `json` is the "package name", an identifier.
-Package names are usually concise.
-
-To use a package, need to identify it by path:
-
-	import "encoding/json"
-
-And then the package name is used to qualify items from package:
-
-	var dec = json.NewDecoder(reader)
-
-Clarity: can always tell if name is local to package from its syntax: `Name` vs. `pkg.Name`.
-(More on this later.)
-
-Package combines properties of library, name space, and module.
-
-* Package paths are unique, not package names
-
-The path is `"encoding/json"` but the package name is `json`.
-The path identifies the package and must be unique.
-Project or company name at root of name space.
-
-		import "google/base/go/log"
-
-Package name might not be unique; can be overridden. These are both `package`log`:
-
-	import "log"                          // Standard package
-	import googlelog "google/base/go/log" // Google-specific package
-
-Every company might have its own `log` package; no need to make the package name unique.
-
-Another: there are many `server` packages in Google's code base.
-
-* Remote packages
-
-Package path syntax works with remote repositories.
-The import path is just a string.
-
-Can be a file, can be a URL:
-
-	go get github.com/4ad/doozer   // Command to fetch package
-
-	import "github.com/4ad/doozer" // Doozer client's import statement
-
-	var client doozer.Conn         // Client's use of package
-
-* Go's Syntax
-
-* Syntax
-
-Syntax is not important...
-
-- unless you're programming
-- or writing tools
-
-Tooling is essential, so Go has a clean syntax.
-Not super small, just clean:
-
-- regular (mostly)
-- only 25 keywords
-- straightforward to parse (no type-specific context required)
-- easy to predict, reason about
-
-* Declarations
-
-Uses Pascal/Modula-style syntax: name before type, more type keywords.
-
-	var fn func([]int) int
-	type T struct { a, b int }
-
-not
-
-	int (*fn)(int[]);
-	struct T { int a, b; }
-
-Easier to parse—no symbol table needed.  Tools become easier to write.
-
-One nice effect: can drop `var` and derive type of variable from expression:
-
-	var buf *bytes.Buffer = bytes.NewBuffer(x) // explicit
-	buf := bytes.NewBuffer(x)                  // derived
-
-For more information:
-
-.link http://golang.org/s/decl-syntax
-
-* Function syntax
-
-Function on type `T`:
-
-	func Abs(t T) float64
-
-Method of type `T`:
-
-	func (t T) Abs() float64
-
-Variable (closure) of type `T`:
-
-	negAbs := func(t T) float64 { return -Abs(t) }
-	
-In Go, functions can return multiple values. Common case: `error`.
-
-	func ReadByte() (c byte, err error)
-
-	c, err := ReadByte()
-	if err != nil { ... }
-
-More about errors later.
-
-* No default arguments
-
-Go does not support default function arguments.
-
-Why not?
-
-- too easy to throw in defaulted args to fix design problems
-- encourages too many args
-- too hard to understand the effect of the fn for different combinations of args
-
-Extra verbosity may happen but that encourages extra thought about names.
-
-Related: Go has easy-to-use, type-safe support for variadic functions.
-
-* Naming
-
-* Export syntax
-
-Simple rule:
-
-- upper case initial letter: `Name` is visible to clients of package
-- otherwise: `name` (or `_Name`) is not visible to clients of package
-
-Applies to variables, types, functions, methods, constants, fields....
-
-That Is It.
-
-Not an easy decision.
-One of the most important things about the language.
-
-Can see the visibility of an identifier without discovering the declaration.
-
-Clarity.
-
-* Scope
-
-Go has very simple scope hierarchy:
-
-- universe
-- package
-- file (for imports only)
-- function
-- block
-
-* Locality of naming
-
-Nuances:
-
-- no implicit `this` in methods (receiver is explicit); always see `rcvr.Field`
-- package qualifier always present for imported names
-- (first component of) every name is always declared in current package
-
-No surprises when importing:
-
-- adding an exported name to my package cannot break your package!
-
-Names do not leak across boundaries.
-
-In C, C++, Java the name `y` could refer to anything
-In Go, `y` (or even `Y`) is always defined within the package.
-In Go, `x.Y` is clear: find `x` locally, `Y` belongs to it.
-
-* Function and method lookup
-
-Method lookup by name only, not type.
-A type cannot have two methods with the same name, ever.
-Easy to identify which function/method is referred to.
-Simple implementation, simpler program, fewer surprises.
-
-Given a method `x.M`, there's only ever one `M` associated with `x`.
-
-* Semantics
-
-* Basics
-
-Generally C-like:
-
-- statically typed
-- procedural
-- compiled
-- pointers etc.
-
-Should feel familiar to programmers from the C family.
-
-* But...
-
-Many small changes in the aid of robustness:
-
-- no pointer arithmetic
-- no implicit numeric conversions
-- array bounds checking
-- no type aliases
-- `++` and `--` as statements not expressions
-- assignment not an expression
-- legal (encouraged even) to take address of stack variable
-- many more
-
-Plus some big ones...
-
-* Bigger things
-
-Some elements of Go step farther from C, even C++ and Java:
-
-- concurrency
-- garbage collection
-- interface types
-- reflection
-- type switches
-
-* Concurrency
-
-* Concurrency
-
-Important to modern computing environment.
-Not well served by C++ or even Java.
-
-Go embodies a variant of CSP with first-class channels.
-
-Why CSP?
-
-- The rest of the language can be ordinary and familiar.
-
-Must be able to couple concurrency with computation.
-
-Example: concurrency and cryptography.
-
-* CSP is practical
-
-For a web server, the canonical Go program, the model is a great fit.
-
-Go _enables_ simple, safe concurrent programming.
-It doesn't _forbid_ bad programming.
-
-Focus on _composition_ of regular code.
-
-Caveat: not purely memory safe; sharing is legal.
-Passing a pointer over a channel is idiomatic.
-
-Experience shows this is a practical design.
-
-* Garbage collection
-
-* The need for garbage collection
-
-Too much programming in C and C++ is about memory allocation.
-But also the design revolves too much about memory management.
-Leaky abstractions, leaky dependencies.
-
-Go has garbage collection, only.
-
-Needed for concurrency: tracking ownership too hard otherwise.
-Important for abstraction: separate behavior from resource management.
-A key part of scalability: APIs remain local.
-
-Use of the language is much simpler because of GC.
-Adds run-time cost, latency, complexity to the implementation.
-
-Day 1 design decision.
-
-* Garbage collection in Go
-
-A garbage-collected systems language is heresy!
-Experience with Java: Uncontrollable cost, too much tuning.
-
-But Go is different.
-Go lets you limit allocation by controlling memory layout.
-
-Example:
-
-	type X struct {
-		a, b, c int
-		buf [256]byte
-	}
-
-Example: Custom arena allocator with free list.
-
-* Interior pointers
-
-Early decision: allow interior pointers such as `X.buf` from previous slide.
-
-Tradeoff: Affects which GC algorithms that can be used, but in return reduces pressure on the collector.
-
-Gives the _programmer_ tools to control GC overhead.
-
-Experience, compared to Java, shows it has significant effect on memory pressure.
-
-GC remains an active subject.
-Current design: parallel mark-and-sweep.
-With care to use memory wisely, works well in production.
-
-* Interfaces
-
-Composition not inheritance
-
-* Object orientation and big software
-
-Go is object-oriented.
-Go does not have classes or subtype inheritance.
-
-What does this mean?
-
-* No type hierarchy
-
-O-O is important because it provides uniformity of interface.
-Outrageous example: the Plan 9 kernel.
-
-Problem:  subtype inheritance encourages _non-uniform_ interfaces.
-
-* O-O and program evolution
-
-Design by type inheritance oversold.
-Generates brittle code.
-Early decisions hard to change, often poorly informed.
-Makes every programmer an interface designer.
-(Plan 9 was built around a single interface everything needed to satisfy.)
-
-Therefore encourages overdesign early on: predict every eventuality.
-Exacerbates the problem, complicates designs.
-
-* Go: interface composition
-
-In Go an interface is _just_ a set of methods:
-
-	type Hash interface {
-		Write(p []byte) (n int, err error)
-		Sum(b []byte) []byte
-		Reset()
-		Size() int
-		BlockSize() int
-	}
-
-No `implements` declaration.
-All hash implementations satisfy this implicitly. (Statically checked.)
-
-* Interfaces in practice: composition
-
-Tend to be small: one or two methods are common.
-
-Composition falls out trivially. Easy example, from package `io`:
-
-	type Reader interface {
-		Read(p []byte) (n int, err error)
-	}
-
-`Reader` (plus the complementary `Writer`) makes it easy to chain:
-
-- files, buffers, networks, encryptors, compressors, GIF, JPEG, PNG, ...
-
-Dependency structure is not a hierarchy; these also implement other interfaces.
-
-Growth through composition is _natural_, does not need to be pre-declared.
-
-And that growth can be _ad_hoc_ and linear.
-
-* Compose with functions, not methods
-
-Hard to overstate the effect that Go's interfaces have on program design.
-
-One big effect: functions with interface arguments.
-
-	func ReadAll(r io.Reader) ([]byte, error)
-
-Wrappers:
-
-	func LoggingReader(r io.Reader) io.Reader
-	func LimitingReader(r io.Reader, n int64) io.Reader
-	func ErrorInjector(r io.Reader) io.Reader
-
-The designs are nothing like hierarchical, subtype-inherited methods.
-Much looser, organic, decoupled, independent.
-
-* Errors
-
-* Error handling
-
-Multiple function return values inform the design for handling errors.
-
-Go has no `try-catch` control structures for exceptions.
-Return `error` instead: built-in interface type that can "stringify" itself:
-
-	type error interface { Error() string }
-
-Clear and simple.
-
-Philosophy:
-
-Forces you think about errors—and deal with them—when they arise.
-Errors are _normal_. Errors are _not_exceptional_.
-Use the existing language to compute based on them.
-Don't need a sublanguage that treats them as exceptional.
-
-Result is better code (if more verbose).
-
-* (OK, not all errors are normal. But most are.)
-
-.image splash/fire.jpg
-
-* Tools
-
-* Tools
-
-Software engineering requires tools.
-
-Go's syntax, package design, naming, etc. make tools easy to write.
-
-Standard library includes lexer and parser; type checker nearly done.
-
-* Gofmt
-
-Always intended to do automatic code formatting.
-Eliminates an entire class of argument.
-Runs as a "presubmit" to the code repositories.
-
-Training:
-
-- The community has always seen `gofmt` output.
-
-Sharing:
-
-- Uniformity of presentation simplifies sharing.
-
-Scaling:
-
-- Less time spent on formatting, more on content.
-
-Often cited as one of Go's best features.
-
-* Gofmt and other tools
-
-Surprise: The existence of `gofmt` enabled _semantic_ tools:
-Can rewrite the tree; `gofmt` will clean up output.
-
-Examples:
-
-- `gofmt`-r`'a[b:len(a)]`->`a[b:]'`
-- `gofix`
-
-And good front-end libraries enable ancillary tools:
-
-- `godoc`
-- `go`get`, `go`build`, etc.
-- `api`
-
-* Gofix
-
-The `gofix` tool allowed us to make sweeping changes to APIs and language features leading up to the release of Go 1.
-
-- change to map deletion syntax
-- new time API
-- many more
-
-Also allows us to _update_ code even if the old code still works.
-
-Recent example:
-
-Changed Go's protocol buffer implementation to use getter functions; updated _all_ Google Go code to use them with `gofix`.
-
-* Conclusion
-
-* Go at Google
-
-Go's use is growing inside Google.
-
-Several big services use it:
-
-- golang.org
-- youtube.com
-- dl.google.com
-
-Many small ones do, many using Google App Engine.
-
-* Go outside Google
-
-Many outside companies use it, including:
-
-- BBC Worldwide
-- Canonical
-- Heroku
-- Nokia
-- SoundCloud
-
-* What's wrong?
-
-Not enough experience yet to know if Go is truly successful.
-Not enough big programs.
-
-Some minor details wrong. Examples:
-
-- declarations still too fussy
-- `nil` is overloaded
-- lots of library details
-
-`Gofix` and `gofmt` gave us the opportunity to fix many problems, ranging from eliminating semicolons to redesigning the `time` package.
-But we're still learning (and the language is frozen for now).
-
-The implementation still needs work, the run-time system in particular.
-
-But all indicators are positive.
-
-* Summary
-
-Software engineering guided the design.
-But a productive, fun language resulted because that design enabled productivity.
-
-Clear dependencies
-Clear syntax
-Clear semantics
-Composition not inheritance
-Simplicity of model (GC, concurrency)
-Easy tooling (the `go` tool, `gofmt`, `godoc`, `gofix`)
-
-* Try it!
-
-.link http://golang.org http://golang.org
-
-.image splash/appenginegophercolor.jpg
-
diff --git a/content/2012/splash/appenginegophercolor.jpg b/content/2012/splash/appenginegophercolor.jpg
deleted file mode 100644
index 43e84fd..0000000
--- a/content/2012/splash/appenginegophercolor.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/splash/datacenter.jpg b/content/2012/splash/datacenter.jpg
deleted file mode 100644
index c2de0f3..0000000
--- a/content/2012/splash/datacenter.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/splash/fire.jpg b/content/2012/splash/fire.jpg
deleted file mode 100644
index 4cdbd6b..0000000
--- a/content/2012/splash/fire.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/tutorial.slide b/content/2012/tutorial.slide
deleted file mode 100644
index 48cbecb..0000000
--- a/content/2012/tutorial.slide
+++ /dev/null
@@ -1,642 +0,0 @@
-Get started with Go
-
-Andrew Gerrand
-Google
-https://plus.google.com/106356964679457436995
-@enneff
-http://golang.org
-
-* Background
-
-# In this tutorial I'll show you how to install and use the Go Programming Language.
-
-* What is Go?
-
-Go is a new, general-purpose programming language.
-
-- Compiled
-- Statically typed
-- Concurrent
-- Simple
-- Productive
-
-"Go is a wise, clean, insightful, fresh thinking approach to the greatest-hits subset of the well understood."
-- Michael T. Jones
-
-
-* History
-
-- Project starts at Google in 2007 (by Griesemer, Pike, Thompson)
-- Open source release in November 2009
-- More than 250 contributors join the project
-- Version 1.0 release in March 2012
-
-# Go was originally built by a team at Google, led by Robert Griesemer, Rob Pike, and Ken Thompson. In November 2010, Go was launched publically as an open source project. Since then, a team at Google and more than 250 contributors from the open source community continued to improve the Go language, libraries, and tools.
-
-# In March 2012, we announced Go 1, a version of the language and libraries that will be supported for years to come. 
-
-* Getting started
-
-* Install Go
-
-.link http://golang.org/doc/install
-
-- Install from binary distributions or build from source
-- 32- and 64-bit x86 and ARM processors
-- Windows, Mac OS X, Linux, and FreeBSD
-- Other platforms may be supported by `gccgo`
-
-# Go is available in binary form for Windows, Mac OS X, Linux, and FreeBSD running under 32 and 64-bit x86 processor architectures. To install Go on these systems, download the appropriate file from golang.org and either open the package installer (Windows or OS X) or extract the archive to /usr/local/go (Linux and FreeBSD).  
-
-# If you use a different operating system or processor architecture, you may still be able to use Go by building it from source or using gccgo (an alternate Go compiler based on the GNU C Compiler). See the installation instructions on golang.org for how to do this.
-
-* Test your Go installation
-
-# Let's build and run a simple Go program to check that we have a valid Go install. Create a file named hello.go somewhere convenient and populate it with this Go source code:
-
-Put this code into `hello.go`:
-
-.code tutorial/hello.go
-
-# Now, from a command prompt, run `go run hello.go`. This will build your program, storing the executable binary in a temporary location, and run it. You should see the greeting printed to the console.
-
-Run the program:
-
-  $ go run hello.go
-
-
-* The go tool
-
-The `go` tool is the standard tool for building, testing, and installing Go programs.
-
-Compile and run `hello.go`:
-
-  $ go run hello.go
-
-Run `zip` tests:
-
-  $ go test archive/zip
-
-Build and format the files in the current directory:
-
-  $ go build
-  $ go fmt
-
-Fetch and install `websocket`:
-
-  $ go get code.google.com/p/go.net/websocket 
-
-
-* Workspaces
-
-The `go` tool derives build instructions from Go source code.
-
-There's no need to write and maintain build scripts.
-
-For this to work, some prescribed directory structure, known as a workspace, is required.
-
-  workspace/
-    bin # executable binaries
-    pkg # compiled object files
-    src # source code
-
-* Create a workspace
-
-Create your workspace now.
-
-#I prefer to use the name "gocode", but you can use whatever you like.
-
-  $ mkdir -p $HOME/gocode/src
-
-(The `bin` and `pkg` sub-directories will be created by the `go` tool.)
-
-Tell the `go` tool where your workspace is by setting the `GOPATH` environment variable:
-# You can do this on OS X, Linux, and FreeBSD by adding this line to the `$HOME/.profile` and re-starting any running shells:
-
-  export GOPATH=$HOME/gocode
-
-# See the installation instructions at golang.org for how to set `GOPATH` under Windows.
-
-You may also want to add the `bin` sub-directory of your workspace to your `PATH`:
-
-  export PATH=$PATH:$GOPATH/bin
-
-This lets you run your Go programs without specifying their full path.
-
-(You may want to put these `export` commands in the `.bash_profile` file in your home directory.)
-
-* Choose a namespace
-
-Choose a special place for your Go code.
-
-I use `"github.com/nf"`, the root of my GitHub account (useful with `go get`).
-
-# Once you have chosen a namespace, create the required paths inside the `src` directory of your workspace:
-
-  $ mkdir -p $GOPATH/src/github.com/nf
-
-Create a `hello` directory in your namespace and copy `hello.go` there:
-  
-  $ mkdir $GOPATH/src/github.com/nf/hello
-  $ cp hello.go $GOPATH/src/github.com/nf/hello
-
-Now you can build install the hello program with the `go` tool:
-
-  $ go install github.com/nf/hello
-
-This builds an executable named `hello`, and installs it to the `bin` directory of your workspace.
-
-  $ $GOPATH/bin/hello
-  Hello, fellow gopher
-
-
-* Our project
-
-* Our project
-
-A command-line program that fetches and displays the latest headlines from the `golang` page on Reddit.
-# (Reddit is a huge link aggregation site where people submit links and other people vote on and have discussions about them.)
-
-The program will:
-- make an HTTP request to the Reddit API,
-- decode the JSON response into a Go data structure, and
-- print each link's title, URL, and number of comments.
-
-To get started, create directory inside your namespace called `reddit`:
-
-  $ mkdir $GOPATH/src/github.com/nf/reddit
-  
-This is where you will put your Go source files.
-
-
-* Make an HTTP request
-
-This program makes an HTTP request to the Reddit API and copies its response to standard output.  Put this in a file named `main.go` inside your `reddit` directory.
-
-.code tutorial/1get.go
-
-# If you run it you should see a blob of JSON data, or an error message if something goes wrong.
-
-# There's a lot going on here, so let's break it down. 
-
-
-* Make an HTTP request: package statement
-
-All Go code belongs to a package.
-
-.code tutorial/1get.go /package/
-
-Go programs begin with function `main` inside package `main`.
-
-
-* Make an HTTP request: import statement
-
-The import declaration specifies the file's dependencies.
-
-.code tutorial/1get.go /import/,/\)/
-
-Each string is an import path. It tells the Go tools where to find the package.
-
-These packages are all from the Go standard library.
-
-
-* Make an HTTP request: function declaration
-
-.code tutorial/1get.go /func.main/,/^}/ HLfunc
-
-This is a function declaration. The main function takes no arguments and has no return values.
-
-* Make an HTTP request: http.Get
-
-.code tutorial/1get.go /func.main/,/^}/ HLget
-
-Call the `Get` function from the `http` package, passing the URL of the Reddit API as its only argument.
-
-Declare two variables (`resp` and `err`) and give them the return values of the function call. (Yes, Go functions can return multiple values.) The `Get` function returns `*http.Response` and an `error` values.
-
-
-* Make an HTTP request: error handling
-
-.code tutorial/1get.go /func.main/,/^}/ HLerr
-
-Compare `err` against `nil`, the zero-value for the built-in `error` type.
-
-The `err` variable will be nil if the request was successful.
-
-If not, call the `log.Fatal` function to print the error message and exit the program.
-
-# I cannot overstate the importance of error checking. Disregard error values at your peril!
-
-
-* Make an HTTP request: check status
-
-.code tutorial/1get.go /func.main/,/^}/ HLstatus
-
-Test that the HTTP server returned a "200 OK" response.
-
-If not, bail, printing the HTTP status message ("500 Internal Server Error", for example).
-
-
-* Make an HTTP request: copy
-
-.code tutorial/1get.go /func.main/,/^}/ HLcopy
-
-Use `io.Copy` to copy the HTTP response body  to standard output (`os.Stdout`).
-
-#On the left is a variable assignment that stores the error return value of the Copy in err. Note that this is different to the previous assignment which was also a declaration. This simple assignment - distinguished by the absence of a colon - assigns the second return value of the Copy to the err variable. The first return value, which appears to be assigned to an underscore, is thrown away. The underscore can be thought of as a "write only variable".
-
-  package io
-
-  func Copy(dst Writer, src Reader) (written int64, err error)
-
-The `resp.Body` type implements `io.Reader` and `os.Stdout` implements `io.Writer`.
-
-
-* Decoding the JSON response
-
-* Data structures
-
-The Reddit API returns JSON data like this:
-
-  {"data": {"children": [
-    {"data": {
-      "title": "The Go homepage",
-      "url": "http://golang.org/",
-      ...
-    }},
-    ...
-  ]}}
-
-Go's `json` package decodes JSON-encoded data into native Go data structures. To decode the API response, declare some types that reflect the structure of the JSON data:
-
-.code tutorial/2json.go /type.Item/,$
-
-
-* Decode the response
-
-Instead of copying the HTTP response body to standard output
-
-.code tutorial/1get.go /io.Copy/
-
-we use the json package to decode the response into our Response data structure.
-
-.code tutorial/2json.go /new.Response/,/json.NewDecoder/
-
-Initialize a new `Response` value, store a pointer to it in the new variable `r`.
-
-Create a new `json.Decoder` object and decode the response body into `r`.
-
-As the decoder parses the JSON data it looks for corresponding fields of the same names in the `Response` struct. The `"data"` field of the top-level JSON object is decoded into the `Response` struct's `Data` field, and JSON array `"children"` is decoded into the `Children` slice, and so on.
-
-
-* Print the data
-
-    for _, child := range r.Data.Children {
-      fmt.Println(child.Data.Title)
-    }
-
-Iterate over the `Children` slice, assigning the slice value to `child` on each iteration.
-
-The `Println` call prints the item's `Title` followed by a newline.
-
-
-* Tidying up
-
-* Separation of concerns
-
-So far, all the action happens in the main function.
-
-As the program grows, structure and modularity become important.
-
-What if we want to check several subreddits? Or share this functionality with another program?
-
-Create a function named `Get` that takes the name of subreddit, makes the API call, and returns the items from that subreddit.
-
-.code tutorial/3func.go /func.Get/
-
-`Get` takes a string, `reddit`, and returns a slice of `Item` and an `error` value.
-
-* Get: construct the URL
-
-.code tutorial/3func.go /func.Get/,/^}/ HLurl
-
-Use `fmt.Sprintf` to construct the request URL from the provided `reddit` string.
-
-* Get: return
-
-.code tutorial/3func.go /func.Get/,/^}/ HLreturn
-
-Exiting the function, return a nil slice and a non-nil error value, or vice versa.
-
-* Get: making an error
-
-.code tutorial/3func.go /func.Get/,/^}/ HLerrors
-
-The response's `Status` field is just a string; use the `errors.New` function to convert it to an `error` value.
-
-* Get: defer clean-up work
-
-.code tutorial/3func.go /func.Get/,/^}/ HLclose
-
-Defer a call to the response body's `Close` method, to guarantee that we clean up after the HTTP request. The call will be executed after the function returns.
-
-# It's important to Close the response Body, because it tells the http package that you have finished reading, freeing up the HTTP connection to for re-used (the Go http package uses Keep-Alive and connection pooling by default). If we want to use our Get function in the context of a larger program, it must clean up properly.
-
-# TODO(adg): about defer
-
-* Get: prepare the response
-
-.code tutorial/3func.go /func.Get/,/^}/ HLprepare
-
-Use the make function to allocate an `Item` slice big enough to store the response data.
-
-* Get: convert the response
-
-.code tutorial/3func.go /func.Get/,/^}/ HLconvert
-
-Iterate over the response's `Children` slice, assigning each child's `Data` element to the corresponding element in the items slice.
-
-* Use Get in main
-
-In the `main` function, replace the http request and JSON decoding code with a single call to `Get`.
-
-.code tutorial/3func.go /func.main/,/^}/
-
-The print loop becomes clearer, too.
-
-However, it's not very useful to print only the title of the items. Let's address that.
-
-
-* Formatted output
-
-* The Stringer interface
-
-The `fmt` package knows how to format the built-in types, but it can be told how to format user-defined types, too.
-
-When you pass a value to the `fmt.Print` functions, it checks to see if it implements the `fmt.Stringer` interface:
-
-  type Stringer interface {
-    String() string
-  }
-
-Any type that implements a `String() string` method is a `Stringer`, and the `fmt` package will use that method to format values of that type.
-
-
-* Formatting Items
-
-A method declaration is just like a function declaration, but the receiver comes first.
-
-Here's a `String` method for the `Item` type that returns the title, a newline, and the URL:
-
-  func (i Item) String() string {
-    return fmt.Sprintf("%s\n%s", i.Title, i.URL)
-  }
-
-To print the item we just pass it to Println, which uses the provided `String` method to format the `Item`.
-
-  fmt.Println(item)
-
-
-* Richer formatting (1/2)
-
-Let's go a step further. One way to judge how interesting a link might be is by the discussion surrounding it. Let's display the number of comments for each `Item` as well.
-
-  { "title": "The Go homepage",
-    "url": "http://golang.org/",
-    "num_comments": 10 }
-
-Update the `Item` type to include a `Comments` field:
-
-.code tutorial/4method.go /type.Item/,/^}/
-
-The new `Comments` field has a "struct tag", a string that annotates the field. Go code can use the `reflect` package to inspect this information at runtime.
-
-This tag, `json:"num_comments"`, tells the `json` package to decode the `"num_comments"` field of the JSON object into the `Comments` field (and the reverse, when encoding).
-
-* Richer formatting (2/2)
-
-Now the `String` method can be a little more complex:
-
-.code tutorial/4method.go /func..i.Item..String/,/^}/
-
-Observe that, unlike some languages, Go's switch statements do not fall through by default.
-
-Now when we run our program we should see a nicely formatted list of links.
-
-
-* Packages
-
-* A new package (1/3)
-
-This is useful code. Let's organize it to make it more accessible to others by putting it in an importable package.
-
-Create a new directory inside your `reddit` directory named `geddit`, and copy your `main.go` file there.
-
-`reddit` is the name of the library and `geddit` as that of the command-line client.
-
-  $ cd $GOPATH/src/github.com/nf/reddit
-  $ mkdir geddit
-  $ cp main.go geddit/
-
-Rename the `main.go` inside the `reddit` directory to `reddit.go`. (Not necessary; just a convention.)
-
-  $ mv main.go reddit.go
-
-
-* A new package (2/3)
-
-Change the package statement at the top of `reddit.go` from `package main` to `package reddit`.
-
-It is convention that the package name be the same as the last element of the import path.
-
-The convention makes packages predictable to use:
-
-  import "github.com/nf/reddit"
-
-  func foo() {
-    r, err := reddit.Get("golang") // "reddit" here is the package name
-    // ...
-  }
-
-The only strict requirement is that it must not be `package main`.
-
-Also remove the `main` function from `reddit.go`, and any unused package imports. (The compiler will tell you which packages are unused.)
-
-
-* A new package (3/3)
-
-The `reddit.go` file now looks like this:
-
-  package reddit
-  
-  import (
-    // omitted
-  )
-  
-  type Response struct {
-    // omitted
-  }
-  
-  type Item struct {
-    // omitted
-  }
-  
-  func (i Item) String() string {
-    // omitted
-  }
-  
-  func Get(reddit string) ([]Item, error) {
-    // omitted
-  }
-
-
-* Using the reddit package
-
-Edit the `geddit/main.go` file to remove the `Get`, `Item`, and `Response` declarations, import the `reddit` package, and use the `reddit.` prefix before the `Get` invocation:
-
-.code tutorial/main.go
-
-
-* Documentation
-
-* Documentation (1/3)
-
-`Godoc` is the Go documentation tool. It reads documentation directly from Go source files. It's easy to keep documentation and code in sync when they live together in the same place.
-
-Here's our reddit package when viewed from `godoc`:
-
-  $ godoc github.com/nf/reddit
-  PACKAGE
-  
-  package reddit
-      import "github.com/nf/reddit"
-  
-  FUNCTIONS
-  
-  func Get(reddit string) ([]Item, error)
-  
-  TYPES
-  
-  type Item struct {
-      Title    string
-      URL      string
-      Comments int `json:"num_comments"`
-  }
-  
-  func (i Item) String() string
-
-  type Response struct {
-  	// etc
-
-# Here we see all our top-level declarations. This is our package's user interface (not to be confused with an interface type). Despite the lack of documentation, the one thing that jumps out at me is the Response type. This is an implementation detail, and not something that a user of this package should need to see.
-
-# In Go, top-level declarations beginning with an uppercase letter are "exported", and therefore visible outside the package. All other names are private and inaccessible to code outside the package. We can hide the Response type by simply renaming it to "response".
-
-* Documentation (2/3)
-
-First, hide the `Response` type by renaming it to `response`.
-
-In Go, top-level declarations beginning with an uppercase letter are "exported" (visible outside the package). All other names are private and inaccessible to code outside the package.
-
-To document the remaining visible names, add a comment directly above their declarations:
-
-.code tutorial/reddit/reddit.go /Item.describes/,/type/
-
-.code tutorial/reddit/reddit.go /Get.fetches/,/func/
-
-# It is the convention to begin godoc comments with the noun they describe. This allows the text to be displayed in a variety of contexts, not necessarily alongside the declaration itself.
-
-Most importantly, document the package itself by adding a comment to the package clause:
-
-.code tutorial/reddit/reddit.go /Package.reddit/,/package.reddit/
-
-Don't worry about documenting the `String` method, as all Go programmers should be familiar with it and its purpose.
-
-* Documentation (3/3)
-
-The `godoc` output for our revised package:
-
-  PACKAGE
-  
-  package reddit
-      import "github.com/nf/reddit"
-  
-      Package reddit implements a basic client for the Reddit API.
-  
-  FUNCTIONS
-  
-  func Get(reddit string) ([]Item, error)
-      Get fetches the most recent Items posted to the specified subreddit.
-  
-  TYPES
-  
-  type Item struct {
-      Title    string
-      URL      string
-      Comments int `json:"num_comments"`
-  }
-      Item describes a Reddit item.
-  
-  func (i Item) String() string
-
-# You can also see how it will look on the web by running a local godoc instance
-
-#   $ godoc -http=localhost:8080
-
-# and loading http://localhost:8080/ in your browser.
-
-
-* Sharing your work
-
-* Publish the reddit library
-
-- Add a copyright notice to each file
-- Choose your preferred license
-- Initialize the source control repo
-- Make your first commit
-- Push it to the remote repository
-
-
-* Install with go get
-
-Use the go tool to automatically check out and install Go code:
-
-  $ go get github.com/nf/reddit/geddit
-
-This checks out the repository to `$GOPATH/src/github.com/nf/reddit` and installs the binary to `$GOPATH/bin/geddit`. The `bin` directory is in my PATH, so I can now run:
-
-  $ geddit
-
-The `go get` command can fetch code from
-
-- Bitbucket
-- GitHub
-- Google Code
-- Launchpad
-
-as well as arbitrary Git, Mercurial, Subversion, and Bazaar repositories.
-
-
-* Homework
-
-Some ideas:
-
-- Implement a command-line interface to specify the subreddit(s) to query.
-- Expand the reddit package to support more of the Reddit API.
-- Learn about Go's concurrency primitives and perform multiple requests in parallel.
-
-
-* Where to go from here
-
-Learn Go:
-
-.link http://tour.golang.org 
-
-Documentation and articles:
-
-.link http://golang.org/doc
-
-Standard library reference:
-
-.link http://golang.org/pkg
-
diff --git a/content/2012/tutorial/1get.go b/content/2012/tutorial/1get.go
deleted file mode 100644
index 98b914b..0000000
--- a/content/2012/tutorial/1get.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() { // HLfunc
-	resp, err := http.Get("http://reddit.com/r/golang.json") // HLget
-	if err != nil {                                          // HLerr
-		log.Fatal(err) // HLerr
-	} // HLerr
-	if resp.StatusCode != http.StatusOK { // HLstatus
-		log.Fatal(resp.Status) // HLstatus
-	} // HLstatus
-	_, err = io.Copy(os.Stdout, resp.Body) // HLcopy
-	if err != nil {                        // HLerr
-		log.Fatal(err) // HLerr
-	} // HLerr
-} // HLfunc
diff --git a/content/2012/tutorial/2json.go b/content/2012/tutorial/2json.go
deleted file mode 100644
index 0e0bf8f..0000000
--- a/content/2012/tutorial/2json.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	resp, err := http.Get("http://reddit.com/r/golang.json")
-	if err != nil {
-		log.Fatal(err)
-	}
-	if resp.StatusCode != http.StatusOK {
-		log.Fatal(resp.Status)
-	}
-	r := new(Response)
-	err = json.NewDecoder(resp.Body).Decode(r)
-	if err != nil {
-		log.Fatal(err)
-	}
-	for _, child := range r.Data.Children {
-		fmt.Println(child.Data.Title)
-	}
-}
-
-type Item struct {
-	Title string
-	URL   string
-}
-
-type Response struct {
-	Data struct {
-		Children []struct {
-			Data Item
-		}
-	}
-}
diff --git a/content/2012/tutorial/3func.go b/content/2012/tutorial/3func.go
deleted file mode 100644
index afc8a64..0000000
--- a/content/2012/tutorial/3func.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	items, err := Get("golang") // HL
-	if err != nil {
-		log.Fatal(err)
-	}
-	for _, item := range items { // HL
-		fmt.Println(item.Title)
-	}
-}
-
-type Response struct {
-	Data struct {
-		Children []struct {
-			Data Item
-		}
-	}
-}
-
-type Item struct {
-	Title string
-	URL   string
-}
-
-func Get(reddit string) ([]Item, error) {
-	url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit) // HLurl
-	resp, err := http.Get(url)                                // HLget
-	if err != nil {
-		return nil, err // HLreturn
-	}
-	defer resp.Body.Close()               // HLclose
-	if resp.StatusCode != http.StatusOK { // HLstatus
-		return nil, errors.New(resp.Status) // HLerrors
-	}
-	r := new(Response)                         // HLdecode
-	err = json.NewDecoder(resp.Body).Decode(r) // HLdecode
-	if err != nil {
-		return nil, err // HLreturn
-	}
-	items := make([]Item, len(r.Data.Children)) // HLprepare
-	for i, child := range r.Data.Children {     // HLconvert
-		items[i] = child.Data // HLconvert
-	} // HLconvert
-	return items, nil // HLreturn
-}
diff --git a/content/2012/tutorial/4method.go b/content/2012/tutorial/4method.go
deleted file mode 100644
index 2cef862..0000000
--- a/content/2012/tutorial/4method.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	items, err := Get("golang")
-	if err != nil {
-		log.Fatal(err)
-	}
-	for _, item := range items {
-		fmt.Println(item)
-	}
-}
-
-type Response struct {
-	Data struct {
-		Children []struct {
-			Data Item
-		}
-	}
-}
-
-type Item struct {
-	Title    string
-	URL      string
-	Comments int `json:"num_comments"`
-}
-
-func (i Item) String() string {
-	com := ""
-	switch i.Comments {
-	case 0:
-		// nothing
-	case 1:
-		com = " (1 comment)"
-	default:
-		com = fmt.Sprintf(" (%d comments)", i.Comments)
-	}
-	return fmt.Sprintf("%s%s\n%s", i.Title, com, i.URL)
-}
-
-func Get(reddit string) ([]Item, error) {
-	url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit)
-	resp, err := http.Get(url)
-	if err != nil {
-		return nil, err
-	}
-	defer resp.Body.Close()
-	if resp.StatusCode != http.StatusOK {
-		return nil, errors.New(resp.Status)
-	}
-	r := new(Response)
-	err = json.NewDecoder(resp.Body).Decode(r)
-	if err != nil {
-		return nil, err
-	}
-	items := make([]Item, len(r.Data.Children))
-	for i, child := range r.Data.Children {
-		items[i] = child.Data
-	}
-	return items, nil
-}
diff --git a/content/2012/tutorial/golang.json b/content/2012/tutorial/golang.json
deleted file mode 100644
index 986c7d4..0000000
--- a/content/2012/tutorial/golang.json
+++ /dev/null
@@ -1 +0,0 @@
-{"data":{"after":"t3_ubvcv","before":null,"children":[{"data":{"approved_by":null,"author":"bockris","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340311589e+09,"created_utc":1.340286389e+09,"domain":"research.swtch.com","downs":0,"edited":false,"hidden":false,"id":"vdq4f","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_vdq4f","num_comments":0,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/vdq4f/researchrsc_a_tour_of_go/","saved":false,"score":9,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"research!rsc: A Tour of Go","ups":9,"url":"http://research.swtch.com/gotour"},"kind":"t3"},{"data":{"approved_by":null,"author":"HornedKavu","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340120634e+09,"created_utc":1.340095434e+09,"domain":"blog.davidsingleton.org","downs":4,"edited":false,"hidden":false,"id":"v9onh","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v9onh","num_comments":1,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v9onh/parsing_huge_xml_files_with_go/","saved":false,"score":34,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Parsing huge XML files with Go","ups":38,"url":"http://blog.davidsingleton.org/parsing-huge-xml-files-with-go/"},"kind":"t3"},{"data":{"approved_by":null,"author":"DavidScone","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340115741e+09,"created_utc":1.340115741e+09,"domain":"lawlessguy.wordpress.com","downs":1,"edited":false,"hidden":false,"id":"v9z0i","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v9z0i","num_comments":10,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v9z0i/prelude_to_an_embeddable_programming_language_in/","saved":false,"score":5,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Prelude to an Embeddable Programming Language in Go (Golang)","ups":6,"url":"http://lawlessguy.wordpress.com/2012/06/19/prelude-to-an-embeddable-programming-language-in-go-golang/"},"kind":"t3"},{"data":{"approved_by":null,"author":"dgryski","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339783575e+09,"created_utc":1.339783575e+09,"domain":"arxiv.org","downs":0,"edited":false,"hidden":false,"id":"v3rlk","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v3rlk","num_comments":2,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v3rlk/time_warp_on_the_go_pdf/","saved":false,"score":12,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Time Warp on the Go [PDF]","ups":12,"url":"http://arxiv.org/abs/1206.2772"},"kind":"t3"},{"data":{"approved_by":null,"author":"enneff","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339650531e+09,"created_utc":1.339650531e+09,"domain":"groups.google.com","downs":3,"edited":false,"hidden":false,"id":"v16zb","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v16zb","num_comments":6,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v16zb/go_102_is_out/","saved":false,"score":55,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Go 1.0.2 is out!","ups":58,"url":"https://groups.google.com/d/msg/golang-nuts/YOYs04O9Tes/MjBJoksRBmQJ"},"kind":"t3"},{"data":{"approved_by":null,"author":"crosone","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339700883e+09,"created_utc":1.339700883e+09,"domain":"self.golang","downs":0,"edited":false,"hidden":false,"id":"v23qr","is_self":true,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v23qr","num_comments":3,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v23qr/confusion_over_type_assertions_against_interfaces/","saved":false,"score":8,"selftext":"My question revolves around [this code](http://play.golang.org/p/DkbkZgHbUz).\n\nThe upshot is that, from what I interpret from the spec, performing a type assertion on either another interface or a static type is valid.  However, compiling fails when I attempt to do an assertion on a static type of a variable.\n\nI'm pretty certain that I've misunderstood what I've read in the spec.  However, if anyone could shed some light on why this cannot be done I'd be very grateful.\n\n","selftext_html":"&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;My question revolves around &lt;a href=\"http://play.golang.org/p/DkbkZgHbUz\"&gt;this code&lt;/a&gt;.&lt;/p&gt;\n\n&lt;p&gt;The upshot is that, from what I interpret from the spec, performing a type assertion on either another interface or a static type is valid.  However, compiling fails when I attempt to do an assertion on a static type of a variable.&lt;/p&gt;\n\n&lt;p&gt;I&amp;#39;m pretty certain that I&amp;#39;ve misunderstood what I&amp;#39;ve read in the spec.  However, if anyone could shed some light on why this cannot be done I&amp;#39;d be very grateful.&lt;/p&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;","subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Confusion over type assertions against interfaces.","ups":8,"url":"http://www.reddit.com/r/golang/comments/v23qr/confusion_over_type_assertions_against_interfaces/"},"kind":"t3"}],"modhash":""},"kind":"Listing"}
\ No newline at end of file
diff --git a/content/2012/tutorial/hello.go b/content/2012/tutorial/hello.go
deleted file mode 100644
index 0f04e20..0000000
--- a/content/2012/tutorial/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Greetings, fellow gopher")
-}
diff --git a/content/2012/tutorial/jsonserve.go b/content/2012/tutorial/jsonserve.go
deleted file mode 100644
index d513197..0000000
--- a/content/2012/tutorial/jsonserve.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"log"
-	"net/http"
-)
-
-func main() {
-	b := []byte(jsonBlob)
-	err := http.ListenAndServe(":80", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		w.Write(b)
-	}))
-	log.Fatal(err)
-}
-
-const jsonBlob = `{"data":{"after":"t3_ubvcv","before":null,"children":[{"data":{"approved_by":null,"author":"bockris","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340311589e+09,"created_utc":1.340286389e+09,"domain":"research.swtch.com","downs":0,"edited":false,"hidden":false,"id":"vdq4f","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_vdq4f","num_comments":0,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/vdq4f/researchrsc_a_tour_of_go/","saved":false,"score":9,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"research!rsc: A Tour of Go","ups":9,"url":"http://research.swtch.com/gotour"},"kind":"t3"},{"data":{"approved_by":null,"author":"HornedKavu","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340120634e+09,"created_utc":1.340095434e+09,"domain":"blog.davidsingleton.org","downs":4,"edited":false,"hidden":false,"id":"v9onh","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v9onh","num_comments":1,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v9onh/parsing_huge_xml_files_with_go/","saved":false,"score":34,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Parsing huge XML files with Go","ups":38,"url":"http://blog.davidsingleton.org/parsing-huge-xml-files-with-go/"},"kind":"t3"},{"data":{"approved_by":null,"author":"DavidScone","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.340115741e+09,"created_utc":1.340115741e+09,"domain":"lawlessguy.wordpress.com","downs":1,"edited":false,"hidden":false,"id":"v9z0i","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v9z0i","num_comments":10,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v9z0i/prelude_to_an_embeddable_programming_language_in/","saved":false,"score":5,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Prelude to an Embeddable Programming Language in Go (Golang)","ups":6,"url":"http://lawlessguy.wordpress.com/2012/06/19/prelude-to-an-embeddable-programming-language-in-go-golang/"},"kind":"t3"},{"data":{"approved_by":null,"author":"dgryski","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339783575e+09,"created_utc":1.339783575e+09,"domain":"arxiv.org","downs":0,"edited":false,"hidden":false,"id":"v3rlk","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v3rlk","num_comments":2,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v3rlk/time_warp_on_the_go_pdf/","saved":false,"score":12,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Time Warp on the Go [PDF]","ups":12,"url":"http://arxiv.org/abs/1206.2772"},"kind":"t3"},{"data":{"approved_by":null,"author":"enneff","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339650531e+09,"created_utc":1.339650531e+09,"domain":"groups.google.com","downs":3,"edited":false,"hidden":false,"id":"v16zb","is_self":false,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v16zb","num_comments":6,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v16zb/go_102_is_out/","saved":false,"score":55,"selftext":"","selftext_html":null,"subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Go 1.0.2 is out!","ups":58,"url":"https://groups.google.com/d/msg/golang-nuts/YOYs04O9Tes/MjBJoksRBmQJ"},"kind":"t3"},{"data":{"approved_by":null,"author":"crosone","author_flair_css_class":null,"author_flair_text":null,"banned_by":null,"clicked":false,"created":1.339700883e+09,"created_utc":1.339700883e+09,"domain":"self.golang","downs":0,"edited":false,"hidden":false,"id":"v23qr","is_self":true,"likes":null,"link_flair_css_class":null,"link_flair_text":null,"media":null,"media_embed":{},"name":"t3_v23qr","num_comments":3,"num_reports":null,"over_18":false,"permalink":"/r/golang/comments/v23qr/confusion_over_type_assertions_against_interfaces/","saved":false,"score":8,"selftext":"My question revolves around [this code](http://play.golang.org/p/DkbkZgHbUz).\n\nThe upshot is that, from what I interpret from the spec, performing a type assertion on either another interface or a static type is valid.  However, compiling fails when I attempt to do an assertion on a static type of a variable.\n\nI'm pretty certain that I've misunderstood what I've read in the spec.  However, if anyone could shed some light on why this cannot be done I'd be very grateful.\n\n","selftext_html":"&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;My question revolves around &lt;a href=\"http://play.golang.org/p/DkbkZgHbUz\"&gt;this code&lt;/a&gt;.&lt;/p&gt;\n\n&lt;p&gt;The upshot is that, from what I interpret from the spec, performing a type assertion on either another interface or a static type is valid.  However, compiling fails when I attempt to do an assertion on a static type of a variable.&lt;/p&gt;\n\n&lt;p&gt;I&amp;#39;m pretty certain that I&amp;#39;ve misunderstood what I&amp;#39;ve read in the spec.  However, if anyone could shed some light on why this cannot be done I&amp;#39;d be very grateful.&lt;/p&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;","subreddit":"golang","subreddit_id":"t5_2rc7j","thumbnail":"","title":"Confusion over type assertions against interfaces.","ups":8,"url":"http://www.reddit.com/r/golang/comments/v23qr/confusion_over_type_assertions_against_interfaces/"},"kind":"t3"}],"modhash":""},"kind":"Listing"}`
diff --git a/content/2012/tutorial/main.go b/content/2012/tutorial/main.go
deleted file mode 100644
index 10fcad6..0000000
--- a/content/2012/tutorial/main.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"github.com/nf/reddit" // HL
-	"log"
-)
-
-func main() {
-	items, err := reddit.Get("golang") // HL
-	if err != nil {
-		log.Fatal(err)
-	}
-	for _, item := range items {
-		fmt.Println(item)
-	}
-}
diff --git a/content/2012/tutorial/reddit/reddit.go b/content/2012/tutorial/reddit/reddit.go
deleted file mode 100644
index 3848398..0000000
--- a/content/2012/tutorial/reddit/reddit.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// Package reddit implements a basic client for the Reddit API.
-// +build ignore,OMIT
-
-package reddit
-
-import (
-	"encoding/json"
-	"fmt"
-	"net/http"
-)
-
-// Item describes a Reddit item.
-type Item struct {
-	Title    string
-	URL      string
-	Comments int `json:"num_comments"`
-}
-
-func (i Item) String() string {
-	com := ""
-	switch i.Comments {
-	case 0:
-		// nothing
-	case 1:
-		com = " (1 comment)"
-	default:
-		com = fmt.Sprintf(" (%d comments)", i.Comments)
-	}
-	return fmt.Sprintf("%s%s\n%s", i.Title, com, i.URL)
-}
-
-// Get fetches the most recent Items posted to the specified subreddit.
-func Get(reddit string) ([]Item, error) {
-	url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit)
-	resp, err := http.Get(url)
-	if err != nil {
-		return nil, err
-	}
-	defer resp.Body.Close()
-	if resp.StatusCode != http.StatusOK {
-		return nil, errors.New(resp.Status)
-	}
-	r := new(response)
-	err = json.NewDecoder(resp.Body).Decode(r)
-	if err != nil {
-		return nil, err
-	}
-	items := make([]Item, len(r.Data.Children))
-	for i, child := range r.Data.Children {
-		items[i] = child.Data
-	}
-	return items, nil
-}
-
-type response struct {
-	Data struct {
-		Children []struct {
-			Data Item
-		}
-	}
-}
diff --git a/content/2012/waza.slide b/content/2012/waza.slide
deleted file mode 100644
index 778768f..0000000
--- a/content/2012/waza.slide
+++ /dev/null
@@ -1,453 +0,0 @@
-#_This presentation was the closing keynote of the Heroku Waza conference in January, 2012.
-#_It has been slightly modified here for clarity and for use in the "present" format; the original
-#_used a precursor to that tool.
-
-Concurrency is not Parallelism
-Waza Jan 11, 2012
-
-Rob Pike
-r@golang.org
-
-* Video
-
-This talk was presented at Heroku's Waza conference in January 2012.
-
-.link http://vimeo.com/49718712 Watch the talk on Vimeo
-
-* The modern world is parallel
-
-Multicore.
-
-Networks.
-
-Clouds of CPUs.
-
-Loads of users.
-
-Our technology should help.
-That's where concurrency comes in.
-
-* Go supports concurrency
-
-Go provides:
-
-- concurrent execution (goroutines)
-- synchronization and messaging (channels)
-- multi-way concurrent control (select)
-
-* Concurrency is cool! Yay parallelism!!
-
-NO! A fallacy.
-
-When Go was announced, many were confused by the distinction.
-
-"I ran the prime sieve with 4 processors and it got slower!"
-
-* Concurrency
-
-Programming as the composition of independently executing processes.
-
-(Processes in the general sense, not Linux processes. Famously hard to define.)
-
-* Parallelism
-
-Programming as the simultaneous execution of (possibly related) computations.
-
-* Concurrency vs. parallelism
-
-Concurrency is about dealing with lots of things at once.
-
-Parallelism is about doing lots of things at once.
-
-Not the same, but related.
-
-Concurrency is about structure, parallelism is about execution.
-
-Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.
-
-* An analogy
-
-Concurrent: Mouse, keyboard, display, and disk drivers.
-
-Parallel: Vector dot product.
-
-* Concurrency plus communication
-
-Concurrency is a way to structure a program by breaking it into pieces that can be executed independently.
-
-Communication is the means to coordinate the independent executions.
-
-This is the Go model and (like Erlang and others) it's based on CSP:
-
-C. A. R. Hoare: Communicating Sequential Processes (CACM 1978)
-
-* Gophers
-
-This is too abstract. Let's get concrete.
-
-* Our problem
-
-Move a pile of obsolete language manuals to the incinerator.
-
-.image waza/gophersimple1.jpg
-
-With only one gopher this will take too long.
-
-* More gophers!
-
-.image waza/gophersimple3.jpg
-
-More gophers are not enough; they need more carts.
-
-* More gophers and more carts
-
-.image waza/gophersimple2.jpg
-
-This will go faster, but there will be bottlenecks at the pile and incinerator.
-Also need to synchronize the gophers.
-A message (that is, a communication between the gophers) will do.
-
-* Double everything
-
-Remove the bottleneck; make them really independent.
-
-.image waza/gophersimple4.jpg
-
-This will consume input twice as fast.
-
-* Concurrent composition
-
-.image waza/gophersimple4.jpg
-The concurrent composition of two gopher procedures.
-
-* Concurrent composition
-
-This design is not automatically parallel!
-
-What if only one gopher is moving at a time?
-Then it's still concurrent (that's in the design), just not parallel.
-
-However, it's automatically parallelizable!
-
-Moreover the concurrent composition suggests other models.
-
-* Another design
-
-.image waza/gophercomplex0.jpg
-
-Three gophers in action, but with likely delays.
-Each gopher is an independently executing procedure,
-plus coordination (communication).
-
-* Finer-grained concurrency
-
-Add another gopher procedure to return the empty carts.
-
-.image waza/gophercomplex1.jpg
-
-Four gophers in action for better flow, each doing one simple task.
-
-If we arrange everything right (implausible but not impossible), that's four times faster than our original one-gopher design.
-
-* Observation
-
-We improved performance by adding a concurrent procedure to the existing design.
-
-More gophers doing more work; it runs better.
-
-This is a deeper insight than mere parallelism.
-
-* Concurrent procedures
-
-Four distinct gopher procedures:
-
-- load books onto cart
-- move cart to incinerator
-- unload cart into incinerator
-- return empty cart
-
-Different concurrent designs enable different ways to parallelize.
-
-* More parallelization!
-
-We can now parallelize on the other axis; the concurrent design makes it easy. Eight gophers, all busy.
-
-.image waza/gophercomplex2.jpg
-
-* Or maybe no parallelization at all
-
-Keep in mind, even if only one gopher is active at a time (zero parallelism), it's still a correct and concurrent solution.
-
-.image waza/gophercomplex2.jpg
-
-* Another design
-
-Here's another way to structure the problem as the concurrent composition of gopher procedures.
-
-Two gopher procedures, plus a staging pile.
-
-.image waza/gophercomplex3.jpg
-
-* Parallelize the usual way
-
-Run more concurrent procedures to get more throughput.
-
-.image waza/gophercomplex4.jpg
-
-* Or a different way
-
-Bring the staging pile to the multi-gopher concurrent model:
-
-.image waza/gophercomplex5.jpg
-
-* Full on optimization
-
-Use all our techniques. Sixteen gophers hard at work!
-
-.image waza/gophercomplex6.jpg
-
-* Lesson
-
-There are many ways to break the processing down.
-
-That's concurrent design.
-
-Once we have the breakdown, parallelization can fall out and correctness is easy.
-
-* Back to Computing
-
-In our book transport problem, substitute:
-
-- book pile => web content
-- gopher => CPU
-- cart => marshaling, rendering, or networking
-- incinerator => proxy, browser, or other consumer
-
-It becomes a concurrent design for a scalable web service.
-Gophers serving web content.
-
-* A little background about Go
-
-Not the place for a tutorial, just quick highlights.
-
-* Goroutines
-
-A goroutine is a function running independently  in the same address space as other goroutines
-
-.code waza/snippets /f.runs/
-
-.code waza/snippets /f.starts.running/,/return/
-
-Like launching a function with shell's `&` notation.
-
-* Goroutines are not threads 
-
-(They're a bit like threads, but they're much cheaper.)
-
-Goroutines are multiplexed onto OS threads as required.
-
-When a goroutine blocks, that thread blocks but no other goroutine blocks.
-
-* Channels
-
-Channels are typed values that allow goroutines to synchronize and exchange information.
-
-.code waza/snippets /make.*chan/,/completedAt/
-
-* Select
-
-The `select` statement is like a `switch`, but the decision is based on ability to communicate rather than equal values.
-
-.code waza/snippets /select/,/}/
-
-* Go really supports concurrency
-
-Really.
-
-It's routine to create thousands of goroutines in one program.
-(Once debugged a program after it had created 1.3 million.)
-
-Stacks start small, but grow and shrink as required.
-
-Goroutines aren't free, but they're very cheap.
-
-* Closures are also part of the story
-
-Make some concurrent calculations easier to express.
-
-They are just local functions.
-Here's a non-concurrent example:
-
-.code waza/snippets /Compose/,/sin,/
-
-* Some examples
-
-Learn concurrent Go by osmosis.
-
-* Launching daemons
-
-Use a closure to wrap a background operation.
-
-This copies items from the input channel to the output channel:
-
-.code waza/snippets /copy.input/,/^}/
-
-The `for` `range` operation runs until channel is drained.
-
-* A simple load balancer (1)
-
-A unit of work:
-
-.code waza/load1 /type/,/^}/
-
-* A simple load balancer (2)
-
-A worker task
-
-.code waza/load1 /worker/,/^}/
-
-Must make sure other workers can run when one blocks.
-
-* A simple load balancer (3)
-
-The runner
-
-.code waza/load1 /Run/,/^}/
-
-Easy problem but also hard to solve concisely without concurrency.
-
-* Concurrency enables parallelism
-
-The load balancer is implicitly parallel and scalable.
-
-`NumWorkers` could be huge.
-
-The tools of concurrency make it almost trivial to build a safe, working, scalable, parallel design.
-
-* Concurrency simplifies synchronization
-
-No explicit synchronization needed.
-
-The structure of the program is implicitly synchronized.
-
-* That was too easy
-
-Let's do a more realistic load balancer.
-
-* Load balancer
-
-.image waza/gopherchart.jpg
-
-* Request definition
-
-The requester sends Requests to the balancer
-
-.code waza/load2 /^type.Request/,/^}/
-
-Note the return channel inside the request.
-Channels are first-class values.
-
-* Requester function
-
-An artificial but illustrative simulation of a requester, a load generator.
-
-.code waza/load2 /^func.requester/,/^}/
-
-* Worker definition
-
-A channel of requests, plus some load tracking data.
-
-.code waza/load2 /type.Worker/,/^}/
-
-* Worker
-
-Balancer sends request to most lightly loaded worker
-
-.code waza/load2 /^func.*work.*done/,/^}/
-
-The channel of requests (`w.requests`) delivers requests to each worker.  The balancer tracks the number of pending requests as a measure of load.
-Each response goes directly to its requester.
-
-Could run the loop body as a goroutine for parallelism.
-
-* Balancer definition
-
-The load balancer needs a pool of workers and a single channel to which requesters can report task completion.
-
-.code waza/load2 /type.Pool/,/^}/
-
-* Balancer function
-
-Easy!
-
-.code waza/load2 /func.*balance/,/^}/
-
-Just need to implement dispatch and completed.
-
-* A heap of channels
-
-Make Pool an implementation of the `Heap` interface by providing a few methods such as:
-
-.code waza/load2 /func.*Less/,/^}/
-
-Now we balance by making the `Pool` a heap tracked by load.
-
-* Dispatch
-
-All the pieces are in place.
-
-.code waza/load2 /Send.Request/,/^}/
-
-* Completed
-
-.code waza/load2 /Job.is.complete/,/^}/
-
-* Lesson
-
-A complex problem can be broken down into easy-to-understand components.
-
-The pieces can be composed concurrently.
-
-The result is easy to understand, efficient, scalable, and correct.
-
-Maybe even parallel.
-
-* One more example
-
-We have a replicated database and want to minimize latency by asking them all and returning the first response to arrive.
-
-* Query a replicated database
-
-.code waza/snippets /func.Query/,/^}/
-Concurrent tools and garbage collection make this an easy solution to a subtle problem.
-
-(Teardown of late finishers is left as an exercise.)
-
-
-* Conclusion
-
-
-Concurrency is powerful.
-
-Concurrency is not parallelism.
-
-Concurrency enables parallelism.
-
-Concurrency makes parallelism (and scaling and everything else) easy.
-
-* For more information
-
-Go: golang.org
-
-Some history: swtch.com/~rsc/thread/
-
-A previous talk (video): tinyurl.com/newsqueak1
-
-Parellelism is not concurrency (Harper): tinyurl.com/pincharper
-
-A concurrent window system (Pike): tinyurl.com/pikecws
-
-Concurrent power series (McIlroy): tinyurl.com/powser
-
-And finally, parallel but not concurrent:
-research.google.com/archive/sawzall.html
diff --git a/content/2012/waza/balance.go b/content/2012/waza/balance.go
deleted file mode 100644
index e97976e..0000000
--- a/content/2012/waza/balance.go
+++ /dev/null
@@ -1,162 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"container/heap"
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-const nRequester = 100
-const nWorker = 10
-
-// Simulation of some work: just sleep for a while and report how long.
-func op() int {
-	n := rand.Int63n(int64(time.Second))
-	time.Sleep(time.Duration(nWorker * n))
-	return int(n)
-}
-
-type Request struct {
-	fn func() int
-	c  chan int
-}
-
-func requester(work chan Request) {
-	c := make(chan int)
-	for {
-		time.Sleep(time.Duration(rand.Int63n(int64(nWorker * 2 * time.Second))))
-		work <- Request{op, c}
-		<-c
-	}
-}
-
-type Worker struct {
-	i        int
-	requests chan Request
-	pending  int
-}
-
-func (w *Worker) work(done chan *Worker) {
-	for {
-		req := <-w.requests
-		req.c <- req.fn()
-		done <- w
-	}
-}
-
-type Pool []*Worker
-
-func (p Pool) Len() int { return len(p) }
-
-func (p Pool) Less(i, j int) bool {
-	return p[i].pending < p[j].pending
-}
-
-func (p *Pool) Swap(i, j int) {
-	a := *p
-	a[i], a[j] = a[j], a[i]
-	a[i].i = i
-	a[j].i = j
-}
-
-func (p *Pool) Push(x interface{}) {
-	a := *p
-	n := len(a)
-	a = a[0 : n+1]
-	w := x.(*Worker)
-	a[n] = w
-	w.i = n
-	*p = a
-}
-
-func (p *Pool) Pop() interface{} {
-	a := *p
-	*p = a[0 : len(a)-1]
-	w := a[len(a)-1]
-	w.i = -1 // for safety
-	return w
-}
-
-type Balancer struct {
-	pool Pool
-	done chan *Worker
-	i    int
-}
-
-func NewBalancer() *Balancer {
-	done := make(chan *Worker, nWorker)
-	b := &Balancer{make(Pool, 0, nWorker), done, 0}
-	for i := 0; i < nWorker; i++ {
-		w := &Worker{requests: make(chan Request, nRequester)}
-		heap.Push(&b.pool, w)
-		go w.work(b.done)
-	}
-	return b
-}
-
-func (b *Balancer) balance(work chan Request) {
-	for {
-		select {
-		case req := <-work:
-			b.dispatch(req)
-		case w := <-b.done:
-			b.completed(w)
-		}
-		b.print()
-	}
-}
-
-func (b *Balancer) print() {
-	sum := 0
-	sumsq := 0
-	for _, w := range b.pool {
-		fmt.Printf("%d ", w.pending)
-		sum += w.pending
-		sumsq += w.pending * w.pending
-	}
-	avg := float64(sum) / float64(len(b.pool))
-	variance := float64(sumsq)/float64(len(b.pool)) - avg*avg
-	fmt.Printf(" %.2f %.2f\n", avg, variance)
-}
-
-func (b *Balancer) dispatch(req Request) {
-	if false {
-		w := b.pool[b.i]
-		w.requests <- req
-		w.pending++
-		b.i++
-		if b.i >= len(b.pool) {
-			b.i = 0
-		}
-		return
-	}
-
-	w := heap.Pop(&b.pool).(*Worker)
-	w.requests <- req
-	w.pending++
-	//	fmt.Printf("started %p; now %d\n", w, w.pending)
-	heap.Push(&b.pool, w)
-}
-
-func (b *Balancer) completed(w *Worker) {
-	if false {
-		w.pending--
-		return
-	}
-
-	w.pending--
-	//	fmt.Printf("finished %p; now %d\n", w, w.pending)
-	heap.Remove(&b.pool, w.i)
-	heap.Push(&b.pool, w)
-}
-
-func main() {
-	work := make(chan Request)
-	for i := 0; i < nRequester; i++ {
-		go requester(work)
-	}
-	NewBalancer().balance(work)
-}
diff --git a/content/2012/waza/gopherchart.jpg b/content/2012/waza/gopherchart.jpg
deleted file mode 100644
index 5465da8..0000000
--- a/content/2012/waza/gopherchart.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex0.jpg b/content/2012/waza/gophercomplex0.jpg
deleted file mode 100644
index 3ea0738..0000000
--- a/content/2012/waza/gophercomplex0.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex1.jpg b/content/2012/waza/gophercomplex1.jpg
deleted file mode 100644
index 5813956..0000000
--- a/content/2012/waza/gophercomplex1.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex2.jpg b/content/2012/waza/gophercomplex2.jpg
deleted file mode 100644
index 45d2314..0000000
--- a/content/2012/waza/gophercomplex2.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex3.jpg b/content/2012/waza/gophercomplex3.jpg
deleted file mode 100644
index 9cbf16d..0000000
--- a/content/2012/waza/gophercomplex3.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex4.jpg b/content/2012/waza/gophercomplex4.jpg
deleted file mode 100644
index d87123e..0000000
--- a/content/2012/waza/gophercomplex4.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex5.jpg b/content/2012/waza/gophercomplex5.jpg
deleted file mode 100644
index 35ce9f4..0000000
--- a/content/2012/waza/gophercomplex5.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophercomplex6.jpg b/content/2012/waza/gophercomplex6.jpg
deleted file mode 100644
index 7963c1b..0000000
--- a/content/2012/waza/gophercomplex6.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophersimple1.jpg b/content/2012/waza/gophersimple1.jpg
deleted file mode 100644
index 0663f6b..0000000
--- a/content/2012/waza/gophersimple1.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophersimple2.jpg b/content/2012/waza/gophersimple2.jpg
deleted file mode 100644
index d626b63..0000000
--- a/content/2012/waza/gophersimple2.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophersimple3.jpg b/content/2012/waza/gophersimple3.jpg
deleted file mode 100644
index ed10996..0000000
--- a/content/2012/waza/gophersimple3.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/gophersimple4.jpg b/content/2012/waza/gophersimple4.jpg
deleted file mode 100644
index bb7ddd7..0000000
--- a/content/2012/waza/gophersimple4.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2012/waza/load1 b/content/2012/waza/load1
deleted file mode 100644
index b5a265d..0000000
--- a/content/2012/waza/load1
+++ /dev/null
@@ -1,20 +0,0 @@
-type Work struct {
-    x, y, z int
-}
-
-func worker(in <-chan *Work, out chan<- *Work) {
-   for w := range in {
-      w.z = w.x * w.y
-      Sleep(w.z)
-      out <- w
-   }
-}
-
-func Run() {
-   in, out := make(chan *Work), make(chan *Work)
-   for i := 0; i < NumWorkers; i++ {
-       go worker(in, out)
-   }
-   go sendLotsOfWork(in)
-   receiveLotsOfResults(out)
-}
diff --git a/content/2012/waza/load2 b/content/2012/waza/load2
deleted file mode 100644
index 438a018..0000000
--- a/content/2012/waza/load2
+++ /dev/null
@@ -1,76 +0,0 @@
-type Request struct {
-    fn func() int  // The operation to perform.
-    c  chan int    // The channel to return the result.
-}
-
-func requester(work chan<- Request) {
-    c := make(chan int)
-    for {
-    	// Kill some time (fake load).
-        Sleep(rand.Int63n(nWorker * 2 * Second))
-        work <- Request{workFn, c} // send request
-        result := <-c              // wait for answer
-        furtherProcess(result)  
-	}	
-}
-
-func (w *Worker) work(done chan *Worker) {
-    for {
-        req := <-w.requests // get Request from balancer
-        req.c <- req.fn()   // call fn and send result
-        done <- w           // we've finished this request
-    }
-}
-
-type Pool []*Worker
-
-type Balancer struct {
-	pool Pool
-	done chan *Worker
-}
-
-func (b *Balancer) balance(work chan Request) {
-    for {
-        select {
-        case req := <-work: // received a Request...
-            b.dispatch(req) // ...so send it to a Worker
-        case w := <-b.done: // a worker has finished ...
-            b.completed(w)  // ...so update its info
-        }
-    }
-}
-func (p Pool) Less(i, j int) bool {
-    return p[i].pending < p[j].pending
-}
-
-type Worker struct {
-    requests chan Request // work to do (buffered channel)
-    pending  int          // count of pending tasks
-    index     int         // index in the heap
-}
-
-// Send Request to worker
-func (b *Balancer) dispatch(req Request) {
-	// Grab the least loaded worker...
-    w := heap.Pop(&b.pool).(*Worker)
-    // ...send it the task.
-    w.requests <- req
-    // One more in its work queue.
-    w.pending++
-    // Put it into its place on the heap.
-    heap.Push(&b.pool, w)
-}
-
-// Job is complete; update heap
-func (b *Balancer) completed(w *Worker) {
-	// One fewer in the queue.
-	w.pending--
-	// Remove it from heap.                  
-	heap.Remove(&b.pool, w.index)
-    // Put it into its place on the heap.
-	heap.Push(&b.pool, w)
-}
-
-func (p Pool) Less(i, j int) bool {
-   return p[i].pending < p[j].pending
-}
diff --git a/content/2012/waza/snippets b/content/2012/waza/snippets
deleted file mode 100644
index 6ac4e6a..0000000
--- a/content/2012/waza/snippets
+++ /dev/null
@@ -1,64 +0,0 @@
-f("hello", "world") // f runs; we wait
-
-go f("hello", "world") // f starts running
-g() // does not wait for f to return
-
-timerChan := make(chan time.Time)
-go func() {
-    time.Sleep(deltaT)
-    timerChan <- time.Now() // send time on timerChan
-}()
-// Do something else; when ready, receive.
-// Receive will block until timerChan delivers.
-// Value sent is other goroutine's completion time.
-completedAt := <-timerChan
-
-select {
-case v := <-ch1:
-    fmt.Println("channel 1 sends", v)
-case v := <-ch2:
-    fmt.Println("channel 2 sends", v)
-default: // optional
-    fmt.Println("neither channel was ready")
-}
-
-func Query(conns []Conn, query string) Result {
-    ch := make(chan Result, len(conns))  // buffered
-    for _, conn := range conns {
-        go func(c Conn) {
-            ch <- c.DoQuery(query):
-        }(conn)
-    }
-    return <-ch
-}
-
-func XQuery(conns []Conn, query string) Result {
-    ch := make(chan Result, 1)  // buffer of 1 item
-    for _, conn := range conns {
-      go func(c Conn) {
-        select {
-          case ch <- c.DoQuery(query):
-            // nothing to do
-          default: // executes if ch is blocked
-            // nothing to do
-        }
-      }(conn)
-    }
-    return <-ch
-}
-
-
-func Compose(f, g func(x float) float)
-                  func(x float) float {
-     return func(x float) float {
-        return f(g(x))
-    }
-}
-
-print(Compose(sin, cos)(0.5))
-
-go func() { // copy input to output
-	for val := range input {
-		output <- val
-	}
-}()
diff --git a/content/2012/zen.slide b/content/2012/zen.slide
deleted file mode 100644
index 65761e6..0000000
--- a/content/2012/zen.slide
+++ /dev/null
@@ -1,349 +0,0 @@
-Go and the Zen of Python
-
-Andrew Gerrand
-Gopher
-http://andrewgerrand.com/
-@enneff
-http://golang.org
-
-
-* What is Go?
-
-A new programming language. (First release in November 2009, 1.0 in March 2012.)
-
-In a nutshell:
-
-- A simple language that is easy to learn and read.
-- Statically typed, but with a dynamic feel.
-- Compiled to native machine code, but has a fast development cycle.
-- Language-level concurrency features.
-- Expansive "batteries included" standard library.
-- Great tools.
-- Open source. (BSD)
-
-
-* What is Go used for?
-
-Go is a general-purpose programming language, like Python, Java, or C.
-
-Some common uses:
-
-- Server daemons
-- Command-line tools
-- Web applications
-- Games
-- Scientific computing
-- High frequency trading
-
-And, of course, there are many more.
-
-Whatever you do, there's a good chance that Go can help you to do it.
-
-
-* Who uses Go?
-
-Some names that I could fit on one slide:
-
-- Anchor
-- BBC World News
-- Bitly
-- Canonical
-- Carbon Games
-- CloudFlare
-- Google
-- Heroku
-- Iron.io
-- ngmoco:)
-- SoundCloud
-
-
-* Go one-pagers (1/4)
-
-.play zen/hello.go
-
-* Go one-pagers (2/4)
-
-.play zen/http.go
-
-* Go one-pagers (3/4)
-
-.play zen/race.go
-
-* Go one-pagers (4/4)
-
-.code zen/jsonformat.go
-
-
-* Go and me
-
-I (adg) joined the Go team at Google in February 2010. 
-
-Before then, Python had been my day-to-day language for many years.
-
-Go has since entirely replaced Python in my life.
-
-I am obviously biased, but IMO: if you love Python, you'll love Go.
-
-
-* The Zen of Python
-
-  >>> import this
-  The Zen of Python, by Tim Peters
-  
-  Beautiful is better than ugly.
-  Explicit is better than implicit.
-  Simple is better than complex.
-  Complex is better than complicated.
-  Flat is better than nested.
-  Sparse is better than dense.
-  Readability counts.
-  Special cases aren't special enough to break the rules.
-  Although practicality beats purity.
-  Errors should never pass silently.
-  Unless explicitly silenced.
-  In the face of ambiguity, refuse the temptation to guess.
-  There should be one-- and preferably only one --obvious way to do it.
-  Although that way may not be obvious at first unless you're Dutch.
-  Now is better than never.
-  Although never is often better than *right* now.
-  If the implementation is hard to explain, it's a bad idea.
-  If the implementation is easy to explain, it may be a good idea.
-  Namespaces are one honking great idea -- let's do more of those!
-
-
-* Zen is good
-
-This is a nice list.
-
-I agree with most of it.
-
-(Although Python doesn't, sometimes.)
-
-
-* Go is Zenlike
-
-Go meets nearly all of Tim Peters' criteria.
-
-(Maybe not that one about being Dutch.)
-
-Let's take a look at some of them and see how Go fits in.
-
-
-* "Beautiful is better than ugly."
-
-Go has a lightweight, regular syntax reminiscent of C (without the warts).
-
-I think it's beautiful. I've certainly seen some beautiful Go code.
-
-But beauty, as they say, is in the eye of the beholder. So enough about that.
-
-
-* "Simple is better than complex." 
-
-Methods are just functions (no special location)
-
-There's no `this` or `self` - the receiver is like any other function argument
-
-  type Vector struct {
-    X, Y float64
-  }
-
-  func (v Vector) Abs() float64 {
-    return math.Sqrt(v.X*v.X + v.Y*v.Y)
-  }
-
-
-* "Simple is better than complex." 
-
-Methods can be declared on any named type (no classes)
-
-  type Scalar float64
-
-  func (s Scalar) Abs() float64 {
-    if s < 0 {
-      return float64(-s)
-    }
-    return float64(s)
-  }
-
-
-* "Simple is better than complex." 
-
-Interfaces are just methods (no data)
-
-Interfaces are implicit (no `implements` declaration)
-
-  type Abser interface {
-    Abs() float64
-  }
-
-(Both `Vector` and `Scalar` implement `Abser`,
-even though they don't know that `Abser` exists.)
-
-
-* "Simple is better than complex." 
-
-No constructors or destructors.
-
-A constructor is just a function:
-
-  type Database struct {
-    client *rpc.Client
-  }
-  
-  func NewDatabase(addr string) (*Database, error) {
-    client, err := rpc.Dial("tcp", addr)
-    if err != nil {
-      return nil, err
-    }
-    return &Database{client}, nil
-  }
-
-
-* "Simple is better than complex." 
-
-Identifier case sets visibility.
-
-If a name begins with a capital, it is visible outside its package:
-
-  package foo
-
-  type Foo struct { // exported type
-    bar int // unexported field
-  }
-  
-  func (f Foo) Bar() {} // exported method
-  
-  func (f Foo) quux() {} // unexported method
-
-Only code inside the package can see unexported ("private") names.
-
-
-* "Simple is better than complex." 
-
-- Garbage collection (only)
-- Regular scoping (and name shadowing) rules
-
-And there's less:
-
-- No subtype inheritance* (no subclasses)
-- No decorators*
-- No named or optional arguments
-- No iterators
-- No generators
-- No exceptions
-
-(*However, Go's "struct embedding" permits similar functionality.)
-
-
-* "Explicit is better than implicit."
-
-- Explicit error handling (no exceptions)
-- Explicit dependencies
-- No implicit numeric conversions
-- Structs define memory layout (no hidden costs)
-
-
-* "Flat is better than nested."
-
-"Bail early" is idiomatic coding style
-
-  func badStyle(a int) error {
-    b, err := one(a)
-    if err == nil {
-      c, err := two(b)
-      if err == nil {
-        err = three(c)
-      }
-    }
-    return err
-  }
-
-  func goodStyle(a int) error {
-    b, err := one(a)
-    if err != nil {
-      return err
-    }
-    c, err := two(b)
-    if err != nil {
-      return err
-    }
-    return three(c)
-  }
-
-
-* "Flat is better than nested."
-
-- Methods are not nested inside classes (no classes, remember?)
-- Package name space is flat
-- Multiple files that comprise one package share one name space
-
-
-* "Sparse is better than dense."
-
-Go's syntax doesn't encourage crazy one-liners.
-
-- No list comprehensions
-- No ternary operator (`expression?true:false`)
-
-When reading Go code the control flow is obvious.
-
-
-* "Practicality beats purity."
-
-Go has some built-in generic data structures:
-
-- maps (dicts)
-- slices (lists)
-- channels (a concurrency primitive like Python's queues)
-
-
-* "Readability counts."
-
-Go was designed for teams of hundreds/thousands of programmers.
-Readability is of paramount importance.
-
-- The `gofmt` tool enforces "one true style." (No more stupid arguments.)
-
-- Type inference saves a lot of typing, but not at the cost of readability. Types are still required where they help readability (function declarations, for example).
-
-- Many other language design decisions were made in the name of readability (case-based name visibility, for example).
-
-
-* Bonuses
-
-Go's concurrency features will transform the way you think about code:
-
-- blocking is fine; no need to split concurrent processes into a series of callbacks,
-- code runs in parallel with little additional cost (no GIL).
-
-Deployment is trivial:
-
-- compile and ship a single statically-linked binary,
-- goodbye "dependency hell."
-
-And there's much more than I could fit into this short talk. :-)
-
-
-* "There should be one obvious way to do it."
-
-I would argue that this is more true of Go than Python.
-
-
-* "Now is better than never."
-
-Learn Go today! It's easy.
-
-My rule of thumb:
-
-- productive in one day,
-- efficient in one week,
-- expert in one year.
-
-References, articles, tutorials, and more:
-
-.link http://golang.org
-
-An interactive web-based tour of Go:
-
-.link http://tour.golang.org
diff --git a/content/2012/zen/hello.go b/content/2012/zen/hello.go
deleted file mode 100644
index 04c77b1..0000000
--- a/content/2012/zen/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, Pythonistas!")
-}
diff --git a/content/2012/zen/http.go b/content/2012/zen/http.go
deleted file mode 100644
index f3b25f7..0000000
--- a/content/2012/zen/http.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-func main() {
-	http.HandleFunc("/", hello)
-	http.ListenAndServe("localhost:8000", nil)
-}
-
-func hello(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintln(w, "Hello, Pythonistas!")
-}
diff --git a/content/2012/zen/jsonformat.go b/content/2012/zen/jsonformat.go
deleted file mode 100644
index fdffcde..0000000
--- a/content/2012/zen/jsonformat.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import ( "encoding/json"; "fmt"; "io"; "os" )
-
-func main() {
-	d := json.NewDecoder(os.Stdin)
-	var err error
-	for err == nil {
-		var v interface{}
-		if err = d.Decode(&v); err != nil {
-			break
-		}
-		var b []byte
-		if b, err = json.MarshalIndent(v, "", "  "); err != nil {
-			break
-		}
-		_, err = os.Stdout.Write(b)
-	}
-	if err != io.EOF {
-		fmt.Fprintln(os.Stderr, err)
-		os.Exit(1)
-	}
-}
diff --git a/content/2012/zen/race.go b/content/2012/zen/race.go
deleted file mode 100644
index 99ba553..0000000
--- a/content/2012/zen/race.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import ( "fmt"; "net/http"; "time" )
-
-func main() {
-	urls := []string{"http://google.com/", "http://bing.com/"}
-	start := time.Now()
-	done := make(chan string)
-	for _, u := range urls {
-		go func(u string) {
-			resp, err := http.Get(u)
-			if err != nil {
-				done <- u + " " + err.Error()
-			} else {
-				done <- u + " " + resp.Status
-			}
-		}(u)
-	}
-	for _ = range urls {
-		fmt.Println(<-done, time.Since(start))
-	}
-}
diff --git a/content/2013/advconc.slide b/content/2013/advconc.slide
deleted file mode 100644
index cb7d127..0000000
--- a/content/2013/advconc.slide
+++ /dev/null
@@ -1,378 +0,0 @@
-Advanced Go Concurrency Patterns
-
-Sameer Ajmani
-Google
-http://profiles.google.com/ajmani
-@Sajma
-http://golang.org
-
-* Video
-
-This talk was presented at Google I/O in May 2013.
-
-.link https://www.youtube.com/watch?v=QDDwwePbDtw Watch the talk on YouTube
-
-* Get ready
-
-.image advconc/gopherswim.jpg 400 400
-
-* Go supports concurrency
-
-In the language and runtime, not a library.
-
-This changes how you structure your programs.
-
-* Goroutines and Channels
-
-Goroutines are independently executing functions in the same address space.
-
-   go f()
-   go g(1, 2)
-
-Channels are typed values that allow goroutines to synchronize and exchange information.
-
-  c := make(chan int)
-  go func() { c <- 3 }()
-  n := <-c
-
-For more on the basics, watch [[http://talks.golang.org/2012/concurrency.slide#1][Go Concurrency Patterns (Pike, 2012)]].
-
-* Example: ping-pong
-
-.play advconc/pingpong/pingpong.go /STARTMAIN1/,/STOPMAIN1/
-
-* Deadlock detection
-
-.play advconc/pingpongdeadlock/pingpongdeadlock.go /STARTMAIN1/,/STOPMAIN1/
-
-* Panic dumps the stacks
-
-.play advconc/pingpongpanic/pingpongpanic.go /STARTMAIN1/,/STOPMAIN1/
-
-* It's easy to go, but how to stop?
-
-Long-lived programs need to clean up.
-
-Let's look at how to write programs that handle communication, periodic events, and cancellation.
-
-The core is Go's `select` statement: like a `switch`, but the decision is made based on the ability to communicate.
-
-  select {
-  case xc <- x:
-      // sent x on xc
-  case y := <-yc:
-      // received y from yc
-  }
-
-* Example: feed reader
-
-My favorite feed reader disappeared.  I need a new one.
-
-Why not write one?
-
-Where do we start?
-
-* Find an RSS client
-
-Searching [[http://godoc.org][godoc.org]] for *"rss"* turns up several hits, including one that provides:
-
-  // Fetch fetches Items for uri and returns the time when the next
-  // fetch should be attempted.  On failure, Fetch returns an error.
-  func Fetch(uri string) (items []Item, next time.Time, err error)
-
-  type Item struct{
-      Title, Channel, GUID string // a subset of RSS fields
-  }
-
-But I want a stream:
-
-  <-chan Item
-
-And I want multiple subscriptions.
-
-* Here's what we have
-
-  type Fetcher interface {
-      Fetch() (items []Item, next time.Time, err error)
-  }
-
-  func Fetch(domain string) Fetcher {...} // fetches Items from domain
-
-* Here's what we want
-
-  type Subscription interface {
-      Updates() <-chan Item // stream of Items
-      Close() error         // shuts down the stream
-  }
-
-  func Subscribe(fetcher Fetcher) Subscription {...} // converts Fetches to a stream
-
-  func Merge(subs ...Subscription) Subscription {...} // merges several streams
-
-* Example
-
-.play advconc/fakemain/fakemain.go /func main/,/^}/
-
-* Subscribe
-
-`Subscribe` creates a new `Subscription` that repeatedly fetches items until `Close` is called.
-
-  func Subscribe(fetcher Fetcher) Subscription {
-      s := &sub{
-          fetcher: fetcher,
-          updates: make(chan Item), // for Updates
-      }
-      go s.loop()
-      return s
-  }
-
-  // sub implements the Subscription interface.
-  type sub struct {
-      fetcher Fetcher   // fetches items
-      updates chan Item // delivers items to the user
-  }
-
-  // loop fetches items using s.fetcher and sends them
-  // on s.updates.  loop exits when s.Close is called.
-  func (s *sub) loop() {...}
-
-* Implementing Subscription
-
-To implement the `Subscription` interface, define `Updates` and `Close`.
-
-.code advconc/fakemain/fakemain.go /func.* Updates/,/^}/
-
-  func (s *sub) Close() error {
-      // TODO: make loop exit
-      // TODO: find out about any error
-      return err
-  }
-
-* What does loop do?
-
-- periodically call `Fetch`
-- send fetched items on the `Updates` channel
-- exit when `Close` is called, reporting any error
-
-* Naive Implementation
-
-# Not quite enough room for this; retry after format change:
-# .play advconc/naivemain/naivemain.go /naiveSub\) loop/,/^}/
-# also on subsequent slides.
-
-.play advconc/naivemain/naivemain.go /STARTNAIVE /,/STOPNAIVE /
-.code advconc/naivemain/naivemain.go /naiveSub\) Close/,/^}/
-
-* Bug 1: unsynchronized access to s.closed/s.err
-
-.code advconc/naivemain/naivemain.go /STARTNAIVE /,/STOPNAIVE / HLsync
-.code advconc/naivemain/naivemain.go /naiveSub\) Close/,/^}/ HLsync
-
-* Race Detector
-
-  go run -race naivemain.go
-
-# original is 400x1500
-.image advconc/race.png 150 562
-.play advconc/naivemain/naivemain.go /STARTNAIVE /,/s.err/ HLsync
-.code advconc/naivemain/naivemain.go /naiveSub\) Close/,/^}/ HLsync
-
-* Bug 2: time.Sleep may keep loop running
-
-.code advconc/naivemain/naivemain.go /STARTNAIVE /,/STOPNAIVE / HLsleep
-
-* Bug 3: loop may block forever on s.updates
-
-.code advconc/naivemain/naivemain.go /STARTNAIVE /,/STOPNAIVE / HLsend
-
-* Solution
-
-Change the body of `loop` to a `select` with three cases:
-
-- `Close` was called
-- it's time to call `Fetch`
-- send an item on `s.updates`
-
-* Structure: for-select loop
-
-`loop` runs in its own goroutine.
-
-`select` lets `loop` avoid blocking indefinitely in any one state.
-
-  func (s *sub) loop() {
-      ... declare mutable state ...
-      for {
-          ... set up channels for cases ...
-          select {
-          case <-c1:
-              ... read/write state ...
-          case c2 <- x:
-              ... read/write state ...
-          case y := <-c3:
-              ... read/write state ...
-          }
-      }
-  }
-
-The cases interact via local state in `loop`.
-
-* Case 1: Close
-
-`Close` communicates with `loop` via `s.closing`.
-
-  type sub struct {
-      closing chan chan error
-  }
-
-The service (`loop`) listens for requests on its channel (`s.closing`).
-
-The client (`Close`) sends a request on `s.closing`: _exit_and_reply_with_the_error_
-
-In this case, the only thing in the request is the _reply_channel_.
-
-* Case 1: Close
-
-`Close` asks loop to exit and waits for a response.
-
-.code advconc/fakemain/fakemain.go /\*sub\) Close/,/^}/ HLchan
-
-`loop` handles `Close` by replying with the `Fetch` error and exiting.
-
-.code advconc/fakemain/fakemain.go /STARTCLOSEONLY /,/STOPCLOSEONLY / HLchan
-
-* Case 2: Fetch
-
-Schedule the next `Fetch` after some delay.
-
-.code advconc/fakemain/fakemain.go /STARTFETCHONLY /,/STOPFETCHONLY /
-
-* Case 3: Send
-
-Send the fetched items, one at a time.
-
-	var pending []Item // appended by fetch; consumed by send
-	for {
-		select {
-		case s.updates <- pending[0]:
-			pending = pending[1:]
-		}
-	}
-
-Whoops. This crashes.
-
-.image advconc/gopherswrench.jpg 200 337
-
-* Select and nil channels
-
-Sends and receives on nil channels block.
-
-Select never selects a blocking case.
-
-.play advconc/nilselect/nilselect.go /func main/,/^}/
-
-* Case 3: Send (fixed)
-
-Enable send only when pending is non-empty.
-
-.code advconc/fakemain/fakemain.go /STARTSENDONLY /,/STOPSENDONLY / HLupdates
-
-* Select
-
-Put the three cases together:
-
-.code advconc/fakemain/fakemain.go /STARTSELECT /,/STOPSELECT /
-
-The cases interact via `err`, `next`, and `pending`.
-
-No locks, no condition variables, no callbacks.
-
-* Bugs fixed
-
-- Bug 1: unsynchronized access to `s.closed` and `s.err`
-- Bug 2: `time.Sleep` may keep loop running
-- Bug 3: `loop` may block forever sending on `s.updates`
-
-.code advconc/fakemain/fakemain.go /STARTSELECT /,/STOPSELECT / HLcases
-
-* We can improve loop further
-
-* Issue: Fetch may return duplicates
-
-.code advconc/fakemain/fakemain.go /STARTFETCHVARS /,/STOPFETCHVARS / HLfetch
-.code advconc/fakemain/fakemain.go /STARTFETCHCASE /,/STOPFETCHCASE / HLfetch
-
-* Fix: Filter items before adding to pending
-
-.code advconc/fakemain/fakemain.go /STARTSEEN /,/STOPSEEN / HLseen
-.code advconc/fakemain/fakemain.go /STARTDEDUPE /,/STOPDEDUPE / HLdupe
-
-* Issue: Pending queue grows without bound
-
-.code advconc/fakemain/fakemain.go /STARTDEDUPE /,/STOPDEDUPE / HLdupe
-
-* Fix: Disable fetch case when too much pending
-
-  const maxPending = 10
-
-.code advconc/fakemain/fakemain.go /STARTCAP /,/STOPCAP / HLcap
-
-Could instead drop older items from the head of `pending`.
-
-* Issue: Loop blocks on Fetch
-
-.code advconc/fakemain/fakemain.go /STARTDEDUPE /,/STOPDEDUPE / HLfetch
-
-* Fix: Run Fetch asynchronously
-
-Add a new `select` case for `fetchDone`.
-
-  type fetchResult struct{ fetched []Item; next time.Time; err error }
-
-.code advconc/fakemain/fakemain.go /STARTFETCHDONE /,/STOPFETCHDONE / HLfetch
-.code advconc/fakemain/fakemain.go /STARTFETCHIF /,/STOPFETCHIF / HLfetch
-.code advconc/fakemain/fakemain.go /STARTFETCHASYNC /,/STOPFETCHASYNC / HLfetch
-
-* Implemented Subscribe
-
-Responsive. Cleans up. Easy to read and change.
-
-Three techniques:
-
-- `for-select` loop
-- service channel, reply channels (`chan`chan`error`)
-- `nil` channels in `select` cases
-
-More details online, including `Merge`.
-
-.image advconc/gopherhat.jpg 200 158
-
-* Conclusion
-
-Concurrent programming can be tricky.
-
-Go makes it easier:
-
-- channels convey data, timer events, cancellation signals
-- goroutines serialize access to local mutable state
-- stack traces & deadlock detector
-- race detector
-
-.image advconc/race.png 200 750
-
-* Links
-
-Go Concurrency Patterns (2012)
-
-.link http://talks.golang.org/2012/concurrency.slide
-
-Concurrency is not parallelism
-
-.link http://golang.org/s/concurrency-is-not-parallelism
-
-Share memory by communicating
-
-.link http://golang.org/doc/codewalk/sharemem
-
-Go Tour (learn Go in your browser)
-
-.link http://tour.golang.org
diff --git a/content/2013/advconc/buffer/buffer.go b/content/2013/advconc/buffer/buffer.go
deleted file mode 100644
index 9f6937c..0000000
--- a/content/2013/advconc/buffer/buffer.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-)
-
-func main() {
-	in, out := make(chan int), make(chan int)
-	go buffer(in, out)
-	for i := 0; i < 10; i++ {
-		in <- i
-	}
-	close(in)
-	for i := range out {
-		fmt.Println(i)
-	}
-}
-
-// buffer provides an unbounded buffer between in and out.  buffer
-// exits when in is closed and all items in the buffer have been sent
-// to out, at which point it closes out.
-func buffer(in <-chan int, out chan<- int) {
-	var buf []int
-	for in != nil || len(buf) > 0 {
-		var i int
-		var c chan<- int
-		if len(buf) > 0 {
-			i = buf[0]
-			c = out // enable send case
-		}
-		select {
-		case n, ok := <-in:
-			if ok {
-				buf = append(buf, n)
-			} else {
-				in = nil // disable receive case
-			}
-		case c <- i:
-			buf = buf[1:]
-		}
-	}
-	close(out)
-}
diff --git a/content/2013/advconc/dedupermain/dedupermain.go b/content/2013/advconc/dedupermain/dedupermain.go
deleted file mode 100644
index a426c15..0000000
--- a/content/2013/advconc/dedupermain/dedupermain.go
+++ /dev/null
@@ -1,551 +0,0 @@
-// +build ignore,OMIT
-
-// dedupermain runs the Subscribe example with several duplicate
-// subscriptions to demonstrate deduping.
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// STARTITEM OMIT
-// An Item is a stripped-down RSS item.
-type Item struct{ Title, Channel, GUID string }
-
-// STOPITEM OMIT
-
-// STARTFETCHER OMIT
-// A Fetcher fetches Items and returns the time when the next fetch should be
-// attempted.  On failure, Fetch returns a non-nil error.
-type Fetcher interface {
-	Fetch() (items []Item, next time.Time, err error)
-}
-
-// STOPFETCHER OMIT
-
-// STARTSUBSCRIPTION OMIT
-// A Subscription delivers Items over a channel.  Close cancels the
-// subscription, closes the Updates channel, and returns the last fetch error,
-// if any.
-type Subscription interface {
-	Updates() <-chan Item
-	Close() error
-}
-
-// STOPSUBSCRIPTION OMIT
-
-// STARTSUBSCRIBE OMIT
-// Subscribe returns a new Subscription that uses fetcher to fetch Items.
-func Subscribe(fetcher Fetcher) Subscription {
-	s := &sub{
-		fetcher: fetcher,
-		updates: make(chan Item),       // for Updates
-		closing: make(chan chan error), // for Close
-	}
-	go s.loop()
-	return s
-}
-
-// STOPSUBSCRIBE OMIT
-
-// sub implements the Subscription interface.
-type sub struct {
-	fetcher Fetcher         // fetches items
-	updates chan Item       // sends items to the user
-	closing chan chan error // for Close
-}
-
-// STARTUPDATES OMIT
-func (s *sub) Updates() <-chan Item {
-	return s.updates
-}
-
-// STOPUPDATES OMIT
-
-// STARTCLOSE OMIT
-// STARTCLOSESIG OMIT
-func (s *sub) Close() error {
-	// STOPCLOSESIG OMIT
-	errc := make(chan error)
-	s.closing <- errc // HLchan
-	return <-errc     // HLchan
-}
-
-// STOPCLOSE OMIT
-
-// loopCloseOnly is a version of loop that includes only the logic
-// that handles Close.
-func (s *sub) loopCloseOnly() {
-	// STARTCLOSEONLY OMIT
-	var err error // set when Fetch fails
-	for {
-		select {
-		case errc := <-s.closing: // HLchan
-			errc <- err      // HLchan
-			close(s.updates) // tells receiver we're done
-			return
-		}
-	}
-	// STOPCLOSEONLY OMIT
-}
-
-// loopFetchOnly is a version of loop that includes only the logic
-// that calls Fetch.
-func (s *sub) loopFetchOnly() {
-	// STARTFETCHONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	var next time.Time // initially January 1, year 0
-	var err error
-	for {
-		var fetchDelay time.Duration // initally 0 (no delay)
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-
-		select {
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch()
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...)
-		}
-	}
-	// STOPFETCHONLY OMIT
-}
-
-// loopSendOnly is a version of loop that includes only the logic for
-// sending items to s.updates.
-func (s *sub) loopSendOnly() {
-	// STARTSENDONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	for {
-		var first Item
-		var updates chan Item // HLupdates
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case // HLupdates
-		}
-
-		select {
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-	// STOPSENDONLY OMIT
-}
-
-// mergedLoop is a version of loop that combines loopCloseOnly,
-// loopFetchOnly, and loopSendOnly.
-func (s *sub) mergedLoop() {
-	// STARTFETCHVARS OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	// STOPFETCHVARS OMIT
-	for {
-		// STARTNOCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-		// STOPNOCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-
-		// STARTSELECT OMIT
-		select {
-		case errc := <-s.closing: // HLcases
-			errc <- err
-			close(s.updates)
-			return
-			// STARTFETCHCASE OMIT
-		case <-startFetch: // HLcases
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...) // HLfetch
-			// STOPFETCHCASE OMIT
-		case updates <- first: // HLcases
-			pending = pending[1:]
-		}
-		// STOPSELECT OMIT
-	}
-}
-
-// dedupeLoop extends mergedLoop with deduping of fetched items.
-func (s *sub) dedupeLoop() {
-	const maxPending = 10
-	// STARTSEEN OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool) // set of item.GUIDs // HLseen
-	// STOPSEEN OMIT
-	for {
-		// STARTCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		var startFetch <-chan time.Time // HLcap
-		if len(pending) < maxPending {  // HLcap
-			startFetch = time.After(fetchDelay) // enable fetch case  // HLcap
-		} // HLcap
-		// STOPCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		select {
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		// STARTDEDUPE OMIT
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if !seen[item.GUID] { // HLdupe
-					pending = append(pending, item) // HLdupe
-					seen[item.GUID] = true          // HLdupe
-				} // HLdupe
-			}
-			// STOPDEDUPE OMIT
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// loop periodically fecthes Items, sends them on s.updates, and exits
-// when Close is called.  It extends dedupeLoop with logic to run
-// Fetch asynchronously.
-func (s *sub) loop() {
-	const maxPending = 10
-	type fetchResult struct {
-		fetched []Item
-		next    time.Time
-		err     error
-	}
-	// STARTFETCHDONE OMIT
-	var fetchDone chan fetchResult // if non-nil, Fetch is running // HL
-	// STOPFETCHDONE OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool)
-	for {
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		// STARTFETCHIF OMIT
-		var startFetch <-chan time.Time
-		if fetchDone == nil && len(pending) < maxPending { // HLfetch
-			startFetch = time.After(fetchDelay) // enable fetch case
-		}
-		// STOPFETCHIF OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		// STARTFETCHASYNC OMIT
-		select {
-		case <-startFetch: // HLfetch
-			fetchDone = make(chan fetchResult, 1) // HLfetch
-			go func() {
-				fetched, next, err := s.fetcher.Fetch()
-				fetchDone <- fetchResult{fetched, next, err}
-			}()
-		case result := <-fetchDone: // HLfetch
-			fetchDone = nil // HLfetch
-			// Use result.fetched, result.next, result.err
-			// STOPFETCHASYNC OMIT
-			fetched := result.fetched
-			next, err = result.next, result.err
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if id := item.GUID; !seen[id] { // HLdupe
-					pending = append(pending, item)
-					seen[id] = true // HLdupe
-				}
-			}
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// naiveMerge is a version of Merge that doesn't quite work right.  In
-// particular, the goroutines it starts may block forever on m.updates
-// if the receiver stops receiving.
-type naiveMerge struct {
-	subs    []Subscription
-	updates chan Item
-}
-
-// STARTNAIVEMERGE OMIT
-func NaiveMerge(subs ...Subscription) Subscription {
-	m := &naiveMerge{
-		subs:    subs,
-		updates: make(chan Item),
-	}
-	// STARTNAIVEMERGELOOP OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for it := range s.Updates() {
-				m.updates <- it // HL
-			}
-		}(sub)
-	}
-	// STOPNAIVEMERGELOOP OMIT
-	return m
-}
-
-// STOPNAIVEMERGE OMIT
-
-// STARTNAIVEMERGECLOSE OMIT
-func (m *naiveMerge) Close() (err error) {
-	for _, sub := range m.subs {
-		if e := sub.Close(); err == nil && e != nil {
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPNAIVEMERGECLOSE OMIT
-
-func (m *naiveMerge) Updates() <-chan Item {
-	return m.updates
-}
-
-type merge struct {
-	subs    []Subscription
-	updates chan Item
-	quit    chan struct{}
-	errs    chan error
-}
-
-// STARTMERGESIG OMIT
-// Merge returns a Subscription that merges the item streams from subs.
-// Closing the merged subscription closes subs.
-func Merge(subs ...Subscription) Subscription {
-	// STOPMERGESIG OMIT
-	m := &merge{
-		subs:    subs,
-		updates: make(chan Item),
-		quit:    make(chan struct{}),
-		errs:    make(chan error),
-	}
-	// STARTMERGE OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for {
-				var it Item
-				select {
-				case it = <-s.Updates():
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-				select {
-				case m.updates <- it:
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-			}
-		}(sub)
-	}
-	// STOPMERGE OMIT
-	return m
-}
-
-func (m *merge) Updates() <-chan Item {
-	return m.updates
-}
-
-// STARTMERGECLOSE OMIT
-func (m *merge) Close() (err error) {
-	close(m.quit) // HL
-	for _ = range m.subs {
-		if e := <-m.errs; e != nil { // HL
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPMERGECLOSE OMIT
-
-// NaiveDedupe converts a stream of Items that may contain duplicates
-// into one that doesn't.
-func NaiveDedupe(in <-chan Item) <-chan Item {
-	out := make(chan Item)
-	go func() {
-		seen := make(map[string]bool)
-		for it := range in {
-			if !seen[it.GUID] {
-				// BUG: this send blocks if the
-				// receiver closes the Subscription
-				// and stops receiving.
-				out <- it // HL
-				seen[it.GUID] = true
-			}
-		}
-		close(out)
-	}()
-	return out
-}
-
-type deduper struct {
-	s       Subscription
-	updates chan Item
-	closing chan chan error
-}
-
-// Dedupe converts a Subscription that may send duplicate Items into
-// one that doesn't.
-func Dedupe(s Subscription) Subscription {
-	d := &deduper{
-		s:       s,
-		updates: make(chan Item),
-		closing: make(chan chan error),
-	}
-	go d.loop()
-	return d
-}
-
-func (d *deduper) loop() {
-	in := d.s.Updates() // enable receive
-	var pending Item
-	var out chan Item // disable send
-	seen := make(map[string]bool)
-	for {
-		select {
-		case it := <-in:
-			if !seen[it.GUID] {
-				pending = it
-				in = nil        // disable receive
-				out = d.updates // enable send
-				seen[it.GUID] = true
-			}
-		case out <- pending:
-			in = d.s.Updates() // enable receive
-			out = nil          // disable send
-		case errc := <-d.closing:
-			err := d.s.Close()
-			errc <- err
-			close(d.updates)
-			return
-		}
-	}
-}
-
-func (d *deduper) Close() error {
-	errc := make(chan error)
-	d.closing <- errc
-	return <-errc
-}
-
-func (d *deduper) Updates() <-chan Item {
-	return d.updates
-}
-
-// Fetch returns a Fetcher for Items from domain.
-func Fetch(domain string) Fetcher {
-	return fakeFetch(domain)
-}
-
-func fakeFetch(domain string) Fetcher {
-	return &fakeFetcher{channel: domain}
-}
-
-type fakeFetcher struct {
-	channel string
-	items   []Item
-}
-
-// FakeDuplicates causes the fake fetcher to return duplicate items.
-var FakeDuplicates bool
-
-func (f *fakeFetcher) Fetch() (items []Item, next time.Time, err error) {
-	now := time.Now()
-	next = now.Add(time.Duration(rand.Intn(5)) * 500 * time.Millisecond)
-	item := Item{
-		Channel: f.channel,
-		Title:   fmt.Sprintf("Item %d", len(f.items)),
-	}
-	item.GUID = item.Channel + "/" + item.Title
-	f.items = append(f.items, item)
-	if FakeDuplicates {
-		items = f.items
-	} else {
-		items = []Item{item}
-	}
-	return
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-// STARTMAIN OMIT
-func main() {
-	// STARTMERGECALL OMIT
-	// Subscribe to some feeds, and create a merged update stream.
-	merged := Dedupe(Merge(
-		Subscribe(Fetch("blog.golang.org")),
-		Subscribe(Fetch("blog.golang.org")),
-		Subscribe(Fetch("blog.golang.org")),
-		Subscribe(Fetch("googleblog.blogspot.com")),
-		Subscribe(Fetch("googledevelopers.blogspot.com"))))
-	// STOPMERGECALL OMIT
-
-	// Close the subscriptions after some time.
-	time.AfterFunc(3*time.Second, func() {
-		fmt.Println("closed:", merged.Close())
-	})
-
-	// Print the stream.
-	for it := range merged.Updates() {
-		fmt.Println(it.Channel, it.Title)
-	}
-
-	panic("show me the stacks")
-}
-
-// STOPMAIN OMIT
diff --git a/content/2013/advconc/fakemain/fakemain.go b/content/2013/advconc/fakemain/fakemain.go
deleted file mode 100644
index 049a71d..0000000
--- a/content/2013/advconc/fakemain/fakemain.go
+++ /dev/null
@@ -1,548 +0,0 @@
-// +build ignore,OMIT
-
-// fakemain runs the Subscribe example with a fake RSS fetcher.
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// STARTITEM OMIT
-// An Item is a stripped-down RSS item.
-type Item struct{ Title, Channel, GUID string }
-
-// STOPITEM OMIT
-
-// STARTFETCHER OMIT
-// A Fetcher fetches Items and returns the time when the next fetch should be
-// attempted.  On failure, Fetch returns a non-nil error.
-type Fetcher interface {
-	Fetch() (items []Item, next time.Time, err error)
-}
-
-// STOPFETCHER OMIT
-
-// STARTSUBSCRIPTION OMIT
-// A Subscription delivers Items over a channel.  Close cancels the
-// subscription, closes the Updates channel, and returns the last fetch error,
-// if any.
-type Subscription interface {
-	Updates() <-chan Item
-	Close() error
-}
-
-// STOPSUBSCRIPTION OMIT
-
-// STARTSUBSCRIBE OMIT
-// Subscribe returns a new Subscription that uses fetcher to fetch Items.
-func Subscribe(fetcher Fetcher) Subscription {
-	s := &sub{
-		fetcher: fetcher,
-		updates: make(chan Item),       // for Updates
-		closing: make(chan chan error), // for Close
-	}
-	go s.loop()
-	return s
-}
-
-// STOPSUBSCRIBE OMIT
-
-// sub implements the Subscription interface.
-type sub struct {
-	fetcher Fetcher         // fetches items
-	updates chan Item       // sends items to the user
-	closing chan chan error // for Close
-}
-
-// STARTUPDATES OMIT
-func (s *sub) Updates() <-chan Item {
-	return s.updates
-}
-
-// STOPUPDATES OMIT
-
-// STARTCLOSE OMIT
-// STARTCLOSESIG OMIT
-func (s *sub) Close() error {
-	// STOPCLOSESIG OMIT
-	errc := make(chan error)
-	s.closing <- errc // HLchan
-	return <-errc     // HLchan
-}
-
-// STOPCLOSE OMIT
-
-// loopCloseOnly is a version of loop that includes only the logic
-// that handles Close.
-func (s *sub) loopCloseOnly() {
-	// STARTCLOSEONLY OMIT
-	var err error // set when Fetch fails
-	for {
-		select {
-		case errc := <-s.closing: // HLchan
-			errc <- err      // HLchan
-			close(s.updates) // tells receiver we're done
-			return
-		}
-	}
-	// STOPCLOSEONLY OMIT
-}
-
-// loopFetchOnly is a version of loop that includes only the logic
-// that calls Fetch.
-func (s *sub) loopFetchOnly() {
-	// STARTFETCHONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	var next time.Time // initially January 1, year 0
-	var err error
-	for {
-		var fetchDelay time.Duration // initally 0 (no delay)
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-
-		select {
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch()
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...)
-		}
-	}
-	// STOPFETCHONLY OMIT
-}
-
-// loopSendOnly is a version of loop that includes only the logic for
-// sending items to s.updates.
-func (s *sub) loopSendOnly() {
-	// STARTSENDONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	for {
-		var first Item
-		var updates chan Item // HLupdates
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case // HLupdates
-		}
-
-		select {
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-	// STOPSENDONLY OMIT
-}
-
-// mergedLoop is a version of loop that combines loopCloseOnly,
-// loopFetchOnly, and loopSendOnly.
-func (s *sub) mergedLoop() {
-	// STARTFETCHVARS OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	// STOPFETCHVARS OMIT
-	for {
-		// STARTNOCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-		// STOPNOCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-
-		// STARTSELECT OMIT
-		select {
-		case errc := <-s.closing: // HLcases
-			errc <- err
-			close(s.updates)
-			return
-			// STARTFETCHCASE OMIT
-		case <-startFetch: // HLcases
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...) // HLfetch
-			// STOPFETCHCASE OMIT
-		case updates <- first: // HLcases
-			pending = pending[1:]
-		}
-		// STOPSELECT OMIT
-	}
-}
-
-// dedupeLoop extends mergedLoop with deduping of fetched items.
-func (s *sub) dedupeLoop() {
-	const maxPending = 10
-	// STARTSEEN OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool) // set of item.GUIDs // HLseen
-	// STOPSEEN OMIT
-	for {
-		// STARTCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		var startFetch <-chan time.Time // HLcap
-		if len(pending) < maxPending {  // HLcap
-			startFetch = time.After(fetchDelay) // enable fetch case  // HLcap
-		} // HLcap
-		// STOPCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		select {
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		// STARTDEDUPE OMIT
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if !seen[item.GUID] { // HLdupe
-					pending = append(pending, item) // HLdupe
-					seen[item.GUID] = true          // HLdupe
-				} // HLdupe
-			}
-			// STOPDEDUPE OMIT
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// loop periodically fecthes Items, sends them on s.updates, and exits
-// when Close is called.  It extends dedupeLoop with logic to run
-// Fetch asynchronously.
-func (s *sub) loop() {
-	const maxPending = 10
-	type fetchResult struct {
-		fetched []Item
-		next    time.Time
-		err     error
-	}
-	// STARTFETCHDONE OMIT
-	var fetchDone chan fetchResult // if non-nil, Fetch is running // HL
-	// STOPFETCHDONE OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool)
-	for {
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		// STARTFETCHIF OMIT
-		var startFetch <-chan time.Time
-		if fetchDone == nil && len(pending) < maxPending { // HLfetch
-			startFetch = time.After(fetchDelay) // enable fetch case
-		}
-		// STOPFETCHIF OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		// STARTFETCHASYNC OMIT
-		select {
-		case <-startFetch: // HLfetch
-			fetchDone = make(chan fetchResult, 1) // HLfetch
-			go func() {
-				fetched, next, err := s.fetcher.Fetch()
-				fetchDone <- fetchResult{fetched, next, err}
-			}()
-		case result := <-fetchDone: // HLfetch
-			fetchDone = nil // HLfetch
-			// Use result.fetched, result.next, result.err
-			// STOPFETCHASYNC OMIT
-			fetched := result.fetched
-			next, err = result.next, result.err
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if id := item.GUID; !seen[id] { // HLdupe
-					pending = append(pending, item)
-					seen[id] = true // HLdupe
-				}
-			}
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// naiveMerge is a version of Merge that doesn't quite work right.  In
-// particular, the goroutines it starts may block forever on m.updates
-// if the receiver stops receiving.
-type naiveMerge struct {
-	subs    []Subscription
-	updates chan Item
-}
-
-// STARTNAIVEMERGE OMIT
-func NaiveMerge(subs ...Subscription) Subscription {
-	m := &naiveMerge{
-		subs:    subs,
-		updates: make(chan Item),
-	}
-	// STARTNAIVEMERGELOOP OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for it := range s.Updates() {
-				m.updates <- it // HL
-			}
-		}(sub)
-	}
-	// STOPNAIVEMERGELOOP OMIT
-	return m
-}
-
-// STOPNAIVEMERGE OMIT
-
-// STARTNAIVEMERGECLOSE OMIT
-func (m *naiveMerge) Close() (err error) {
-	for _, sub := range m.subs {
-		if e := sub.Close(); err == nil && e != nil {
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPNAIVEMERGECLOSE OMIT
-
-func (m *naiveMerge) Updates() <-chan Item {
-	return m.updates
-}
-
-type merge struct {
-	subs    []Subscription
-	updates chan Item
-	quit    chan struct{}
-	errs    chan error
-}
-
-// STARTMERGESIG OMIT
-// Merge returns a Subscription that merges the item streams from subs.
-// Closing the merged subscription closes subs.
-func Merge(subs ...Subscription) Subscription {
-	// STOPMERGESIG OMIT
-	m := &merge{
-		subs:    subs,
-		updates: make(chan Item),
-		quit:    make(chan struct{}),
-		errs:    make(chan error),
-	}
-	// STARTMERGE OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for {
-				var it Item
-				select {
-				case it = <-s.Updates():
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-				select {
-				case m.updates <- it:
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-			}
-		}(sub)
-	}
-	// STOPMERGE OMIT
-	return m
-}
-
-func (m *merge) Updates() <-chan Item {
-	return m.updates
-}
-
-// STARTMERGECLOSE OMIT
-func (m *merge) Close() (err error) {
-	close(m.quit) // HL
-	for _ = range m.subs {
-		if e := <-m.errs; e != nil { // HL
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPMERGECLOSE OMIT
-
-// NaiveDedupe converts a stream of Items that may contain duplicates
-// into one that doesn't.
-func NaiveDedupe(in <-chan Item) <-chan Item {
-	out := make(chan Item)
-	go func() {
-		seen := make(map[string]bool)
-		for it := range in {
-			if !seen[it.GUID] {
-				// BUG: this send blocks if the
-				// receiver closes the Subscription
-				// and stops receiving.
-				out <- it // HL
-				seen[it.GUID] = true
-			}
-		}
-		close(out)
-	}()
-	return out
-}
-
-type deduper struct {
-	s       Subscription
-	updates chan Item
-	closing chan chan error
-}
-
-// Dedupe converts a Subscription that may send duplicate Items into
-// one that doesn't.
-func Dedupe(s Subscription) Subscription {
-	d := &deduper{
-		s:       s,
-		updates: make(chan Item),
-		closing: make(chan chan error),
-	}
-	go d.loop()
-	return d
-}
-
-func (d *deduper) loop() {
-	in := d.s.Updates() // enable receive
-	var pending Item
-	var out chan Item // disable send
-	seen := make(map[string]bool)
-	for {
-		select {
-		case it := <-in:
-			if !seen[it.GUID] {
-				pending = it
-				in = nil        // disable receive
-				out = d.updates // enable send
-				seen[it.GUID] = true
-			}
-		case out <- pending:
-			in = d.s.Updates() // enable receive
-			out = nil          // disable send
-		case errc := <-d.closing:
-			err := d.s.Close()
-			errc <- err
-			close(d.updates)
-			return
-		}
-	}
-}
-
-func (d *deduper) Close() error {
-	errc := make(chan error)
-	d.closing <- errc
-	return <-errc
-}
-
-func (d *deduper) Updates() <-chan Item {
-	return d.updates
-}
-
-// Fetch returns a Fetcher for Items from domain.
-func Fetch(domain string) Fetcher {
-	return fakeFetch(domain)
-}
-
-func fakeFetch(domain string) Fetcher {
-	return &fakeFetcher{channel: domain}
-}
-
-type fakeFetcher struct {
-	channel string
-	items   []Item
-}
-
-// FakeDuplicates causes the fake fetcher to return duplicate items.
-var FakeDuplicates bool
-
-func (f *fakeFetcher) Fetch() (items []Item, next time.Time, err error) {
-	now := time.Now()
-	next = now.Add(time.Duration(rand.Intn(5)) * 500 * time.Millisecond)
-	item := Item{
-		Channel: f.channel,
-		Title:   fmt.Sprintf("Item %d", len(f.items)),
-	}
-	item.GUID = item.Channel + "/" + item.Title
-	f.items = append(f.items, item)
-	if FakeDuplicates {
-		items = f.items
-	} else {
-		items = []Item{item}
-	}
-	return
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-// STARTMAIN OMIT
-func main() {
-	// STARTMERGECALL OMIT
-	// Subscribe to some feeds, and create a merged update stream.
-	merged := Merge(
-		Subscribe(Fetch("blog.golang.org")),
-		Subscribe(Fetch("googleblog.blogspot.com")),
-		Subscribe(Fetch("googledevelopers.blogspot.com")))
-	// STOPMERGECALL OMIT
-
-	// Close the subscriptions after some time.
-	time.AfterFunc(3*time.Second, func() {
-		fmt.Println("closed:", merged.Close())
-	})
-
-	// Print the stream.
-	for it := range merged.Updates() {
-		fmt.Println(it.Channel, it.Title)
-	}
-
-	panic("show me the stacks")
-}
-
-// STOPMAIN OMIT
diff --git a/content/2013/advconc/gopherhat.jpg b/content/2013/advconc/gopherhat.jpg
deleted file mode 100644
index f34d7b3..0000000
--- a/content/2013/advconc/gopherhat.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/advconc/gopherrunning.jpg b/content/2013/advconc/gopherrunning.jpg
deleted file mode 100644
index eeeddf1..0000000
--- a/content/2013/advconc/gopherrunning.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/advconc/gopherswim.jpg b/content/2013/advconc/gopherswim.jpg
deleted file mode 100644
index 2f32877..0000000
--- a/content/2013/advconc/gopherswim.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/advconc/gopherswrench.jpg b/content/2013/advconc/gopherswrench.jpg
deleted file mode 100644
index 93005f4..0000000
--- a/content/2013/advconc/gopherswrench.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/advconc/naivemain/naivemain.go b/content/2013/advconc/naivemain/naivemain.go
deleted file mode 100644
index ec3c5ad..0000000
--- a/content/2013/advconc/naivemain/naivemain.go
+++ /dev/null
@@ -1,595 +0,0 @@
-// naivemain runs the Subscribe example with the naive Subscribe
-// implementation and a fake RSS fetcher.
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// STARTITEM OMIT
-// An Item is a stripped-down RSS item.
-type Item struct{ Title, Channel, GUID string }
-
-// STOPITEM OMIT
-
-// STARTFETCHER OMIT
-// A Fetcher fetches Items and returns the time when the next fetch should be
-// attempted.  On failure, Fetch returns a non-nil error.
-type Fetcher interface {
-	Fetch() (items []Item, next time.Time, err error)
-}
-
-// STOPFETCHER OMIT
-
-// STARTSUBSCRIPTION OMIT
-// A Subscription delivers Items over a channel.  Close cancels the
-// subscription, closes the Updates channel, and returns the last fetch error,
-// if any.
-type Subscription interface {
-	Updates() <-chan Item
-	Close() error
-}
-
-// STOPSUBSCRIPTION OMIT
-
-// STARTSUBSCRIBE OMIT
-// Subscribe returns a new Subscription that uses fetcher to fetch Items.
-func Subscribe(fetcher Fetcher) Subscription {
-	s := &sub{
-		fetcher: fetcher,
-		updates: make(chan Item),       // for Updates
-		closing: make(chan chan error), // for Close
-	}
-	go s.loop()
-	return s
-}
-
-// STOPSUBSCRIBE OMIT
-
-// sub implements the Subscription interface.
-type sub struct {
-	fetcher Fetcher         // fetches items
-	updates chan Item       // sends items to the user
-	closing chan chan error // for Close
-}
-
-// STARTUPDATES OMIT
-func (s *sub) Updates() <-chan Item {
-	return s.updates
-}
-
-// STOPUPDATES OMIT
-
-// STARTCLOSE OMIT
-// STARTCLOSESIG OMIT
-func (s *sub) Close() error {
-	// STOPCLOSESIG OMIT
-	errc := make(chan error)
-	s.closing <- errc // HLchan
-	return <-errc     // HLchan
-}
-
-// STOPCLOSE OMIT
-
-// loopCloseOnly is a version of loop that includes only the logic
-// that handles Close.
-func (s *sub) loopCloseOnly() {
-	// STARTCLOSEONLY OMIT
-	var err error // set when Fetch fails
-	for {
-		select {
-		case errc := <-s.closing: // HLchan
-			errc <- err      // HLchan
-			close(s.updates) // tells receiver we're done
-			return
-		}
-	}
-	// STOPCLOSEONLY OMIT
-}
-
-// loopFetchOnly is a version of loop that includes only the logic
-// that calls Fetch.
-func (s *sub) loopFetchOnly() {
-	// STARTFETCHONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	var next time.Time // initially January 1, year 0
-	var err error
-	for {
-		var fetchDelay time.Duration // initally 0 (no delay)
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-
-		select {
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch()
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...)
-		}
-	}
-	// STOPFETCHONLY OMIT
-}
-
-// loopSendOnly is a version of loop that includes only the logic for
-// sending items to s.updates.
-func (s *sub) loopSendOnly() {
-	// STARTSENDONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	for {
-		var first Item
-		var updates chan Item // HLupdates
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case // HLupdates
-		}
-
-		select {
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-	// STOPSENDONLY OMIT
-}
-
-// mergedLoop is a version of loop that combines loopCloseOnly,
-// loopFetchOnly, and loopSendOnly.
-func (s *sub) mergedLoop() {
-	// STARTFETCHVARS OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	// STOPFETCHVARS OMIT
-	for {
-		// STARTNOCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-		// STOPNOCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-
-		// STARTSELECT OMIT
-		select {
-		case errc := <-s.closing: // HLcases
-			errc <- err
-			close(s.updates)
-			return
-			// STARTFETCHCASE OMIT
-		case <-startFetch: // HLcases
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...) // HLfetch
-			// STOPFETCHCASE OMIT
-		case updates <- first: // HLcases
-			pending = pending[1:]
-		}
-		// STOPSELECT OMIT
-	}
-}
-
-// dedupeLoop extends mergedLoop with deduping of fetched items.
-func (s *sub) dedupeLoop() {
-	const maxPending = 10
-	// STARTSEEN OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool) // set of item.GUIDs // HLseen
-	// STOPSEEN OMIT
-	for {
-		// STARTCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		var startFetch <-chan time.Time // HLcap
-		if len(pending) < maxPending {  // HLcap
-			startFetch = time.After(fetchDelay) // enable fetch case  // HLcap
-		} // HLcap
-		// STOPCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		select {
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		// STARTDEDUPE OMIT
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if !seen[item.GUID] { // HLdupe
-					pending = append(pending, item) // HLdupe
-					seen[item.GUID] = true          // HLdupe
-				} // HLdupe
-			}
-			// STOPDEDUPE OMIT
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// loop periodically fecthes Items, sends them on s.updates, and exits
-// when Close is called.  It extends dedupeLoop with logic to run
-// Fetch asynchronously.
-func (s *sub) loop() {
-	const maxPending = 10
-	type fetchResult struct {
-		fetched []Item
-		next    time.Time
-		err     error
-	}
-	// STARTFETCHDONE OMIT
-	var fetchDone chan fetchResult // if non-nil, Fetch is running // HL
-	// STOPFETCHDONE OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool)
-	for {
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		// STARTFETCHIF OMIT
-		var startFetch <-chan time.Time
-		if fetchDone == nil && len(pending) < maxPending { // HLfetch
-			startFetch = time.After(fetchDelay) // enable fetch case
-		}
-		// STOPFETCHIF OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		// STARTFETCHASYNC OMIT
-		select {
-		case <-startFetch: // HLfetch
-			fetchDone = make(chan fetchResult, 1) // HLfetch
-			go func() {
-				fetched, next, err := s.fetcher.Fetch()
-				fetchDone <- fetchResult{fetched, next, err}
-			}()
-		case result := <-fetchDone: // HLfetch
-			fetchDone = nil // HLfetch
-			// Use result.fetched, result.next, result.err
-			// STOPFETCHASYNC OMIT
-			fetched := result.fetched
-			next, err = result.next, result.err
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if id := item.GUID; !seen[id] { // HLdupe
-					pending = append(pending, item)
-					seen[id] = true // HLdupe
-				}
-			}
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// naiveMerge is a version of Merge that doesn't quite work right.  In
-// particular, the goroutines it starts may block forever on m.updates
-// if the receiver stops receiving.
-type naiveMerge struct {
-	subs    []Subscription
-	updates chan Item
-}
-
-// STARTNAIVEMERGE OMIT
-func NaiveMerge(subs ...Subscription) Subscription {
-	m := &naiveMerge{
-		subs:    subs,
-		updates: make(chan Item),
-	}
-	// STARTNAIVEMERGELOOP OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for it := range s.Updates() {
-				m.updates <- it // HL
-			}
-		}(sub)
-	}
-	// STOPNAIVEMERGELOOP OMIT
-	return m
-}
-
-// STOPNAIVEMERGE OMIT
-
-// STARTNAIVEMERGECLOSE OMIT
-func (m *naiveMerge) Close() (err error) {
-	for _, sub := range m.subs {
-		if e := sub.Close(); err == nil && e != nil {
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPNAIVEMERGECLOSE OMIT
-
-func (m *naiveMerge) Updates() <-chan Item {
-	return m.updates
-}
-
-type merge struct {
-	subs    []Subscription
-	updates chan Item
-	quit    chan struct{}
-	errs    chan error
-}
-
-// STARTMERGESIG OMIT
-// Merge returns a Subscription that merges the item streams from subs.
-// Closing the merged subscription closes subs.
-func Merge(subs ...Subscription) Subscription {
-	// STOPMERGESIG OMIT
-	m := &merge{
-		subs:    subs,
-		updates: make(chan Item),
-		quit:    make(chan struct{}),
-		errs:    make(chan error),
-	}
-	// STARTMERGE OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for {
-				var it Item
-				select {
-				case it = <-s.Updates():
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-				select {
-				case m.updates <- it:
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-			}
-		}(sub)
-	}
-	// STOPMERGE OMIT
-	return m
-}
-
-func (m *merge) Updates() <-chan Item {
-	return m.updates
-}
-
-// STARTMERGECLOSE OMIT
-func (m *merge) Close() (err error) {
-	close(m.quit) // HL
-	for _ = range m.subs {
-		if e := <-m.errs; e != nil { // HL
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPMERGECLOSE OMIT
-
-// NaiveDedupe converts a stream of Items that may contain duplicates
-// into one that doesn't.
-func NaiveDedupe(in <-chan Item) <-chan Item {
-	out := make(chan Item)
-	go func() {
-		seen := make(map[string]bool)
-		for it := range in {
-			if !seen[it.GUID] {
-				// BUG: this send blocks if the
-				// receiver closes the Subscription
-				// and stops receiving.
-				out <- it // HL
-				seen[it.GUID] = true
-			}
-		}
-		close(out)
-	}()
-	return out
-}
-
-type deduper struct {
-	s       Subscription
-	updates chan Item
-	closing chan chan error
-}
-
-// Dedupe converts a Subscription that may send duplicate Items into
-// one that doesn't.
-func Dedupe(s Subscription) Subscription {
-	d := &deduper{
-		s:       s,
-		updates: make(chan Item),
-		closing: make(chan chan error),
-	}
-	go d.loop()
-	return d
-}
-
-func (d *deduper) loop() {
-	in := d.s.Updates() // enable receive
-	var pending Item
-	var out chan Item // disable send
-	seen := make(map[string]bool)
-	for {
-		select {
-		case it := <-in:
-			if !seen[it.GUID] {
-				pending = it
-				in = nil        // disable receive
-				out = d.updates // enable send
-				seen[it.GUID] = true
-			}
-		case out <- pending:
-			in = d.s.Updates() // enable receive
-			out = nil          // disable send
-		case errc := <-d.closing:
-			err := d.s.Close()
-			errc <- err
-			close(d.updates)
-			return
-		}
-	}
-}
-
-func (d *deduper) Close() error {
-	errc := make(chan error)
-	d.closing <- errc
-	return <-errc
-}
-
-func (d *deduper) Updates() <-chan Item {
-	return d.updates
-}
-
-// Fetch returns a Fetcher for Items from domain.
-func Fetch(domain string) Fetcher {
-	return fakeFetch(domain)
-}
-
-func fakeFetch(domain string) Fetcher {
-	return &fakeFetcher{channel: domain}
-}
-
-type fakeFetcher struct {
-	channel string
-	items   []Item
-}
-
-// FakeDuplicates causes the fake fetcher to return duplicate items.
-var FakeDuplicates bool
-
-func (f *fakeFetcher) Fetch() (items []Item, next time.Time, err error) {
-	now := time.Now()
-	next = now.Add(time.Duration(rand.Intn(5)) * 500 * time.Millisecond)
-	item := Item{
-		Channel: f.channel,
-		Title:   fmt.Sprintf("Item %d", len(f.items)),
-	}
-	item.GUID = item.Channel + "/" + item.Title
-	f.items = append(f.items, item)
-	if FakeDuplicates {
-		items = f.items
-	} else {
-		items = []Item{item}
-	}
-	return
-}
-
-func NaiveSubscribe(fetcher Fetcher) Subscription {
-	s := &naiveSub{
-		fetcher: fetcher,
-		updates: make(chan Item),
-	}
-	go s.loop()
-	return s
-}
-
-type naiveSub struct {
-	fetcher Fetcher
-	updates chan Item
-	closed  bool
-	err     error
-}
-
-func (s *naiveSub) Updates() <-chan Item {
-	return s.updates
-}
-
-func (s *naiveSub) loop() {
-	// STARTNAIVE OMIT
-	for {
-		if s.closed { // HLsync
-			close(s.updates)
-			return
-		}
-		items, next, err := s.fetcher.Fetch()
-		if err != nil {
-			s.err = err                  // HLsync
-			time.Sleep(10 * time.Second) // HLsleep
-			continue
-		}
-		for _, item := range items {
-			s.updates <- item // HLsend
-		}
-		if now := time.Now(); next.After(now) {
-			time.Sleep(next.Sub(now)) // HLsleep
-		}
-	}
-	// STOPNAIVE OMIT
-}
-
-func (s *naiveSub) Close() error {
-	s.closed = true // HLsync
-	return s.err    // HLsync
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	// Subscribe to some feeds, and create a merged update stream.
-	merged := Merge(
-		NaiveSubscribe(Fetch("blog.golang.org")),
-		NaiveSubscribe(Fetch("googleblog.blogspot.com")),
-		NaiveSubscribe(Fetch("googledevelopers.blogspot.com")))
-
-	// Close the subscriptions after some time.
-	time.AfterFunc(3*time.Second, func() {
-		fmt.Println("closed:", merged.Close())
-	})
-
-	// Print the stream.
-	for it := range merged.Updates() {
-		fmt.Println(it.Channel, it.Title)
-	}
-
-	// The loops are still running.  Let the race detector notice.
-	time.Sleep(1 * time.Second)
-
-	panic("show me the stacks")
-}
diff --git a/content/2013/advconc/nilselect/nilselect.go b/content/2013/advconc/nilselect/nilselect.go
deleted file mode 100644
index a752580..0000000
--- a/content/2013/advconc/nilselect/nilselect.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	a, b := make(chan string), make(chan string)
-	go func() { a <- "a" }()
-	go func() { b <- "b" }()
-	if rand.Intn(2) == 0 {
-		a = nil // HL
-		fmt.Println("nil a")
-	} else {
-		b = nil // HL
-		fmt.Println("nil b")
-	}
-	select {
-	case s := <-a:
-		fmt.Println("got", s)
-	case s := <-b:
-		fmt.Println("got", s)
-	}
-}
diff --git a/content/2013/advconc/pingpong/pingpong.go b/content/2013/advconc/pingpong/pingpong.go
deleted file mode 100644
index fd350b4..0000000
--- a/content/2013/advconc/pingpong/pingpong.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table)
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2013/advconc/pingpong1.go b/content/2013/advconc/pingpong1.go
deleted file mode 100644
index fd350b4..0000000
--- a/content/2013/advconc/pingpong1.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table)
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2013/advconc/pingpongdeadlock/pingpongdeadlock.go b/content/2013/advconc/pingpongdeadlock/pingpongdeadlock.go
deleted file mode 100644
index d5edff1..0000000
--- a/content/2013/advconc/pingpongdeadlock/pingpongdeadlock.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table)
-
-	// table <- new(Ball) // game on; toss the ball // HL
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2013/advconc/pingpongpanic/pingpongpanic.go b/content/2013/advconc/pingpongpanic/pingpongpanic.go
deleted file mode 100644
index 562b73b..0000000
--- a/content/2013/advconc/pingpongpanic/pingpongpanic.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table)
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-
-	panic("show me the stacks") // HL
-}
-
-func player(name string, table chan *Ball) {
-	for {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2013/advconc/race.out b/content/2013/advconc/race.out
deleted file mode 100644
index 955794f..0000000
--- a/content/2013/advconc/race.out
+++ /dev/null
@@ -1,62 +0,0 @@
-googleblog.blogspot.com Item 0
-googleblog.blogspot.com Item 1
-googledevelopers.blogspot.com Item 0
-blog.golang.org Item 0
-googledevelopers.blogspot.com Item 1
-blog.golang.org Item 1
-blog.golang.org Item 2
-googledevelopers.blogspot.com Item 2
-googledevelopers.blogspot.com Item 3
-googleblog.blogspot.com Item 2
-googledevelopers.blogspot.com Item 4
-==================
-WARNING: DATA RACE
-Read by goroutine 4: // HL
-  code.google.com/p/go.talks/2013/reader.(*naiveSub).loop() // HL
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:105 +0x46
-  gosched0()
-      /Users/sameer/go/src/pkg/runtime/proc.c:1218 +0x9f
-
-Previous write by goroutine 7: // HL
-  code.google.com/p/go.talks/2013/reader.(*naiveSub).Close() // HL
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:125 +0x38
-  code.google.com/p/go.talks/2013/reader.func·002()
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:353 +0x1da
-  gosched0()
-      /Users/sameer/go/src/pkg/runtime/proc.c:1218 +0x9f
-
-Goroutine 4 (running) created at:
-  code.google.com/p/go.talks/2013/reader.NaiveSubscribe()
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:87 +0xff
-  main.main()
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/advconc/naivemain.go:18 +0xca
-  runtime.main()
-      /Users/sameer/go/src/pkg/runtime/proc.c:182 +0x91
-
-Goroutine 7 (finished) created at:
-  code.google.com/p/go.talks/2013/reader.Merge()
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:357 +0x1f5
-  main.main()
-      /Users/sameer/gocode/src/code.google.com/p/go.talks/2013/advconc/naivemain.go:20 +0x261
-  runtime.main()
-      /Users/sameer/go/src/pkg/runtime/proc.c:182 +0x91
-
-==================
-googleblog.blogspot.com Item 3
-closed: <nil>
-panic: show me the stacks
-
-goroutine 1 [running]:
-main.main()
-	/Users/sameer/gocode/src/code.google.com/p/go.talks/2013/advconc/naivemain.go:33 +0x4f5
-
-goroutine 2 [syscall]:
-
-goroutine 5 [sleep]:
-time.Sleep(0xee5ad23)
-	/Users/sameer/go/src/pkg/runtime/ztime_darwin_amd64.c:19 +0x2f
-code.google.com/p/go.talks/2013/reader.(*naiveSub).loop(0xc2000aea50)
-	/Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:119 +0x2a3
-created by code.google.com/p/go.talks/2013/reader.NaiveSubscribe
-	/Users/sameer/gocode/src/code.google.com/p/go.talks/2013/reader/reader.go:87 +0xff
-exit status 2
diff --git a/content/2013/advconc/race.png b/content/2013/advconc/race.png
deleted file mode 100644
index 8934a64..0000000
--- a/content/2013/advconc/race.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/advconc/realmain/realmain.go b/content/2013/advconc/realmain/realmain.go
deleted file mode 100644
index 7813f86..0000000
--- a/content/2013/advconc/realmain/realmain.go
+++ /dev/null
@@ -1,610 +0,0 @@
-// +build ignore,OMIT
-
-// realmain runs the Subscribe example with a real RSS fetcher.
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	rss "github.com/jteeuwen/go-pkg-rss"
-)
-
-// STARTITEM OMIT
-// An Item is a stripped-down RSS item.
-type Item struct{ Title, Channel, GUID string }
-
-// STOPITEM OMIT
-
-// STARTFETCHER OMIT
-// A Fetcher fetches Items and returns the time when the next fetch should be
-// attempted.  On failure, Fetch returns a non-nil error.
-type Fetcher interface {
-	Fetch() (items []Item, next time.Time, err error)
-}
-
-// STOPFETCHER OMIT
-
-// STARTSUBSCRIPTION OMIT
-// A Subscription delivers Items over a channel.  Close cancels the
-// subscription, closes the Updates channel, and returns the last fetch error,
-// if any.
-type Subscription interface {
-	Updates() <-chan Item
-	Close() error
-}
-
-// STOPSUBSCRIPTION OMIT
-
-// STARTSUBSCRIBE OMIT
-// Subscribe returns a new Subscription that uses fetcher to fetch Items.
-func Subscribe(fetcher Fetcher) Subscription {
-	s := &sub{
-		fetcher: fetcher,
-		updates: make(chan Item),       // for Updates
-		closing: make(chan chan error), // for Close
-	}
-	go s.loop()
-	return s
-}
-
-// STOPSUBSCRIBE OMIT
-
-// sub implements the Subscription interface.
-type sub struct {
-	fetcher Fetcher         // fetches items
-	updates chan Item       // sends items to the user
-	closing chan chan error // for Close
-}
-
-// STARTUPDATES OMIT
-func (s *sub) Updates() <-chan Item {
-	return s.updates
-}
-
-// STOPUPDATES OMIT
-
-// STARTCLOSE OMIT
-// STARTCLOSESIG OMIT
-func (s *sub) Close() error {
-	// STOPCLOSESIG OMIT
-	errc := make(chan error)
-	s.closing <- errc // HLchan
-	return <-errc     // HLchan
-}
-
-// STOPCLOSE OMIT
-
-// loopCloseOnly is a version of loop that includes only the logic
-// that handles Close.
-func (s *sub) loopCloseOnly() {
-	// STARTCLOSEONLY OMIT
-	var err error // set when Fetch fails
-	for {
-		select {
-		case errc := <-s.closing: // HLchan
-			errc <- err      // HLchan
-			close(s.updates) // tells receiver we're done
-			return
-		}
-	}
-	// STOPCLOSEONLY OMIT
-}
-
-// loopFetchOnly is a version of loop that includes only the logic
-// that calls Fetch.
-func (s *sub) loopFetchOnly() {
-	// STARTFETCHONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	var next time.Time // initially January 1, year 0
-	var err error
-	for {
-		var fetchDelay time.Duration // initally 0 (no delay)
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-
-		select {
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch()
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...)
-		}
-	}
-	// STOPFETCHONLY OMIT
-}
-
-// loopSendOnly is a version of loop that includes only the logic for
-// sending items to s.updates.
-func (s *sub) loopSendOnly() {
-	// STARTSENDONLY OMIT
-	var pending []Item // appended by fetch; consumed by send
-	for {
-		var first Item
-		var updates chan Item // HLupdates
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case // HLupdates
-		}
-
-		select {
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-	// STOPSENDONLY OMIT
-}
-
-// mergedLoop is a version of loop that combines loopCloseOnly,
-// loopFetchOnly, and loopSendOnly.
-func (s *sub) mergedLoop() {
-	// STARTFETCHVARS OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	// STOPFETCHVARS OMIT
-	for {
-		// STARTNOCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		startFetch := time.After(fetchDelay)
-		// STOPNOCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-
-		// STARTSELECT OMIT
-		select {
-		case errc := <-s.closing: // HLcases
-			errc <- err
-			close(s.updates)
-			return
-			// STARTFETCHCASE OMIT
-		case <-startFetch: // HLcases
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			pending = append(pending, fetched...) // HLfetch
-			// STOPFETCHCASE OMIT
-		case updates <- first: // HLcases
-			pending = pending[1:]
-		}
-		// STOPSELECT OMIT
-	}
-}
-
-// dedupeLoop extends mergedLoop with deduping of fetched items.
-func (s *sub) dedupeLoop() {
-	const maxPending = 10
-	// STARTSEEN OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool) // set of item.GUIDs // HLseen
-	// STOPSEEN OMIT
-	for {
-		// STARTCAP OMIT
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		var startFetch <-chan time.Time // HLcap
-		if len(pending) < maxPending {  // HLcap
-			startFetch = time.After(fetchDelay) // enable fetch case  // HLcap
-		} // HLcap
-		// STOPCAP OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		select {
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		// STARTDEDUPE OMIT
-		case <-startFetch:
-			var fetched []Item
-			fetched, next, err = s.fetcher.Fetch() // HLfetch
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if !seen[item.GUID] { // HLdupe
-					pending = append(pending, item) // HLdupe
-					seen[item.GUID] = true          // HLdupe
-				} // HLdupe
-			}
-			// STOPDEDUPE OMIT
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// loop periodically fecthes Items, sends them on s.updates, and exits
-// when Close is called.  It extends dedupeLoop with logic to run
-// Fetch asynchronously.
-func (s *sub) loop() {
-	const maxPending = 10
-	type fetchResult struct {
-		fetched []Item
-		next    time.Time
-		err     error
-	}
-	// STARTFETCHDONE OMIT
-	var fetchDone chan fetchResult // if non-nil, Fetch is running // HL
-	// STOPFETCHDONE OMIT
-	var pending []Item
-	var next time.Time
-	var err error
-	var seen = make(map[string]bool)
-	for {
-		var fetchDelay time.Duration
-		if now := time.Now(); next.After(now) {
-			fetchDelay = next.Sub(now)
-		}
-		// STARTFETCHIF OMIT
-		var startFetch <-chan time.Time
-		if fetchDone == nil && len(pending) < maxPending { // HLfetch
-			startFetch = time.After(fetchDelay) // enable fetch case
-		}
-		// STOPFETCHIF OMIT
-		var first Item
-		var updates chan Item
-		if len(pending) > 0 {
-			first = pending[0]
-			updates = s.updates // enable send case
-		}
-		// STARTFETCHASYNC OMIT
-		select {
-		case <-startFetch: // HLfetch
-			fetchDone = make(chan fetchResult, 1) // HLfetch
-			go func() {
-				fetched, next, err := s.fetcher.Fetch()
-				fetchDone <- fetchResult{fetched, next, err}
-			}()
-		case result := <-fetchDone: // HLfetch
-			fetchDone = nil // HLfetch
-			// Use result.fetched, result.next, result.err
-			// STOPFETCHASYNC OMIT
-			fetched := result.fetched
-			next, err = result.next, result.err
-			if err != nil {
-				next = time.Now().Add(10 * time.Second)
-				break
-			}
-			for _, item := range fetched {
-				if id := item.GUID; !seen[id] { // HLdupe
-					pending = append(pending, item)
-					seen[id] = true // HLdupe
-				}
-			}
-		case errc := <-s.closing:
-			errc <- err
-			close(s.updates)
-			return
-		case updates <- first:
-			pending = pending[1:]
-		}
-	}
-}
-
-// naiveMerge is a version of Merge that doesn't quite work right.  In
-// particular, the goroutines it starts may block forever on m.updates
-// if the receiver stops receiving.
-type naiveMerge struct {
-	subs    []Subscription
-	updates chan Item
-}
-
-// STARTNAIVEMERGE OMIT
-func NaiveMerge(subs ...Subscription) Subscription {
-	m := &naiveMerge{
-		subs:    subs,
-		updates: make(chan Item),
-	}
-	// STARTNAIVEMERGELOOP OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for it := range s.Updates() {
-				m.updates <- it // HL
-			}
-		}(sub)
-	}
-	// STOPNAIVEMERGELOOP OMIT
-	return m
-}
-
-// STOPNAIVEMERGE OMIT
-
-// STARTNAIVEMERGECLOSE OMIT
-func (m *naiveMerge) Close() (err error) {
-	for _, sub := range m.subs {
-		if e := sub.Close(); err == nil && e != nil {
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPNAIVEMERGECLOSE OMIT
-
-func (m *naiveMerge) Updates() <-chan Item {
-	return m.updates
-}
-
-type merge struct {
-	subs    []Subscription
-	updates chan Item
-	quit    chan struct{}
-	errs    chan error
-}
-
-// STARTMERGESIG OMIT
-// Merge returns a Subscription that merges the item streams from subs.
-// Closing the merged subscription closes subs.
-func Merge(subs ...Subscription) Subscription {
-	// STOPMERGESIG OMIT
-	m := &merge{
-		subs:    subs,
-		updates: make(chan Item),
-		quit:    make(chan struct{}),
-		errs:    make(chan error),
-	}
-	// STARTMERGE OMIT
-	for _, sub := range subs {
-		go func(s Subscription) {
-			for {
-				var it Item
-				select {
-				case it = <-s.Updates():
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-				select {
-				case m.updates <- it:
-				case <-m.quit: // HL
-					m.errs <- s.Close() // HL
-					return              // HL
-				}
-			}
-		}(sub)
-	}
-	// STOPMERGE OMIT
-	return m
-}
-
-func (m *merge) Updates() <-chan Item {
-	return m.updates
-}
-
-// STARTMERGECLOSE OMIT
-func (m *merge) Close() (err error) {
-	close(m.quit) // HL
-	for _ = range m.subs {
-		if e := <-m.errs; e != nil { // HL
-			err = e
-		}
-	}
-	close(m.updates) // HL
-	return
-}
-
-// STOPMERGECLOSE OMIT
-
-// NaiveDedupe converts a stream of Items that may contain duplicates
-// into one that doesn't.
-func NaiveDedupe(in <-chan Item) <-chan Item {
-	out := make(chan Item)
-	go func() {
-		seen := make(map[string]bool)
-		for it := range in {
-			if !seen[it.GUID] {
-				// BUG: this send blocks if the
-				// receiver closes the Subscription
-				// and stops receiving.
-				out <- it // HL
-				seen[it.GUID] = true
-			}
-		}
-		close(out)
-	}()
-	return out
-}
-
-type deduper struct {
-	s       Subscription
-	updates chan Item
-	closing chan chan error
-}
-
-// Dedupe converts a Subscription that may send duplicate Items into
-// one that doesn't.
-func Dedupe(s Subscription) Subscription {
-	d := &deduper{
-		s:       s,
-		updates: make(chan Item),
-		closing: make(chan chan error),
-	}
-	go d.loop()
-	return d
-}
-
-func (d *deduper) loop() {
-	in := d.s.Updates() // enable receive
-	var pending Item
-	var out chan Item // disable send
-	seen := make(map[string]bool)
-	for {
-		select {
-		case it := <-in:
-			if !seen[it.GUID] {
-				pending = it
-				in = nil        // disable receive
-				out = d.updates // enable send
-				seen[it.GUID] = true
-			}
-		case out <- pending:
-			in = d.s.Updates() // enable receive
-			out = nil          // disable send
-		case errc := <-d.closing:
-			err := d.s.Close()
-			errc <- err
-			close(d.updates)
-			return
-		}
-	}
-}
-
-func (d *deduper) Close() error {
-	errc := make(chan error)
-	d.closing <- errc
-	return <-errc
-}
-
-func (d *deduper) Updates() <-chan Item {
-	return d.updates
-}
-
-// FakeFetch causes Fetch to use a fake fetcher instead of the real
-// one.
-var FakeFetch bool
-
-// Fetch returns a Fetcher for Items from domain.
-func Fetch(domain string) Fetcher {
-	if FakeFetch {
-		return fakeFetch(domain)
-	}
-	return realFetch(domain)
-}
-
-func fakeFetch(domain string) Fetcher {
-	return &fakeFetcher{channel: domain}
-}
-
-type fakeFetcher struct {
-	channel string
-	items   []Item
-}
-
-// FakeDuplicates causes the fake fetcher to return duplicate items.
-var FakeDuplicates bool
-
-func (f *fakeFetcher) Fetch() (items []Item, next time.Time, err error) {
-	now := time.Now()
-	next = now.Add(time.Duration(rand.Intn(5)) * 500 * time.Millisecond)
-	item := Item{
-		Channel: f.channel,
-		Title:   fmt.Sprintf("Item %d", len(f.items)),
-	}
-	item.GUID = item.Channel + "/" + item.Title
-	f.items = append(f.items, item)
-	if FakeDuplicates {
-		items = f.items
-	} else {
-		items = []Item{item}
-	}
-	return
-}
-
-// realFetch returns a fetcher for the specified blogger domain.
-func realFetch(domain string) Fetcher {
-	return NewFetcher(fmt.Sprintf("http://%s/feeds/posts/default?alt=rss", domain))
-}
-
-type fetcher struct {
-	uri   string
-	feed  *rss.Feed
-	items []Item
-}
-
-// NewFetcher returns a Fetcher for uri.
-func NewFetcher(uri string) Fetcher {
-	f := &fetcher{
-		uri: uri,
-	}
-	newChans := func(feed *rss.Feed, chans []*rss.Channel) {}
-	newItems := func(feed *rss.Feed, ch *rss.Channel, items []*rss.Item) {
-		for _, it := range items {
-			f.items = append(f.items, Item{
-				Channel: ch.Title,
-				GUID:    it.Guid,
-				Title:   it.Title,
-			})
-		}
-	}
-	f.feed = rss.New(1 /*minimum interval in minutes*/, true /*respect limit*/, newChans, newItems)
-	return f
-}
-
-func (f *fetcher) Fetch() (items []Item, next time.Time, err error) {
-	fmt.Println("fetching", f.uri)
-	if err = f.feed.Fetch(f.uri, nil); err != nil {
-		return
-	}
-	items = f.items
-	f.items = nil
-	next = time.Now().Add(time.Duration(f.feed.SecondsTillUpdate()) * time.Second)
-	return
-}
-
-// TODO: in a longer talk: move the Subscribe function onto a Reader type, to
-// support dynamically adding and removing Subscriptions.  Reader should dedupe.
-
-// TODO: in a longer talk: make successive Subscribe calls for the same uri
-// share the same underlying Subscription, but provide duplicate streams.
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-// STARTMAIN OMIT
-func main() {
-	// STARTMERGECALL OMIT
-	// Subscribe to some feeds, and create a merged update stream.
-	merged := Merge(
-		Subscribe(Fetch("blog.golang.org")),
-		Subscribe(Fetch("googleblog.blogspot.com")),
-		Subscribe(Fetch("googledevelopers.blogspot.com")))
-	// STOPMERGECALL OMIT
-
-	// Close the subscriptions after some time.
-	time.AfterFunc(3*time.Second, func() {
-		fmt.Println("closed:", merged.Close())
-	})
-
-	// Print the stream.
-	for it := range merged.Updates() {
-		fmt.Println(it.Channel, it.Title)
-	}
-
-	// Uncomment the panic below to dump the stack traces.  This
-	// will show several stacks for persistent HTTP connections
-	// created by the real RSS client.  To clean these up, we'll
-	// need to extend Fetcher with a Close method and plumb this
-	// through the RSS client implementation.
-	//
-	// panic("show me the stacks")
-}
-
-// STOPMAIN OMIT
diff --git a/content/2013/bestpractices.slide b/content/2013/bestpractices.slide
deleted file mode 100644
index b4dbb48..0000000
--- a/content/2013/bestpractices.slide
+++ /dev/null
@@ -1,288 +0,0 @@
-Twelve Go Best Practices
-
-Francesc Campoy Flores
-Gopher at Google
-@francesc
-http://campoy.cat/+
-
-http://golang.org
-
-* Best practices
-
-From Wikipedia:
-
-	"A best practice is a method or technique that has consistently shown results superior
-	to those achieved with other means"
-
-Techniques to write Go code that is
-
-- simple,
-- readable,
-- maintainable.
-
-.image http://golang.org/doc/gopher/gopherbw.png 200 200
-
-* Some code
-
-.code bestpractices/shortercode1.go /type Gopher/,/^}/
-
-.code bestpractices/shortercode1.go /WriteTo/,/^}/
-
-* Avoid nesting by handling errors first
-
-.code bestpractices/shortercode2.go /WriteTo/,/^}/
-
-Less nesting means less cognitive load on the reader
-
-* Avoid repetition when possible
-
-Deploy one-off utility types for simpler code
-
-.code bestpractices/shortercode3.go /binWriter/,/^}/
-
-.code bestpractices/shortercode3.go /Write writes/,/^}/
-
-* Avoid repetition when possible
-
-Using `binWriter`
-
-.code bestpractices/shortercode3.go /WriteTo/,/^}/
-
-* Type switch to handle special cases
-
-.code bestpractices/shortercode4.go /func .* Write/,/^}/
-
-.code bestpractices/shortercode4.go /WriteTo/,/^}/
-
-* Type switch with short variable declaration
-
-.code bestpractices/shortercode5.go /func .* Write/,/^}/
-
-* Writing everything or nothing
-
-.code bestpractices/shortercode6.go /binWriter/,/^}/
-
-.code bestpractices/shortercode6.go /Write writes/,/^}/
-
-* Writing everything or nothing
-
-.code bestpractices/shortercode6.go /Flush/,/^}/
-
-.code bestpractices/shortercode6.go /func .* WriteTo/,/^}/
-
-* Function adapters
-
-.code bestpractices/httphandler.go /HANDLER1/,/HANDLER2/
-
-* Function adapters
-
-.code bestpractices/httphandler.go /HANDLER2/,/END/
-
-* Organizing your code
-
-* Important code goes first
-
-License information, build tags, package documentation.
-
-Import statements, related groups separated by blank lines.
-
-	import (
-		"fmt"
-		"io"
-		"log"
-
-		"golang.org/x/net/websocket"
-	)
-
-The rest of the code starting with the most significant types, and ending
-with helper function and types.
-
-* Document your code
-
-Package name, with the associated documentation before.
-
-	// Package playground registers an HTTP handler at "/compile" that
-	// proxies requests to the golang.org playground service.
-	package playground
-
-Exported identifiers appear in `godoc`, they should be documented correctly.
-
-	// Author represents the person who wrote and/or is presenting the document.
-	type Author struct {
-		Elem []Elem
-	}
-
-	// TextElem returns the first text elements of the author details.
-	// This is used to display the author' name, job title, and company
-	// without the contact details.
-	func (p *Author) TextElem() (elems []Elem) {
-
-[[http://godoc.org/code.google.com/p/go.talks/pkg/present#Author][Generated documentation]]
-
-[[http://blog.golang.org/godoc-documenting-go-code][Gocode: documenting Go code]]
-
-* Shorter is better
-
-or at least _longer_is_not_always_better_.
-
-Try to find the *shortest*name*that*is*self*explanatory*.
-
-- Prefer `MarshalIndent` to `MarshalWithIndentation`.
-
-Don't forget that the package name will appear before the identifier you chose.
-
-- In package `encoding/json` we find the type `Encoder`, not `JSONEncoder`.
-
-- It is referred as `json.Encoder`.
-
-* Packages with multiple files
-
-Should you split a package into multiple files?
-
-- Avoid very long files
-
-The `net/http` package from the standard library contains 15734 lines in 47 files.
-
-- Separate code and tests
-
-`net/http/cookie.go` and `net/http/cookie_test.go` are both part of the `http`
-package.
-
-Test code is compiled *only* at test time.
-
-- Separated package documentation
-
-When we have more than one file in a package, it's convention to create a `doc.go`
-containing the package documentation.
-
-* Make your packages "go get"-able
-
-Some packages are potentially reusable, some others are not.
-
-A package defining some network protocol might be reused while one defining
-an executable command may not.
-
-.image bestpractices/cmd.png
-
-[[https://github.com/bradfitz/camlistore]]
-
-* APIs
-
-* Ask for what you need
-
-Let's use the Gopher type from before
-
-.code bestpractices/shortercode1.go /type Gopher/,/^}/
-
-We could define this method
-
-.code bestpractices/shortercode1.go /WriteToFile/
-
-But using a concrete type makes this code difficult to test, so we use an interface.
-
-.code bestpractices/shortercode1.go /WriteToReadWriter/
-
-And, since we're using an interface, we should ask only for the methods we need.
-
-.code bestpractices/shortercode1.go /WriteToWriter/
-
-* Keep independent packages independent
-
-.code bestpractices/funcdraw/cmd/funcdraw.go /IMPORT/,/ENDIMPORT/
-
-.code bestpractices/funcdraw/cmd/funcdraw.go /START/,/END/
-
-* Parsing
-
-.code bestpractices/funcdraw/parser/parser.go /START/,/END/
-
-* Drawing
-
-.code bestpractices/funcdraw/drawer/dependent.go /START/,/END/
-
-Avoid dependency by using an interface.
-
-.code bestpractices/funcdraw/drawer/drawer.go /START/,/END/
-
-* Testing
-
-Using an interface instead of a concrete type makes testing easier.
-
-.code bestpractices/funcdraw/drawer/drawer_test.go ,/END/
-
-* Avoid concurrency in your API
-
-.play bestpractices/concurrency1.go /START/,/END/
-
-What if we want to use it sequentially?
-
-* Avoid concurrency in your API
-
-.play bestpractices/concurrency2.go /START/,/END/
-
-Expose synchronous APIs, calling them concurrently is easy.
-
-* Best practices for concurrency
-
-* Use goroutines to manage state
-
-Use a chan or a struct with a chan to communicate with a goroutine
-
-.code bestpractices/server.go /START/,/STOP/
-
-* Use goroutines to manage state (continued)
-
-.play bestpractices/server.go /STOP/,
-
-* Avoid goroutine leaks with buffered chans
-
-.code bestpractices/bufchan.go /SEND/,/BROADCAST/
-
-.code bestpractices/bufchan.go /MAIN/,
-
-* Avoid goroutine leaks with buffered chans (continued)
-
-.play bestpractices/bufchan.go /BROADCAST/,/MAIN/
-
-- the goroutine is blocked on the chan write
-- the goroutine holds a reference to the chan
-- the chan will never be garbage collected
-
-* Avoid goroutines leaks with buffered chans (continued)
-
-.play bestpractices/bufchanfix.go /BROADCAST/,/MAIN/
-
-- what if we can't predict the capacity of the channel?
-
-* Avoid goroutines leaks with quit chan
-
-.play bestpractices/quitchan.go /BROADCAST/,/MAIN/
-
-* Twelve best practices
-
-1. Avoid nesting by handling errors first
-2. Avoid repetition when possible
-3. Important code goes first
-4. Document your code
-5. Shorter is better
-6. Packages with multiple files 
-7. Make your packages "go get"-able
-8. Ask for what you need
-9. Keep independent packages independent
-10. Avoid concurrency in your API
-11. Use goroutines to manage state
-12. Avoid goroutine leaks
-
-* Some links
-
-Resources
-
-- Go homepage [[http://golang.org]]
-- Go interactive tour [[http://tour.golang.org]]
-
-Other talks
-
-- Lexical scanning with Go [[http://www.youtube.com/watch?v=HxaD_trXwRE][video]]
-- Concurrency is not parallelism [[http://vimeo.com/49718712][video]]
-- Go concurrency patterns [[http://www.youtube.com/watch?v=f6kdp27TYZs][video]]
-- Advanced Go concurrency patterns [[http://www.youtube.com/watch?v=QDDwwePbDtw][video]]
diff --git a/content/2013/bestpractices/bufchan.go b/content/2013/bestpractices/bufchan.go
deleted file mode 100644
index e454b3c..0000000
--- a/content/2013/bestpractices/bufchan.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net"
-	"time"
-)
-
-// SEND OMIT
-func sendMsg(msg, addr string) error {
-	conn, err := net.Dial("tcp", addr)
-	if err != nil {
-		return err
-	}
-	defer conn.Close()
-	_, err = fmt.Fprint(conn, msg)
-	return err
-}
-
-// BROADCAST OMIT
-func broadcastMsg(msg string, addrs []string) error {
-	errc := make(chan error)
-	for _, addr := range addrs {
-		go func(addr string) {
-			errc <- sendMsg(msg, addr)
-			fmt.Println("done")
-		}(addr)
-	}
-
-	for _ = range addrs {
-		if err := <-errc; err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// MAIN OMIT
-func main() {
-	addr := []string{"localhost:8080", "http://google.com"}
-	err := broadcastMsg("hi", addr) // HL
-
-	time.Sleep(time.Second)
-
-	if err != nil {
-		fmt.Println(err)
-		return
-	}
-	fmt.Println("everything went fine")
-}
diff --git a/content/2013/bestpractices/bufchanfix.go b/content/2013/bestpractices/bufchanfix.go
deleted file mode 100644
index c183fba..0000000
--- a/content/2013/bestpractices/bufchanfix.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net"
-	"time"
-)
-
-// SEND OMIT
-func sendMsg(msg, addr string) error {
-	conn, err := net.Dial("tcp", addr)
-	if err != nil {
-		return err
-	}
-	defer conn.Close()
-	_, err = fmt.Fprint(conn, msg)
-	return err
-}
-
-// BROADCAST OMIT
-func broadcastMsg(msg string, addrs []string) error {
-	errc := make(chan error, len(addrs)) // HL
-	for _, addr := range addrs {
-		go func(addr string) {
-			errc <- sendMsg(msg, addr)
-			fmt.Println("done")
-		}(addr)
-	}
-
-	for _ = range addrs {
-		if err := <-errc; err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// MAIN OMIT
-func main() {
-	addr := []string{"localhost:8080", "http://google.com"}
-	err := broadcastMsg("hi", addr)
-
-	time.Sleep(time.Second)
-
-	if err != nil {
-		fmt.Println(err)
-		return
-	}
-	fmt.Println("everything went fine")
-}
diff --git a/content/2013/bestpractices/cmd.png b/content/2013/bestpractices/cmd.png
deleted file mode 100644
index 17e70a1..0000000
--- a/content/2013/bestpractices/cmd.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/bestpractices/concurrency1.go b/content/2013/bestpractices/concurrency1.go
deleted file mode 100644
index 63a76e1..0000000
--- a/content/2013/bestpractices/concurrency1.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"errors"
-	"fmt"
-	"time"
-)
-
-// START OMIT
-func doConcurrently(job string, err chan error) {
-	go func() {
-		fmt.Println("doing job", job)
-		time.Sleep(1 * time.Second)
-		err <- errors.New("something went wrong!")
-	}()
-}
-
-func main() {
-	jobs := []string{"one", "two", "three"}
-
-	errc := make(chan error)
-	for _, job := range jobs {
-		doConcurrently(job, errc)
-	}
-	for _ = range jobs {
-		if err := <-errc; err != nil {
-			fmt.Println(err)
-		}
-	}
-}
-
-// END OMIT
diff --git a/content/2013/bestpractices/concurrency2.go b/content/2013/bestpractices/concurrency2.go
deleted file mode 100644
index c9b1730..0000000
--- a/content/2013/bestpractices/concurrency2.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"errors"
-	"fmt"
-	"time"
-)
-
-// START OMIT
-func do(job string) error {
-	fmt.Println("doing job", job)
-	time.Sleep(1 * time.Second)
-	return errors.New("something went wrong!")
-}
-
-func main() {
-	jobs := []string{"one", "two", "three"}
-
-	errc := make(chan error)
-	for _, job := range jobs {
-		go func(job string) {
-			errc <- do(job)
-		}(job)
-	}
-	for _ = range jobs {
-		if err := <-errc; err != nil {
-			fmt.Println(err)
-		}
-	}
-}
-
-// END OMIT
diff --git a/content/2013/bestpractices/funcdraw/cmd/funcdraw.go b/content/2013/bestpractices/funcdraw/cmd/funcdraw.go
deleted file mode 100644
index 96959ea..0000000
--- a/content/2013/bestpractices/funcdraw/cmd/funcdraw.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-	"image/png"
-	"log"
-	"os"
-)
-
-// IMPORT OMIT
-import (
-	"golang.org/x/talks/content/2013/bestpractices/funcdraw/drawer"
-	"golang.org/x/talks/content/2013/bestpractices/funcdraw/parser"
-)
-
-// ENDIMPORT OMIT
-
-var (
-	width  = flag.Int("width", 300, "image width")
-	height = flag.Int("height", 300, "image height")
-	xmin   = flag.Float64("xmin", -10, "min value for x")
-	xmax   = flag.Float64("xmax", 10, "max value for x")
-)
-
-func main() {
-	flag.Parse()
-	if flag.NArg() != 1 {
-		log.Fatal("missing expression to parse")
-	}
-
-	text := flag.Arg(0)
-	// START OMIT
-	// Parse the text into an executable function.
-	f, err := parser.Parse(text)
-	if err != nil {
-		log.Fatalf("parse %q: %v", text, err)
-	}
-
-	// Create an image plotting the function.
-	m := drawer.Draw(f, *width, *height, *xmin, *xmax)
-
-	// Encode the image into the standard output.
-	err = png.Encode(os.Stdout, m)
-	if err != nil {
-		log.Fatalf("encode image: %v", err)
-	}
-	// END OMIT
-}
diff --git a/content/2013/bestpractices/funcdraw/drawer/dependent.go b/content/2013/bestpractices/funcdraw/drawer/dependent.go
deleted file mode 100644
index 1ad6626..0000000
--- a/content/2013/bestpractices/funcdraw/drawer/dependent.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore,OMIT
-
-package drawer
-
-// START OMIT
-import (
-	"image"
-
-	"golang.org/x/talks/content/2013/bestpractices/funcdraw/parser"
-)
-
-// Draw draws an image showing a rendering of the passed ParsedFunc.
-func DrawParsedFunc(f parser.ParsedFunc) image.Image {
-	// END OMIT
-	return nil
-}
diff --git a/content/2013/bestpractices/funcdraw/drawer/drawer.go b/content/2013/bestpractices/funcdraw/drawer/drawer.go
deleted file mode 100644
index e8d82ec..0000000
--- a/content/2013/bestpractices/funcdraw/drawer/drawer.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore,OMIT
-
-package drawer
-
-// START OMIT
-import "image"
-
-// Function represent a drawable mathematical function.
-type Function interface {
-	Eval(float64) float64
-}
-
-// Draw draws an image showing a rendering of the passed Function.
-func Draw(f Function) image.Image {
-	// END OMIT
-	return nil
-}
diff --git a/content/2013/bestpractices/funcdraw/drawer/drawer_test.go b/content/2013/bestpractices/funcdraw/drawer/drawer_test.go
deleted file mode 100644
index d66d787..0000000
--- a/content/2013/bestpractices/funcdraw/drawer/drawer_test.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package drawer
-
-import (
-	"math"
-	"testing"
-)
-
-type TestFunc func(float64) float64
-
-func (f TestFunc) Eval(x float64) float64 { return f(x) }
-
-var (
-	ident = TestFunc(func(x float64) float64 { return x })
-	sin   = TestFunc(math.Sin)
-)
-
-func TestDraw_Ident(t *testing.T) {
-	m := Draw(ident)
-	// Verify obtained image.
-	// END OMIT
-	t.Error(m.ColorModel())
-}
diff --git a/content/2013/bestpractices/funcdraw/parser/parser.go b/content/2013/bestpractices/funcdraw/parser/parser.go
deleted file mode 100644
index d8f6abb..0000000
--- a/content/2013/bestpractices/funcdraw/parser/parser.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package parser
-
-// START OMIT
-type ParsedFunc struct {
-	text string
-	eval func(float64) float64
-}
-
-func Parse(text string) (*ParsedFunc, error) {
-	f, err := parse(text)
-	if err != nil {
-		return nil, err
-	}
-	return &ParsedFunc{text: text, eval: f}, nil
-}
-
-func (f *ParsedFunc) Eval(x float64) float64 { return f.eval(x) }
-func (f *ParsedFunc) String() string         { return f.text }
-
-// END OMIT
-func parse(text string) (func(float64) float64, error) {
-	return func(x float64) float64 { return x }, nil
-}
diff --git a/content/2013/bestpractices/httphandler.go b/content/2013/bestpractices/httphandler.go
deleted file mode 100644
index bb1b577..0000000
--- a/content/2013/bestpractices/httphandler.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// +build ignore,OMIT
-
-package bestpractices
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func doThis() error { return nil }
-func doThat() error { return nil }
-
-// HANDLER1 OMIT
-func init() {
-	http.HandleFunc("/", handler)
-}
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	err := doThis()
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		log.Printf("handling %q: %v", r.RequestURI, err)
-		return
-	}
-
-	err = doThat()
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		log.Printf("handling %q: %v", r.RequestURI, err)
-		return
-	}
-}
-
-// HANDLER2 OMIT
-func init() {
-	http.HandleFunc("/", errorHandler(betterHandler))
-}
-
-func errorHandler(f func(http.ResponseWriter, *http.Request) error) http.HandlerFunc {
-	return func(w http.ResponseWriter, r *http.Request) {
-		err := f(w, r)
-		if err != nil {
-			http.Error(w, err.Error(), http.StatusInternalServerError)
-			log.Printf("handling %q: %v", r.RequestURI, err)
-		}
-	}
-}
-
-func betterHandler(w http.ResponseWriter, r *http.Request) error {
-	if err := doThis(); err != nil {
-		return fmt.Errorf("doing this: %v", err)
-	}
-
-	if err := doThat(); err != nil {
-		return fmt.Errorf("doing that: %v", err)
-	}
-	return nil
-}
-
-// END OMIT
diff --git a/content/2013/bestpractices/quitchan.go b/content/2013/bestpractices/quitchan.go
deleted file mode 100644
index 7c11cff..0000000
--- a/content/2013/bestpractices/quitchan.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net"
-	"time"
-)
-
-// SEND OMIT
-func sendMsg(msg, addr string) error {
-	conn, err := net.Dial("tcp", addr)
-	if err != nil {
-		return err
-	}
-	defer conn.Close()
-	_, err = fmt.Fprint(conn, msg)
-	return err
-}
-
-// BROADCAST OMIT
-func broadcastMsg(msg string, addrs []string) error {
-	errc := make(chan error)
-	quit := make(chan struct{})
-
-	defer close(quit)
-
-	for _, addr := range addrs {
-		go func(addr string) {
-			select {
-			case errc <- sendMsg(msg, addr):
-				fmt.Println("done")
-			case <-quit:
-				fmt.Println("quit")
-			}
-		}(addr)
-	}
-
-	for _ = range addrs {
-		if err := <-errc; err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// MAIN OMIT
-func main() {
-	addr := []string{"localhost:8080", "http://google.com"}
-	err := broadcastMsg("hi", addr) // HL
-
-	time.Sleep(time.Second)
-
-	if err != nil {
-		fmt.Println(err)
-		return
-	}
-	fmt.Println("everything went fine")
-}
diff --git a/content/2013/bestpractices/server.go b/content/2013/bestpractices/server.go
deleted file mode 100644
index e273861..0000000
--- a/content/2013/bestpractices/server.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START OMIT
-type Server struct{ quit chan bool }
-
-func NewServer() *Server {
-	s := &Server{make(chan bool)}
-	go s.run()
-	return s
-}
-
-func (s *Server) run() {
-	for {
-		select {
-		case <-s.quit:
-			fmt.Println("finishing task")
-			time.Sleep(time.Second)
-			fmt.Println("task done")
-			s.quit <- true
-			return
-		case <-time.After(time.Second):
-			fmt.Println("running task")
-		}
-	}
-}
-
-// STOP OMIT
-func (s *Server) Stop() {
-	fmt.Println("server stopping")
-	s.quit <- true
-	<-s.quit
-	fmt.Println("server stopped")
-}
-
-func main() {
-	s := NewServer()
-	time.Sleep(2 * time.Second)
-	s.Stop()
-}
diff --git a/content/2013/bestpractices/shortercode1.go b/content/2013/bestpractices/shortercode1.go
deleted file mode 100644
index d615a87..0000000
--- a/content/2013/bestpractices/shortercode1.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-// Example of bad code, missing early return. OMIT
-func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) {
-	err = binary.Write(w, binary.LittleEndian, int32(len(g.Name)))
-	if err == nil {
-		size += 4
-		var n int
-		n, err = w.Write([]byte(g.Name))
-		size += int64(n)
-		if err == nil {
-			err = binary.Write(w, binary.LittleEndian, int64(g.AgeYears))
-			if err == nil {
-				size += 4
-			}
-			return
-		}
-		return
-	}
-	return
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
-
-// Example of bad API, it's better to use an interface.
-func (g *Gopher) WriteToFile(f *os.File) (int64, error) {
-	return 0, nil
-}
-
-// Example of bad API, it's better to use a narrower interface.
-func (g *Gopher) WriteToReadWriter(rw io.ReadWriter) (int64, error) {
-	return 0, nil
-}
-
-// Example of better API.
-func (g *Gopher) WriteToWriter(f io.Writer) (int64, error) {
-	return 0, nil
-}
diff --git a/content/2013/bestpractices/shortercode2.go b/content/2013/bestpractices/shortercode2.go
deleted file mode 100644
index 25ed0ae..0000000
--- a/content/2013/bestpractices/shortercode2.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) {
-	err = binary.Write(w, binary.LittleEndian, int32(len(g.Name)))
-	if err != nil {
-		return
-	}
-	size += 4
-	n, err := w.Write([]byte(g.Name))
-	size += int64(n)
-	if err != nil {
-		return
-	}
-	err = binary.Write(w, binary.LittleEndian, int64(g.AgeYears))
-	if err == nil {
-		size += 4
-	}
-	return
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
diff --git a/content/2013/bestpractices/shortercode3.go b/content/2013/bestpractices/shortercode3.go
deleted file mode 100644
index 7e77b5b..0000000
--- a/content/2013/bestpractices/shortercode3.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-type binWriter struct {
-	w    io.Writer
-	size int64
-	err  error
-}
-
-// Write writes a value to the provided writer in little endian form.
-func (w *binWriter) Write(v interface{}) {
-	if w.err != nil {
-		return
-	}
-	if w.err = binary.Write(w.w, binary.LittleEndian, v); w.err == nil {
-		w.size += int64(binary.Size(v))
-	}
-}
-
-func (g *Gopher) WriteTo(w io.Writer) (int64, error) {
-	bw := &binWriter{w: w}
-	bw.Write(int32(len(g.Name)))
-	bw.Write([]byte(g.Name))
-	bw.Write(int64(g.AgeYears))
-	return bw.size, bw.err
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
diff --git a/content/2013/bestpractices/shortercode4.go b/content/2013/bestpractices/shortercode4.go
deleted file mode 100644
index 0c20ceb..0000000
--- a/content/2013/bestpractices/shortercode4.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-type binWriter struct {
-	w    io.Writer
-	size int64
-	err  error
-}
-
-// Write writes a value to the provided writer in little endian form.
-func (w *binWriter) Write(v interface{}) {
-	if w.err != nil {
-		return
-	}
-	switch v.(type) { // HL
-	case string:
-		s := v.(string)
-		w.Write(int32(len(s)))
-		w.Write([]byte(s))
-	case int:
-		i := v.(int)
-		w.Write(int64(i))
-	default:
-		if w.err = binary.Write(w.w, binary.LittleEndian, v); w.err == nil {
-			w.size += int64(binary.Size(v))
-		}
-	}
-}
-
-func (g *Gopher) WriteTo(w io.Writer) (int64, error) {
-	bw := &binWriter{w: w}
-	bw.Write(g.Name) // HL
-	bw.Write(g.AgeYears)
-	return bw.size, bw.err
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
diff --git a/content/2013/bestpractices/shortercode5.go b/content/2013/bestpractices/shortercode5.go
deleted file mode 100644
index b755b52..0000000
--- a/content/2013/bestpractices/shortercode5.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-type binWriter struct {
-	w    io.Writer
-	size int64
-	err  error
-}
-
-// Write writes a value to the provided writer in little endian form.
-func (w *binWriter) Write(v interface{}) {
-	if w.err != nil {
-		return
-	}
-	switch x := v.(type) { // HL
-	case string:
-		w.Write(int32(len(x)))
-		w.Write([]byte(x))
-	case int:
-		w.Write(int64(x))
-	default:
-		if w.err = binary.Write(w.w, binary.LittleEndian, v); w.err == nil {
-			w.size += int64(binary.Size(v))
-		}
-	}
-}
-
-func (g *Gopher) WriteTo(w io.Writer) (int64, error) {
-	bw := &binWriter{w: w}
-	bw.Write(g.Name)
-	bw.Write(g.AgeYears)
-	return bw.size, bw.err
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
diff --git a/content/2013/bestpractices/shortercode6.go b/content/2013/bestpractices/shortercode6.go
deleted file mode 100644
index 596224c..0000000
--- a/content/2013/bestpractices/shortercode6.go
+++ /dev/null
@@ -1,66 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"encoding/binary"
-	"io"
-	"log"
-	"os"
-)
-
-type Gopher struct {
-	Name     string
-	AgeYears int
-}
-
-type binWriter struct {
-	w   io.Writer
-	buf bytes.Buffer // HL
-	err error
-}
-
-// Write writes a value to the provided writer in little endian form.
-func (w *binWriter) Write(v interface{}) {
-	if w.err != nil {
-		return
-	}
-	switch x := v.(type) {
-	case string:
-		w.Write(int32(len(x)))
-		w.Write([]byte(x))
-	case int:
-		w.Write(int64(x))
-	default:
-		w.err = binary.Write(&w.buf, binary.LittleEndian, v) // HL
-	}
-}
-
-// Flush writes any pending values into the writer if no error has occurred.
-// If an error has occurred, earlier or with a write by Flush, the error is
-// returned.
-func (w *binWriter) Flush() (int64, error) {
-	if w.err != nil {
-		return 0, w.err
-	}
-	return w.buf.WriteTo(w.w)
-}
-
-func (g *Gopher) WriteTo(w io.Writer) (int64, error) {
-	bw := &binWriter{w: w}
-	bw.Write(g.Name)
-	bw.Write(g.AgeYears)
-	return bw.Flush() // HL
-}
-
-func main() {
-	g := &Gopher{
-		Name:     "Gophertiti",
-		AgeYears: 3382,
-	}
-
-	if _, err := g.WriteTo(os.Stdout); err != nil {
-		log.Printf("DumpBinary: %v\n", err)
-	}
-}
diff --git a/content/2013/distsys.slide b/content/2013/distsys.slide
deleted file mode 100644
index dc1acd4..0000000
--- a/content/2013/distsys.slide
+++ /dev/null
@@ -1,446 +0,0 @@
-Go, for Distributed Systems
-
-Russ Cox
-Google
-
-* About the Talk
-
-I gave variants of this talk three times in 2013, once at SOSP's Programming Languages and Operating Systems (PLOS) workshop, once at MIT Lincoln Lab's annual Software Engineering Symposium, and once at Twitter's Cambridge, Massachusetts office.
-
-The talk assumes an audience familiar with the basic problems of building distributed systems. It presents Go's approach to solving some of those problems.
-
-* Go
-
-Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
-
-* History
-
-Design began in late 2007.
-
-- Robert Griesemer, Rob Pike, Ken Thompson
-- Ian Lance Taylor, Russ Cox
-
-Became open source in November 2009.
-
-Developed entirely in the open; very active community.
-Language stable as of Go 1, early 2012.
-
-* Motivation
-
-Started as an answer to software problems at Google:
-
-- multicore processors
-- networked systems
-- massive computation clusters
-- scale: 10⁷ lines of code
-- scale: 10³ programmers
-- scale: 10⁶⁺ machines (design point)
-
-* Go
-
-A simple but powerful and fun language.
-
-- start with C, remove complex parts
-- add interfaces, concurrency
-- also: garbage collection, closures, reflection, strings, ...
-
-For more background on design:
-
-- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more]]
-- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]
-
-* This Talk
-
-Engineering
-
-Interfaces
-
-Concurrency
-
-* Engineering
-
-* Engineering: Imports
-
-.play distsys/hello0.go
-
-import "fmt" guaranteed to read exactly one file.
-
-* Engineering: Imports
-
-	$ go get github.com/golang/glog
-
-.play distsys/hello1.go
-
-Still guaranteed to read exactly one file.
-
-Import name space is decentralized.
-
-* Engineering: Program Rewrites
-
-	$ gofmt -r 'glog.Infof -> glog.Errorf' hello1.go
-	package main
-	
-	import (
-		"flag"
-		"github.com/golang/glog"
-	)
-	
-	func main() {
-		flag.Set("logtostderr", "true")
-		glog.Errorf("hello, world")
-	}
-	$ 
-
-* Engineering: Garbage Collection
-
-In C and C++, too much programming _and_ API design is about memory management.
-
-Go has garbage collection, only.
-
-Fundamental for interfaces: memory management details do not bifurcate otherwise-similar APIs.
-
-Fundamental for concurrency: too hard to track ownership otherwise.
-
-Of course, adds cost, latency, complexity in run time system.
-
-* Engineering: Garbage Collection
-
-Experience with Java: Uncontrollable cost, too much tuning.
-
-Go lets you limit allocation by controlling memory layout.
-
-Examples:
-
-	type Ring struct {
-		R, W int
-		Data [512]byte
-	}
-
-	type Point struct {
-		X, Y int
-	}
-	
-	type Rectangle struct {
-		Min, Max Point
-	}
-
-* Engineering: Garbage Collection
-
-Garbage collector implementation remains an active area of work and research.
-
-Design decision: Interior pointers are allowed, as are foreign pointers.
-
-- Cannot reuse Java GC algorithms directly.
-- But gives _programmer_ more control over allocation.
-
-Current design: parallel mark-and-sweep.
-With care to use memory wisely, works well in production.
-
-* Interfaces
-
-* Interfaces
-
-An interface defines a set of methods.
-
-	package io
-	
-	type Writer interface {
-		Write(data []byte) (n int, err error)
-	}
-
-* Interfaces
-
-A type implements the interface by implementing the methods.
-
-	package bytes
-	
-	type Buffer struct {
-		...
-	}
-	
-	func (b *Buffer) Write(data []byte) (n int, err error) {
-		...
-	}
-
-* Interfaces
-
-An implementation of an interface can be assigned to a variable of that interface type.
-
-	package fmt
-	
-	func Fprintf(w io.Writer, format string, args ...interface{})
-
-* Interfaces
-
-.play distsys/writebuffer.go /^func.main/+1,/^}/-1
-
-* Interfaces
-
-Reader is the obvious counterpart.
-
-	package io
-
-	type Reader interface {
-		Read(data []byte) (n int, err error)
-	}
-
-	func Copy(dst Writer, src Reader) (n int64, err error)
-
-* Interfaces
-
-.play distsys/writebuffer2.go /^func.main/+1,/^}/-1
-
-* Interfaces
-
-Reader and Writer turn out to be very useful.
-
-Adapters
-
-	package io
-	
-	func MultiWriter(writers ...Writer) Writer
-	    MultiWriter creates a writer that duplicates its writes to all the
-	    provided writers, similar to the Unix tee(1) command.
-
-Chaining
-
-	package gzip // compress/gzip
-	
-	func NewWriter(w io.Writer) *Writer
-
-Also: buffered writers, encrypted writers, limited writers, HTTP responses.
-
-* Interfaces
-
-Networking:
-
-	package net
-
-	type Conn interface {
-		Read(b []byte) (n int, err error)
-		Write(b []byte) (n int, err error)
-		Close() error
-	
-		LocalAddr() Addr
-		RemoteAddr() Addr
-	
-		SetDeadline(t time.Time) error
-		SetReadDeadline(t time.Time) error
-		SetWriteDeadline(t time.Time) error
-	}
-
-	func Dial(network, address string) (Conn, error)
-
-* Interfaces
-
-Networking example:
-
-.play distsys/finger.go /^func.finger/+1,/^}/-1
-
-* Interfaces
-
-Networking client as adapter function:
-
-	package smtp
-	
-	func NewClient(conn net.Conn, host string) (*Client, error)
-
-Other implementations of net.Conn: testing, SSL, ...
-
-* Interface Lessons
-
-Key advantages:
-
-- no dependence between interface and implementation
-- expressive composition
-- easy testing
-- avoids overdesign, rigid hierarchy of inheritance-based OO
-
-The source of all generality in the Go language.
-
-* Concurrency
-
-* Concurrency vs Parallelism
-
-Concurrency is about dealing with lots of things at once.
-
-Parallelism is about doing lots of things at once.
-
-Concurrency is about structure, parallelism is about execution.
-
-Concurrency provides a way to structure a solution to solve a problem that may be parallelizable (or not).
-
-* Concurrency vs Parallelism
-
-Concurrent: mouse, keyboard, display, and disk drivers in operating system.
-
-Parallel: vector dot product, matrix multiply.
-
-Concurrency can enable parallelism but is useful on its own: modern programs must deal with many things at once.
-
-* Concurrency
-
-Go provides two important concepts:
-
-A goroutine is a thread of control within the program, with its own local variables and stack. Cheap, easy to create.
-
-A channel carries typed messages between goroutines.
-
-* Concurrency
-
-.play distsys/hello.go
-
-* Concurrency: CSP
-
-Channels adopted from Hoare's Communicating Sequential Processes.
-
-- Orthogonal to rest of language
-- Can keep familiar model for computation
-- Focus on _composition_ of regular code
-
-Go _enables_ simple, safe concurrent programming.
-It doesn't _forbid_ bad programming.
-
-Caveat: not purely memory safe; sharing is legal.
-Passing a pointer over a channel is idiomatic.
-
-Experience shows this is practical.
-
-* Concurrency
-
-Sequential network address resolution, given a work list:
-
-.play distsys/addr1.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Parallel network address resolution, given a work list:
-
-.play distsys/addr2.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Aside: can abstract this pattern.
-
-.play distsys/addr3.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Aside: can abstract this pattern further (hypothetical):
-
-	var par ParallelDo
-
-	for _, w := range worklist {
-		w := w // copy iteration variable
-		par.Do(func() {
-			w.addrs, w.err = net.LookupHost(w.host)			
-		})
-	)
-
-	par.Wait()
-
-But it's still useful to be able to construct alternate patterns.
-
-* Concurrency
-
-Bounded parallelism:
-
-.play distsys/addr4.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Bounded parallelism, 2:
-
-.play distsys/addr5.go /lookup/+1,/^}/-1
-
-* Concurrency:
-
-Aside: can abstract (still hypothetical):
-
-	par.Limit(10)
-
-	for _, w := range work {
-		w := w // copy iteration variable
-		par.Do(func() {
-			w.addrs, w.err = net.LookupHost(w.host)			
-		})
-	)
-
-	par.Wait()
-
-* Concurrency
-
-Example: replicated storage with read and write quorums.
-
-	const (
-		F = 2
-		N = 5 // >= 2F + 1
-		ReadQuorum = F + 1
-		WriteQuorum = N - F
-	)
-
-* Concurrency
-
-Replicated write, returning after enough writes have succeeded.
-
-.play distsys/replwrite.go /^func.Write/+2,/if.delay/-2/
-
-* Concurrency
-
-Replicated read, returning after enough reads have been gathered.
-
-.play distsys/replread.go /^func.Read/+2,/if.delay/-2/
-
-* Concurrency
-
-Select allows choosing between multiple channel operations.
-
-Example, chat program:
-
-	for {
-		select {
-		case event := <-ui:
-			// process user interface event
-		case msg := <-server:
-			// process server message
-		case t := <-tick:
-			// time has elapsed
-		}
-	}
-
-* Concurrency Lessons
-
-- Key feature for building distributed systems.
-- Supported by closures and garbage collection.
-- Message passing inside program, also outside program.
-
-Most important:
-
-- Do not communicate by sharing memory.
-- Instead, share memory by communicating.
-
-* Production Use
-
-vitess/vtocc, MySQL query balancer
-
-- serves all of YouTube's MySQL queries
-- months of crash-free and leak-free operation
-
-groupcache
-
-- distributed in-memory immutable key-value cache
-- used by (parts of) dl.google.com, Blogger, Google Code, Google Fiber, production monitoring systems
-
-* More information and related talks
-
-http://golang.org/
-
-rsc@golang.org
-
-Videos:
-
-- Concurrency is not parallelism [[http://vimeo.com/49718712][video]]
-- Go concurrency patterns [[http://www.youtube.com/watch?v=f6kdp27TYZs][video]]
-- Advanced Go concurrency patterns [[http://www.youtube.com/watch?v=QDDwwePbDtw][video]]
-
-Questions?
diff --git a/content/2013/distsys/addr1.go b/content/2013/distsys/addr1.go
deleted file mode 100644
index e8cea40..0000000
--- a/content/2013/distsys/addr1.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	for _, w := range worklist {
-		w.addrs, w.err = LookupHost(w.host)
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2013/distsys/addr2.go b/content/2013/distsys/addr2.go
deleted file mode 100644
index 272e539..0000000
--- a/content/2013/distsys/addr2.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	done := make(chan bool, len(worklist))
-
-	for _, w := range worklist {
-		go func(w *Work) {
-			w.addrs, w.err = LookupHost(w.host)
-			done <- true
-		}(w)
-	}
-
-	for i := 0; i < len(worklist); i++ {
-		<-done
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2013/distsys/addr3.go b/content/2013/distsys/addr3.go
deleted file mode 100644
index 4dfc090..0000000
--- a/content/2013/distsys/addr3.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"sync"
-	"time"
-)
-
-func lookup() {
-	var group sync.WaitGroup
-
-	for _, w := range worklist {
-		group.Add(1)
-		go func(w *Work) {
-			w.addrs, w.err = LookupHost(w.host)
-			group.Done()
-		}(w)
-	}
-
-	group.Wait()
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2013/distsys/addr4.go b/content/2013/distsys/addr4.go
deleted file mode 100644
index 76e4665..0000000
--- a/content/2013/distsys/addr4.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	const max = 2
-
-	done := make(chan bool, len(worklist))
-	limit := make(chan bool, max)
-
-	for _, w := range worklist {
-		go func(w *Work) {
-			limit <- true
-			w.addrs, w.err = LookupHost(w.host)
-			<-limit
-			done <- true
-		}(w)
-	}
-
-	for i := 0; i < len(worklist); i++ {
-		<-done
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2013/distsys/addr5.go b/content/2013/distsys/addr5.go
deleted file mode 100644
index 38b9e22..0000000
--- a/content/2013/distsys/addr5.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	const max = 2
-
-	n := 0
-	done := make(chan bool, max)
-
-	for _, w := range worklist {
-		if n++; n > max {
-			<-done
-			n--
-		}
-		go func(w *Work) {
-			w.addrs, w.err = LookupHost(w.host)
-			done <- true
-		}(w)
-	}
-	for ; n > 0; n-- {
-		<-done
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2013/distsys/finger.go b/content/2013/distsys/finger.go
deleted file mode 100644
index a9677c0..0000000
--- a/content/2013/distsys/finger.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bufio"
-	"io"
-	"log"
-	"net"
-	"os"
-	"os/exec"
-)
-
-func main() {
-	if len(os.Args) > 1 && os.Args[1] == "serve" {
-		serve()
-	}
-	finger()
-}
-
-func finger() {
-	c, err := net.Dial("tcp", "localhost:finger")
-	if err != nil {
-		log.Fatal(err)
-	}
-	io.WriteString(c, "rsc\n")
-	io.Copy(os.Stdout, c)
-}
-
-func serve() {
-	l, err := net.Listen("tcp", "localhost:finger")
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		c, err := l.Accept()
-		if err != nil {
-			log.Fatal(err)
-		}
-		go serveConn(c)
-	}
-}
-
-func serveConn(c net.Conn) {
-	defer c.Close()
-
-	b := bufio.NewReader(c)
-	l, err := b.ReadString('\n')
-	if err != nil {
-		return
-	}
-
-	cmd := exec.Command("finger", l[:len(l)-1])
-	cmd.Stdout = c
-	cmd.Stderr = c
-	cmd.Run()
-}
diff --git a/content/2013/distsys/hello.go b/content/2013/distsys/hello.go
deleted file mode 100644
index 32efb51..0000000
--- a/content/2013/distsys/hello.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	c := make(chan string)
-	go func() {
-		c <- "Hello"
-		c <- "World"
-	}()
-	fmt.Println(<-c, <-c)
-}
diff --git a/content/2013/distsys/hello0.go b/content/2013/distsys/hello0.go
deleted file mode 100644
index 270d531..0000000
--- a/content/2013/distsys/hello0.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("hello, world\n")
-}
diff --git a/content/2013/distsys/hello1.go b/content/2013/distsys/hello1.go
deleted file mode 100644
index b423278..0000000
--- a/content/2013/distsys/hello1.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-
-	"github.com/golang/glog"
-)
-
-func main() {
-	flag.Set("logtostderr", "true")
-	glog.Infof("hello, world")
-}
diff --git a/content/2013/distsys/replread.go b/content/2013/distsys/replread.go
deleted file mode 100644
index 8c301fe..0000000
--- a/content/2013/distsys/replread.go
+++ /dev/null
@@ -1,154 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math"
-	"math/rand"
-	"sync"
-	"time"
-)
-
-const (
-	F           = 2
-	N           = 5
-	ReadQuorum  = F + 1
-	WriteQuorum = N - F
-)
-
-var delay = false
-
-type Server struct {
-	mu   sync.Mutex
-	data map[string]*Data
-}
-
-type Data struct {
-	Key   string
-	Value string
-	Time  time.Time
-}
-
-func (srv *Server) Delay() {
-	if delay == false {
-		return
-	}
-	time.Sleep(time.Duration(math.Abs(rand.NormFloat64()*1e9 + 0.1e9)))
-}
-
-func (srv *Server) Write(req *Data) {
-	t0 := time.Now()
-	defer func() {
-		if delay {
-			fmt.Printf("write took %.3f seconds\n", time.Since(t0).Seconds())
-		}
-	}()
-
-	srv.mu.Lock()
-	defer srv.mu.Unlock()
-	srv.Delay()
-
-	if srv.data == nil {
-		srv.data = make(map[string]*Data)
-	}
-	if d := srv.data[req.Key]; d == nil || d.Time.Before(req.Time) {
-		srv.data[req.Key] = req
-	}
-}
-
-func (srv *Server) Read(key string) *Data {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("read took %.3f seconds\n", time.Since(t0).Seconds())
-	}()
-
-	srv.mu.Lock()
-	defer srv.mu.Unlock()
-	srv.Delay()
-
-	return srv.data[key]
-}
-
-func better(x, y *Data) *Data {
-	if x == nil {
-		return y
-	}
-	if y == nil || y.Time.Before(x.Time) {
-		return x
-	}
-	return y
-}
-
-func Write(req *Data) {
-	t0 := time.Now()
-	done := make(chan bool, len(servers))
-
-	for _, srv := range servers {
-		go func(srv *Server) {
-			srv.Write(req)
-			done <- true
-		}(srv)
-	}
-
-	for n := 0; n < WriteQuorum; n++ {
-		<-done
-	}
-
-	if delay {
-		fmt.Printf("write committed at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-	for n := WriteQuorum; n < N; n++ {
-		<-done
-	}
-	if delay {
-		fmt.Printf("all replicas written at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-}
-
-func Read(key string) {
-	t0 := time.Now()
-	replies := make(chan *Data, len(servers))
-
-	for _, srv := range servers {
-		go func(srv *Server) {
-			replies <- srv.Read(key)
-		}(srv)
-	}
-
-	var d *Data
-	for n := 0; n < ReadQuorum; n++ {
-		d = better(d, <-replies)
-	}
-
-	if delay {
-		fmt.Printf("read committed at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-
-	for n := ReadQuorum; n < N; n++ {
-		<-replies
-	}
-	if delay {
-		fmt.Printf("all replicas read at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-}
-
-var servers []*Server
-
-func main() {
-	servers = make([]*Server, N)
-	for i := range servers {
-		servers[i] = new(Server)
-	}
-
-	rand.Seed(time.Now().UnixNano())
-
-	delay = false
-	Write(&Data{"hello", "there", time.Now()})
-	time.Sleep(1 * time.Millisecond)
-
-	Write(&Data{"hello", "world", time.Now()})
-
-	delay = true
-	Read("hello")
-}
diff --git a/content/2013/distsys/replwrite.go b/content/2013/distsys/replwrite.go
deleted file mode 100644
index c7fa03c..0000000
--- a/content/2013/distsys/replwrite.go
+++ /dev/null
@@ -1,154 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math"
-	"math/rand"
-	"sync"
-	"time"
-)
-
-const (
-	F           = 2
-	N           = 5
-	ReadQuorum  = F + 1
-	WriteQuorum = N - F
-)
-
-var delay = false
-
-type Server struct {
-	mu   sync.Mutex
-	data map[string]*Data
-}
-
-type Data struct {
-	Key   string
-	Value string
-	Time  time.Time
-}
-
-func (srv *Server) Delay() {
-	if delay == false {
-		return
-	}
-	time.Sleep(time.Duration(math.Abs(rand.NormFloat64()*1e9 + 0.1e9)))
-}
-
-func (srv *Server) Write(req *Data) {
-	t0 := time.Now()
-	defer func() {
-		if delay {
-			fmt.Printf("write took %.3f seconds\n", time.Since(t0).Seconds())
-		}
-	}()
-
-	srv.mu.Lock()
-	defer srv.mu.Unlock()
-	srv.Delay()
-
-	if srv.data == nil {
-		srv.data = make(map[string]*Data)
-	}
-	if d := srv.data[req.Key]; d == nil || d.Time.Before(req.Time) {
-		srv.data[req.Key] = req
-	}
-}
-
-func (srv *Server) Read(key string) *Data {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("read took %.3f seconds\n", time.Since(t0).Seconds())
-	}()
-
-	srv.mu.Lock()
-	defer srv.mu.Unlock()
-	srv.Delay()
-
-	return srv.data[key]
-}
-
-func better(x, y *Data) *Data {
-	if x == nil {
-		return y
-	}
-	if y == nil || y.Time.Before(x.Time) {
-		return x
-	}
-	return y
-}
-
-func Write(req *Data) {
-	t0 := time.Now()
-	done := make(chan bool, len(servers))
-
-	for _, srv := range servers {
-		go func(srv *Server) {
-			srv.Write(req)
-			done <- true
-		}(srv)
-	}
-
-	for n := 0; n < WriteQuorum; n++ {
-		<-done
-	}
-
-	if delay {
-		fmt.Printf("write committed at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-	for n := WriteQuorum; n < N; n++ {
-		<-done
-	}
-	if delay {
-		fmt.Printf("all replicas written at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-}
-
-func Read(key string) {
-	t0 := time.Now()
-	replies := make(chan *Data, len(servers))
-
-	for _, srv := range servers {
-		go func(srv *Server) {
-			replies <- srv.Read(key)
-		}(srv)
-	}
-
-	var d *Data
-	for n := 0; n < ReadQuorum; n++ {
-		d = better(d, <-replies)
-	}
-
-	if delay {
-		fmt.Printf("read committed at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-
-	for n := ReadQuorum; n < N; n++ {
-		<-replies
-	}
-	if delay {
-		fmt.Printf("all replicas read at %.3f seconds\n", time.Since(t0).Seconds())
-	}
-}
-
-var servers []*Server
-
-func main() {
-	servers = make([]*Server, N)
-	for i := range servers {
-		servers[i] = new(Server)
-	}
-
-	rand.Seed(time.Now().UnixNano())
-
-	delay = false
-	Write(&Data{"hello", "there", time.Now()})
-	time.Sleep(1 * time.Millisecond)
-
-	delay = true
-	Write(&Data{"hello", "world", time.Now()})
-
-	//	Read("hello")
-}
diff --git a/content/2013/distsys/writebuffer.go b/content/2013/distsys/writebuffer.go
deleted file mode 100644
index 94d75c4..0000000
--- a/content/2013/distsys/writebuffer.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"os"
-)
-
-var _ = io.Copy
-
-func main() {
-	b := new(bytes.Buffer)
-	var w io.Writer
-	w = b
-	fmt.Fprintf(w, "hello, %s\n", "world")
-	os.Stdout.Write(b.Bytes())
-}
diff --git a/content/2013/distsys/writebuffer2.go b/content/2013/distsys/writebuffer2.go
deleted file mode 100644
index 5977c7f..0000000
--- a/content/2013/distsys/writebuffer2.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"os"
-)
-
-func main() {
-	b := new(bytes.Buffer)
-	fmt.Fprintf(b, "hello, %s\n", "world")
-	io.Copy(os.Stdout, b)
-}
diff --git a/content/2013/go-sreops.slide b/content/2013/go-sreops.slide
deleted file mode 100644
index 09d045f..0000000
--- a/content/2013/go-sreops.slide
+++ /dev/null
@@ -1,175 +0,0 @@
-Go Language for Ops and Site Reliability Engineering
-
-Gustavo Franco
-Site Reliability Engineer, Google
-http://developers.google.com
-
-* Operations vs Site Reliability Engineering
-
-Operations
-
-- Interrupt driven
-- Repetitive
-- Hard to scale
-
-Site Reliability Engineering
-
-- Project oriented
-- Values automation
-- Focus on scale
-
-* Go Programming Language
-
-"Go is an open source programming environment that makes it easy to build simple,
-reliable, and efficient software." -- golang.org
-
-* Hello OSCON
-
-.play go-sreops/hello.go
-
-  $ go run hello.go -help
-  Usage of /tmp/go-build212699297/command-line-arguments/_obj/a.out:
-    -message="Hello, OSCON!": what to say
-  exit status 2
-
-* Programming for SRE and Ops - State of the Union
-
-- "I will just write a small throw away script for that"
-
-- "I don't want to learn a new language"
-
-- "Language X is awesome and solves everything"
-
-* Programming for SRE and Ops - Where do we go?
-
-- One liners are here to stay
-
-- Throw away scripts too so let's make them better
-
-- Think of languages you can read as a toolkit
-
-- Get very good at writing in just a few of them
-
-* Agenda
-
-- Why Go for Ops and SRE?
-
-- Go features
-
-- Go in production at Google
-
-- Go in production outside Google
-
-- Q&A
-
-* Why Go for Ops and SRE? Simple, reliable and efficient
-
-- Open Source
-
-- One binary to rule them all
-
-- No need for a Makefile, import defined dependencies
-
-- Very fast compilation
-
-* Why Go for Ops and SRE? Simple, reliable and efficient
-
-- Garbage collection
-
-- Readability is easy to achieve via gofmt
-
-- RE2 regular expressions
-
-- Testing, benchmarking and profiling built-in
-
-* Why Go for Ops and SRE? Standard library examples
-
-.link http://golang.org/pkg/fmt fmt
-
-.link http://golang.org/pkg/io/ioutil io/ioutil
-
-.link http://golang.org/pkg/net/http net/http
-
-.link http://golang.org/pkg/os/exec os/exec
-
-.link http://golang.org/pkg/path/filepath path/filepath
-
-.link http://golang.org/pkg/regexp regexp
-
-.link http://golang.org/pkg/strings strings
-
-.link http://golang.org/pkg/text/tabwriter text/tabwriter
-
-.link http://golang.org/pkg/time time
-
-[[godoc.org]] to your needs beyond the standard library
- 
-* Why Go for Ops and SRE? Concurrency via Goroutines
-
-.play go-sreops/goroutines.go
-
-* Why Go for Ops and SRE? Concurrency and Channels
-
-.play go-sreops/goroutines-channels.go /START/,/STOP/
-
-* Go features
-
-- Hashes or dicts? Maps
-
-- Arrays? Yes, but you will probably want to use Slices instead
-
-- Modules are called Packages
-
-- Structs
-
-- Methods
-
-- Pointers without arithmetic operations
-
-Go grows with you - see interfaces and reflection
-
-* Go in production at Google
-
-dl.google.com - OSCON talk by Brad Fitzpatrick Friday, 10:00am
-
-.link http://code.google.com/p/vitess Vitess
-
- vtocc: front-end to MySQL that improves scalability
-
-.link http://code.google.com/p/emtail Emtail
-
- Whitebox monitoring data from logs to a timeseries database
-
-.link http://code.google.com/p/go-commander Go Commander
-
- Command line library for Go
-
-Machine lifecycle management
-
-via App Engine
-
-* Go in production outside Google
-
-.link http://labix.org/pipe Pipe
-
- Unix-like pipelines for Go
-
-.link http://www.gocircuit.org Gocircuit
-
- Inter host Goroutines
-
-.link http://juju.ubuntu.com Juju 
-
- Service orchestration management tool
-
-.link http://www.docker.io Docker
-
- Containers management tool
-
-.link http://www.packer.io Packer 
-
- Tool for creating identical machine images for multiple platforms
-
-* Q&A
-
- Take the tour - [[tour.golang.org]]
diff --git a/content/2013/go-sreops/goroutines-channels.go b/content/2013/go-sreops/goroutines-channels.go
deleted file mode 100644
index 9c149bd..0000000
--- a/content/2013/go-sreops/goroutines-channels.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// START OMIT
-func main() {
-	textChannel := make(chan string)
-	words := []string{"ho!", "hey!"}
-	secs := []int{2, 1}
-	// Create a goroutine per word
-	for i, word := range words {
-		go say(word, secs[i], textChannel) // &
-	}
-	// Wait for response via channel N times
-	for _ = range words {
-		fmt.Println(<-textChannel)
-	}
-}
-
-// say sends word back via channel after sleeping for X secs
-func say(word string, secs int, textChannel chan string) {
-	time.Sleep(time.Duration(secs) * time.Second)
-	textChannel <- word
-}
-
-// STOP OMIT
diff --git a/content/2013/go-sreops/goroutines.go b/content/2013/go-sreops/goroutines.go
deleted file mode 100644
index cec0ef3..0000000
--- a/content/2013/go-sreops/goroutines.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	go say("ho!", 2*time.Second)  // &
-	go say("hey!", 1*time.Second) // &
-
-	// Make main sleep for 4 seconds so goroutines can finish
-	time.Sleep(4 * time.Second)
-}
-
-// say prints text after sleeping for X secs
-func say(text string, secs time.Duration) {
-	time.Sleep(secs)
-	fmt.Println(text)
-}
diff --git a/content/2013/go-sreops/hello.go b/content/2013/go-sreops/hello.go
deleted file mode 100644
index 11bebb1..0000000
--- a/content/2013/go-sreops/hello.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-	"fmt"
-)
-
-var message = flag.String("message", "Hello, OSCON!", "what to say")
-
-func main() {
-	flag.Parse()
-	fmt.Println(*message)
-}
diff --git a/content/2013/go1.1.slide b/content/2013/go1.1.slide
deleted file mode 100644
index 5169819..0000000
--- a/content/2013/go1.1.slide
+++ /dev/null
@@ -1,243 +0,0 @@
-What's new in Go 1.1
-
-Andrew Gerrand
-Gopher
-http://andrewgerrand.com
-@enneff
-http://golang.org
-
-* Go 1.1
-
-Not finished yet. Monday maybe?
-
-* Language changes
-
-* Integer division by zero
-
-Integer division by constant zero is now a compile-time error:
-
-.play go1.1/intdiv.go /func f/,/}/
-
-* Unicode
-
-Byte order marks are now permitted as the first character of a Go source file.
-
-The misuse of "surrogate halves" is now caught by the compiler, libraries, and run-time.
-
-If you don't know what this means, then it likely doesn't matter to you.
-
-* Method values
-
-Sometimes you want to turn a method into a plain function (binding it to its receiver). This is often referred to as "currying".
-
-To do this under Go 1.0, you would use a closure:
-
-.play go1.1/methodvals-old.go /var/,/hello/
-
-Go 1.1 now implements method values, so you can achieve the same thing by simply taking the method as a value:
-
-.play go1.1/methodvals.go /var/,/hello/
-
-* Return requirements (1/2)
-
-Before Go 1.1, a function that returned a value needed an explicit `return` or call to `panic` at the end of the function.
-
-.code go1.1/return-old.go /func slurp/,/^}/
-
-.code go1.1/return-old.go /func min/,/^}/
-
-* Return requirements (2/2)
-
-In Go 1.1, the rule about final "return" statements is more permissive.
-
-.code go1.1/return.go /func slurp/,/^}/
-
-.code go1.1/return.go /func min/,/^}/
-
-* Implementation and tools
-
-* Size of int on 64-bit architectures
-
-Under Go 1.0, `int` and `uint` were 32 bits wide on all systems.
-
-With Go 1.1, both the `gc` and `gccgo` implementations now make `int` and `uint` 64 bits on 64-bit platforms such as AMD64/x86-64.
-
-Among other things, this enables the allocation of slices with more than 2 billion elements on 64-bit platforms.
-
-* Heap size on 64-bit architectures
-
-On 64-bit architectures, the maximum heap size has been enlarged substantially, from a few gigabytes to several tens of gigabytes. (The exact details depend on the system and may change.)
-
-On 32-bit architectures, the heap size has not changed.
-
-* Race detector
-
-A major addition to the tools is a race detector, a way to find bugs in concurrent programs. To enable it, set the `-race` flag when building or testing your program.
-
-.play go1.1/race.go
-
-For now, it is only available on 64-bit Linux, OS X, and Windows systems.
-
-* The go command
-
-The go command now gives better error messages:
-
-	$ go build foo/quxx
-	can't load package: package foo/quxx: cannot find package "foo/quxx" in any of:
-		/home/you/go/src/pkg/foo/quxx (from $GOROOT)
-		/home/you/src/foo/quxx (from $GOPATH) 
-
-To help users better understand workspaces and `GOPATH`, the `go`get` command will fail if `GOPATH` is not set:
-
-	$ GOPATH= go get code.google.com/p/foo/quxx
-	package code.google.com/p/foo/quxx: cannot download, $GOPATH not set.
-	For more details see: go help gopath
-
-The `go`get` command will also fail if `GOPATH` and `GOROOT` have the same value:
-
-	$ GOPATH=$GOROOT go get code.google.com/p/foo/quxx
-	warning: GOPATH set to GOROOT (/home/you/go) has no effect
-	package code.google.com/p/foo/quxx: cannot download, $GOPATH must not be set to $GOROOT.
-	For more details see: go help gopath
-
-* The go test command (1/2)
-
-The `go`test` command no longer deletes the binary when run with profiling enabled, to make it easier to analyze the profile. After running
-
-	$ go test -cpuprofile cpuprof.out mypackage
-
-the file `mypackage.test` will be left around for analysis.
-
-* The go test command (2/2)
-
-The `go`test` command can now generate profiling information that reports where goroutines are blocked, enabled with the `-blockprofile` option. The information is presented as a [[go1.1/blockprofile.svg][blocking profile]].
-
-.image go1.1/blockprofile.png
-
-* Build constraints
-
-The "go1.1" tag has been added to the list of default build constraints.
-
-To build a file only with Go 1.1 and above, add this build constraint:
-
-	// +build go1.1
-
-To build a file only with Go 1.0.x, use the converse constraint:
-
-	// +build !go1.1
-
-This permits packages to take advantage of the new features in Go 1.1 while remaining compatible with earlier versions of Go.
-
-* Additional platforms
-
-The Go 1.1 tool chain adds experimental support for `freebsd/arm`, `netbsd/386`, `netbsd/amd64`, `netbsd/arm`, `openbsd/386` and `openbsd/amd64` platforms.
-
-An ARMv6 or later processor is required for `freebsd/arm` or `netbsd/arm`.
-
-Go 1.1 adds experimental support for `cgo` on `linux/arm`.
-
-* Standard library
-
-* bufio.Scanner (1/2)
-
-The old way:
-
-.code go1.1/scanner.go /STARTold/,/STOP/
-
-The new way:
-
-.play go1.1/scanner.go /STARTnew/,/STOP/
-
-* bufio.Scanner (2/2)
-
-Custom split functions:
-
-	type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)
-
-For example, counting words:
-
-.play go1.1/scanner2.go /START/,/STOP/
-
-* reflect (1/2)
-
-The new functions `ChanOf`, `MapOf` and `SliceOf` construct new types from existing types, for example to construct the type `chan`T` given only `T`.
-
-.play go1.1/chanof.go /func/,$
-
-* reflect (2/2)
-
-The new function `MakeFunc` creates a wrapper function to make it easier to call a function with existing `Values`.
-
-.play go1.1/makefunc.go /func/,$
-
-* time (1/4)
-
-On FreeBSD, Linux, NetBSD, OS X and OpenBSD, previous versions of the `time` package returned times with microsecond precision. Go 1.1 now provides nanosecond precision on these systems.
-
-* time (2/4)
-
-The new method on `time.Time`, `YearDay`, provides the one-indexed day number of the year.
-
-.play go1.1/yearday.go /YearDay/
-
-* time (3/4)
-
-The `Timer` type has a new method `Reset` that modifies the timer to expire after a specified duration. This helps to avoid unnecessary repeated `Timer` allocations.
-
-.play go1.1/timer.go /func main/,$
-
-* time (4/4)
-
-The new function `ParseInLocation` parses the time in the context of a time zone, ignoring time zone information in the parsed string.
-
-#.play go1.1/ParseInLocation.go
-
-This function addresses a common source of confusion in the time API.
-
-* bytes and strings
-
-`TrimPrefix` and `TrimSuffix` functions have been added to the `bytes` and `strings` packages.
-
-Code under Go 1.0 like this:
-	
-	s := "Please pass the salt"
-	if p := "Please "; strings.HasPrefix(s, p) {
-		s = s[len(p):]
-	}
-
-May now be rewritten as:
-
-	s := "Please pass the salt"
-	s = strings.TrimPrefix(s, "Please ")
-
-* Exp and old subtrees moved
-
-The exp and old source subtrees, which are not included in binary distributions, have been moved to the new `go.exp` sub-repository at `golang.org/x/exp`.
-
-To access the `ssa` package, for example, run
-
-	$ go get golang.org/x/exp/ssa
-
-and then in Go source,
-
-	import "golang.org/x/exp/ssa"
-
-The old package `exp/norm` has also been moved, but to a new repository `go.text`, where the Unicode APIs and other text-related packages will be developed.
-
-* Performance
-
-* Performance
-
-Code compiled with the Go 1.1 gc tool suite should be noticeably better for most Go programs.
-
-Improvements relative to Go 1.0 seem to be about 30%-40%, sometimes much more, but occasionally less or even non-existent.
-
-Major changes include:
-
-- Better code generation by the gc compilers,
-- In-lining of small functions by the gc compilers,
-- A new map implementation that uses less memory and CPU time,
-- A more parallel and precise garbage collector implementation,
-- A new scheduler,
-- Tighter coupling of the run-time and network libraries, resulting in fewer context switches on network operations.
-
diff --git a/content/2013/go1.1/blockprofile.png b/content/2013/go1.1/blockprofile.png
deleted file mode 100644
index 7238de3..0000000
--- a/content/2013/go1.1/blockprofile.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/go1.1/blockprofile.svg b/content/2013/go1.1/blockprofile.svg
deleted file mode 100644
index 241a2c9..0000000
--- a/content/2013/go1.1/blockprofile.svg
+++ /dev/null
@@ -1,615 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>

-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

-	 width="864px" height="864px" viewBox="0 0 864 864" enable-background="new 0 0 864 864" xml:space="preserve">

-<script  type="text/ecmascript">

-	<![CDATA[
-// SVGPan
-// http://www.cyberz.org/blog/2009/12/08/svgpan-a-javascript-svg-panzoomdrag-library/
-// Local modification: if(true || ...) below to force panning, never moving.
-// Local modification: add clamping to fix bug in handleMouseWheel.
-
-/**
- *  SVGPan library 1.2
- * ====================
- *
- * Given an unique existing element with id "viewport", including the
- * the library into any SVG adds the following capabilities:
- *
- *  - Mouse panning
- *  - Mouse zooming (using the wheel)
- *  - Object dargging
- *
- * Known issues:
- *
- *  - Zooming (while panning) on Safari has still some issues
- *
- * Releases:
- *
- * 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui
- *	Fixed a bug with browser mouse handler interaction
- *
- * 1.1, Wed Feb  3 17:39:33 GMT 2010, Zeng Xiaohui
- *	Updated the zoom code to support the mouse wheel on Safari/Chrome
- *
- * 1.0, Andrea Leofreddi
- *	First release
- *
- * This code is licensed under the following BSD license:
- *
- * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- *    1. Redistributions of source code must retain the above copyright notice, this list of
- *       conditions and the following disclaimer.
- *
- *    2. Redistributions in binary form must reproduce the above copyright notice, this list
- *       of conditions and the following disclaimer in the documentation and/or other materials
- *       provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of Andrea Leofreddi.
- */
-
-var root = document.documentElement;
-
-var state = 'none', stateTarget, stateOrigin, stateTf;
-
-setupHandlers(root);
-
-/**
- * Register handlers
- */
-function setupHandlers(root){
-	setAttributes(root, {
-		"onmouseup" : "add(evt)",
-		"onmousedown" : "handleMouseDown(evt)",
-		"onmousemove" : "handleMouseMove(evt)",
-		"onmouseup" : "handleMouseUp(evt)",
-		//"onmouseout" : "handleMouseUp(evt)", // Decomment this to stop the pan functionality when dragging out of the SVG element
-	});
-
-	if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0)
-		window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari
-	else
-		window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
-
-	var g = svgDoc.getElementById("svg");
-	g.width = "100%";
-	g.height = "100%";
-}
-
-/**
- * Instance an SVGPoint object with given event coordinates.
- */
-function getEventPoint(evt) {
-	var p = root.createSVGPoint();
-
-	p.x = evt.clientX;
-	p.y = evt.clientY;
-
-	return p;
-}
-
-/**
- * Sets the current transform matrix of an element.
- */
-function setCTM(element, matrix) {
-	var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
-
-	element.setAttribute("transform", s);
-}
-
-/**
- * Dumps a matrix to a string (useful for debug).
- */
-function dumpMatrix(matrix) {
-	var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n  " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n  0, 0, 1 ]";
-
-	return s;
-}
-
-/**
- * Sets attributes of an element.
- */
-function setAttributes(element, attributes){
-	for (i in attributes)
-		element.setAttributeNS(null, i, attributes[i]);
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseWheel(evt) {
-	if(evt.preventDefault)
-		evt.preventDefault();
-
-	evt.returnValue = false;
-
-	var svgDoc = evt.target.ownerDocument;
-
-	var delta;
-
-	if(evt.wheelDelta)
-		delta = evt.wheelDelta / 3600; // Chrome/Safari
-	else
-		delta = evt.detail / -90; // Mozilla
-
-	var z = 1 + delta; // Zoom factor: 0.9/1.1
-
-	// Clamp to reasonable values.
-	// The 0.1 check is important because
-	// a very large scroll can turn into a
-	// negative z, which rotates the image 180 degrees.
-	if(z < 0.1)
-		z = 0.1;
-	if(z > 10.0)
-		z = 10.0;
-
-	var g = svgDoc.getElementById("viewport");
-
-	var p = getEventPoint(evt);
-
-	p = p.matrixTransform(g.getCTM().inverse());
-
-	// Compute new scale matrix in current mouse position
-	var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y);
-
-        setCTM(g, g.getCTM().multiply(k));
-
-	stateTf = stateTf.multiply(k.inverse());
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseMove(evt) {
-	if(evt.preventDefault)
-		evt.preventDefault();
-
-	evt.returnValue = false;
-
-	var svgDoc = evt.target.ownerDocument;
-
-	var g = svgDoc.getElementById("viewport");
-
-	if(state == 'pan') {
-		// Pan mode
-		var p = getEventPoint(evt).matrixTransform(stateTf);
-
-		setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
-	} else if(state == 'move') {
-		// Move mode
-		var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse());
-
-		setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM()));
-
-		stateOrigin = p;
-	}
-}
-
-/**
- * Handle click event.
- */
-function handleMouseDown(evt) {
-	if(evt.preventDefault)
-		evt.preventDefault();
-
-	evt.returnValue = false;
-
-	var svgDoc = evt.target.ownerDocument;
-
-	var g = svgDoc.getElementById("viewport");
-
-	if(true || evt.target.tagName == "svg") {
-		// Pan mode
-		state = 'pan';
-
-		stateTf = g.getCTM().inverse();
-
-		stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
-	} else {
-		// Move mode
-		state = 'move';
-
-		stateTarget = evt.target;
-
-		stateTf = g.getCTM().inverse();
-
-		stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
-	}
-}
-
-/**
- * Handle mouse button release event.
- */
-function handleMouseUp(evt) {
-	if(evt.preventDefault)
-		evt.preventDefault();
-
-	evt.returnValue = false;
-
-	var svgDoc = evt.target.ownerDocument;
-
-	if(state == 'pan' || state == 'move') {
-		// Quit pan mode
-		state = '';
-	}
-}
-
-

-		]]>

-</script>

-<g id="viewport_1_" transform="translate(0,0)">

-	<g id="viewport" transform="scale(1 1) rotate(0) translate(4 880)">

-		<title>rpc.test; 558.446 seconds</title>

-		<polygon fill="#FFFFFF" stroke="#FFFFFF" points="-4,5 -4,-880 1124,-880 1124,5 		"/>

-		<g id="node1">

-			<title>Legend</title>

-			<text transform="matrix(1 0 0 1 93.166 -848)" font-family="'Times-Roman'" font-size="24">rpc.test</text>

-			<text transform="matrix(1 0 0 1 93.166 -819.2002)" font-family="'Times-Roman'" font-size="24">Total seconds: 558.446</text>

-			<text transform="matrix(1 0 0 1 93.166 -790.4004)" font-family="'Times-Roman'" font-size="24">Focusing on: 558.446</text>

-			<text transform="matrix(1 0 0 1 93.166 -761.5996)" font-family="'Times-Roman'" font-size="24">Dropped nodes with &lt;= 2.792 abs(seconds)</text>

-			<text transform="matrix(1 0 0 1 93.166 -732.7998)" font-family="'Times-Roman'" font-size="24">Dropped edges with &lt;= 0.558 seconds</text>

-		</g>

-		<g id="node2">

-			<title>N1</title>

-			<polygon fill="none" stroke="#000000" points="618.994,-818.301 537.006,-818.301 537.006,-781.699 618.994,-781.699 			"/>

-			<text transform="matrix(1 0 0 1 562.8926 -806.4004)" font-family="'Times-Roman'" font-size="8">gosched0</text>

-			<text transform="matrix(1 0 0 1 569.3359 -796.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 544.6719 -787.2002)" font-family="'Times-Roman'" font-size="8">of 558.446 (100.0%)</text>

-		</g>

-		<g id="node6">

-			<title>N5</title>

-			<polygon fill="none" stroke="#000000" points="223.994,-669.301 146.006,-669.301 146.006,-632.699 223.994,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 158.7871 -657.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.func·006</text>

-			<text transform="matrix(1 0 0 1 174.3359 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 153.6719 -638.2002)" font-family="'Times-Roman'" font-size="8">of 163.420 (29.3%)</text>

-		</g>

-		<g id="edge3">

-			<title>N1-&gt;N5</title>

-			<path fill="none" stroke="#000000" stroke-width="1.7558" d="M571.154-781.584c-7.875,17.575-22.563,44-44.154,57.584

-				c-45.462,28.601-66.795,7.656-119.5,18c-60.197,11.814-128.676,29.009-173.575,40.803"/>

-			<polygon stroke="#000000" points="234.718,-661.786 224.156,-662.618 232.932,-668.554 			"/>

-			<text transform="matrix(1 0 0 1 408 -691.4004)" font-family="'Times-Roman'" font-size="14">163.420</text>

-		</g>

-		<g id="node4">

-			<title>N3</title>

-			<polygon fill="none" stroke="#000000" points="420.305,-669.301 335.695,-669.301 335.695,-632.699 420.305,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 343.1309 -657.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.(*service).call</text>

-			<text transform="matrix(1 0 0 1 370.877 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 350.2129 -638.2002)" font-family="'Times-Roman'" font-size="8">of 166.609 (29.8%)</text>

-		</g>

-		<g id="edge7">

-			<title>N1-&gt;N3</title>

-			<path fill="none" stroke="#000000" stroke-width="1.7901" d="M569.582-781.587C560.849-765.012,545.837-740.252,527-724

-				c-1.096,0.945-59.872,29.239-103.265,50.071"/>

-			<polygon stroke="#000000" points="424.99,-670.649 414.461,-669.478 421.962,-676.96 			"/>

-			<text transform="matrix(1 0 0 1 491 -691.4004)" font-family="'Times-Roman'" font-size="14">166.609</text>

-		</g>

-		<g id="node16">

-			<title>N15</title>

-			<polygon fill="none" stroke="#000000" points="762.994,-669.301 693.006,-669.301 693.006,-632.699 762.994,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 706.5605 -657.4004)" font-family="'Times-Roman'" font-size="8">runtime.main</text>

-			<text transform="matrix(1 0 0 1 713.3359 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 700.6719 -638.2002)" font-family="'Times-Roman'" font-size="8">of 12.226 (2.2%)</text>

-		</g>

-		<g id="edge9">

-			<title>N1-&gt;N15</title>

-			<path fill="none" stroke="#000000" d="M595.796-781.56c26.613,26.081,76.886,75.349,107.186,105.041"/>

-			<polygon stroke="#000000" points="705.535,-678.916 710.227,-669.417 700.635,-673.917 			"/>

-			<text transform="matrix(1 0 0 1 687 -691.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="node8">

-			<title>N7</title>

-			<polygon fill="none" stroke="#000000" points="563.994,-669.301 486.006,-669.301 486.006,-632.699 563.994,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 498.7871 -657.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.func·005</text>

-			<text transform="matrix(1 0 0 1 514.3359 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 493.6719 -638.2002)" font-family="'Times-Roman'" font-size="8">of 156.295 (28.0%)</text>

-		</g>

-		<g id="edge17">

-			<title>N1-&gt;N7</title>

-			<path fill="none" stroke="#000000" stroke-width="1.6793" d="M571.712-781.56c-9.124,25.308-26.12,72.447-36.901,102.349"/>

-			<polygon stroke="#000000" points="537.964,-677.638 531.28,-669.417 531.379,-680.012 			"/>

-			<text transform="matrix(1 0 0 1 544 -691.4004)" font-family="'Times-Roman'" font-size="14">156.295</text>

-		</g>

-		<g id="node14">

-			<title>N13</title>

-			<polygon fill="none" stroke="#000000" points="666.994,-669.301 597.006,-669.301 597.006,-632.699 666.994,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 605.7871 -657.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.func·004</text>

-			<text transform="matrix(1 0 0 1 617.3359 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 604.6719 -638.2002)" font-family="'Times-Roman'" font-size="8">of 47.690 (8.5%)</text>

-		</g>

-		<g id="edge21">

-			<title>N1-&gt;N13</title>

-			<path fill="none" stroke="#000000" d="M584.407-781.56c9.337,25.418,26.764,72.859,37.741,102.739"/>

-			<polygon stroke="#000000" points="625.439,-680.011 625.602,-669.417 618.868,-677.597 			"/>

-			<text transform="matrix(1 0 0 1 617 -691.4004)" font-family="'Times-Roman'" font-size="14">47.690</text>

-		</g>

-		<g id="node21">

-			<title>N20</title>

-			<polygon fill="none" stroke="#000000" points="861.49,-669.301 784.51,-669.301 784.51,-632.699 861.49,-632.699 			"/>

-			<text transform="matrix(1 0 0 1 792.3398 -657.4004)" font-family="'Times-Roman'" font-size="8">testing.(*B).launch</text>

-			<text transform="matrix(1 0 0 1 811.668 -647.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 799.0039 -638.2002)" font-family="'Times-Roman'" font-size="8">of 12.198 (2.2%)</text>

-		</g>

-		<g id="edge25">

-			<title>N1-&gt;N20</title>

-			<path fill="none" stroke="#000000" d="M607.067-781.56c44.389,26.634,129.077,77.447,178.169,106.902"/>

-			<polygon stroke="#000000" points="787.197,-677.564 793.971,-669.417 783.595,-671.561 			"/>

-			<text transform="matrix(1 0 0 1 757 -691.4004)" font-family="'Times-Roman'" font-size="14">12.198</text>

-		</g>

-		<g id="node3">

-			<title>N2</title>

-			<polygon fill="none" stroke="#000000" points="501.245,-228 138.755,-228 138.755,-118 501.245,-118 			"/>

-			<text transform="matrix(1 0 0 1 146.5034 -181.5)" font-family="'Times-Roman'" font-size="42.5">sync.(*Mutex).Lock</text>

-			<text transform="matrix(1 0 0 1 206.6636 -130.5)" font-family="'Times-Roman'" font-size="42.5">265.302 (47.5%)</text>

-		</g>

-		<g id="node5">

-			<title>N4</title>

-			<polygon fill="none" stroke="#000000" points="350.311,-467.301 233.689,-467.301 233.689,-430.699 350.311,-430.699 			"/>

-			<text transform="matrix(1 0 0 1 241.127 -455.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.(*Server).sendResponse</text>

-			<text transform="matrix(1 0 0 1 300.8809 -445.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 280.2168 -436.2002)" font-family="'Times-Roman'" font-size="8">of 166.540 (29.8%)</text>

-		</g>

-		<g id="edge22">

-			<title>N3-&gt;N4</title>

-			<path fill="none" stroke="#000000" stroke-width="1.7893" d="M335.658-637.275C324.446-631.872,313.524-624.35,306.5-614

-				c-14.624,21.548-15.776,95.509-15.225,136.353"/>

-			<polygon stroke="#000000" points="294.776,-477.613 291.455,-467.552 287.777,-477.488 			"/>

-			<text transform="matrix(1 0 0 1 307 -599.4004)" font-family="'Times-Roman'" font-size="14">166.540</text>

-		</g>

-		<g id="edge18">

-			<title>N4-&gt;N2</title>

-			<path fill="none" stroke="#000000" stroke-width="1.7884" d="M293.794-430.443c3.882,37.985,13.226,129.428,19.639,192.186"/>

-			<polygon stroke="#000000" points="316.941,-238.362 314.476,-228.058 309.977,-237.65 			"/>

-			<text transform="matrix(1 0 0 1 303 -341.4004)" font-family="'Times-Roman'" font-size="14">166.457</text>

-		</g>

-		<g id="node7">

-			<title>N6</title>

-			<polygon fill="none" stroke="#000000" points="276.554,-578 -0.555,-578 -0.555,-486 276.554,-486 			"/>

-			<text transform="matrix(1 0 0 1 7.2969 -539)" font-family="'Times-Roman'" font-size="35">runtime.chanrecv2</text>

-			<text transform="matrix(1 0 0 1 32.4873 -497)" font-family="'Times-Roman'" font-size="35">163.420 (29.3%)</text>

-		</g>

-		<g id="edge15">

-			<title>N5-&gt;N6</title>

-			<path fill="none" stroke="#000000" stroke-width="1.7558" d="M177.964-632.484c-4.817,11.99-11.488,28.596-18.001,44.809"/>

-			<polygon stroke="#000000" points="163.138,-586.187 156.162,-578.212 156.642,-588.796 			"/>

-			<text transform="matrix(1 0 0 1 170 -599.4004)" font-family="'Times-Roman'" font-size="14">163.420</text>

-		</g>

-		<g id="node9">

-			<title>N8</title>

-			<polygon fill="none" stroke="#000000" points="406.154,-411.301 325.846,-411.301 325.846,-374.699 406.154,-374.699 			"/>

-			<text transform="matrix(1 0 0 1 333.5645 -399.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.(*Client).Go</text>

-			<text transform="matrix(1 0 0 1 356.4438 -389.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 339.7798 -380.2002)" font-family="'Times-Roman'" font-size="8">of 98.686 (17.7%)</text>

-		</g>

-		<g id="edge1">

-			<title>N7-&gt;N8</title>

-			<path fill="none" stroke="#000000" d="M485.817-642.948c-35.604,8.67-86.272,27.165-111.317,64.948

-				c-31.492,47.509-23.252,118.06-15.34,156.535"/>

-			<polygon stroke="#000000" points="362.62,-422.028 361.349,-411.509 355.783,-420.524 			"/>

-			<text transform="matrix(1 0 0 1 375 -526.4004)" font-family="'Times-Roman'" font-size="14">91.614</text>

-		</g>

-		<g id="node11">

-			<title>N10</title>

-			<polygon fill="none" stroke="#000000" points="627.146,-566 422.854,-566 422.854,-498 627.146,-498 			"/>

-			<text transform="matrix(1 0 0 1 430.2363 -537)" font-family="'Times-Roman'" font-size="25">runtime.chansend1</text>

-			<text transform="matrix(1 0 0 1 464.4531 -507)" font-family="'Times-Roman'" font-size="25">64.682 (11.6%)</text>

-		</g>

-		<g id="edge27">

-			<title>N7-&gt;N10</title>

-			<path fill="none" stroke="#000000" d="M525-632.484c0,14.806,0,36.651,0,56.102"/>

-			<polygon stroke="#000000" points="528.5,-576.182 525,-566.182 521.5,-576.182 			"/>

-			<text transform="matrix(1 0 0 1 525 -599.4004)" font-family="'Times-Roman'" font-size="14">64.682</text>

-		</g>

-		<g id="node10">

-			<title>N9</title>

-			<polygon fill="none" stroke="#000000" points="407.32,-319.301 322.68,-319.301 322.68,-282.699 407.32,-282.699 			"/>

-			<text transform="matrix(1 0 0 1 330.1211 -307.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.(*Client).send</text>

-			<text transform="matrix(1 0 0 1 357.8867 -297.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 341.2227 -288.2002)" font-family="'Times-Roman'" font-size="8">of 98.686 (17.7%)</text>

-		</g>

-		<g id="edge12">

-			<title>N8-&gt;N9</title>

-			<path fill="none" stroke="#000000" stroke-width="1.0603" d="M365.807-374.647c-0.141,12.742-0.337,30.313-0.5,44.982"/>

-			<polygon stroke="#000000" points="368.807,-329.567 365.196,-319.607 361.807,-329.645 			"/>

-			<text transform="matrix(1 0 0 1 366 -341.4004)" font-family="'Times-Roman'" font-size="14">98.686</text>

-		</g>

-		<g id="edge19">

-			<title>N9-&gt;N2</title>

-			<path fill="none" stroke="#000000" stroke-width="1.0602" d="M358.743-282.48c-4.219,11.814-10.07,28.196-15.948,44.654"/>

-			<polygon stroke="#000000" points="346.003,-236.401 339.343,-228.161 339.41,-238.755 			"/>

-			<text transform="matrix(1 0 0 1 352 -249.4004)" font-family="'Times-Roman'" font-size="14">98.676</text>

-		</g>

-		<g id="node12">

-			<title>N11</title>

-			<polygon fill="none" stroke="#000000" points="808.077,-64.16 617.923,-64.16 617.923,0.16 808.077,0.16 			"/>

-			<text transform="matrix(1 0 0 1 625.6152 -36.6797)" font-family="'Times-Roman'" font-size="23.4">runtime.chanrecv1</text>

-			<text transform="matrix(1 0 0 1 665.8574 -8.5996)" font-family="'Times-Roman'" font-size="23.4">52.844 (9.5%)</text>

-		</g>

-		<g id="node13">

-			<title>N12</title>

-			<polygon fill="none" stroke="#000000" points="730.32,-550.301 645.68,-550.301 645.68,-513.699 730.32,-513.699 			"/>

-			<text transform="matrix(1 0 0 1 653.7871 -538.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.(*Client).Call</text>

-			<text transform="matrix(1 0 0 1 680.2207 -528.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 667.5566 -519.2002)" font-family="'Times-Roman'" font-size="8">of 47.690 (8.5%)</text>

-		</g>

-		<g id="edge5">

-			<title>N12-&gt;N11</title>

-			<path fill="none" stroke="#000000" d="M687.364-513.268C686.483-487.157,685-436.823,685-394c0,0,0,0,0,222

-				c0,33.544,7.933,70.761,15.354,98.236"/>

-			<polygon stroke="#000000" points="703.732,-74.68 703.049,-64.106 696.99,-72.798 			"/>

-			<text transform="matrix(1 0 0 1 685 -295.4004)" font-family="'Times-Roman'" font-size="14">40.618</text>

-		</g>

-		<g id="edge28">

-			<title>N12-&gt;N8</title>

-			<path fill="none" stroke="#000000" d="M671.024-513.322C661.442-504.155,648.841-493.367,636-486

-				c-71.169,40.832-163.315,67.348-219.472,80.974"/>

-			<polygon stroke="#000000" points="417.013,-401.543 406.474,-402.631 415.391,-408.353 			"/>

-			<text transform="matrix(1 0 0 1 595 -443.4004)" font-family="'Times-Roman'" font-size="14">7.072</text>

-		</g>

-		<g id="edge24">

-			<title>N13-&gt;N12</title>

-			<path fill="none" stroke="#000000" d="M640.384-632.484c9.196,19.214,24.066,50.281,34.742,72.587"/>

-			<polygon stroke="#000000" points="678.399,-561.167 679.559,-550.636 672.085,-558.145 			"/>

-			<text transform="matrix(1 0 0 1 656 -599.4004)" font-family="'Times-Roman'" font-size="14">47.690</text>

-		</g>

-		<g id="node15">

-			<title>N14</title>

-			<polygon fill="none" stroke="#000000" points="818.994,-550.301 749.006,-550.301 749.006,-513.699 818.994,-513.699 			"/>

-			<text transform="matrix(1 0 0 1 767.0039 -538.4004)" font-family="'Times-Roman'" font-size="8">main.main</text>

-			<text transform="matrix(1 0 0 1 769.3359 -528.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 756.6719 -519.2002)" font-family="'Times-Roman'" font-size="8">of 12.226 (2.2%)</text>

-		</g>

-		<g id="node18">

-			<title>N17</title>

-			<polygon fill="none" stroke="#000000" points="818.994,-411.301 749.006,-411.301 749.006,-374.699 818.994,-374.699 			"/>

-			<text transform="matrix(1 0 0 1 763.8906 -399.4004)" font-family="'Times-Roman'" font-size="8">testing.Main</text>

-			<text transform="matrix(1 0 0 1 769.3359 -389.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 756.6719 -380.2002)" font-family="'Times-Roman'" font-size="8">of 12.226 (2.2%)</text>

-		</g>

-		<g id="edge4">

-			<title>N14-&gt;N17</title>

-			<path fill="none" stroke="#000000" d="M784-513.649c0,23.137,0,64.363,0,91.857"/>

-			<polygon stroke="#000000" points="787.5,-421.643 784,-411.643 780.5,-421.643 			"/>

-			<text transform="matrix(1 0 0 1 784 -443.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="edge2">

-			<title>N15-&gt;N14</title>

-			<path fill="none" stroke="#000000" d="M736.384-632.484c9.196,19.214,24.066,50.281,34.742,72.587"/>

-			<polygon stroke="#000000" points="774.399,-561.167 775.559,-550.636 768.085,-558.145 			"/>

-			<text transform="matrix(1 0 0 1 752 -599.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="node17">

-			<title>N16</title>

-			<polygon fill="none" stroke="#000000" points="801.994,-191.301 732.006,-191.301 732.006,-154.699 801.994,-154.699 			"/>

-			<text transform="matrix(1 0 0 1 741.6699 -179.4004)" font-family="'Times-Roman'" font-size="8">testing.(*B).run</text>

-			<text transform="matrix(1 0 0 1 752.3359 -169.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 739.6719 -160.2002)" font-family="'Times-Roman'" font-size="8">of 12.226 (2.2%)</text>

-		</g>

-		<g id="edge11">

-			<title>N16-&gt;N11</title>

-			<path fill="none" stroke="#000000" d="M760.27-154.677c-7.806,20.093-20.938,53.897-31.383,80.783"/>

-			<polygon stroke="#000000" points="732.059,-72.393 725.175,-64.339 725.534,-74.928 			"/>

-			<text transform="matrix(1 0 0 1 738 -85.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="node19">

-			<title>N18</title>

-			<polygon fill="none" stroke="#000000" points="833.993,-319.301 742.007,-319.301 742.007,-282.699 833.993,-282.699 			"/>

-			<text transform="matrix(1 0 0 1 749.6719 -307.4004)" font-family="'Times-Roman'" font-size="8">testing.RunBenchmarks</text>

-			<text transform="matrix(1 0 0 1 784.3359 -297.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 771.6719 -288.2002)" font-family="'Times-Roman'" font-size="8">of 12.226 (2.2%)</text>

-		</g>

-		<g id="edge23">

-			<title>N17-&gt;N18</title>

-			<path fill="none" stroke="#000000" d="M784.771-374.647c0.566,12.742,1.347,30.313,1.998,44.982"/>

-			<polygon stroke="#000000" points="790.27,-329.752 787.217,-319.607 783.277,-329.441 			"/>

-			<text transform="matrix(1 0 0 1 786 -341.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="edge13">

-			<title>N18-&gt;N16</title>

-			<path fill="none" stroke="#000000" d="M785.08-282.48c-3.495,20.97-9.389,56.333-13.494,80.963"/>

-			<polygon stroke="#000000" points="774.992,-200.659 769.895,-191.371 768.087,-201.81 			"/>

-			<text transform="matrix(1 0 0 1 781 -249.4004)" font-family="'Times-Roman'" font-size="14">12.226</text>

-		</g>

-		<g id="node20">

-			<title>N19</title>

-			<polygon fill="none" stroke="#000000" points="1004.98,-195.46 839.02,-195.46 839.02,-150.54 1004.98,-150.54 			"/>

-			<text transform="matrix(1 0 0 1 846.6807 -176.0801)" font-family="'Times-Roman'" font-size="15.4">sync.(*WaitGroup).Wait</text>

-			<text transform="matrix(1 0 0 1 908.7842 -157.5996)" font-family="'Times-Roman'" font-size="15.4">12.198 (2.2%)</text>

-		</g>

-		<g id="node22">

-			<title>N21</title>

-			<polygon fill="none" stroke="#000000" points="939.329,-550.301 866.671,-550.301 866.671,-513.699 939.329,-513.699 			"/>

-			<text transform="matrix(1 0 0 1 874.7812 -538.4004)" font-family="'Times-Roman'" font-size="8">testing.(*B).runN</text>

-			<text transform="matrix(1 0 0 1 889.2266 -528.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 876.5625 -519.2002)" font-family="'Times-Roman'" font-size="8">of 12.198 (2.2%)</text>

-		</g>

-		<g id="edge6">

-			<title>N20-&gt;N21</title>

-			<path fill="none" stroke="#000000" d="M834.977-632.484c13.314,19.472,34.953,51.119,50.244,73.483"/>

-			<polygon stroke="#000000" points="888.186,-560.866 890.941,-550.636 882.408,-556.915 			"/>

-			<text transform="matrix(1 0 0 1 858 -599.4004)" font-family="'Times-Roman'" font-size="14">12.198</text>

-		</g>

-		<g id="node26">

-			<title>N25</title>

-			<polygon fill="none" stroke="#000000" points="968.39,-411.301 837.61,-411.301 837.61,-374.699 968.39,-374.699 			"/>

-			<text transform="matrix(1 0 0 1 845.4062 -399.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.BenchmarkEndToEndHTTP</text>

-			<text transform="matrix(1 0 0 1 918.6016 -389.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 909.9375 -380.2002)" font-family="'Times-Roman'" font-size="8">of 3.492 (0.6%)</text>

-		</g>

-		<g id="edge10">

-			<title>N21-&gt;N25</title>

-			<path fill="none" stroke="#000000" d="M903-513.649c0,23.137,0,64.363,0,91.857"/>

-			<polygon stroke="#000000" points="906.5,-421.643 903,-411.643 899.5,-421.643 			"/>

-			<text transform="matrix(1 0 0 1 903 -443.4004)" font-family="'Times-Roman'" font-size="14">3.492</text>

-		</g>

-		<g id="node25">

-			<title>N24</title>

-			<polygon fill="none" stroke="#000000" points="1097.39,-411.301 986.61,-411.301 986.61,-374.699 1097.39,-374.699 			"/>

-			<text transform="matrix(1 0 0 1 994.4062 -399.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.BenchmarkEndToEnd</text>

-			<text transform="matrix(1 0 0 1 1047.5977 -389.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 1038.9336 -380.2002)" font-family="'Times-Roman'" font-size="8">of 3.544 (0.6%)</text>

-		</g>

-		<g id="edge26">

-			<title>N21-&gt;N24</title>

-			<path fill="none" stroke="#000000" d="M920.604-513.649c24.307,23.956,68.287,67.304,96.106,94.724"/>

-			<polygon stroke="#000000" points="1019.43,-421.155 1024.1,-411.643 1014.52,-416.17 			"/>

-			<text transform="matrix(1 0 0 1 1004 -443.4004)" font-family="'Times-Roman'" font-size="14">3.544</text>

-		</g>

-		<g id="node23">

-			<title>N22</title>

-			<polygon fill="none" stroke="#000000" points="970.389,-319.301 861.611,-319.301 861.611,-282.699 970.389,-282.699 			"/>

-			<text transform="matrix(1 0 0 1 869.0742 -307.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.benchmarkEndToEnd</text>

-			<text transform="matrix(1 0 0 1 920.9336 -297.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 912.2695 -288.2002)" font-family="'Times-Roman'" font-size="8">of 7.036 (1.3%)</text>

-		</g>

-		<g id="edge14">

-			<title>N22-&gt;N19</title>

-			<path fill="none" stroke="#000000" d="M916.834-282.48c0.943,19.791,2.496,52.405,3.653,76.715"/>

-			<polygon stroke="#000000" points="923.992,-205.744 920.972,-195.589 917,-205.411 			"/>

-			<text transform="matrix(1 0 0 1 918 -249.4004)" font-family="'Times-Roman'" font-size="14">7.036</text>

-		</g>

-		<g id="node24">

-			<title>N23</title>

-			<polygon fill="none" stroke="#000000" points="1119.22,-319.301 988.78,-319.301 988.78,-282.699 1119.22,-282.699 			"/>

-			<text transform="matrix(1 0 0 1 996.8535 -307.4004)" font-family="'Times-Roman'" font-size="8">net/rpc.benchmarkEndToEndAsync</text>

-			<text transform="matrix(1 0 0 1 1069.1582 -297.7998)" font-family="'Times-Roman'" font-size="8">0.000 (0.0%)</text>

-			<text transform="matrix(1 0 0 1 1060.4941 -288.2002)" font-family="'Times-Roman'" font-size="8">of 5.162 (0.9%)</text>

-		</g>

-		<g id="edge20">

-			<title>N23-&gt;N19</title>

-			<path fill="none" stroke="#000000" d="M1035.65-282.48c-21.67,20.68-57.996,55.356-83.743,79.933"/>

-			<polygon stroke="#000000" points="954.268,-199.962 944.617,-195.589 949.433,-205.025 			"/>

-			<text transform="matrix(1 0 0 1 1014 -249.4004)" font-family="'Times-Roman'" font-size="14">5.162</text>

-		</g>

-		<g id="edge8">

-			<title>N24-&gt;N22</title>

-			<path fill="none" stroke="#000000" d="M1017.71-374.647c-19.575,13.979-47.282,33.771-68.836,49.165"/>

-			<polygon stroke="#000000" points="950.821,-322.571 940.648,-319.607 946.752,-328.267 			"/>

-			<text transform="matrix(1 0 0 1 990 -341.4004)" font-family="'Times-Roman'" font-size="14">3.544</text>

-		</g>

-		<g id="edge16">

-			<title>N25-&gt;N22</title>

-			<path fill="none" stroke="#000000" d="M905.507-374.647c1.84,12.742,4.378,30.313,6.497,44.982"/>

-			<polygon stroke="#000000" points="915.491,-330.004 913.457,-319.607 908.562,-329.004 			"/>

-			<text transform="matrix(1 0 0 1 910 -341.4004)" font-family="'Times-Roman'" font-size="14">3.492</text>

-		</g>

-	</g>

-</g>

-</svg>

diff --git a/content/2013/go1.1/chanof.go b/content/2013/go1.1/chanof.go
deleted file mode 100644
index 1515088..0000000
--- a/content/2013/go1.1/chanof.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"reflect"
-)
-
-func sendSlice(slice interface{}) (channel interface{}) {
-	sliceValue := reflect.ValueOf(slice)
-	chanType := reflect.ChanOf(reflect.BothDir, sliceValue.Type().Elem())
-	chanValue := reflect.MakeChan(chanType, 0)
-	go func() {
-		for i := 0; i < sliceValue.Len(); i++ {
-			chanValue.Send(sliceValue.Index(i))
-		}
-		chanValue.Close()
-	}()
-	return chanValue.Interface()
-}
-
-func main() {
-	ch := sendSlice([]int{1, 2, 3, 4, 5}).(chan int)
-	for v := range ch {
-		fmt.Println(v)
-	}
-}
diff --git a/content/2013/go1.1/intdiv.go b/content/2013/go1.1/intdiv.go
deleted file mode 100644
index d06ec33..0000000
--- a/content/2013/go1.1/intdiv.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func f(x int) int {
-	return x / 0
-}
-
-func main() {
-	f(1)
-}
diff --git a/content/2013/go1.1/makefunc.go b/content/2013/go1.1/makefunc.go
deleted file mode 100644
index 52932d2..0000000
--- a/content/2013/go1.1/makefunc.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"reflect"
-)
-
-func makeSwap(fptr interface{}) {
-	swap := func(in []reflect.Value) []reflect.Value {
-		return []reflect.Value{in[1], in[0]}
-	}
-	fn := reflect.ValueOf(fptr).Elem()
-	v := reflect.MakeFunc(fn.Type(), swap)
-	fn.Set(v)
-}
-
-func main() {
-	var fn func(int, int) (int, int)
-	makeSwap(&fn)
-	fmt.Println(fn(0, 1))
-}
diff --git a/content/2013/go1.1/methodvals-old.go b/content/2013/go1.1/methodvals-old.go
deleted file mode 100644
index 7ff23d6..0000000
--- a/content/2013/go1.1/methodvals-old.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "os"
-
-func main() {
-	var w func([]byte) (int, error)
-	w = func(b []byte) (int, error) { return os.Stdout.Write(b) }
-	w([]byte("hello!\n"))
-}
diff --git a/content/2013/go1.1/methodvals.go b/content/2013/go1.1/methodvals.go
deleted file mode 100644
index 112f7bc..0000000
--- a/content/2013/go1.1/methodvals.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "os"
-
-func main() {
-	var w func([]byte) (int, error)
-	w = os.Stdout.Write
-	w([]byte("hello!\n"))
-}
diff --git a/content/2013/go1.1/race.go b/content/2013/go1.1/race.go
deleted file mode 100644
index c03b25c..0000000
--- a/content/2013/go1.1/race.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	var a int
-	go func() {
-		for {
-			if a == 0 {
-				a = 1
-			}
-		}
-	}()
-	for {
-		if a == 1 {
-			a = 0
-		}
-	}
-}
diff --git a/content/2013/go1.1/return-old.go b/content/2013/go1.1/return-old.go
deleted file mode 100644
index f9f0463..0000000
--- a/content/2013/go1.1/return-old.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"os"
-)
-
-func min(a, b int) int {
-	if a < b {
-		return a
-	}
-	return b
-}
-
-func slurp(r io.Reader) error {
-	b := make([]byte, 1024)
-	for {
-		_, err := r.Read(b)
-		if err != nil {
-			if err == io.EOF {
-				return nil
-			}
-			return err
-		}
-	}
-	panic("unreachable")
-}
-
-func main() {
-	println(min(10, 20))
-	slurp(os.Stdin)
-}
diff --git a/content/2013/go1.1/return.go b/content/2013/go1.1/return.go
deleted file mode 100644
index 2096bc9..0000000
--- a/content/2013/go1.1/return.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"os"
-)
-
-func min(a, b int) int {
-	if a < b {
-		return a
-	} else {
-		return b
-	}
-}
-
-func slurp(r io.Reader) error {
-	b := make([]byte, 1024)
-	for {
-		_, err := r.Read(b)
-		if err != nil {
-			if err == io.EOF {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-func main() {
-	println(min(10, 20))
-	slurp(os.Stdin)
-}
diff --git a/content/2013/go1.1/scanner.go b/content/2013/go1.1/scanner.go
deleted file mode 100644
index 45eaf42..0000000
--- a/content/2013/go1.1/scanner.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bufio"
-	"fmt"
-	"io"
-	"log"
-	"strings"
-)
-
-const blob = `Hey there,
-fellow gophers!
-Have a good day.
-`
-
-func old() {
-	// STARTold OMIT
-	r := bufio.NewReader(strings.NewReader(blob))
-	for {
-		s, err := r.ReadString('\n')
-		if err != nil {
-			if err == io.EOF {
-				break
-			}
-			log.Fatal(err)
-		}
-		fmt.Println(s)
-	}
-	// STOP OMIT
-}
-
-func main() {
-	// STARTnew OMIT
-	s := bufio.NewScanner(strings.NewReader(blob))
-	for s.Scan() {
-		fmt.Println(s.Text())
-	}
-	if err := s.Err(); err != nil {
-		log.Fatal(err)
-	}
-	// STOP OMIT
-}
diff --git a/content/2013/go1.1/scanner2.go b/content/2013/go1.1/scanner2.go
deleted file mode 100644
index 2388034..0000000
--- a/content/2013/go1.1/scanner2.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bufio"
-	"fmt"
-	"log"
-	"strings"
-)
-
-func main() {
-	// START OMIT
-	const input = "Now is the winter of our discontent..."
-	scanner := bufio.NewScanner(strings.NewReader(input))
-	scanner.Split(bufio.ScanWords) // HL
-	count := 0
-	for scanner.Scan() {
-		count++
-	}
-	if err := scanner.Err(); err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(count)
-	// STOP OMIT
-}
diff --git a/content/2013/go1.1/timer.go b/content/2013/go1.1/timer.go
deleted file mode 100644
index 300ea73..0000000
--- a/content/2013/go1.1/timer.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func init() {
-	rand.Seed(10)
-}
-
-func sendMessages() chan string {
-	ch := make(chan string)
-	go func() {
-		for i := 0; ; i++ {
-			time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-			ch <- fmt.Sprintf("message %v", i)
-		}
-	}()
-	return ch
-}
-
-func main() {
-	timeout := time.NewTimer(80 * time.Millisecond)
-	ch := sendMessages()
-	for {
-		select {
-		case msg := <-ch:
-			fmt.Println(msg)
-			timeout.Reset(80 * time.Millisecond)
-		case <-timeout.C:
-			fmt.Println("timeout")
-			return
-		}
-	}
-}
diff --git a/content/2013/go1.1/yearday.go b/content/2013/go1.1/yearday.go
deleted file mode 100644
index a896970..0000000
--- a/content/2013/go1.1/yearday.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	fmt.Println("Today is day", time.Now().YearDay())
-}
diff --git a/content/2013/go4python.slide b/content/2013/go4python.slide
deleted file mode 100644
index 7bd2f99..0000000
--- a/content/2013/go4python.slide
+++ /dev/null
@@ -1,452 +0,0 @@
-Go for Pythonistas
-
-Francesc Campoy Flores
-Gopher at Google
-http://campoy.cat
-
-@francesc
-campoy@golang.com
-
-* Video
-
-A recording of this talk is available.
-
-.link http://youtu.be/elu0VpLzJL8
-
-* Goal of this talk
-
-Whetting your appetite for Go
-
-.image go4python/img/gopher.jpg
-
-* My tactics
-
-1. Showing you how Go is like Python.
-
-2. Showing you how Go is _not_ like Python.
-
-* Python, Go, and me
-
-Software Engineer at Google: _Feb_11-Aug_12_
-
-- Lots of C++ and Python.
-
-- SQL to C++ compiler in Python.
-
-Go Developer Relations: _Aug_12_ - `datetime.now()`
-
-- Lots of Go.
-
-* Things I don't like about Python (it'll be short)
-
-* Beautiful and simple
-
-Dynamic typing - nice because it's concise, like Python.
-
-	a = "hello"
-	b = 1
-	# but also
-	a = 2
-
-Static typing - can be verbose, like Java or C++.
-
-	Foo foo = new Foo();
-
-Static typing with inferred types, like Go.
-
-	a := "hello"
-	b := 1
-	// but no
-	a = 2
-
-Statically-typed Python? Check [[http://www.mypy-lang.org/][mypy]] and [[http://cython.org/][Cython]].
-
-* Run time pyrotechnics
-
-.play go4python/dyntyp.py /name/,
-
-I don't want start a flame war here but ...
-
-*100%*code*coverage*is*a*symptom*
-
-- Code coverage should point you to untested cases.
-- Not a way to find typos!
-- 100% code coverage doesn't mean bug free.
-
-* Other things I don't like
-
-- Deploying - managing dependencies.
-
-- Performance - "not too slow" is often not fast enough.
-
-- Magic! (e.g.: `__magic__`: `**kargs`, `__getattr__`)
-
-A list of magic methods in Python:
-
-.link http://www.rafekettler.com/magicmethods.html
-
-* And I *do* like concurrency!
-
-A lot has been said about Python's infamous Global Interpreter Lock.
-
-You should watch [[http://youtu.be/ph374fJqFPE][Mindblowing Python GIL]], by David Beazley.
-
-* Things I like about Python
-
-* Things I like about Python
-
-- The Zen of Python. ([[http://talks.golang.org/2012/zen.slide#1][Go and the Zen of Python]])
-
-- Hashes and arrays are part of the language.
-
-- The standard library.
-
-- Magic! A bit of code can do a lot.
-
-* A bit of code
-
-* fib.py
-
-Have you ever heard of Fibonacci?
-
-.play go4python/fib.py /fib/,
-
-* fib.go
-
-Something familiar?
-
-.play go4python/fib.go /func/,
-
-* Fibonacci without generators? What?
-
-Python generators are awesome.
-
-.code go4python/fib-gen.py /fib/,/^$/
-
-Mechanically complex.
-
-.play go4python/fib-gen.py /f = fib/,/^$/
-
-But very easy to use.
-
-.play go4python/fib-gen.py /for x/,/^$/
-
-* Python generators
-
-.image go4python/img/fib-py.png 500 320
-
-Note the generator executes concurrently. Hmm... I like concurrency.
-
-* Go concurrency
-
-Based on *goroutines* and *channels*.
-
-- Goroutines: very light processing actors (the gophers).
-
-- Channels: typed, synchronized, thread-safe pipes (the arrows).
-
-.image go4python/img/funnelin.jpg
-
-* "Generator" goroutines
-
-.image go4python/img/fib-go.png 500 350
-
-* "Generator" goroutines
-
-Uses a channel send instead of `yield`.
-
-.code go4python/fib-gen.go /fib/,/^}/
-
-.play go4python/fib-gen.go /main\(/,
-
-* "Generator" goroutines
-
-A more generator-like style:
-
-.play go4python/fib-gen2.go /func/,
-
-* Exercise: generating prime numbers
-
-Write a function that returns a channel and sends the first n prime numbers on
-it.
-
-Given the function `prime`:
-
-.code go4python/genex.go /prime/,/^}/
-
-Use the Go playground:
-
-.link http://golang.org/s/go4py-ex1
-
-* Solution: generating prime numbers
-
-.code go4python/genex.go /primes\(/,/^}/
-
-.play go4python/genex.go /main\(/,
-
-* Exercise: Fibonacci primes
-
-Write a `filterPrimes` function that takes a channel of ints as a
-parameter and returns another channel of ints.
-
-All the prime numbers that `filterPrimes` receives from the input channel are
-sent into the output channel.
-
-Complete this code snippet:
-
-.link http://golang.org/s/go4py-ex2
-
-* Solution: Fibonacci primes
-
-.code go4python/genex2.go /filterPrimes\(/,/^}/
-
-.play go4python/genex2.go /main\(/,
-
-* But there's much more
-
-Goroutines and channels aren't just for generators. They can be used to model
-all kinds of concurrent systems.
-
-To learn more:
-
-- [[http://talks.golang.org/2012/concurrency.slide#1][Concurrency patterns]], by Rob Pike
-
-- [[http://talks.golang.org/2013/advconc.slide#1][Advanced Concurrency Patterns]], by Sameer Ajmani
-
-* Object-oriented Go
-
-* Object-oriented Go
-
-A type declaration.
-
-.code go4python/typesandmethods.go /Name/,/^}/
-
-A method declaration.
-
-.code go4python/typesandmethods.go /String/,/^}/
-
-Constructing a `Name` and using it.
-
-.play go4python/typesandmethods.go /William/,/Print/
-
-* Methods on anything
-
-There's more to types than structs.
-
-.code go4python/typesandmethods.go /SimpleName/
-
-You can define methods on any type.
-
-.code go4python/typesandmethods.go /SimpleName\)/
-
-Or almost any type.
-
-	func (s string) NoWay()
-
-You can *only* define methods on types within the same package.
-
-* Duck typing
-
-* Duck typing
-
-_If_it_walks_like_a_duck_..._
-
-What defines a duck?
-
-- Is there an explicit list of "duck" features?
-
-- What if the duck is not exactly a duck?
-
-s/duck/file-like object/g
-
-* Quack?
-
-.image go4python/img/duck.jpg 500 500
-
-* Go interfaces
-
-Simply a set of methods.
-
-From the `fmt` package:
-
-	type Stringer interface {
-		String() string
-	}
-
-`fmt.Println` calls the String method if the parameter is a `Stringer`.
-
-.play go4python/typesandmethods.go /second/,/Print/
-
-A type with all the methods of the interface implements the interface.
-
-*Implicit*satisfaction*==*No*"implements"*
-
-Structural typing: it doesn't just sound like a duck, it *is* a duck.
-
-And that's checked at compile time.
-
-* Decorators
-
-* Decorators
-
-A convenient way to wrap a function.
-
-.code go4python/deco.py /auth_required/,/^$/
-
-A function can be decorated using `@`.
-
-.code go4python/deco.py /myHandler/,/user/
-
-* Decorators
-
-If we run it.
-
-.play go4python/deco.py /try/,
-
-This is unauthorized:
-
-.link http://localhost:8080/hi
-
-This is authorized:
-
-.link http://localhost:8080/hi?user=john
-
-* Decorators in Go?
-
-Not exactly, but close enough.
-
-Go doesn't provide decorators in the language, but its function literal syntax and simple scoping rules make it easy to do something similar.
-
-.code go4python/deco.go /hiHandler/,/^\)/
-
-A wrapper function.
-
-.code go4python/deco.go /authRequired/,/^$/
-
-* Decorators in Go?
-
-.play go4python/deco.go /func main/,/^}/
-
-This is unauthorized:
-
-.link http://localhost:8080/hi
-
-This is authorized:
-
-.link http://localhost:8080/hi?user=john
-
-* Exercise: errors in HTTP handlers
-
-In Go, functions can return errors to indicate that something bad happened.
-
-The `net/http` package from the standard library defines the type `HandlerFunc`.
-
-	type HandlerFunc func(ResponseWriter, *Request)
-
-But it's often useful to unify the error handling into a single function to avoid
-repetition.
-
-.code go4python/decoex.go /errorHandler/
-
-Write a decorator that given a `errorHandler` returns a `http.HandlerFunc`.
-If an error occurs it logs it and returns an http error page.
-
-* Exercise: errors in HTTP handlers (continuation)
-
-Given the function `handler`.
-
-.code go4python/decoex.go /handler/,/^}/
-
-We want to use it as follows.
-
-.code go4python/decoex.go /HandleFunc/
-
-Implement `handleError` using the playground.
-
-.link http://golang.org/s/go4py-ex3
-
-* Solution: errors in HTTP handlers
-
-.code go4python/decoex.go /handleError/,/^}/
-
-.code go4python/decoex.go /Fake/,/^$/
-
-.play go4python/decoex.go /john/,/^$/
-
-* Monkey patching
-
-* Monkey patching
-
-"A monkey patch is a way to extend or modify the run-time code of dynamic languages without altering the original source code." - _Wikipedia_
-
-.image go4python/img/monkey.jpg 400 500
-
-* Monkey patching
-
-Also known as "duck punching" ... poor duck.
-
-Often used for testing purposes.
-
-For example, say we want to test this function:
-
-.code go4python/monkey.py /def say_hi/,/^$/
-
-Which depends on a function that makes an HTTP request:
-
-.code go4python/monkey.py /def auth/,/^$/
-
-* Monkey patching
-
-We can test `say_hi` without making HTTP requests by stubbing out `auth`:
-
-.play go4python/monkey.py /sayhitest/,/done/
-
-* Gopher punching!
-
-The same effect can be achieved in Go.
-
-.code go4python/monkey.go /sayHi/,/^}/
-
-Which depends on
-
-.code go4python/monkey.go /auth /,/^}/
-
-* Gopher punching!
-
-Our test code can change the value of auth easily.
-
-.play go4python/monkey.go /TestSayHi/,/^}/
-
-* Conclusion
-
-* Conclusion
-
-Go is a bit like Python
-
-- simple
-- flexible
-- fun
-
-but a bit different too
-
-- fast
-- concurrent
-- statically typed
-
-_Disclaimer_:_
-
-- "No pythons, ducks, monkeys or gophers were harmed while writing this talk"
-
-* Try it
-
-Next steps
-
-.link http://golang.org
-
-Learn Go from your browser
-
-.link http://tour.golang.org
-
-The community: golang-nuts
-
-.link https://groups.google.com/d/forum/golang-nuts
diff --git a/content/2013/go4python/deco.go b/content/2013/go4python/deco.go
deleted file mode 100644
index 5e80e25..0000000
--- a/content/2013/go4python/deco.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-func authRequired(f http.HandlerFunc) http.HandlerFunc {
-	return func(w http.ResponseWriter, r *http.Request) {
-		if r.FormValue("user") == "" {
-			http.Error(w, "unknown user", http.StatusForbidden)
-			return
-		}
-		f(w, r)
-	}
-}
-
-var hiHandler = authRequired(
-	func(w http.ResponseWriter, r *http.Request) {
-		fmt.Fprintf(w, "Hi, %v", r.FormValue("user"))
-	},
-)
-
-func main() {
-	http.HandleFunc("/hi", hiHandler)
-	http.ListenAndServe(":8080", nil)
-}
diff --git a/content/2013/go4python/deco.py b/content/2013/go4python/deco.py
deleted file mode 100644
index bf46318..0000000
--- a/content/2013/go4python/deco.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/python
-
-from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
-from urlparse import urlparse,parse_qs
-
-PORT_NUMBER = 8080
-
-def auth_required(myfunc):
-	def checkuser(self):
-		user = parse_qs(urlparse(self.path).query).get('user')
-		if user:
-			self.user = user[0]
-			myfunc(self)
-		else:
-			self.wfile.write('unknown user')
-	return checkuser
-
-
-class myHandler(BaseHTTPRequestHandler):
-	@auth_required
-	def do_GET(self):
-		self.wfile.write('Hello, %s!' % self.user)
-
-try:
-	server = HTTPServer(('', PORT_NUMBER), myHandler)
-	server.serve_forever()
-
-except KeyboardInterrupt:
-	server.socket.close()
diff --git a/content/2013/go4python/decoex.go b/content/2013/go4python/decoex.go
deleted file mode 100644
index 3323b42..0000000
--- a/content/2013/go4python/decoex.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"log"
-	"net/http"
-)
-
-type errorHandler func(http.ResponseWriter, *http.Request) error
-
-func handleError(f errorHandler) http.HandlerFunc {
-	return func(w http.ResponseWriter, r *http.Request) {
-		err := f(w, r)
-		if err != nil {
-			log.Printf("%v", err)
-			http.Error(w, "Oops!", http.StatusInternalServerError)
-		}
-	}
-}
-
-func handler(w http.ResponseWriter, r *http.Request) error {
-	name := r.FormValue("name")
-	if name == "" {
-		return fmt.Errorf("empty name")
-	}
-	fmt.Fprintln(w, "Hi,", name)
-	return nil
-}
-
-// resp implements http.ResponseWriter writing
-type dummyResp struct {
-	io.Writer
-	h int
-}
-
-func newDummyResp() http.ResponseWriter {
-	return &dummyResp{Writer: &bytes.Buffer{}}
-}
-
-func (w *dummyResp) Header() http.Header { return make(http.Header) }
-func (w *dummyResp) WriteHeader(h int)   { w.h = h }
-func (w *dummyResp) String() string      { return fmt.Sprintf("[%v] %q", w.h, w.Writer) }
-
-func main() {
-	http.HandleFunc("/hi", handleError(handler))
-
-	// ListenAndServe is not allowed on the playground.
-	// http.ListenAndServe(":8080", nil)
-
-	// In the playground we call the handler manually with dummy requests.
-
-	// Fake request without 'name' parameter.
-	r := &http.Request{}
-	w := newDummyResp()
-	handleError(handler)(w, r)
-	fmt.Println("resp a:", w)
-
-	// Fake request with 'name' parameter 'john'.
-	r.Form["name"] = []string{"john"}
-	w = newDummyResp()
-	handleError(handler)(w, r)
-	fmt.Println("resp b:", w)
-
-}
diff --git a/content/2013/go4python/dyntyp.py b/content/2013/go4python/dyntyp.py
deleted file mode 100644
index fa9e4ea..0000000
--- a/content/2013/go4python/dyntyp.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/python
-
-import random
-
-name = 'pythonista'
-
-# This code only works half of the time.
-if random.random() > 0.5:
-	print 'hey '+name+', you win!'
-else:
-	print 'sorry '+nane+', you lose'
diff --git a/content/2013/go4python/fib-gen.go b/content/2013/go4python/fib-gen.go
deleted file mode 100644
index 30521f8..0000000
--- a/content/2013/go4python/fib-gen.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func fib(c chan int, n int) {
-	a, b := 0, 1
-	for i := 0; i < n; i++ {
-		a, b = b, a+b
-		c <- a // HL
-	}
-	close(c)
-}
-
-func main() {
-	c := make(chan int)
-	go fib(c, 10) // HL
-
-	for x := range c { // HL
-		fmt.Println(x)
-	}
-}
diff --git a/content/2013/go4python/fib-gen.py b/content/2013/go4python/fib-gen.py
deleted file mode 100644
index bc02cfd..0000000
--- a/content/2013/go4python/fib-gen.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/python
-
-def fib(n):
-    a, b = 0, 1
-    for i in range(n):
-        a, b = b, a + b
-        yield a
-
-f = fib(10)
-try:
-	while True:
-		print f.next()
-except StopIteration:
-	print 'done'
-
-for x in fib(10):
-	print x
-print 'done'
diff --git a/content/2013/go4python/fib-gen2.go b/content/2013/go4python/fib-gen2.go
deleted file mode 100644
index f185152..0000000
--- a/content/2013/go4python/fib-gen2.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func fib(n int) chan int {
-	c := make(chan int) // HL
-	go func() {         // HL
-		a, b := 0, 1
-		for i := 0; i < n; i++ {
-			a, b = b, a+b
-			c <- a // HL
-		}
-		close(c)
-	}()
-	return c
-}
-
-func main() {
-	for x := range fib(10) {
-		fmt.Println(x)
-	}
-}
diff --git a/content/2013/go4python/fib.go b/content/2013/go4python/fib.go
deleted file mode 100644
index b014ecc..0000000
--- a/content/2013/go4python/fib.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func fib(n int) int {
-	a, b := 0, 1
-	for i := 0; i < n; i++ {
-		a, b = b, a+b
-	}
-	return b
-}
-
-func fibRec(n int) int {
-	if n <= 1 {
-		return 1
-	}
-	return fibRec(n-1) + fibRec(n-2)
-}
-
-func main() {
-	for i := 0; i < 10; i++ {
-		fmt.Println(fib(i), fibRec(i))
-	}
-}
diff --git a/content/2013/go4python/fib.py b/content/2013/go4python/fib.py
deleted file mode 100755
index afc57fa..0000000
--- a/content/2013/go4python/fib.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/python
-
-def fib(n):
-    a, b = 0, 1
-    for i in range(n):
-        a, b = b, a + b
-    return b
-
-def fib_rec(n):
-	if n <= 1:
-		return 1
-	else:
-		return fib_rec(n-1) + fib_rec(n-2)
-
-for x in range(10):
-	print fib(x), fib_rec(x)
diff --git a/content/2013/go4python/genex.go b/content/2013/go4python/genex.go
deleted file mode 100644
index 661a153..0000000
--- a/content/2013/go4python/genex.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// prime returns true if n is a prime number.
-func prime(n int) bool {
-	for i := 2; i < n; i++ {
-		if n%i == 0 {
-			return false
-		}
-	}
-	return true
-}
-
-// primes returns a channel of ints on which it writes the first n prime
-// numbers before closing it.
-func primes(n int) chan int {
-	c := make(chan int)
-	go func() {
-		for i := 1; n > 0; i++ {
-			if prime(i) {
-				c <- i
-				n--
-			}
-		}
-		close(c)
-	}()
-	return c
-}
-
-func main() {
-	for p := range primes(10) {
-		fmt.Println(p)
-	}
-}
diff --git a/content/2013/go4python/genex2.go b/content/2013/go4python/genex2.go
deleted file mode 100644
index f6caa71..0000000
--- a/content/2013/go4python/genex2.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// prime returns true if n is a prime number.
-func prime(n int) bool {
-	for i := 2; i < n; i++ {
-		if n%i == 0 {
-			return false
-		}
-	}
-	return true
-}
-
-// fib returns a channel on which the first n Fibonacci numbers are written.
-func fib(n int) chan int {
-	c := make(chan int)
-	go func() {
-		a, b := 0, 1
-		for i := 0; i < n; i++ {
-			a, b = b, a+b
-			c <- a
-		}
-		close(c)
-	}()
-	return c
-}
-
-// filterPrimes returns a channel of ints on which it writes all the prime
-// numbers read from cin, and closes the returned channel when cin is closed.
-func filterPrimes(cin chan int) chan int {
-	cout := make(chan int)
-	go func() {
-		for v := range cin {
-			if prime(v) {
-				cout <- v
-			}
-		}
-		close(cout)
-	}()
-	return cout
-}
-
-func main() {
-	for p := range filterPrimes(fib(20)) {
-		fmt.Println(p)
-	}
-}
diff --git a/content/2013/go4python/img/duck.jpg b/content/2013/go4python/img/duck.jpg
deleted file mode 100644
index 344b31e..0000000
--- a/content/2013/go4python/img/duck.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/img/fib-go.png b/content/2013/go4python/img/fib-go.png
deleted file mode 100644
index 6917140..0000000
--- a/content/2013/go4python/img/fib-go.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/img/fib-py.png b/content/2013/go4python/img/fib-py.png
deleted file mode 100644
index 96bad1a..0000000
--- a/content/2013/go4python/img/fib-py.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/img/funnelin.jpg b/content/2013/go4python/img/funnelin.jpg
deleted file mode 100644
index 2bf6873..0000000
--- a/content/2013/go4python/img/funnelin.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/img/gopher.jpg b/content/2013/go4python/img/gopher.jpg
deleted file mode 100644
index 0a64306..0000000
--- a/content/2013/go4python/img/gopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/img/monkey.jpg b/content/2013/go4python/img/monkey.jpg
deleted file mode 100644
index f4b5569..0000000
--- a/content/2013/go4python/img/monkey.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/go4python/monkey.go b/content/2013/go4python/monkey.go
deleted file mode 100644
index 1a5bc36..0000000
--- a/content/2013/go4python/monkey.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-var authURL = ""
-
-var auth = func(user string) bool {
-	res, err := http.Get(authURL + "/" + user)
-	return err == nil && res.StatusCode == http.StatusOK
-}
-
-func sayHi(user string) {
-	if !auth(user) {
-		fmt.Printf("unknown user %v\n", user)
-		return
-	}
-	fmt.Printf("Hi, %v\n", user)
-}
-
-func TestSayHi() {
-	auth = func(string) bool { return true }
-	sayHi("John")
-
-	auth = func(string) bool { return false }
-	sayHi("John")
-}
-
-func init() {
-	auth = func(string) bool { return true }
-}
-
-func TestAnythingElse() {
-	// auth has been already set to the fake version
-}
-
-func main() {
-	TestSayHi()
-}
diff --git a/content/2013/go4python/monkey.py b/content/2013/go4python/monkey.py
deleted file mode 100644
index 6f33a7c..0000000
--- a/content/2013/go4python/monkey.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/python
-
-import urllib
-
-auth_url = 'http://google.com'
-
-def auth(usr):
-	try:
-		r = urllib.urlopen(auth_url + '/' + usr)
-		return r.getcode() == 200
-	except:
-		return False
-
-def say_hi(usr):
-	if auth(usr):
-		print 'Hi, %s' % usr
-	else:
-		print 'unknown user %s' % usr
-
-def sayhitest():
-	# Test authenticated user
-	globals()['auth'] = lambda x: True
-	say_hi('John')
-
-	# Test unauthenticated user
-	globals()['auth'] = lambda x: False
-	say_hi('John')
-#done OMIT
-
-sayhitest()
diff --git a/content/2013/go4python/typesandmethods.go b/content/2013/go4python/typesandmethods.go
deleted file mode 100644
index 6690b4d..0000000
--- a/content/2013/go4python/typesandmethods.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"strings"
-)
-
-type Name struct {
-	First  string
-	Middle string
-	Last   string
-}
-
-func (n Name) String() string {
-	return fmt.Sprintf("%s %c. %s", n.First, n.Middle[0], strings.ToUpper(n.Last))
-}
-
-type SimpleName string
-
-func (s SimpleName) String() string { return string(s) }
-
-func main() {
-	n := Name{"William", "Mike", "Smith"}
-	fmt.Printf("%s", n.String())
-	return
-	// second OMIT
-	n = Name{"William", "Mike", "Smith"}
-	fmt.Println(n)
-}
diff --git a/content/2013/highperf.slide b/content/2013/highperf.slide
deleted file mode 100644
index 51143f8..0000000
--- a/content/2013/highperf.slide
+++ /dev/null
@@ -1,232 +0,0 @@
-High Performance Apps with Go on App Engine
-Google I/O, May 2013
-
-David Symonds
-Software Engineer, Google
-dsymonds@golang.org
-
-* Video
-
-This talk was presented at Google I/O in May 2013.
-
-.link http://www.youtube.com/watch?v=fc25ihfXhbg Watch the talk on YouTube
-
-* Overview
-
-- Why Go + App Engine
-- History, Status
-- Gopher Mart
-- Finding performance bottlenecks
-- Defer work
-- Batching
-- Caching
-- Concurrency
-- Control variance
-
-* Why Go + App Engine
-
-- Go compiles to native code
-- App Engine is an auto-scaling low-maintenance platform
-- Fastest runtime on App Engine: starts fast, runs fast
-
-.image highperf/aegopher.jpg
-
-* History
-
-- Go runtime for App Engine unveiled at Google I/O 2011
-- Steady growth, several high-profile users
-
-.image highperf/appenginegophercolor.jpg
-
-* Turkey doodle (Nov 2011)
-
-.image highperf/turkey.png
-
-- Written by a Go newcomer, launched in under 24 hours
-- Half the latency of a Python 2.7 version
-- Launched on google.com front page
-
-[[http://golang.org/s/turkey-doodle][golang.org/s/turkey-doodle]]
-
-* Santa Tracker (Dec 2012)
-
-.html highperf/santaembed.html
-
-- Nearly 5000 queries per second
-- Did not make any children cry
-
-.image highperf/santagraph.png
-
-* Gopher Mart
-
-* Gopher Mart
-
-- Imagine your app is the Gopher Mart, the one-stop-shop for all your gopher needs
-
-.image highperf/gophermart.png
-
-* Gopher Mart
-
-- Each checkout gopher is an app instance
-- Each shopping gopher is a user request
-- The scheduler directs requests to instances
-- A checkout gopher can deal with one customer at a time
-- Checkout gophers (instances) can be hired/fired, but there's overhead
-
-.image highperf/gophermart2.png
-
-* Gopher Mart
-
-- Gophers waiting in queues get grumpy
-- Let's make it fast
-
-* Finding performance bottlenecks
-
-- _Understand_why_your_checkout_gophers_might_work_slowly_
-- Measure first
-
-.image highperf/gopherrulespanner.png
-
-- Measure periodically; performance characteristics changes over time
-- Go 1.1 brings lots of performance improvements
-
-* Appstats
-
-- Appstats traces API RPCs, shows timeline
-- [[http://github.com/mjibson/appstats][github.com/mjibson/appstats]]
-
-- Gopher Mart baseline:
-.image highperf/appstats1.png
-
-* Performance Techniques
-
-* Defer work
-
-- Not all work needs to be done during the request
-- Use `appengine/taskqueue` or `appengine/delay` to move non-critical work outside the request scope
-- _Gopher_Mart_can_replace_slow_ `mail.Send` _with_quick_ `taskqueue.Add`
-
-* Defer work II
-
-Import `"appengine/delay"` and transform
-
-.code highperf/mart/1/mart.go /sendReceipt/
-.code highperf/mart/1/mart.go /func sendReceipt/
-
-into
-
-.code highperf/mart/2/mart.go /sendReceipt/
-.code highperf/mart/2/mart.go /var sendReceipt/
-
-.image highperf/appstats2.png
-
-* Batching
-
-- _Buying_10_boxes_of_Gopher_Flakes_is_easier_than_buying_a_single_box_10_times_
-- _Calling_for_a_price_check_on_three_items_is_faster_than_three_separate_price_checks_
-- Use `GetMulti` instead of `Get`, `PutMulti` instead of `Put`, etc.
-
-.code highperf/mart/2/mart.go /Dumb load/+1,/Print items/-1
-
-* Batching II
-
-.code highperf/mart/3/mart.go /Batch get/+1,/}/
-
-.image highperf/appstats3.png
-
-* Caching
-
-- _Checkout_gophers_can_make_notes_and_memorize_things_
-- Using datastore is fine, but it can be slow
-- Using memcache is good (shared among instances), but remember it can disappear
-- Using local memory is okay too, but it can disappear as well
-
-.html highperf/cachingembed.html
-
-* Concurrency
-
-- _A_price_check_may_delay_dealing_with_a_shopping_gopher_
-- RPC-bound requests are very common, and often least-cacheable
-- _Get_your_checkout_gopher_doing_something_else_while_waiting_
-
-* Concurrency II
-
-.code highperf/concurrency.go.notouch /func serial/+1,/^}/-1
-
-* Concurrency III
-
-- Run queries concurrently
-- Easy way to speed up RPC-bound requests
-
-.code highperf/concurrency.go.notouch /func parallel/+1,/^}/-1
-
-- Visit Sameer Ajmani's talk (today, 4:25PM, Room 7)
-
-* Control variance
-
-- _Some_shopping_gophers_can_take_much_longer_than_others_
-- Variance in request processing is very common (e.g. 99% take 10ms, 1% take 100ms)
-- Some requests are harder than others
-- Infrastructure is reliable, but not perfect
-
-* Control variance II
-
-- Effects of variance can cascade
-- Variable requests make scheduling harder, requires more instances (billed)
-- We want to control variance
-
-[[http://cacm.acm.org/magazines/2013/2/160173-the-tail-at-scale/fulltext]["The Tail at Scale", Dean, Barroso; Commun. ACM 56, 2]]
-
-* Control variance III
-
-- For example, storing in memcache is usually an optimisation, and thus optional
-- Bound time spent on optional work
-
-- First approach: save to memcache asynchronously
-
-.code highperf/longtail.go /long_tail_memcache_bad/+1,/^}/
-
-- Problem: Response will be returned to user as soon as handler returns, and outstanding API calls will be canceled
-
-* Control variance IV
-
-- Solution: Use Go's concurrency primitives to timeout waiting
-
-.code highperf/longtail.go /long_tail_memcache_good/+1,/^}/
-
-* Before and After
-
-Baseline:
-
-.image highperf/appstats1.png
-
-Defer work:
-
-.image highperf/appstats2.png
-
-Batching:
-
-.image highperf/appstats3.png
-
-* Summary
-
-- Finding performance bottlenecks
-- Defer work
-- Batching
-- Caching
-- Concurrency
-- Control variance
-
-* Finally...
-
-- [[http://golang.org][golang.org]]
-- [[http://developers.google.com/appengine/docs/go/][developers.google.com/appengine/docs/go/]]
-- [[http://golang.org/s/io13-ae-talk][golang.org/s/io13-ae-talk]] (this talk, plus gophermart app)
-- [[http://github.com/mjibson/appstats][github.com/mjibson/appstats]]
-
-More Go things:
-
-- _Go_in_Production_ (_office_hours_), 3:30PM-4:15PM, Cloud Sandbox
-- _Advanced_Go_Concurrency_Patterns_, 4:25PM, Room 7
-- _Fireside_Chat_with_the_Go_Team_, 5:20PM, Room 2
-- _Go_App_Engine_ (_office_hours_), 1:45PM-2:30PM *tomorrow*, Cloud Sandbox
diff --git a/content/2013/highperf/aegopher.jpg b/content/2013/highperf/aegopher.jpg
deleted file mode 100644
index f0c0bda..0000000
--- a/content/2013/highperf/aegopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/appenginegophercolor.jpg b/content/2013/highperf/appenginegophercolor.jpg
deleted file mode 100644
index 68795a9..0000000
--- a/content/2013/highperf/appenginegophercolor.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/appstats1.png b/content/2013/highperf/appstats1.png
deleted file mode 100644
index fe6d759..0000000
--- a/content/2013/highperf/appstats1.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/appstats2.png b/content/2013/highperf/appstats2.png
deleted file mode 100644
index d5eda22..0000000
--- a/content/2013/highperf/appstats2.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/appstats3.png b/content/2013/highperf/appstats3.png
deleted file mode 100644
index 1f6e553..0000000
--- a/content/2013/highperf/appstats3.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/art/gophercart.png b/content/2013/highperf/art/gophercart.png
deleted file mode 100644
index 7813cd4..0000000
--- a/content/2013/highperf/art/gophercart.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/art/gophercheckout.png b/content/2013/highperf/art/gophercheckout.png
deleted file mode 100644
index 4fadb30..0000000
--- a/content/2013/highperf/art/gophercheckout.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/art/gophermegaphone.png b/content/2013/highperf/art/gophermegaphone.png
deleted file mode 100644
index e06d65b..0000000
--- a/content/2013/highperf/art/gophermegaphone.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/cachingembed.html b/content/2013/highperf/cachingembed.html
deleted file mode 100644
index 50d1b33..0000000
--- a/content/2013/highperf/cachingembed.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<table style="width: 50%;">
-  <caption>Small reads</caption>
-  <tr>
-    <td><tt>datastore.Get</tt></td>
-    <td>O(20ms)</td>
-  </tr>
-  <tr>
-    <td><tt>memcache.Get</tt></td>
-    <td>O(1ms)</td>
-  </tr>
-  <tr>
-    <td><tt>RAM</tt></td>
-    <td>O(1µs)</td>
-  </tr>
-</table>
diff --git a/content/2013/highperf/concurrency.go.notouch b/content/2013/highperf/concurrency.go.notouch
deleted file mode 100644
index 0ac5d81..0000000
--- a/content/2013/highperf/concurrency.go.notouch
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore
-
-package pkg
-
-func serial() {
-	var lists []List
-	var items []Item
-	_, err := datastore.NewQuery("List").GetAll(c, &lists)
-	if err != nil { /* ... */ }
-	_, err := datastore.NewQuery("Item").GetAll(c, &items)
-	if err != nil { /* ... */ }
-	// write response
-}
-
-func parallel() {
-	var lists []List
-	var items []Item
-	errc := make(chan error)	// HL
-	go func() {	// HL
-		_, err := datastore.NewQuery("List").GetAll(c, &lists)
-		errc <- err
-	}()	// HL
-	go func() {	// HL
-		_, err := datastore.NewQuery("Item").GetAll(c, &items)
-		errc <- err
-	}()	// HL
-	err1, err2 := <-errc, <-errc	// HL
-	if err1 != nil || err2 != nil { /* ... */ }
-	// write response
-}
diff --git a/content/2013/highperf/gophermart.png b/content/2013/highperf/gophermart.png
deleted file mode 100644
index 72ae11c..0000000
--- a/content/2013/highperf/gophermart.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/gophermart2.png b/content/2013/highperf/gophermart2.png
deleted file mode 100644
index 9ff5f0e..0000000
--- a/content/2013/highperf/gophermart2.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/gopherrulespanner.png b/content/2013/highperf/gopherrulespanner.png
deleted file mode 100644
index 24603f3..0000000
--- a/content/2013/highperf/gopherrulespanner.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/longtail.go b/content/2013/highperf/longtail.go
deleted file mode 100644
index c097d6c..0000000
--- a/content/2013/highperf/longtail.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package pkg
-
-// long_tail_memcache_bad
-func myHandler(w http.ResponseWriter, r *http.Request) {
-	c := appengine.NewContext(r)
-	// ...
-	// regular request handling
-	// ...
-
-	go memcache.Set(c, &memcache.Item{
-		Key:   key,
-		Value: data,
-	})
-}
-
-// long_tail_memcache_good
-func myHandler(w http.ResponseWriter, r *http.Request) {
-	c := appengine.NewContext(r)
-	// ...
-	// regular request handling
-	// ...
-
-	// Save to memcache, but only wait up to 3ms.
-	done := make(chan bool, 1) // NB: buffered
-	go func() {
-		memcache.Set(c, &memcache.Item{
-			Key:   key,
-			Value: data,
-		})
-		done <- true
-	}()
-	select { // HL
-	case <-done: // HL
-	case <-time.After(3 * time.Millisecond): // HL
-	} // HL
-}
diff --git a/content/2013/highperf/mart/1/app.yaml b/content/2013/highperf/mart/1/app.yaml
deleted file mode 100644
index 04e0df7..0000000
--- a/content/2013/highperf/mart/1/app.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-application: gophermart
-version: 1
-runtime: go
-api_version: go1
-
-handlers:
-- url: /admin/.*
-  script: _go_app
-  login: admin
-- url: /.*
-  script: _go_app
-  login: required
diff --git a/content/2013/highperf/mart/1/mart.go b/content/2013/highperf/mart/1/mart.go
deleted file mode 100644
index 51d39c5..0000000
--- a/content/2013/highperf/mart/1/mart.go
+++ /dev/null
@@ -1,134 +0,0 @@
-// +build ignore,OMIT
-
-package mart
-
-import (
-	"bytes"
-	"fmt"
-	"math/rand"
-	"net/http"
-	"strconv"
-	"strings"
-
-	"appengine"
-	"appengine/datastore"
-	"appengine/mail"
-	"appengine/user"
-
-	"github.com/mjibson/appstats"
-)
-
-func init() {
-	http.HandleFunc("/", front)
-	http.Handle("/checkout", appstats.NewHandler(checkout))
-	http.HandleFunc("/admin/populate", adminPopulate)
-}
-
-func front(w http.ResponseWriter, r *http.Request) {
-	if r.URL.Path != "/" {
-		http.NotFound(w, r)
-		return
-	}
-	fmt.Fprintf(w, "Hello, welcome to Gopher Mart!")
-}
-
-const (
-	numItems = 100 // number of different items for sale
-
-	appAdmin = "noreply@google.com" // an admin of this app, for sending mail
-)
-
-// Item represents an item for sale in Gopher Mart.
-type Item struct {
-	Name  string
-	Price float64
-}
-
-func itemKey(c appengine.Context, i int) *datastore.Key {
-	return datastore.NewKey(c, "Item", fmt.Sprintf("item%04d", i), 0, nil)
-}
-
-func checkout(c appengine.Context, w http.ResponseWriter, r *http.Request) {
-	w.Header().Set("Content-Type", "text/plain; charset=utf-8")
-	num, err := strconv.Atoi(r.FormValue("num"))
-	if err == nil && (num < 1 || num > 30) {
-		err = fmt.Errorf("%d out of range [1,30]", num)
-	}
-	if err != nil {
-		http.Error(w, fmt.Sprintf("bad number of items: %v", err), http.StatusBadRequest)
-		return
-	}
-
-	// Pick random items.
-	keys := make([]*datastore.Key, num)
-	for i := range keys {
-		keys[i] = itemKey(c, rand.Intn(numItems))
-	}
-
-	// Dumb load.
-	var items []*Item
-	for _, key := range keys {
-		item := new(Item)
-		if err := datastore.Get(c, key, item); err != nil {
-			http.Error(w, fmt.Sprintf("datastore.Get: %v", err), http.StatusBadRequest)
-			return
-		}
-		items = append(items, item)
-	}
-
-	// Print items.
-	var b bytes.Buffer
-	fmt.Fprintf(&b, "Here's what you bought:\n")
-	var sum float64
-	for _, item := range items {
-		fmt.Fprintf(&b, "\t%s", item.Name)
-		fmt.Fprint(&b, strings.Repeat("\t", (40-len(item.Name)+7)/8))
-		fmt.Fprintf(&b, "$%5.2f\n", item.Price)
-		sum += item.Price
-	}
-	fmt.Fprintln(&b, strings.Repeat("-", 55))
-	fmt.Fprintf(&b, "\tTotal:\t\t\t\t\t$%.2f\n", sum)
-
-	w.Write(b.Bytes())
-
-	sendReceipt(c, user.Current(c).Email, b.String())
-}
-
-func sendReceipt(c appengine.Context, dst, body string) {
-	msg := &mail.Message{
-		Sender:  appAdmin,
-		To:      []string{dst},
-		Subject: "Your Gopher Mart receipt",
-		Body:    body,
-	}
-	if err := mail.Send(c, msg); err != nil {
-		c.Errorf("mail.Send: %v", err)
-	}
-}
-
-func adminPopulate(w http.ResponseWriter, r *http.Request) {
-	c := appengine.NewContext(r)
-	for i := range [numItems]struct{}{} { // r hates this. tee hee.
-		key := itemKey(c, i)
-		good := goods[rand.Intn(len(goods))]
-		item := &Item{
-			// TODO: vary names more
-			Name:  fmt.Sprintf("%s %dg", good.name, i+1),
-			Price: float64(rand.Intn(1999)+1) / 100,
-		}
-		if _, err := datastore.Put(c, key, item); err != nil {
-			http.Error(w, err.Error(), 500)
-			return
-		}
-	}
-	fmt.Fprintf(w, "ok. %d items populated.", numItems)
-}
-
-var goods = [...]struct {
-	name string
-}{
-	{"Gopher Bran"},
-	{"Gopher Flakes"},
-	{"Gopher Grease"},
-	{"Gopher Litter"},
-}
diff --git a/content/2013/highperf/mart/2/app.yaml b/content/2013/highperf/mart/2/app.yaml
deleted file mode 100644
index a620f68..0000000
--- a/content/2013/highperf/mart/2/app.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-application: gophermart
-version: 2
-runtime: go
-api_version: go1
-
-handlers:
-- url: /admin/.*
-  script: _go_app
-  login: admin
-- url: /_ah/(stats|queue).*
-  script: _go_app
-  login: admin
-- url: /.*
-  script: _go_app
-  login: required
diff --git a/content/2013/highperf/mart/2/mart.go b/content/2013/highperf/mart/2/mart.go
deleted file mode 100644
index 6c10c59..0000000
--- a/content/2013/highperf/mart/2/mart.go
+++ /dev/null
@@ -1,136 +0,0 @@
-// +build ignore,OMIT
-
-package mart
-
-import (
-	"bytes"
-	"fmt"
-	"math/rand"
-	"net/http"
-	"strconv"
-	"strings"
-
-	"appengine"
-	"appengine/datastore"
-	"appengine/delay"
-	"appengine/mail"
-	"appengine/user"
-
-	"github.com/mjibson/appstats"
-)
-
-func init() {
-	http.HandleFunc("/", front)
-	http.Handle("/checkout", appstats.NewHandler(checkout))
-	http.HandleFunc("/admin/populate", adminPopulate)
-}
-
-func front(w http.ResponseWriter, r *http.Request) {
-	if r.URL.Path != "/" {
-		http.NotFound(w, r)
-		return
-	}
-	fmt.Fprintf(w, "Hello, welcome to Gopher Mart!")
-}
-
-const (
-	numItems = 100 // number of different items for sale
-
-	appAdmin = "noreply@google.com" // an admin of this app, for sending mail
-)
-
-// Item represents an item for sale in Gopher Mart.
-type Item struct {
-	Name  string
-	Price float64
-}
-
-func itemKey(c appengine.Context, i int) *datastore.Key {
-	return datastore.NewKey(c, "Item", fmt.Sprintf("item%04d", i), 0, nil)
-}
-
-func checkout(c appengine.Context, w http.ResponseWriter, r *http.Request) {
-	w.Header().Set("Content-Type", "text/plain; charset=utf-8")
-	num, err := strconv.Atoi(r.FormValue("num"))
-	if err == nil && (num < 1 || num > 30) {
-		err = fmt.Errorf("%d out of range [1,30]", num)
-	}
-	if err != nil {
-		http.Error(w, fmt.Sprintf("bad number of items: %v", err), http.StatusBadRequest)
-		return
-	}
-
-	// Pick random items.
-	keys := make([]*datastore.Key, num)
-	for i := range keys {
-		keys[i] = itemKey(c, rand.Intn(numItems))
-	}
-
-	// Dumb load.
-	var items []*Item
-	for _, key := range keys {
-		item := new(Item)
-		if err := datastore.Get(c, key, item); err != nil {
-			// ...
-			http.Error(w, fmt.Sprintf("datastore.Get: %v", err), http.StatusBadRequest) // OMIT
-			return                                                                      // OMIT
-		}
-		items = append(items, item)
-	}
-
-	// Print items.
-	var b bytes.Buffer
-	fmt.Fprintf(&b, "Here's what you bought:\n")
-	var sum float64
-	for _, item := range items {
-		fmt.Fprintf(&b, "\t%s", item.Name)
-		fmt.Fprint(&b, strings.Repeat("\t", (40-len(item.Name)+7)/8))
-		fmt.Fprintf(&b, "$%5.2f\n", item.Price)
-		sum += item.Price
-	}
-	fmt.Fprintln(&b, strings.Repeat("-", 55))
-	fmt.Fprintf(&b, "\tTotal:\t\t\t\t\t$%.2f\n", sum)
-
-	w.Write(b.Bytes())
-
-	sendReceipt.Call(c, user.Current(c).Email, b.String())
-}
-
-var sendReceipt = delay.Func("send-receipt", func(c appengine.Context, dst, body string) {
-	msg := &mail.Message{
-		Sender:  appAdmin,
-		To:      []string{dst},
-		Subject: "Your Gopher Mart receipt",
-		Body:    body,
-	}
-	if err := mail.Send(c, msg); err != nil {
-		c.Errorf("mail.Send: %v", err)
-	}
-})
-
-func adminPopulate(w http.ResponseWriter, r *http.Request) {
-	c := appengine.NewContext(r)
-	for i := range [numItems]struct{}{} { // r hates this. tee hee.
-		key := itemKey(c, i)
-		good := goods[rand.Intn(len(goods))]
-		item := &Item{
-			// TODO: vary names more
-			Name:  fmt.Sprintf("%s %dg", good.name, i+1),
-			Price: float64(rand.Intn(1999)+1) / 100,
-		}
-		if _, err := datastore.Put(c, key, item); err != nil {
-			http.Error(w, err.Error(), 500)
-			return
-		}
-	}
-	fmt.Fprintf(w, "ok. %d items populated.", numItems)
-}
-
-var goods = [...]struct {
-	name string
-}{
-	{"Gopher Bran"},
-	{"Gopher Flakes"},
-	{"Gopher Grease"},
-	{"Gopher Litter"},
-}
diff --git a/content/2013/highperf/mart/3/app.yaml b/content/2013/highperf/mart/3/app.yaml
deleted file mode 100644
index 3e3c223..0000000
--- a/content/2013/highperf/mart/3/app.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-application: gophermart
-version: 3
-runtime: go
-api_version: go1
-
-handlers:
-- url: /admin/.*
-  script: _go_app
-  login: admin
-- url: /.*
-  script: _go_app
-  login: required
diff --git a/content/2013/highperf/mart/3/mart.go b/content/2013/highperf/mart/3/mart.go
deleted file mode 100644
index 49c341a..0000000
--- a/content/2013/highperf/mart/3/mart.go
+++ /dev/null
@@ -1,132 +0,0 @@
-// +build ignore,OMIT
-
-package mart
-
-import (
-	"bytes"
-	"fmt"
-	"math/rand"
-	"net/http"
-	"strconv"
-	"strings"
-
-	"appengine"
-	"appengine/datastore"
-	"appengine/delay"
-	"appengine/mail"
-	"appengine/user"
-
-	"github.com/mjibson/appstats"
-)
-
-func init() {
-	http.HandleFunc("/", front)
-	http.Handle("/checkout", appstats.NewHandler(checkout))
-	http.HandleFunc("/admin/populate", adminPopulate)
-}
-
-func front(w http.ResponseWriter, r *http.Request) {
-	if r.URL.Path != "/" {
-		http.NotFound(w, r)
-		return
-	}
-	fmt.Fprintf(w, "Hello, welcome to Gopher Mart!")
-}
-
-const (
-	numItems = 100 // number of different items for sale
-
-	appAdmin = "noreply@google.com" // an admin of this app, for sending mail
-)
-
-// Item represents an item for sale in Gopher Mart.
-type Item struct {
-	Name  string
-	Price float64
-}
-
-func itemKey(c appengine.Context, i int) *datastore.Key {
-	return datastore.NewKey(c, "Item", fmt.Sprintf("item%04d", i), 0, nil)
-}
-
-func checkout(c appengine.Context, w http.ResponseWriter, r *http.Request) {
-	w.Header().Set("Content-Type", "text/plain; charset=utf-8")
-	num, err := strconv.Atoi(r.FormValue("num"))
-	if err == nil && (num < 1 || num > 30) {
-		err = fmt.Errorf("%d out of range [1,30]", num)
-	}
-	if err != nil {
-		http.Error(w, fmt.Sprintf("bad number of items: %v", err), http.StatusBadRequest)
-		return
-	}
-
-	// Pick random items.
-	keys := make([]*datastore.Key, num)
-	for i := range keys {
-		keys[i] = itemKey(c, rand.Intn(numItems))
-	}
-
-	// Batch get
-	items := make([]Item, len(keys))
-	if err := datastore.GetMulti(c, keys, items); err != nil {
-		// ...
-		http.Error(w, fmt.Sprintf("datastore.GetMulti: %v", err), http.StatusBadRequest) // OMIT
-		return                                                                           // OMIT
-	}
-
-	// Print items.
-	var b bytes.Buffer
-	fmt.Fprintf(&b, "Here's what you bought:\n")
-	var sum float64
-	for _, item := range items {
-		fmt.Fprintf(&b, "\t%s", item.Name)
-		fmt.Fprint(&b, strings.Repeat("\t", (40-len(item.Name)+7)/8))
-		fmt.Fprintf(&b, "$%5.2f\n", item.Price)
-		sum += item.Price
-	}
-	fmt.Fprintln(&b, strings.Repeat("-", 55))
-	fmt.Fprintf(&b, "\tTotal:\t\t\t\t\t$%.2f\n", sum)
-
-	w.Write(b.Bytes())
-
-	sendReceipt.Call(c, user.Current(c).Email, b.String())
-}
-
-var sendReceipt = delay.Func("send-receipt", func(c appengine.Context, dst, body string) {
-	msg := &mail.Message{
-		Sender:  appAdmin,
-		To:      []string{dst},
-		Subject: "Your Gopher Mart receipt",
-		Body:    body,
-	}
-	if err := mail.Send(c, msg); err != nil {
-		c.Errorf("mail.Send: %v", err)
-	}
-})
-
-func adminPopulate(w http.ResponseWriter, r *http.Request) {
-	c := appengine.NewContext(r)
-	for i := range [numItems]struct{}{} { // r hates this. tee hee.
-		key := itemKey(c, i)
-		good := goods[rand.Intn(len(goods))]
-		item := &Item{
-			// TODO: vary names more
-			Name:  fmt.Sprintf("%s %dg", good.name, i+1),
-			Price: float64(rand.Intn(1999)+1) / 100,
-		}
-		if _, err := datastore.Put(c, key, item); err != nil {
-			http.Error(w, err.Error(), 500)
-			return
-		}
-	}
-	fmt.Fprintf(w, "ok. %d items populated.", numItems)
-}
-
-var goods = [...]struct {
-	name string
-}{
-	{"Gopher Bran"},
-	{"Gopher Flakes"},
-	{"Gopher Grease"},
-	{"Gopher Litter"},
-}
diff --git a/content/2013/highperf/mart/README b/content/2013/highperf/mart/README
deleted file mode 100644
index e4c90be..0000000
--- a/content/2013/highperf/mart/README
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a little demonstration app called Gopher Mart.
-
-1/ is the simple, trivial, stupid, slow version.
-2/ defers work (mail).
-3/ uses batching.
diff --git a/content/2013/highperf/santa.png b/content/2013/highperf/santa.png
deleted file mode 100644
index 4409e9d..0000000
--- a/content/2013/highperf/santa.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/santaembed.html b/content/2013/highperf/santaembed.html
deleted file mode 100644
index 746c75c..0000000
--- a/content/2013/highperf/santaembed.html
+++ /dev/null
@@ -1 +0,0 @@
-<img src="highperf/santa.png" style="float: right; margin-right: 10em;" />
diff --git a/content/2013/highperf/santagraph.png b/content/2013/highperf/santagraph.png
deleted file mode 100644
index 906aa8b..0000000
--- a/content/2013/highperf/santagraph.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/highperf/turkey.png b/content/2013/highperf/turkey.png
deleted file mode 100644
index d84e976..0000000
--- a/content/2013/highperf/turkey.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl.slide b/content/2013/oscon-dl.slide
deleted file mode 100644
index d4a8a2e..0000000
--- a/content/2013/oscon-dl.slide
+++ /dev/null
@@ -1,436 +0,0 @@
-dl.google.com: Powered by Go
-10:00 26 Jul 2013
-Tags: download, oscon, port, c++, google, groupcache, caching
-
-Brad Fitzpatrick
-Gopher, Google
-@bradfitz
-bradfitz@golang.org
-http://bradfitz.com/
-http://golang.org/
-https://github.com/golang/groupcache/
-
-* Overview / tl;dw:
-
-- dl.google.com serves Google downloads
-- Was written in C++
-- Now in Go
-- Now much better
-- Extensive, idiomatic use of Go's standard library
-- ... which is all open source
-- composition of interfaces is fun
-- _groupcache_, now Open Source, handles group-aware caching and cache-filling
-
-* too long...
-
-* me
-
-- Brad Fitzpatrick
-- bradfitz.com
-- @bradfitz
-- past: LiveJournal, memcached, OpenID, Perl stuff...
-- nowadays: Go, Go, Camlistore, Go, anything & everything written in Go ...
-
-* I love Go
-
-- this isn't a talk about Go, sorry.
-- but check it out.
-- simple, powerful, fast, liberating, refreshing
-- great mix of low- and high- level
-- light on the page
-- static binaries, easy to deploy
-- not perfect, but my favorite language yet
-
-* dl.google.com
-
-* dl.google.com
-
-- HTTP download server
-- serves Chrome, Android SDK, Earth, much more
-- Some huge, some tiny (e.g. WebGL white/blacklist JSON)
-- behind an edge cache; still high traffic
-- lots of datacenters, lots of bandwidth
-
-* Why port?
-
-* reason 0
-
-$ apt-get update
-
-.image oscon-dl/slow.png
-
-- embarassing
-- Google can't serve a 1,238 byte file?
-- Hanging?
-- 207 B/s?!
-
-* Yeah, embarassing, for years...
-
-.image oscon-dl/crbug.png
-
-* ... which led to:
-
-- complaining on corp G+. Me: "We suck. This sucks."
-- primary SRE owning it: "Yup, it sucks. And is unmaintained."
-- "I'll rewrite it for you!"
-- "Hah."
-- "No, serious. That's kinda our job. But I get to do it in Go."
-- (Go team's loan-out-a-Gopher program...)
-
-* How hard can this be?
-
-* dl.google.com: few tricks
-
-each "payload" (~URL) described by a protobuf:
-
-- paths/patterns for its URL(s)
-- go-live reveal date
-- ACLs (geo, network, user, user type, ...)
-- dynamic zip files
-- custom HTTP headers
-- custom caching
-
-* dl.google.com: how it was
-
-.image oscon-dl/before.png
-
-* Aside: Why good code goes bad
-
-* Why good code goes bad
-
-- Premise: people don't suck
-- Premise: code was once beautiful
-- code tends towards complexity (gets worse)
-- environment changes
-- scale changes
-
-* code complexity
-
-- without regular love, code grows warts over time
-- localized fixes and additions are easy & quick, but globally crappy
-- features, hacks and workarounds added without docs or tests
-- maintainers come & go,
-- ... or just go.
-
-* changing environment
-
-- Google's infrastructure (hardware & software), like anybody's, is always changing
-- properties of networks, storage
-- design assumptions no longer make sense
-- scale changes (design for 10x growth, rethink at 100x)
-- new internal services (beta or non-existent then, dependable now)
-- once-modern home-grown invented wheels might now look archaic 
-
-* so why did it suck?
-
-.image oscon-dl/slow.png
-
-- stalling its single-threaded event loop, blocking when it shouldn't
-- maxed out at one CPU, but couldn't even use a fraction of a single CPU.
-
-* but why?
-
-- code was too complicated
-- future maintainers slowly violated unwritten rules
-- or knowingly violated them, assuming it couldn't be too bad?
-- C++ single-threaded event-based callback spaghetti
-- hard to know when/where code was running, or what "blocking" meant
-
-* Old code
-
-- served from local disk
-- single-threaded event loop
-- used sendfile(2) "for performance"
-- tried to be clever and steal the fd from the "SelectServer" sometimes to manually call sendfile
-- while also trying to do HTTP chunking,
-- ... and HTTP range requests,
-- ... and dynamic zip files,
-- lots of duplicated copy/paste code paths
-- many wrong/incomplete in different ways
-
-* Mitigation solution?
-
-- more complexity!
-- ad hoc addition of more threads
-- ... not really defined which threads did what,
-- ... or what the ownership or locking rules were,
-- no surprise: random crashes
-
-* Summary of 5-year old code in 2012
-
-- incomplete docs, tests
-- stalling event loop
-- ad-hoc threads...
-- ... stalling event loops
-- ... races
-- ... crashes
-- copy/paste code
-- ... incomplete code
-- two processes in the container
-- ... different languages
-
-* Environment changes
-
-- Remember: on start, we had to copy all payloads to local disk
-- in 2007, using local disk wasn't restricted
-- in 2007, sum(payload size) was much smaller
-- in 2012, containers get tiny % of local disk spindle time
-- ... why aren't you using the cluster file systems like everybody else?
-- ... cluster file systems own disk time on your machine, not you.
-- in 2007, it started up quickly.
-- in 2012, it started in 12-24 hours (!!!)
-- ... hope we don't crash! (oh, whoops)
-
-* Copying N bytes from A to B in event loop environments (node.js, this C++, etc)
-
-- Can *A* read?
-- Read up to _n_ bytes from A.
-- What'd we get? _rn_
-- _n_ -= _rn_
-- Store those.
-- Note we want to want to write to *B* now.
-- Can *B* write?
-- Try to write _rn_ bytes to *B*. Got _wn_.
-- buffered -= _wn_
-- while (blah blah blah) { ... blah blah blah ... }
-
-* Thought that sucked? Try to mix in other state / logic, and then write it in C++.
-
-*  
-
-.image oscon-dl/cpp-write.png
-
-*  
-
-.image oscon-dl/cpp-writeerr.png
-
-*   
-
-.image oscon-dl/cpp-toggle.png
-
-* Or in JavaScript...
-
-- [[https://github.com/nodejitsu/node-http-proxy/blob/master/lib/node-http-proxy/http-proxy.js]]
-- Or Python gevent, Twisted, ...
-- Or Perl AnyEvent, etc.
-- Unreadable, discontiguous code.
-
-* Copying N bytes from A to B in Go:
-
-.code oscon-dl/copy.go /START OMIT/,/END OMIT/
-
-- dst is an _io.Writer_ (an interface type)
-- src is an _io.Reader_ (an interface type)
-- synchronous (blocks)
-- Go runtime deals with making blocking efficient
-- goroutines, epoll, user-space scheduler, ...
-- easier to reason about
-- fewer, easier, compatible APIs
-- concurrency is a _language_ (not _library_) feature
-
-* Where to start?
-
-- baby steps, not changing everything at once
-- only port the `payload_server`, not the `payload_fetcher`
-- read lots of old design docs
-- read lots of C++ code
-- port all command-line flags
-- serve from local disk
-- try to run integration tests
-- while (fail) { debug, port, swear, ...}
-
-* Notable stages
-
-- pass integration tests
-- run in a lightly-loaded datacenter
-- audit mode
-- ... mirror traffic to old & new servers; compare responses.
-- drop all SWIG dependencies on C++ libraries
-- ... use IP-to-geo lookup service, not static file + library
-
-* Notable stages
-
-- fetch blobs directly from blobstore, falling back to local disk on any errors,
-- relying entirely on blobstore, but `payload_fetcher` still running
-- disable `payload_fetcher` entirely; fast start-up time.
-
-* Using Go's Standard Library
-
-* Using Go's Standard Library
-
-- dl.google.com mostly just uses the standard library
-
-* Go's Standard Library
-
-- net/http
-- io
-- [[http://golang.org/pkg/net/http/#ServeContent][http.ServeContent]]
-
-* Hello World
-
-.play oscon-dl/server-hello.go
-
-* File Server
-
-.play oscon-dl/server-fs.go
-
-* http.ServeContent
-
-.image oscon-dl/servecontent.png
-
-* io.Reader, io.Seeker
-
-.image oscon-dl/readseeker.png
-.image oscon-dl/reader.png
-.image oscon-dl/seeker.png
-
-* http.ServeContent
-
-$ curl -H "Range: bytes=5-" http://localhost:8080
-
-.play oscon-dl/server-content.go
-
-* groupcache
-
-* groupcache
-
-- memcached alternative / replacement
-- [[http://github.com/golang/groupcache]]
-- _library_ that is both a client & server
-- connects to its peers
-- coordinated cache filling (no thundering herds on miss)
-- replication of hot items
-
-* Using groupcache
-
-Declare who you are and who your peers are.
-
-.code oscon-dl/groupcache.go /STARTINIT/,/ENDINIT/
-
-This peer interface is pluggable. (e.g. inside Google it's automatic.)
-
-* Using groupcache
-
-Declare a group. (group of keys, shared between group of peers)
-
-.code oscon-dl/groupcache.go /STARTGROUP/,/ENDGROUP/
-
-- group name "thumbnail" must be globally unique
-- 64 MB max per-node memory usage
-- Sink is an interface with SetString, SetBytes, SetProto
-
-* Using groupcache
-
-Request keys
-
-.code oscon-dl/groupcache.go /STARTUSE/,/ENDUSE/
-
-- might come from local memory cache
-- might come from peer's memory cache
-- might be computed locally
-- might be computed remotely
-- of all threads on all machines, only one thumbnail is made, then fanned out in-process and across-network to all waiters
-
-* dl.google.com and groupcache
-
-- Keys are "<blobref>-<chunk_offset>"
-- Chunks are 2MB
-- Chunks cached from local memory (for self-owned and hot items),
-- Chunks cached remotely, or
-- Chunks fetched from Google storage systems
-
-* dl.google.com interface composition
-
-.code oscon-dl/sizereaderat.go /START_1/,/END_1/
-
-* io.SectionReader
-
-.image oscon-dl/sectionreader.png
-
-* chunk-aligned ReaderAt
-
-.code oscon-dl/chunkaligned.go /START_DOC/,/END_DOC/
-
-- Caller can do ReadAt calls of any size and any offset
-- `r` only sees ReadAt calls on 2MB offset boundaries, of size 2MB (unless final chunk)
-
-* Composing all this
-
-- http.ServeContent wants a ReadSeeker
-- io.SectionReader(ReaderAt + size) -> ReadSeeker
-- Download server payloads are a type "content" with Size and ReadAt, implemented with calls to groupcache.
-- Wrapped in a chunk-aligned ReaderAt
-- ... concatenate parts of with MultiReaderAt
-
-.play oscon-dl/server-compose.go /START/,/END/
-
-* Things we get for free from net/http
-
-- Last-Modified
-- ETag
-- Range requests (w/ its paranoia)
-- HTTP/1.1 chunking, etc.
-- ... old server tried to do all this itself
-- ... incorrectly
-- ... incompletely
-- ... in a dozen different copies
-
-* Overall simplification
-
-- deleted C++ payload_server & Python payload_fetcher
-- 39 files (14,032 lines) deleted
-- one binary now (just Go `payload_server`, no `payload_fetcher`)
-- starts immediately, no huge start-up delay
-- server is just "business logic" now, not HTTP logic
-
-* From this...
-
-.image oscon-dl/before.png
-
-* ... to this.
-
-.image oscon-dl/after.png
-
-* And from page and pages of this...
-
-.image oscon-dl/cpp-writeerr.png
-
-* ... to this
-
-.image oscon-dl/after-code.png
-
-* So how does it compare to C++?
-
-- less than half the code
-- more testable, tests
-- same CPU usage for same bandwidth
-- ... but can do much more bandwidth
-- ... and more than one CPU
-- less memory (!)
-- no disk
-- starts up instantly (not 24 hours)
-- doesn't crash
-- handles hot download spikes
-
-* Could we have just rewritten it in new C++?
-
-- Sure.
-- But why?
-
-* Could I have just fixed the bugs in the C++ version?
-
-- Sure, if I could find them.
-- Then have to own it ("You touched it last...")
-- And I already maintain an HTTP server library. Don't want to maintain a bad one too.
-- It's much more maintainable. (and 3+ other people now do)
-
-* How much of dl.google.com is closed-source?
-
-- Very little.
-- ... ACL policies
-- ... RPCs to Google storage services.
-- Most is open source:
-- ... code.google.com/p/google-api-go-client/storage/v1beta1
-- ... net/http and rest of Go standard library
-- ... `groupcache`, now open source ([[https://github.com/golang/groupcache][github.com/golang/groupcache]])
-
diff --git a/content/2013/oscon-dl/after-code.png b/content/2013/oscon-dl/after-code.png
deleted file mode 100644
index 672ed03..0000000
--- a/content/2013/oscon-dl/after-code.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/after.go b/content/2013/oscon-dl/after.go
deleted file mode 100644
index 021a487..0000000
--- a/content/2013/oscon-dl/after.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// +build ignore,OMIT
-
-package download
-
-func (s *Server) handleDownload(w http.ResponseWriter, r *http.Request) {
-	s.addActiveDownloadTotal(1)
-	defer s.addActiveDownloadTotal(-1)
-	if !isGetOrHead(w, r) {
-		return
-	}
-	uctx, err := s.newUserContext(r)
-	// ...
-	pl, cacheable, err := s.chooseValidPayloadToDownload(uctx)
-	// ...
-	content, err := pl.content()
-	// ...
-	defer content.Close()
-	w.Header().Set("Content-Type", pl.mimeType())
-	if etag := pl.etag(); etag != "" {
-		w.Header().Set("Etag", strconv.Quote(etag))
-	}
-	if cacheable {
-		w.Header().Set("Expires", pl.expirationTime())
-	}
-	readSeeker := io.NewSectionReader(content, 0, content.Size())
-	http.ServeContent(w, r, "", pl.lastModifiedTime(), readSeeker)
-}
diff --git a/content/2013/oscon-dl/after.png b/content/2013/oscon-dl/after.png
deleted file mode 100644
index e009726..0000000
--- a/content/2013/oscon-dl/after.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/before.png b/content/2013/oscon-dl/before.png
deleted file mode 100644
index d82ef07..0000000
--- a/content/2013/oscon-dl/before.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/chunkaligned.go b/content/2013/oscon-dl/chunkaligned.go
deleted file mode 100644
index d5c0ace..0000000
--- a/content/2013/oscon-dl/chunkaligned.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "io"
-
-type SizeReaderAt interface {
-	io.ReaderAt
-	Size() int64
-}
-
-// START_DOC OMIT
-// NewChunkAlignedReaderAt returns a ReaderAt wrapper that is backed
-// by a ReaderAt r of size totalSize where the wrapper guarantees that
-// all ReadAt calls are aligned to chunkSize boundaries and of size
-// chunkSize (except for the final chunk, which may be shorter).
-//
-// A chunk-aligned reader is good for caching, letting upper layers have
-// any access pattern, but guarantees that the wrapped ReaderAt sees
-// only nicely-cacheable access patterns & sizes.
-func NewChunkAlignedReaderAt(r SizeReaderAt, chunkSize int) SizeReaderAt {
-	// ...
-	return nil // OMIT
-}
-
-// END_DOC OMIT
diff --git a/content/2013/oscon-dl/copy.go b/content/2013/oscon-dl/copy.go
deleted file mode 100644
index e778543..0000000
--- a/content/2013/oscon-dl/copy.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-)
-
-func main() {
-	var dst io.Writer
-	var src io.Reader
-	// START OMIT
-	n, err := io.Copy(dst, src)
-	// END OMIT
-	_ = n
-	_ = err
-}
diff --git a/content/2013/oscon-dl/cpp-toggle.png b/content/2013/oscon-dl/cpp-toggle.png
deleted file mode 100644
index 6e867de..0000000
--- a/content/2013/oscon-dl/cpp-toggle.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/cpp-write.png b/content/2013/oscon-dl/cpp-write.png
deleted file mode 100644
index 411edf2..0000000
--- a/content/2013/oscon-dl/cpp-write.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/cpp-writeerr.png b/content/2013/oscon-dl/cpp-writeerr.png
deleted file mode 100644
index 3ff2218..0000000
--- a/content/2013/oscon-dl/cpp-writeerr.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/crbug.png b/content/2013/oscon-dl/crbug.png
deleted file mode 100644
index 53df1f5..0000000
--- a/content/2013/oscon-dl/crbug.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/groupcache.go b/content/2013/oscon-dl/groupcache.go
deleted file mode 100644
index ee18e7c..0000000
--- a/content/2013/oscon-dl/groupcache.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"net/http"
-	"time"
-
-	"github.com/golang/groupcache"
-)
-
-func main() {
-	// STARTINIT OMIT
-	me := "http://10.0.0.1"
-	peers := groupcache.NewHTTPPool(me)
-
-	// Whenever peers change:
-	peers.Set("http://10.0.0.1", "http://10.0.0.2", "http://10.0.0.3")
-	// ENDINIT OMIT
-
-	// STARTGROUP OMIT
-	var thumbNails = groupcache.NewGroup("thumbnail", 64<<20, groupcache.GetterFunc(
-		func(ctx groupcache.Context, key string, dest groupcache.Sink) error {
-			fileName := key
-			dest.SetBytes(generateThumbnail(fileName))
-			return nil
-		}))
-	// ENDGROUP OMIT
-
-	var ctx groupcache.Context
-	var w http.ResponseWriter
-	var r *http.Request
-
-	// STARTUSE OMIT
-	var data []byte
-	err := thumbNails.Get(ctx, "big-file.jpg",
-		groupcache.AllocatingByteSliceSink(&data))
-	// ...
-	_ = err               // OMIT
-	var modTime time.Time // OMIT
-	http.ServeContent(w, r, "big-file-thumb.jpg", modTime, bytes.NewReader(data))
-	// ENDUSE OMIT
-}
-
-func generateThumbnail(filename string) []byte {
-	// ...
-	return nil
-}
diff --git a/content/2013/oscon-dl/reader.png b/content/2013/oscon-dl/reader.png
deleted file mode 100644
index d556fe7..0000000
--- a/content/2013/oscon-dl/reader.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/readseeker.png b/content/2013/oscon-dl/readseeker.png
deleted file mode 100644
index d48928b..0000000
--- a/content/2013/oscon-dl/readseeker.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/sectionreader.png b/content/2013/oscon-dl/sectionreader.png
deleted file mode 100644
index 5f2e537..0000000
--- a/content/2013/oscon-dl/sectionreader.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/seeker.png b/content/2013/oscon-dl/seeker.png
deleted file mode 100644
index d27fb68..0000000
--- a/content/2013/oscon-dl/seeker.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/servecontent.png b/content/2013/oscon-dl/servecontent.png
deleted file mode 100644
index 6bc738a..0000000
--- a/content/2013/oscon-dl/servecontent.png
+++ /dev/null
Binary files differ
diff --git a/content/2013/oscon-dl/server-compose.go b/content/2013/oscon-dl/server-compose.go
deleted file mode 100644
index 7865b83..0000000
--- a/content/2013/oscon-dl/server-compose.go
+++ /dev/null
@@ -1,116 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net/http"
-	"sort"
-	"strings"
-	"time"
-)
-
-var modTime = time.Unix(1374708739, 0)
-
-// START OMIT
-func part(s string) SizeReaderAt {
-	return io.NewSectionReader(strings.NewReader(s), 0, int64(len(s)))
-}
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	sra := NewMultiReaderAt(
-		part("Hello, "), part(" world! "),
-		part("You requested "+r.URL.Path+"\n"),
-	)
-	rs := io.NewSectionReader(sra, 0, sra.Size())
-	http.ServeContent(w, r, "foo.txt", modTime, rs)
-}
-
-//END OMIT
-
-func main() {
-	log.Printf("Running...")
-	http.HandleFunc("/", handler)
-	log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil))
-}
-
-// START_1 OMIT
-// A SizeReaderAt is a ReaderAt with a Size method.
-//
-// An io.SectionReader implements SizeReaderAt.
-type SizeReaderAt interface {
-	Size() int64
-	io.ReaderAt
-}
-
-// NewMultiReaderAt is like io.MultiReader but produces a ReaderAt
-// (and Size), instead of just a reader.
-func NewMultiReaderAt(parts ...SizeReaderAt) SizeReaderAt {
-	m := &multi{
-		parts: make([]offsetAndSource, 0, len(parts)),
-	}
-	var off int64
-	for _, p := range parts {
-		m.parts = append(m.parts, offsetAndSource{off, p})
-		off += p.Size()
-	}
-	m.size = off
-	return m
-}
-
-// END_1 OMIT
-
-type offsetAndSource struct {
-	off int64
-	SizeReaderAt
-}
-
-type multi struct {
-	parts []offsetAndSource
-	size  int64
-}
-
-func (m *multi) Size() int64 { return m.size }
-
-func (m *multi) ReadAt(p []byte, off int64) (n int, err error) {
-	wantN := len(p)
-
-	// Skip past the requested offset.
-	skipParts := sort.Search(len(m.parts), func(i int) bool {
-		// This function returns whether parts[i] will
-		// contribute any bytes to our output.
-		part := m.parts[i]
-		return part.off+part.Size() > off
-	})
-	parts := m.parts[skipParts:]
-
-	// How far to skip in the first part.
-	needSkip := off
-	if len(parts) > 0 {
-		needSkip -= parts[0].off
-	}
-
-	for len(parts) > 0 && len(p) > 0 {
-		readP := p
-		partSize := parts[0].Size()
-		if int64(len(readP)) > partSize-needSkip {
-			readP = readP[:partSize-needSkip]
-		}
-		pn, err0 := parts[0].ReadAt(readP, needSkip)
-		if err0 != nil {
-			return n, err0
-		}
-		n += pn
-		p = p[pn:]
-		if int64(pn)+needSkip == partSize {
-			parts = parts[1:]
-		}
-		needSkip = 0
-	}
-
-	if n != wantN {
-		err = io.ErrUnexpectedEOF
-	}
-	return
-}
diff --git a/content/2013/oscon-dl/server-content.go b/content/2013/oscon-dl/server-content.go
deleted file mode 100644
index 92aa0ab..0000000
--- a/content/2013/oscon-dl/server-content.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"log"
-	"net/http"
-	"strings"
-	"time"
-)
-
-func main() {
-	log.Printf("Running...")
-	err := http.ListenAndServe("127.0.0.1:8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		http.ServeContent(w, r, "foo.txt", time.Now(),
-			strings.NewReader("I am some content.\n"))
-	}))
-	log.Fatal(err)
-}
diff --git a/content/2013/oscon-dl/server-fs.go b/content/2013/oscon-dl/server-fs.go
deleted file mode 100644
index 8a09f55..0000000
--- a/content/2013/oscon-dl/server-fs.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"log"
-	"net/http"
-	"os"
-	"path/filepath"
-)
-
-func main() {
-	log.Printf("Running...")
-	log.Fatal(http.ListenAndServe(
-		"127.0.0.1:8080",
-		http.FileServer(http.Dir(
-			filepath.Join(os.Getenv("HOME"), "go", "doc")))))
-}
diff --git a/content/2013/oscon-dl/server-hello.go b/content/2013/oscon-dl/server-hello.go
deleted file mode 100644
index dc846a7..0000000
--- a/content/2013/oscon-dl/server-hello.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-	"os"
-)
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintf(os.Stdout, "%s details: %+v\n", r.URL.Path, r)
-	fmt.Fprintf(w, "Hello, world! at %s\n", r.URL.Path)
-}
-
-func main() {
-	log.Printf("Running...")
-	log.Fatal(http.ListenAndServe("127.0.0.1:8080", http.HandlerFunc(handler)))
-}
diff --git a/content/2013/oscon-dl/server.go b/content/2013/oscon-dl/server.go
deleted file mode 100644
index 39655d7..0000000
--- a/content/2013/oscon-dl/server.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "net/http"
-
-func main() {
-	http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		http.ServeContent(w, r, "foo.txt", time.Now(),
-			strings.NewReader("I am some content.\n"))
-	}))
-}
diff --git a/content/2013/oscon-dl/sizereaderat.go b/content/2013/oscon-dl/sizereaderat.go
deleted file mode 100644
index 383577c..0000000
--- a/content/2013/oscon-dl/sizereaderat.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// +build ignore,OMIT
-
-package sizereaderat
-
-import (
-	"io"
-	"sort"
-)
-
-// START_1 OMIT
-// A SizeReaderAt is a ReaderAt with a Size method.
-//
-// An io.SectionReader implements SizeReaderAt.
-type SizeReaderAt interface {
-	Size() int64
-	io.ReaderAt
-}
-
-// NewMultiReaderAt is like io.MultiReader but produces a ReaderAt
-// (and Size), instead of just a reader.
-func NewMultiReaderAt(parts ...SizeReaderAt) SizeReaderAt {
-	m := &multi{
-		parts: make([]offsetAndSource, 0, len(parts)),
-	}
-	var off int64
-	for _, p := range parts {
-		m.parts = append(m.parts, offsetAndSource{off, p})
-		off += p.Size()
-	}
-	m.size = off
-	return m
-}
-
-// END_1 OMIT
-
-type offsetAndSource struct {
-	off int64
-	SizeReaderAt
-}
-
-type multi struct {
-	parts []offsetAndSource
-	size  int64
-}
-
-func (m *multi) Size() int64 { return m.size }
-
-func (m *multi) ReadAt(p []byte, off int64) (n int, err error) {
-	wantN := len(p)
-
-	// Skip past the requested offset.
-	skipParts := sort.Search(len(m.parts), func(i int) bool {
-		// This function returns whether parts[i] will
-		// contribute any bytes to our output.
-		part := m.parts[i]
-		return part.off+part.Size() > off
-	})
-	parts := m.parts[skipParts:]
-
-	// How far to skip in the first part.
-	needSkip := off
-	if len(parts) > 0 {
-		needSkip -= parts[0].off
-	}
-
-	for len(parts) > 0 && len(p) > 0 {
-		readP := p
-		partSize := parts[0].Size()
-		if int64(len(readP)) > partSize-needSkip {
-			readP = readP[:partSize-needSkip]
-		}
-		pn, err0 := parts[0].ReadAt(readP, needSkip)
-		if err0 != nil {
-			return n, err0
-		}
-		n += pn
-		p = p[pn:]
-		if int64(pn)+needSkip == partSize {
-			parts = parts[1:]
-		}
-		needSkip = 0
-	}
-
-	if n != wantN {
-		err = io.ErrUnexpectedEOF
-	}
-	return
-}
diff --git a/content/2013/oscon-dl/slow.png b/content/2013/oscon-dl/slow.png
deleted file mode 100644
index f684cfe..0000000
--- a/content/2013/oscon-dl/slow.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/c2go.slide b/content/2014/c2go.slide
deleted file mode 100644
index 9f38b9a..0000000
--- a/content/2014/c2go.slide
+++ /dev/null
@@ -1,541 +0,0 @@
-Go, from C to Go
-
-GopherCon
-25 Apr 2014
-
-Russ Cox
-Google
-
-http://golang.org/
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=QIE5nV5fDwA Watch the talk on YouTube
-
-
-* Go Compiler
-
-* Go Compiler
-
-80,000+ lines of C.
-
-* Problem
-
-Programming in Go is fun.
-
-Programming in C is not.
-
-* Problem
-
-Writing a Go compiler requires Go expertise.
-
-Writing any program in C requires C expertise.
-
-Writing a Go compiler in C requires Go and C expertise.
-
-* Solution
-
-Write the Go compiler in Go.
-
-* Past
-
-Why not write the Go compiler in Go on day one?
-
-- Go did not exist.
-
-- Go was unstable.
-
-- Go is not targeting compiler writers.
-
-* Present
-
-Why do it today?
-
-- Go does exist.
-
-- Go is stable.
-
-- Go is a great general purpose language.
-
-* How?
-
-Crazy idea: mechanical conversion.
-
-“One big gofix.”
-
-* C
-
-* C
-
-- First creative burst in 1972 at Bell Labs
-
-- Ritchie, [[http://cm.bell-labs.com/who/dmr/chist.html][The Development of the C Language]], HOPL 1993
-
-- “C is quirky, flawed, and an enormous success...”
-
-* C Data Model
-
-- Original target: PDP-11 with 24 kB of memory.
-
-- Programmer is in charge of memory.
-
-- “Off-stack, dynamically-allocated storage is provided only by a library routine and the burden of managing it is placed on the programmer: C is hostile to automatic garbage collection.”
-
-- Types are there to help but not enforced.
-
-* C Control Flow
-
-- `do...while`, `for`, `switch`, `while`
-
-- the much maligned `goto`
-
-* C Program Model
-
-- Per-file compilation.
-
-- Headers vs code.
-
-- `#define`, `#include`
-
-* Conversion
-
-* Challenges for Converting C to Go
-
-- minor: unions, #define, comments
-
-- goto
-
-- type mapping
-
-* Goal
-
-Automated conversion of our C code to Go.
-
-Target: _our_ C code, not _all_ C code.
-
-- Want generated code to be maintainable.
-- Want automatic translation for 99%+ of the code.
-- No need to solve general problem for tiny number of cases.
-- Special cases in converter are okay.
-- Annotations in source code are okay.
-
-* Warmups
-
-* Unions
-
-go/src/cmd/gc/go.h
-
-	struct  Val
-	{
-	    short   ctype;
-	    union
-	    {
-	        short   reg;        // OREGISTER
-	        short   bval;       // bool value CTBOOL
-	        Mpint*  xval;       // int CTINT, rune CTRUNE
-	        Mpflt*  fval;       // float CTFLT
-	        Mpcplx* cval;       // float CTCPLX
-	        Strlit* sval;       // string CTSTR
-	    } u;
-	};
-
-* Unions
-
-go/include/link.h
-
-	struct  Addr
-	{
-	    short type;
-	    union
-	    {
-	        char    sval[8];
-	        float64 dval;
-	        Prog*   branch; // for 5g, 6g, 8g
-	    } u;
-	    
-	    ...
-	};
-
-* Unions
-
-`#define` `struct` `union` `/*` `Great` `space` `saver` `*/`
-
-* Unions
-
-`#define` `union` `struct` `/*` `legal` `in` `C!` `*/`
-
-And anyway, there are only two.
-
-* #define
-
-Can't just expand during parsing.
-
-* #define
-
-Not many. 
-
-	/*
-	 * defined macros
-	 *    you need super-gopher-guru privilege
-	 *    to add this list.
-	 */
-	#define nelem(x)    (sizeof(x)/sizeof((x)[0]))
-	#define nil         ((void*)0)
-	...
-
-Extend parser to recognize special cases.
-
-* #define
-
-Annotate some.
-
-	#define	BOM	0xFEFF
-	/*c2go enum { BOM = 0xFEFF }; */
-
-Rewrite others.
-
-	enum {
-	    BOM = 0xFEFF,
-	};
-
-* Comments
-
-Can't just discard during parsing.
-
-	/*
-	 * If the new process paused because it was
-	 * swapped out, set the stack level to the last call
-	 * to savu(u_ssav).  This means that the return
-	 * which is executed immediately after the call to aretu
-	 * actually returns from the last routine which did
-	 * the savu.
-	 *
-	 * You are not expected to understand this.
-	 */
-	if(rp->p_flag&SSWAP) {
-	    rp->p_flag =& ~SSWAP;
-	    aretu(u.u_ssav);
-	}
-
-* Comments
-
-Record precise source locations.
-
-	case OMAPLIT:
-	    n->esc = EscNone;  // until proven otherwise
-	    e->noesc = list(e->noesc, n);
-	    n->escloopdepth = e->loopdepth;
-
-	    // Keys and values make it to memory, lose track.
-	    for(ll=n->list; ll; ll=ll->next) {
-	        escassign(e, &e->theSink, ll->n->left);
-	        escassign(e, &e->theSink, ll->n->right);
-	    }
-	    break;
-
-Whole-line comments attach to syntax immediately following (or EOF).
-
-Suffix comments attach to syntax immediately before.
-
-Syntax carries comments if it moves.
-
-* Goto
-
-* C Goto
-
-“27. Horrors! goto’s and labels
-
-C has a goto statement and labels, so you can branch about the way you used to. But most of the time goto’s aren’t needed... The code can almost always be more clearly expressed by for/while, if/else, and compound statements.
-
-* C Goto
-
-One use of goto’s with some legitimacy is in a program which contains a long loop, where a while(1) would be too extended. Then you might write
-
-	mainloop:
-		...
-		goto mainloop;
-
-Another use is to implement a break out of more than one level of for or while. goto’s can only branch to labels within the same function.”
-
-— Kernighan, [[http://cm.bell-labs.com/who/dmr/ctut.pdf][Programming in C – A Tutorial]]
-
-* Go Goto Restrictions
-
-- Cannot jump over a variable declaration in target scope.
-
-	.   if x {
-	        goto Done
-	    }
-	    
-	    y := f()
-	    print(y)
-	
-	Done:
-	    close(c)
-	    return
-
-* Go Goto Restrictions
-
-- Cannot jump over a variable declaration in target scope.
-
-	.   var y int
-
-	    if x {
-	        goto Done
-	    }
-	    
-	    y = f()
-	    print(y)
-	
-	Done:
-	    close(c)
-	    return
-
-* Go Goto Restrictions
-
-- Cannot jump into a new scope (into a { } block).
-
-	if bad {
-	Bad:
-	    printError()
-	    return err
-	}
-	
-	...
-	
-	if other bad thing {
-	    goto Bad
-	}
-
-* Go Goto Restrictions
-
-- Cannot jump into a new scope (into a { } block or switch case).
-
-	switch x {
-	case 1:
-	    F()
-	    goto Common;
-	case 2:
-	    G()
-	    goto Common
-	case 3:
-	Common:
-	    H()
-	}
-
-* Goto in Go compiler
-
-1032 goto statements
-241 labels
-
-* Goto in Go compiler
-
-35 indented labels
-
-18 switch case
-6 multilevel break/continue
-5 ‘else’ statement
-4 cleanup/error labels
-1 loop
-1 difficult to explain
-
-* Refactor switch case goto
-
-	switch(r->op) {
-	case OINDEXMAP:
-	    n->op = OAS2MAPR;
-	    goto common;
-	case ORECV:
-	    n->op = OAS2RECV;
-	    goto common;
-	case ODOTTYPE:
-	    n->op = OAS2DOTTYPE;
-	    r->op = ODOTTYPE2;
-	common:
-	    ...
-	}
-	
-* Refactor switch case goto
-
-	switch r.op {
-	case OINDEXMAP, ORECV, ODOTTYPE:
-	    switch r.op {
-	    case OINDEXMAP:
-	        n.op = OAS2MAPR
-	    case ORECV:
-	    	n.op = OAS2RECV
-	    case ODOTTYPE:
-	    	n.op = OAS2DOTTYPE
-	    	r.op = ODOTTYPE2
-	    }
-	    ...
-	}
-
-* General solution
-
-Baker, [[http://dl.acm.org/citation.cfm?id=321999][An Algorithm for Structuring Flowgraphs]], JACM 1977
-
-But we don't need it.
-
-Handle trivial rewrites in converter.
-Rewrite problematic gotos by hand.
-
-* Type Mapping
-
-* Type Mapping
-
-General question: what type to use in the Go translation?
-
-- C allows implicit conversion between int, long, char and so on. Go must use one consistently.
-
-- C uses pointers for what Go calls pointers _and_ slices.
-
-* Type Mapping
-
-Build graph of “assigned” value flow and extract clusters.
-
-	x = y;
-	
-	int f(void) {
-	    return x;
-	}
-	w = f();
-	
-	void g(int z);
-	g(x);
-	g(y);
-
-Apply to entire compiler (all files). Exclude some functions.
-
-* Type Mapping
-
-	int
-	islvalue(Node *n)
-	{
-	    switch(n->op) {
-	    case OINDEX:
-	        if(isfixedarray(n->left->type))
-	            return islvalue(n->left);
-	        if(n->left->type != T && n->left->type->etype == TSTRING)
-	            return 0;
-	        // fall through
-	    case OIND:
-	    case ODOTPTR:
-	    case OCLOSUREVAR:
-	        return 1;
-	    case ODOT:
-	        return islvalue(n->left);
-	    case ONAME:
-	        if(n->class == PFUNC)
-	            return 0;
-	        return 1;
-	    }
-	    return 0;
-	}
-
-* Type Mapping
-
-	int
-	islvalue(Node *n)
-	{
-	    ...
-	    return islvalue(n->left);
-	    ...
-	    return 0;
-	    ...
-	    return 1;
-	    ...
-	    return islvalue(n->left);
-	    ...
-	    return 0;
-	    ...
-	    return 1;
-	    ...
-	    return 0;
-	}
-
-* Type Mapping
-
-	cluster
-	    types: int
-	    values:
-	        return from islvalue
-	        0
-	        1
-	        islvalue(n)
-	        islvalue(n->left)
-	        islvalue(n->right)
-	    contexts:
-	        bool condition
-	        /* if(islvalue(n)), if(!islvalue(n)), ... */
-
-Translation: bool.
-
-* Type Mapping
-
-	cluster
-	    types: int
-	    values:
-	        return from checksliceconst
-	        0
-	        -1
-	    contexts:
-	        checksliceconst(lo, hi) < 0
-	        checksliceconst(lo, mid) < 0
-	        checksliceconst(mid, hi) < 0
-
-Translation: bool or error.
-
-* Type Mapping
-
-	cluster
-	    types: Val*
-	    values:
-	        var Val *v
-	        va_arg(fp->args, Val*)
-	    contexts:
-	        v->ctype
-	        v->u
-
-Translation: pointer.
-
-* Type Mapping
-
-	cluster
-	    types: long*
-	    values:
-	        var long* a1
-	        &a->a[0]
-	    contexts:
-	        *a1
-	        a1++
-
-Translation: slice.
-
-* Type Mapping
-
-Cluster statistics
-
-- 1,703 clusters in Go compiler
-- median cluster size 4 values
-- max cluster size 16,592 values
-
-Clustering does not rely on C type information at all.
-
-* Conversion status
-
-- Still prototyping, but looks good.
-- Aiming at Go 1.4, but no promises.
-
-By the way, please try the Go 1.3 beta!
-
-* Go from C to Go!
-
-- Practical
-- Applicable to other code bases?
-- Applicable to other languages?
-- Applicable to program understanding tools?
-
diff --git a/content/2014/camlistore.slide b/content/2014/camlistore.slide
deleted file mode 100644
index 897dd69..0000000
--- a/content/2014/camlistore.slide
+++ /dev/null
@@ -1,207 +0,0 @@
-Camlistore: Android, ARM, App Engine, anywhere.
-
-25 June 2014
-Tags: camlistore
-
-Brad Fitzpatrick
-Gopher, Google
-@bradfitz
-bradfitz@golang.org
-http://bradfitz.com/
-http://camlistore.org/
-
-* Me
-
-- bradfitz
-- LiveJournal, memcached, OpenID, ...
-- Google
-- Go Standard Library, etc
-- Camlistore
-
-* Camlistore
-
-* Camlistore
-
-- "Your personal storage system for life"
-- 4 year+ open source project:
-.link http://camlistore.org
-- All in Go.
-- Early user of Go's standard library. Helped shape it.
-
-* Camlistore
-
-- stores, indexes, searches, syncs, shares content
-- can optionally model POSIX filesystems
-- lightweight object storage model, stores all mutations
-
-Stores on:
-
-- local disk, S3, Google Cloud Storage
-- MySQL, Postgres, SQLite, LevelDB,
-- MongoDB, App Engine,
-- itself,
-- encrypted, sharded, replicated, load balanced,
-- ...
-
-* Camlistore screenshots
-
-* Web UI
-
-.image camlistore/cam-mix-types.png _ 1000
-
-* Location search
-
-.image camlistore/cam-moscow.png 580 _
-
-* Panos
-
-.image camlistore/cam-pano.png _ 1000
-
-* Paris + Portrait
-
-.image camlistore/cam-paris-portrait.png _ 1000
-
-* Non-images
-
-.image camlistore/cam-other.png _ 1000
-
-* FUSE
-
-.image camlistore/cam-fuse.png _ 1000
-
-* Android
-
-.image camlistore/cam-android.png 600 _
-
-* Camlistore Demo
-
-* Camlistore does much, in many places
-
-* Camlistore
-
-does:
-
-- a web & API server
-- a FUSE filesystem (OS X, Linux)
-- command-line tools
-
-on:
-
-- desktops, personal servers
-- Raspberry Pi, etc (ARM)
-- Android
-- App Engine
-- Cloud (EC2, GCE)
-
-* Desktops, personal servers
-
-- Linux, FreeBSD, Mac, Windows, ...
-
-  $ go {get,build,install,test} camlistore.org/{cmd,pkg,server}/...
-
-- Occasional use of +build windows, etc.
-- Nothing fancy.
-
-* Raspberry Pi
-
-- Most ARM devices are very slow
-- Cross compile from any OS, architecture on a fast machine:
-
-  $ GOARCH=arm GOOS=linux go build camlistore.org/server/camlistored
-
-- ... then copy binary to the slow ARM device.
-- Popular helper tool:
-
-.link https://github.com/davecheney/golang-crosscompile
-
-- For debugging: ChromeOS + crouton is nice, pretty fast
-
-* App Engine
-
-- Just upload the code.
-- App Engine APIs require context plumbing.
-- Ugly hacks avoid context plumbing, but don't.
-.link https://developers.google.com/appengine/docs/go/reference#Context
-.link http://godoc.org/camlistore.org/pkg/context
-.link http://godoc.org/code.google.com/p/go.net/context
-- Restructure code to not assume long-running goroutines; handlers only
-- No unsafe, syscall, etc: use build tags on files:
-
-  // +build !appengine
-
-* Cloud
-
-- Same as desktop.
-- Static binaries make deployment easy
-- Even easier: 
-- Embed resources (CSS, JS, HTML, images) with fileembed
-- Camlistore has: camlistore.org/pkg/fileembed + genfileembed
-
-* fileembed
-
-Definition:
-
-  package fileembed
-  func (f *Files) Open(filename string) (http.File, error)
-
-Use in Camlistore:
-
-  package server
-  uistatic.Files = &fileembed.Files{
-      DirFallback: ui.uiDir,
-      Listable:    true,
-      // In dev_appserver, allow edit-and-reload without
-      // restarting. In production, though, it's faster to just
-      // slurp it in.
-      SlurpToMemory: uistatic.IsProdAppEngine,
-  }
-
-- Just reload in dev; embedded in binary in production.
-
-* Camlistore's genfileembed
-
-  $ genfileembed ./path/to/dir
-
-- generates zindex.html.go
-
-* Embedding resources
-
-- Many options in the Go community
-- Coming to Go 1.4 built-in
-
-* Web server
-
-- Obvious
-- net/http is great: no need for Apache, nginx, etc
-- WebSockets support is great and easy
-
-* FUSE
-
-- Native filesystem on OS X & Linux
-- hanwen/gofuse (then only Linux) -> rsc/fuse (then only Mac) -> Camlistore fork (both) -> bazil.org (community maintained)
-- Easy to write fast filesystems in Go
-
-* Android
-
-- child process
-- on Application start, unzip arm binary to Unix (not media) filesystem 
-.link https://camlistore.googlesource.com/camlistore/+/master/clients/android/src/org/camlistore/UploadApplication.java UploadApplication.java
-.link https://camlistore.googlesource.com/camlistore/+/master/clients/android/src/org/camlistore/UploadThread.java UploadThread.java
-- build with Docker (demo)
-.link https://camlistore.googlesource.com/camlistore/+/master/clients/android/devenv/Dockerfile Dockerfile
-.link https://camlistore.googlesource.com/camlistore/+/master/clients/android/Makefile Makefile
-.link https://camlistore.googlesource.com/camlistore/+/master/clients/android/build-in-docker.pl build-in-docker.pl
-
-* Command-line tools
-
-  $ cmdtool [--global=foo] subcmd [--subcommand opts]
-
-.link http://camlistore.org/pkg/cmdmain/
-.link https://camlistore.googlesource.com/camlistore/+/master/cmd/camtool/describe.go camtool's describe.go
-.link https://github.com/codegangsta/cli Popular: codegangsta/cli
-
-* In summary
-
-Go is awesome and runs lots of places, easily.
-
-- Web, CLI, FUSE, x86, ARM, Android, App Engine
diff --git a/content/2014/camlistore/cam-android.png b/content/2014/camlistore/cam-android.png
deleted file mode 100644
index e56804a..0000000
--- a/content/2014/camlistore/cam-android.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-boot.png b/content/2014/camlistore/cam-boot.png
deleted file mode 100644
index 3c7726e..0000000
--- a/content/2014/camlistore/cam-boot.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-checkins.png b/content/2014/camlistore/cam-checkins.png
deleted file mode 100644
index 29a9a81..0000000
--- a/content/2014/camlistore/cam-checkins.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-fuse.png b/content/2014/camlistore/cam-fuse.png
deleted file mode 100644
index 77334f0..0000000
--- a/content/2014/camlistore/cam-fuse.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-mix-types.png b/content/2014/camlistore/cam-mix-types.png
deleted file mode 100644
index c53603a..0000000
--- a/content/2014/camlistore/cam-mix-types.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-moscow.png b/content/2014/camlistore/cam-moscow.png
deleted file mode 100644
index 9f2a62c..0000000
--- a/content/2014/camlistore/cam-moscow.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-other.png b/content/2014/camlistore/cam-other.png
deleted file mode 100644
index 246b72a..0000000
--- a/content/2014/camlistore/cam-other.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-pano.png b/content/2014/camlistore/cam-pano.png
deleted file mode 100644
index 3d0e4dc..0000000
--- a/content/2014/camlistore/cam-pano.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/camlistore/cam-paris-portrait.png b/content/2014/camlistore/cam-paris-portrait.png
deleted file mode 100644
index 583535c..0000000
--- a/content/2014/camlistore/cam-paris-portrait.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/compiling.slide b/content/2014/compiling.slide
deleted file mode 100644
index cf19a8c..0000000
--- a/content/2014/compiling.slide
+++ /dev/null
@@ -1,145 +0,0 @@
-Go: Easy to Read, Hard to Compile
-Corner cases when compiling Go
-
-Ian Lance Taylor
-Google
-iant@golang.org
-
-* Introduction
-
-- To really learn a language, write a compiler for it
-- Compiler bugs imply language complexity
-- Or, compiler bugs imply differences from C/C++
-- Sometimes simpler for users is harder for compilers
-- Fortunately Go is much simpler to compile than C++ or even C
-
-This talk is based on Go compiler bugs encountered over the years.
-
-* Recursive Types
-
-Names in Go packages are defined in the entire package, so Go types
-can refer to themselves recursively.
-
-.code compiling/rtype1.go /1 START OMIT/,/1 END OMIT/
-
-This is not permitted in C/C++, except for the special case of a
-struct/union/class field which is a pointer/reference.
-
-All Go compiler code that walks over types has to be careful to avoid
-endless loops.
-
-* Recursive Types
-
-What good is a recursive pointer type?  It can only be nil or a
-pointer to itself.  That's enough for Peano arithmetic.
-
-.code compiling/rtype1.go /2 START OMIT/,/2 END OMIT/
-
-* Recursive Types
-
-Actually, a recursive pointer can have a bit more information: it can
-have a finalizer.
-
-.play compiling/rtype1.go /3 START OMIT/,/3 END OMIT/
-
-* Recursive Types
-
-Recursive function types are actually useful: they can implement a
-state machine.
-
-.code compiling/rtype2.go /1 START OMIT/,/1 END OMIT/
-
-* Recursive types
-
-.play compiling/rtype2.go /2 START OMIT/,/2 END OMIT/
-
-* Recursive Types
-
-Simple rule: all names at package scope are visible in the entire
-package.
-
-Complex consequence: compiler must handle recursive types (also
-recursive initializers).
-
-* Constants
-
-Go has both typed and untyped constants.  They follow the same rules,
-except that a typed constant must be representable in its type.
-
-This is reasonably clear for integers, less so for floats.
-
-.play compiling/const1.go /1 START OMIT/,/1 END OMIT/
-
-* Constants
-
-Go's floating point variables follow IEEE-754 rules.
-
-Constants do not.
-
-.play compiling/const2.go /1 START OMIT/,/1 END OMIT/
-
-* Constants
-
-The special unsafe.Sizeof function returns a constant.
-
-.play compiling/const3.go /1 START OMIT/,/1 END OMIT/
-
-* Constants
-
-Simple rule: constants are untyped; they are mathematically exact and
-do not require type conversions.
-
-Complex consequence: exact floating point behavior depends on the
-type.
-
-* Name Lookup
-
-Name lookup in a Go compiler is simple compared to many languages.
-For every name the scope in which to look it up is obvious.  This
-makes parsing Go quite simple.
-
-With one exception.  What is the scope for i?
-
-.code compiling/name1.go /1 START OMIT/,/1 END OMIT/
-
-* Name Lookup
-
-One possibility.
-
-.play compiling/name1.go /2 START OMIT/,/2 END OMIT/
-
-* Name Lookup
-
-Another possibility.
-
-.play compiling/name2.go /2 START OMIT/,/2 END OMIT/
-
-* Name Lookup
-
-Simple rule: in a struct composite literal you can use field names as
-keys.
-
-Complex consequence: if you don't know the type of the composite
-literal, the lookup scope of names used as keys is unclear when
-parsing.
-
-* Methods
-
-Any named type can have methods.  Any struct type can inherit methods
-from an embedded field.  It follows that you can sometimes call
-methods on a variable even if it has an unnamed type.
-
-.play compiling/var1.go /1 START OMIT/,/1 END OMIT/
-
-* Methods
-
-Simple rules: named types can have methods; structs can have embedded
-fields.
-
-Complex consequence: unnamed types can have methods.
-
-* Conclusion
-
-- Go is simpler to compile than most languages
-- There are still complexities for the compiler
-- Most complexities stem from making Go easier to write
diff --git a/content/2014/compiling/const1.go b/content/2014/compiling/const1.go
deleted file mode 100644
index 6b18693..0000000
--- a/content/2014/compiling/const1.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// 1 START OMIT
-const C1 = 1e-323
-
-const C2 = C1 / 100
-const C3 = C2 * 100
-
-const C4 float64 = C1 / 100
-const C5 = C4 * 100
-
-func main() {
-	fmt.Println(C3, C5)
-}
-
-// 1 END OMIT
diff --git a/content/2014/compiling/const2.go b/content/2014/compiling/const2.go
deleted file mode 100644
index 762252f..0000000
--- a/content/2014/compiling/const2.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// 1 START OMIT
-const C1 = 1e+308
-const C2 = C1 * 10
-const C3 = C2 / 10
-
-var V1 = C1
-var V2 = V1 * 10
-var V3 = V2 / 10
-
-func main() {
-	fmt.Println(C3, V3)
-}
-
-// 1 END OMIT
diff --git a/content/2014/compiling/const3.go b/content/2014/compiling/const3.go
deleted file mode 100644
index 59d3f16..0000000
--- a/content/2014/compiling/const3.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"unsafe"
-)
-
-// 1 START OMIT
-var V1 = 0x01020304
-var V2 [unsafe.Sizeof(V1)]byte
-
-func main() {
-	*(*int)(unsafe.Pointer(&V2)) = V1
-	fmt.Println(V2)
-}
-
-// 1 END OMIT
diff --git a/content/2014/compiling/name1.go b/content/2014/compiling/name1.go
deleted file mode 100644
index 9a82f24..0000000
--- a/content/2014/compiling/name1.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// 2 START OMIT
-// 1 START OMIT
-func main() {
-	i := 1
-	f := func() T {
-		return T{
-			i: 1, // HL
-		}
-	}
-	fmt.Println(i, f())
-}
-
-// 1 END OMIT
-
-type T map[int]int
-
-// 2 END OMIT
diff --git a/content/2014/compiling/name2.go b/content/2014/compiling/name2.go
deleted file mode 100644
index 9a8a7fb..0000000
--- a/content/2014/compiling/name2.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// 2 START OMIT
-// 1 START OMIT
-func main() {
-	i := 1
-	f := func() T {
-		return T{
-			i: 1, // HL
-		}
-	}
-	fmt.Println(i, f())
-}
-
-// 1 END OMIT
-
-type T struct{ i int }
-
-// 2 END OMIT
diff --git a/content/2014/compiling/rtype1.go b/content/2014/compiling/rtype1.go
deleted file mode 100644
index af62df9..0000000
--- a/content/2014/compiling/rtype1.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"runtime"
-)
-
-// 1 START OMIT
-type P *P
-type S []S
-type C chan C
-type M map[int]M
-
-// 1 END OMIT
-
-// 2 START OMIT
-func Val(p *P) int {
-	if p == nil {
-		return 0
-	} else {
-		return 1 + Val(*p)
-	}
-}
-
-func Add(a, b *P) *P {
-	if b == nil {
-		return a
-	} else {
-		a1 := new(P)
-		*a1 = a // a1 == a + 1
-		return Add(a1, *b) // a + b == Add(a+1, b-1)
-	}
-}
-
-// 2 END OMIT
-
-// 3 START OMIT
-
-func Print(p *P) {
-	fmt.Println(Val(p))
-}
-
-func Allocate() {
-	p := new(P); *p = new(P); **p = new(P)
-	runtime.SetFinalizer(p, Print)
-	runtime.SetFinalizer(*p, Print)
-	runtime.SetFinalizer(**p, Print)
-}
-
-func main() {
-	Allocate()
-	for i := 0; i < 5; i++ {
-		runtime.GC()
-		runtime.Gosched()
-	}
-}
-
-// 3 END OMIT
diff --git a/content/2014/compiling/rtype2.go b/content/2014/compiling/rtype2.go
deleted file mode 100644
index a341061..0000000
--- a/content/2014/compiling/rtype2.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// 1 START OMIT
-type F func(*State) F
-
-type State int
-
-func Begin(s *State) F {
-	*s = 1
-	return Middle
-}
-
-func Middle(s *State) F {
-	*s++
-	if *s >= 10 {
-		return End
-	}
-	return Middle
-}
-// 1 END OMIT
-
-// 2 START OMIT
-func End(s *State) F {
-	fmt.Println(*s)
-	return nil
-}
-
-func main() {
-	var f F = Begin
-	var s State
-	for f != nil {
-		f = f(&s)
-	}
-}
-
-// 2 END OMIT
diff --git a/content/2014/compiling/var1.go b/content/2014/compiling/var1.go
deleted file mode 100644
index 9a5cac3..0000000
--- a/content/2014/compiling/var1.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"os"
-)
-
-// 1 START OMIT
-var V = struct {
-	name string
-	os.FileMode
-}{
-	name: "hello.go",
-}
-
-func main() {
-	fmt.Println(V)
-}
-// 1 END OMIT
diff --git a/content/2014/droidcon.slide b/content/2014/droidcon.slide
deleted file mode 100644
index 7cc701d..0000000
--- a/content/2014/droidcon.slide
+++ /dev/null
@@ -1,204 +0,0 @@
-Go on Android
-A preview
-
-DroidCon
-20 Sep 2014
-
-David Crawshaw
-Google
-@davidcrawshaw
-
-* A brief introduction to Go
-
-* What is Go
-
-Go is a general purpose programming language.
-
-Born out of frustration with C++ and Java:
-- Slow builds
-- Too much complexity
-
-Go is fast and simple.
-
-More at: [[https://talks.golang.org/2012/splash.article]]
-
-* Five years later
-
-Go is not driven by a platform.
-Sinks or swims on its own merits.
-
-.image droidcon/gopherswim.jpg
-
-Many users, e.g.
-SoundCloud, Docker, Secret, The New York Times
-
-"The cloud programming language."
-
-* Beyond Cloud
-
-Go has found other uses.
-
-Popular on embedded linux systems.
-PayPal's Beacon hardware is powered by Go.
-
-Large-scale data analysis.
-
-For many of us, it replaces python/perl/ruby.
-
-Where else can we use Go?
-What about phones and tablets?
-
-* Go on Android
-
-Android UI programming needs lots of Java APIs.
-My first experiment was using these from Go.
-
-It did not work.
-Using Java APIs in Go is writing Java using Go syntax.
-
-"You can write FORTRAN in any language"
-
-So does it ever make sense to use Go on Android?
-Yes, for portability.
-
-* Portability
-
-Lots of apps are written for more than just Android.
-Some apps start elsewhere and never make it to Android.
-
-:-(
-
-Today, developers solve platform portability with C++.
-We can do better.
-
-* Two ways to use Go
-
-1. Write libraries in Go, use them from Java apps. Or Objective-C/Swift apps.
-
-2. Write apps entirely in Go, restricted to a set of common APIs across platforms.
-
-.image droidcon/gopherswrench.jpg
-
-* Go libraries for apps
-
-* Cross language interfaces
-
-Java is a silo.
-
-To use another language, you need JNI.
-JNI is tricky, buggy, painful.
-It keeps Java programmers away from many good things.
-
-So, no JNI.
-
-Instead, we have a tool for that: `gobind`
-It generates Java interfaces for you.
-
-[[http://golang.org/s/gobind]]
-
-* gobind basics
-
-	package hi
-
-	import "fmt"
-
-	func Hello(name string) {
-		fmt.Println("Hello, %s!\n", name)
-	}
-
-Use `gobind` on package `hi` to generate Go helper code and a Java interface:
-
-
-	package go;
-
-	public abstract class Hi {
-		public static final void Hello(String name) { .. }
-	}
-
-Invoke from Java:
-
-	Hi.Hello("DroidCon")
-
-* gobind features
-
-Today, gobind supports many basic Go types, structs, and callbacks.
-
-When finished, `gobind` will support *all* Go types.
-
-Go's simplicity makes language bindings simple.
-For C++, SWIG has many hard-to-use features.
-
-With Go we get configuration-free language bindings.
-SWIG without the .swig files.
-
-* All-Go apps
-
-* NDK-style interfaces
-
-Go will have common libraries:
-
-- Touch events
-- OpenGL
-- Basic app management
-
-In general: if it works on the NDK and iOS, it works in Go.
-
-* Games
-
-The primary target for pure Go apps is games.
-
-Better control over over allocation means fewer
-garbage collector problems.
-
-Unlikely language for high-budget 3D engines.
-But lots of games can be written in Go.
-
-But we are building a 2D sprite package.
-
-* Status: 2014
-
-Android OS support will be built into the Go runtime in the December 1.4 release.
-
-First version available from the `go.mobile` subrepository of
-
-- `gobind`
-- OpenGL ES 2 bindings
-- touch events package
-- limited android build integration
-
-Sprite library will be in early testing.
-
-Setup will still be a little trickier than I want, but it will work.
-
-* Demo
-
-* Roadmap: mid-2015
-
-The plan is iOS support will be in the Go runtime July 1.5 release.
-
-The same OpenGL bindings and touch events package will work. The `gobind` tool will generate Objective-C/Swift bindings.
-
-Sprite will be ready for 2D games.
-
-* Questions
-
-* Backup slides
-
-* Go compared to Java
-
-- pointers
-- generate less garbage
-
-	type Point struct {
-		X float64
-		Y float64
-	}
-
-	type Points []Point
-
-- `map[int]int` is efficient like `android.os.SparseIntArray`
-- `map[int]float32` is efficient like `android.os.?`
-- focus on functions, simplicity
-- native binaries
-
-More at: [[https://talks.golang.org/2014/go4java.slide]]
diff --git a/content/2014/droidcon/gopherswim.jpg b/content/2014/droidcon/gopherswim.jpg
deleted file mode 100644
index 8f80192..0000000
--- a/content/2014/droidcon/gopherswim.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/droidcon/gopherswrench.jpg b/content/2014/droidcon/gopherswrench.jpg
deleted file mode 100644
index 690fdb0..0000000
--- a/content/2014/droidcon/gopherswrench.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go1.3.slide b/content/2014/go1.3.slide
deleted file mode 100644
index 21c5720..0000000
--- a/content/2014/go1.3.slide
+++ /dev/null
@@ -1,323 +0,0 @@
-Toward Go 1.3
-(and beyond)
-
-Andrew Gerrand
-Gopher
-@enneff
-http://golang.org
-
-
-* Go 1.3
-
-Code freeze is March 1, 2014.
-
-Release is June 1, 2014.
-
-(Six months after Go 1.2, released December 1, 2013.)
-
-
-* A to-do list
-
-After Go 1.2 the Go contributors compiled a to-do list:
-
-.link http://golang.org/s/go13todo
-
-The list is aspirational; not all of it will get done.
-
-This talk is based on that list.
-
-
-* 100% precise GC
-
-Finally!
-
-
-* Copying stacks (1/2)
-
-.link http://golang.org/s/contigstacks
-
-Go 1.2's stack split mechanism has a "hot split" problem.
-
-Copying (or "contiguous") stacks are grown by reallocation and copying.
-Resolves the "hot split" problem.
-Makes smaller initial stacks practical - more goroutines in the same space.
-
-* Copying stacks (2/2)
-
-.image go1.3/json.png
-
-
-* Dmitry's bag of performance tricks
-
-Runtime changes:
-
-- increase page size to 8K (~10% GC less pause time)
-- do not collect GC roots explicitly (~6% GC less pause time)
-- prefetch next block in mallocgc (~2% less CPU)
-- smarter slice grow (2-20% less CPU)
-- combine small NoScan allocations (10% faster json benchmark)
-- do not zero terminate strings (1% fewer allocs json benchmark)
-- remove locks from netpoll hotpaths (~5% faster TCP)
-- allocate goroutine ids in batches (8-66% faster goroutine creation)
-- use lock-free ring for work queues (5-40% faster goroutine scheduling)
-- per-P defer pool (memory savings for programs with many goroutines)
-
-And many more to come...
-
-
-* Channel rewrite
-
-.link http://golang.org/s/go13chan
-
-Goals:
-
-- make single-threaded (non-contended) channel operations faster
-- make contended buffered (producer/consumer) channel operations faster
-- make non-blocking failing operations (e.g. checking of "stop" channel) faster
-- make chan semaphores (chan struct{}) faster
-- make select statements faster
-
-Non-goals:
-
-- make channels completely lock-free (this would significantly complicate implementation and make it slower for common cases)
-- make contended synchronous channel operations faster
-
-
-* sync.Pool (1/2)
-
-Many Go libraries include custom thread-safe free lists, like this:
-
-	var objPool = make(chan *Object, 10)
-
-	func obj() *Object {
-		select {
-		case p := <-objPool:
-			return p
-		default:
-		}
-		return NewObject()
-	}
-
-	func objPut(p *Object) {
-		select {
-		case objPool <- p:
-		default:
-		}
-	}
-  
-	p := obj()
-	// use p
-	objPut(p)
-
-* sync.Pool (2/2)
-
-The `sync.Pool` type provides a general thread-safe global free list.
-
-It allows the runtime to reclaim entries when appropriate
-(for example, during garbage collection).
-
-	var objPool = sync.Pool{
-		New: func() interface{} {
-			return NewObject()
-		},
-	}
-  
-	p := objPool.Get().(*Object)
-	// use p
-	objPool.Put(p)
-
-This is an experimental type and might not be released.
-
-
-* Native Client port
-
-.link http://golang.org/s/go13nacl
-
-Native Client (NaCl) is a restricted execution environment for x86 binaries.
-
-Notably used to run compiled binaries inside Google Chrome.
-NaCl also provides a tool for executing command-line binaries
-
-Go 1.3 targets that command-line tool for 32-bit and 64-bit x86 architectures.
-(NaCl supports 32-bit ARM, but we have no plans to support it.)
-
-The [[http://play.golang.org][Go Playground]] uses the NaCl tool chain to safely execute untrusted programs.
-
-The NaCl tool chain includes the fake time, network, and file system capabilities of the playground.
-
-
-* OS ports
-
-Solaris: work in progress, on track for Go 1.3.
-
-DragonflyBSD: work is done, looking for a maintainer.
-
-Plan 9: still not finished.
-
-darwin/arm, android/arm: a contributor is working on these, some way to go.
-
-
-* The go command and fsnotify
-
-.link http://golang.org/s/go13fsnotify
-
-In Go 1.2, `go` `build` stats every dependent source file to see whether they have changed.
-
-This is a big chunk of total build time.
-
-The proposed "go background" command starts a daemon that watches source files for changes.
-
-When building, the `go` commands can ask the daemon which files have changed.
-
-A new `os/fsnotify` package will be added to the standard library to support the `go` command.
-
-A proposed interface is discussed here:
-
-.link http://golang.org/cl/48310043
-
-
-* Support for linking against Objective C code
-
-The Go 1.2 tool chain can link against C++ code using `cgo` (but you need to write a small C bridge into the C++ code).
-
-The same can be done for Objective C code, with some modifications to the go tool.
-
-This will make it easier to write native OS X applications.
-
-
-* Address binary bloat
-
-.link http://golang.org/issue/6853
-
-Go binaries are getting pretty big. Rob ran an experiment:
-
-	As an experiment, I built "hello, world" at the release points for go 1.0. 1.1, and 1.2.
-	Here are the binary's sizes:
-
-	% ls -l x.1.?
-	-rwxr-xr-x  1 r  staff  1191952 Nov 30 10:25 x.1.0
-	-rwxr-xr-x  1 r  staff  1525936 Nov 30 10:20 x.1.1
-	-rwxr-xr-x  1 r  staff  2188576 Nov 30 10:18 x.1.2
-
-Go binaries contain several sets of debugging symbols (for gdb, profilers, reflection, etc).
-
-We intend to rationalize these as part of some work on the linker.
-Speaking of which...
-
-
-* Linker overhaul (1/3)
-
-.link http://golang.org/s/go13linker
-
-The `gc` tool chain is a bit unconventional.
-
-The compilers don't emit machine code but an intermediate assembly language.
-
-The linker translates it into machine code.
-
-The packages can be compiled in parallel by independent runs of the compiler,
-but the linking must be done by a single linker process after compilation is complete.
-
-The `gc` linker has become a bottleneck in building programs
-because it does more work than a typical linker.
-
-* Linker overhaul (2/3)
-
-The Go 1.2 linker's job can be split into two parts:
-
-- translate an input stream of pseudo-instructions into executable code, data blocks, and a list of relocations,
-- delete dead code, merge what's left, resolve relocations, and generate a few whole-program data structures.
-
-.image go1.3/liblink1.png
-
-* Linker overhaul (3/3)
-
-In Go 1.3, much of the old linker is moved to a `liblink` library that is then used by assemblers and compilers (`6a`, `6c`, `6g`, etc). This allows more work to be done in parallel.
-
-.image go1.3/liblink2.png
-
-And because the linker is much simpler now, we can rewrite it in Go.
-
-
-* Compiler overhaul
-
-.link http://golang.org/s/go13compiler
-
-The "gc" tool chain is based on the Plan 9 C compilers.
-
-The assemblers, C compilers, and linkers were lifted wholesale.
-
-The Go compilers are new C programs that fit into that tool chain.
-
-Wouldn't it be nice to have a Go compiler written in Go?
-
-* Compiler overhaul: why C then?
-
-Many benefits to writing the compiler in C:
-
-- Go did not exist
-- Once Go did exist, it changed often
-
-Today, Go does exist and is stable as of Go 1.
-These benefits not as relevant now.
-
-* Compiler overhaul: why Go now?
-
-The benefits of a Go-based compiler:
-
-- Go code is easier to write and debug
-- Go has better support for modularity, automated rewriting, unit testing, and profiling
-- Go programmers are more likely to work on a compiler written in Go
-- Go code is easier to parallelize
-- Go is more fun!
-
-* Compiler overhaul: the plan
-
-Not a rewrite.
-
-Translate the C compilers to Go.
-
-Write and use an automatic translator to do this.
-
-Start the process with Go 1.3 and continue in future releases.
-
-* Compiler overhaul: five phases
-
-- Develop and debug the translator.
-- Translate the C to Go and delete the C code.
-- Clean up and document the code, add unit tests. (Target Go 1.4)
-- Profile and optimize the compiler and split it into packages.
-- Replace the front end with `go/parser` and `go/types`. (Maybe with new versions of those packages.)
-
-* Compiler overhaul: bootstrapping
-
-Must have a way to build the compiler from scratch.
-
-Our plan is that the Go 1.3 compiler must compile using Go 1.2, and Go 1.4 must compile with Go 1.3, and so on.
-
-Write a shell script to do this automatically. Bootstrap once per machine.
-
-This scales poorly over time, so we might write a back end for the compiler that generates C code, and keep the C version of the compiler sources checked in.
-
-* Compiler overhaul: alternatives
-
-Write new compilers from scratch?
-
-- The existing compilers are well-tested and handle many subtle cases well; would be foolish to throw away 10 man-years of effort.
-
-Translate the compiler manually?
-
-- Translation is tedious and error-prone, mistakes are subtle and hard to find. Can continue to work on existing compilers while writing the translator.
-
-Translate just the back ends and connect to `go/parser` and `go/types` immediately?
-
-- The existing APIs are very different; too much work to undertake at once.
-
-Discard the current compilers and use gccgo (or `go/parser` and `go/types` and LLVM)?
-
-- The current compilers are a large part of our flexibility. Tying Go to large C/C++ projects like GCC or LLVM hurts that flexibility.
-
-
-* Lots of small things
-
-As with previous releases, we'll see a long tail of small fixes and changes.
diff --git a/content/2014/go1.3/json.png b/content/2014/go1.3/json.png
deleted file mode 100644
index ab542e1..0000000
--- a/content/2014/go1.3/json.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go1.3/liblink.graffle b/content/2014/go1.3/liblink.graffle
deleted file mode 100644
index d193382..0000000
--- a/content/2014/go1.3/liblink.graffle
+++ /dev/null
@@ -1,1268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>ActiveLayerIndex</key>
-	<integer>0</integer>
-	<key>ApplicationVersion</key>
-	<array>
-		<string>com.omnigroup.OmniGraffle6</string>
-		<string>156.2.0.196174</string>
-	</array>
-	<key>AutoAdjust</key>
-	<true/>
-	<key>BackgroundGraphic</key>
-	<dict>
-		<key>Bounds</key>
-		<string>{{0, 0}, {576, 733}}</string>
-		<key>Class</key>
-		<string>SolidGraphic</string>
-		<key>ID</key>
-		<integer>2</integer>
-		<key>Style</key>
-		<dict>
-			<key>stroke</key>
-			<dict>
-				<key>Draws</key>
-				<string>NO</string>
-			</dict>
-		</dict>
-	</dict>
-	<key>BaseZoom</key>
-	<integer>0</integer>
-	<key>CanvasOrigin</key>
-	<string>{0, 0}</string>
-	<key>ColumnAlign</key>
-	<integer>1</integer>
-	<key>ColumnSpacing</key>
-	<real>36</real>
-	<key>CreationDate</key>
-	<string>2014-01-30 08:33:48 +0000</string>
-	<key>Creator</key>
-	<string>Andrew Gerrand</string>
-	<key>DisplayScale</key>
-	<string>1 in = 1 in</string>
-	<key>GraphDocumentVersion</key>
-	<integer>11</integer>
-	<key>GraphicsList</key>
-	<array>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>62</integer>
-			</dict>
-			<key>ID</key>
-			<integer>67</integer>
-			<key>Points</key>
-			<array>
-				<string>{373.75, 417.03887110316862}</string>
-				<string>{416, 417.03887110316862}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>64</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>64</integer>
-			</dict>
-			<key>ID</key>
-			<integer>66</integer>
-			<key>Points</key>
-			<array>
-				<string>{255.6875, 417.03886858470719}</string>
-				<string>{289.75, 417.03886858470719}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>46</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{296.75, 401.95199012756348}, {70, 64.751556396484375}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>65</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Delete dead code, link binary}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{290.25, 361.53887748718262}, {83, 111}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>64</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict/>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Linker\
-(6l, 8l, etc)}</string>
-			</dict>
-			<key>TextPlacement</key>
-			<integer>0</integer>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{416, 403.03887939453125}, {60, 28}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FitText</key>
-			<string>YES</string>
-			<key>Flow</key>
-			<string>Resize</string>
-			<key>ID</key>
-			<integer>62</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>fill</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>shadow</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>stroke</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Pad</key>
-				<integer>0</integer>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Executable\
-binary}</string>
-				<key>VerticalPad</key>
-				<integer>0</integer>
-			</dict>
-			<key>Wrap</key>
-			<string>NO</string>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>60</integer>
-			</dict>
-			<key>ID</key>
-			<integer>61</integer>
-			<key>Points</key>
-			<array>
-				<string>{451.49999999999966, 108.99990395818676}</string>
-				<string>{484, 108.99986518354167}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>28</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{484, 95}, {60, 28}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FitText</key>
-			<string>YES</string>
-			<key>Flow</key>
-			<string>Resize</string>
-			<key>ID</key>
-			<integer>60</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>fill</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>shadow</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>stroke</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Pad</key>
-				<integer>0</integer>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Executable\
-binary}</string>
-				<key>VerticalPad</key>
-				<integer>0</integer>
-			</dict>
-			<key>Wrap</key>
-			<string>NO</string>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>58</integer>
-			</dict>
-			<key>ID</key>
-			<integer>59</integer>
-			<key>Points</key>
-			<array>
-				<string>{331.75000961041695, 157.75155258178711}</string>
-				<string>{331.75000961041695, 193}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>Color</key>
-					<dict>
-						<key>b</key>
-						<string>0.088643</string>
-						<key>g</key>
-						<string>0</string>
-						<key>r</key>
-						<string>0.838867</string>
-					</dict>
-					<key>HeadArrow</key>
-					<string>0</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>38</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{233.75, 193}, {196, 14}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FitText</key>
-			<string>YES</string>
-			<key>Flow</key>
-			<string>Resize</string>
-			<key>FontInfo</key>
-			<dict>
-				<key>Color</key>
-				<dict>
-					<key>b</key>
-					<string>0</string>
-					<key>g</key>
-					<string>0.00579522</string>
-					<key>r</key>
-					<string>0.491593</string>
-				</dict>
-			</dict>
-			<key>ID</key>
-			<integer>58</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>fill</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>shadow</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>stroke</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Pad</key>
-				<integer>0</integer>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red125\green1\blue0;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf2 To be extracted as the "liblink" library}</string>
-				<key>VerticalPad</key>
-				<integer>0</integer>
-			</dict>
-			<key>Wrap</key>
-			<string>NO</string>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{80.875, 511.23331069946312}, {51.5, 28}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FontInfo</key>
-			<dict>
-				<key>Color</key>
-				<dict>
-					<key>b</key>
-					<string>0.0128754</string>
-					<key>g</key>
-					<string>0</string>
-					<key>r</key>
-					<string>0.546174</string>
-				</dict>
-			</dict>
-			<key>ID</key>
-			<integer>55</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>Color</key>
-					<dict>
-						<key>b</key>
-						<string>0.088643</string>
-						<key>g</key>
-						<string>0</string>
-						<key>r</key>
-						<string>0.838867</string>
-					</dict>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf2 liblink}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{80.875, 420.32775878906273}, {51.5, 28}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FontInfo</key>
-			<dict>
-				<key>Color</key>
-				<dict>
-					<key>b</key>
-					<string>0.0128754</string>
-					<key>g</key>
-					<string>0</string>
-					<key>r</key>
-					<string>0.546174</string>
-				</dict>
-			</dict>
-			<key>ID</key>
-			<integer>54</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>Color</key>
-					<dict>
-						<key>b</key>
-						<string>0.088643</string>
-						<key>g</key>
-						<string>0</string>
-						<key>r</key>
-						<string>0.838867</string>
-					</dict>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf2 liblink}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{80.875, 330.42222595214866}, {51.5, 28}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FontInfo</key>
-			<dict>
-				<key>Color</key>
-				<dict>
-					<key>b</key>
-					<string>0.0128754</string>
-					<key>g</key>
-					<string>0</string>
-					<key>r</key>
-					<string>0.546174</string>
-				</dict>
-			</dict>
-			<key>ID</key>
-			<integer>53</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>Color</key>
-					<dict>
-						<key>b</key>
-						<string>0.088643</string>
-						<key>g</key>
-						<string>0</string>
-						<key>r</key>
-						<string>0.838867</string>
-					</dict>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red139\green0\blue3;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf2 liblink}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>46</integer>
-			</dict>
-			<key>ID</key>
-			<integer>49</integer>
-			<key>Points</key>
-			<array>
-				<string>{145.39051649876458, 477.29317686027639}</string>
-				<string>{194.484839127947, 438.03887939453148}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>45</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>46</integer>
-			</dict>
-			<key>ID</key>
-			<integer>48</integer>
-			<key>Points</key>
-			<array>
-				<string>{145.49999978479559, 417.07494773054538}</string>
-				<string>{185.6875, 417.11223380821349}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>44</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>46</integer>
-			</dict>
-			<key>ID</key>
-			<integer>47</integer>
-			<key>Points</key>
-			<array>
-				<string>{145.39034728595772, 356.81889972495077}</string>
-				<string>{194.38730511726388, 396.03887939453148}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>43</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{185.6875, 396.03887939453148}, {70, 42}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FitText</key>
-			<string>YES</string>
-			<key>Flow</key>
-			<string>Resize</string>
-			<key>ID</key>
-			<integer>46</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>fill</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>shadow</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>stroke</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Pad</key>
-				<integer>0</integer>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Intermediate\
-binary\
-object format}</string>
-				<key>VerticalPad</key>
-				<integer>0</integer>
-			</dict>
-			<key>Wrap</key>
-			<string>NO</string>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 470.4999924553764}, {76.75, 75.57777777777784}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>45</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict/>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Assembler\
-(6a, 8a, etc)}</string>
-			</dict>
-			<key>TextPlacement</key>
-			<integer>0</integer>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 379.24999050564259}, {76.75, 75.57777777777784}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>44</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict/>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 C compiler\
-(6c, 8c, etc)}</string>
-			</dict>
-			<key>TextPlacement</key>
-			<integer>0</integer>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 288}, {76.75, 75.57777777777784}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>43</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict/>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Go compiler\
-(6g, 8g, etc)}</string>
-			</dict>
-			<key>TextPlacement</key>
-			<integer>0</integer>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{296.75, 92.499996185302734}, {70, 64.751556396484375}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FontInfo</key>
-			<dict>
-				<key>Color</key>
-				<dict>
-					<key>b</key>
-					<string>0</string>
-					<key>g</key>
-					<string>0.00579522</string>
-					<key>r</key>
-					<string>0.491593</string>
-				</dict>
-			</dict>
-			<key>ID</key>
-			<integer>38</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>Color</key>
-					<dict>
-						<key>b</key>
-						<string>0</string>
-						<key>g</key>
-						<string>0.0937715</string>
-						<key>r</key>
-						<string>0.799423</string>
-					</dict>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red125\green1\blue0;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf2 Generate machine code}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{375.25, 92.499996185302734}, {70, 64.751556396484375}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>37</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Delete dead code, link binary}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>28</integer>
-			</dict>
-			<key>ID</key>
-			<integer>36</integer>
-			<key>Points</key>
-			<array>
-				<string>{253, 108.97154672022278}</string>
-				<string>{290.50000013401478, 108.94106106320966}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>32</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>32</integer>
-			</dict>
-			<key>ID</key>
-			<integer>35</integer>
-			<key>Points</key>
-			<array>
-				<string>{136.83462814836014, 160.73111971569412}</string>
-				<string>{185.01468248965995, 130}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>31</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>32</integer>
-			</dict>
-			<key>ID</key>
-			<integer>34</integer>
-			<key>Points</key>
-			<array>
-				<string>{145.49999986651093, 108.97159313228745}</string>
-				<string>{183, 108.94419100890042}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>30</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Class</key>
-			<string>LineGraphic</string>
-			<key>Head</key>
-			<dict>
-				<key>ID</key>
-				<integer>32</integer>
-			</dict>
-			<key>ID</key>
-			<integer>33</integer>
-			<key>Points</key>
-			<array>
-				<string>{136.86818770762332, 57.268665975045344}</string>
-				<string>{185.10263759772207, 88}</string>
-			</array>
-			<key>Style</key>
-			<dict>
-				<key>stroke</key>
-				<dict>
-					<key>HeadArrow</key>
-					<string>FilledArrow</string>
-					<key>Legacy</key>
-					<true/>
-					<key>LineType</key>
-					<integer>1</integer>
-					<key>TailArrow</key>
-					<string>0</string>
-				</dict>
-			</dict>
-			<key>Tail</key>
-			<dict>
-				<key>ID</key>
-				<integer>29</integer>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{183, 88}, {70, 42}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>FitText</key>
-			<string>YES</string>
-			<key>Flow</key>
-			<string>Resize</string>
-			<key>ID</key>
-			<integer>32</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict>
-				<key>fill</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>shadow</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-				<key>stroke</key>
-				<dict>
-					<key>Draws</key>
-					<string>NO</string>
-				</dict>
-			</dict>
-			<key>Text</key>
-			<dict>
-				<key>Pad</key>
-				<integer>0</integer>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Intermediate\
-assembly\
-object format}</string>
-				<key>VerticalPad</key>
-				<integer>0</integer>
-			</dict>
-			<key>Wrap</key>
-			<string>NO</string>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 161}, {76.75, 38}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>31</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Assembler\
-(6a, 8a, etc)}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 90}, {76.75, 38}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>30</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 C compiler\
-(6c, 8c, etc)}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{68.25, 19}, {76.75, 38}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>29</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Go compiler\
-(6g, 8g, etc)}</string>
-			</dict>
-		</dict>
-		<dict>
-			<key>Bounds</key>
-			<string>{{291, 53.5}, {160, 111}}</string>
-			<key>Class</key>
-			<string>ShapedGraphic</string>
-			<key>ID</key>
-			<integer>28</integer>
-			<key>Shape</key>
-			<string>Rectangle</string>
-			<key>Style</key>
-			<dict/>
-			<key>Text</key>
-			<dict>
-				<key>Text</key>
-				<string>{\rtf1\ansi\ansicpg1252\cocoartf1265
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs24 \cf0 Linker\
-(6l, 8l, etc)}</string>
-			</dict>
-			<key>TextPlacement</key>
-			<integer>0</integer>
-		</dict>
-	</array>
-	<key>GridInfo</key>
-	<dict/>
-	<key>GuidesLocked</key>
-	<string>NO</string>
-	<key>GuidesVisible</key>
-	<string>YES</string>
-	<key>HPages</key>
-	<integer>1</integer>
-	<key>ImageCounter</key>
-	<integer>1</integer>
-	<key>KeepToScale</key>
-	<false/>
-	<key>Layers</key>
-	<array>
-		<dict>
-			<key>Lock</key>
-			<string>NO</string>
-			<key>Name</key>
-			<string>Layer 1</string>
-			<key>Print</key>
-			<string>YES</string>
-			<key>View</key>
-			<string>YES</string>
-		</dict>
-	</array>
-	<key>LayoutInfo</key>
-	<dict>
-		<key>Animate</key>
-		<string>NO</string>
-		<key>circoMinDist</key>
-		<real>18</real>
-		<key>circoSeparation</key>
-		<real>0.0</real>
-		<key>layoutEngine</key>
-		<string>dot</string>
-		<key>neatoLineLength</key>
-		<real>0.20000000298023224</real>
-		<key>neatoSeparation</key>
-		<real>0.0</real>
-		<key>twopiSeparation</key>
-		<real>0.0</real>
-	</dict>
-	<key>LinksVisible</key>
-	<string>NO</string>
-	<key>MagnetsVisible</key>
-	<string>NO</string>
-	<key>MasterSheets</key>
-	<array/>
-	<key>ModificationDate</key>
-	<string>2014-01-30 09:04:24 +0000</string>
-	<key>Modifier</key>
-	<string>Andrew Gerrand</string>
-	<key>NotesVisible</key>
-	<string>NO</string>
-	<key>Orientation</key>
-	<integer>2</integer>
-	<key>OriginVisible</key>
-	<string>NO</string>
-	<key>PageBreaks</key>
-	<string>YES</string>
-	<key>PrintInfo</key>
-	<dict>
-		<key>NSBottomMargin</key>
-		<array>
-			<string>float</string>
-			<string>41</string>
-		</array>
-		<key>NSHorizonalPagination</key>
-		<array>
-			<string>coded</string>
-			<string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
-		</array>
-		<key>NSLeftMargin</key>
-		<array>
-			<string>float</string>
-			<string>18</string>
-		</array>
-		<key>NSPaperSize</key>
-		<array>
-			<string>size</string>
-			<string>{612, 792}</string>
-		</array>
-		<key>NSPrintReverseOrientation</key>
-		<array>
-			<string>coded</string>
-			<string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
-		</array>
-		<key>NSRightMargin</key>
-		<array>
-			<string>float</string>
-			<string>18</string>
-		</array>
-		<key>NSTopMargin</key>
-		<array>
-			<string>float</string>
-			<string>18</string>
-		</array>
-	</dict>
-	<key>PrintOnePage</key>
-	<false/>
-	<key>ReadOnly</key>
-	<string>NO</string>
-	<key>RowAlign</key>
-	<integer>1</integer>
-	<key>RowSpacing</key>
-	<real>36</real>
-	<key>SheetTitle</key>
-	<string>Canvas 1</string>
-	<key>SmartAlignmentGuidesActive</key>
-	<string>YES</string>
-	<key>SmartDistanceGuidesActive</key>
-	<string>YES</string>
-	<key>UniqueID</key>
-	<integer>1</integer>
-	<key>UseEntirePage</key>
-	<false/>
-	<key>VPages</key>
-	<integer>1</integer>
-	<key>WindowInfo</key>
-	<dict>
-		<key>BottomSlabHeight</key>
-		<real>398</real>
-		<key>CurrentSheet</key>
-		<integer>0</integer>
-		<key>Expanded_Canvases</key>
-		<array/>
-		<key>Frame</key>
-		<string>{{122, 4}, {1121, 742}}</string>
-		<key>ShowInfo</key>
-		<true/>
-		<key>ShowRuler</key>
-		<true/>
-		<key>Sidebar</key>
-		<true/>
-		<key>SidebarWidth</key>
-		<integer>230</integer>
-		<key>VisibleRegion</key>
-		<string>{{0, 0}, {574, 600}}</string>
-		<key>Zoom</key>
-		<real>1</real>
-		<key>ZoomValues</key>
-		<array>
-			<array>
-				<string>Canvas 1</string>
-				<real>1</real>
-				<real>1</real>
-			</array>
-		</array>
-	</dict>
-</dict>
-</plist>
diff --git a/content/2014/go1.3/liblink1.png b/content/2014/go1.3/liblink1.png
deleted file mode 100644
index fd62cdb..0000000
--- a/content/2014/go1.3/liblink1.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go1.3/liblink2.png b/content/2014/go1.3/liblink2.png
deleted file mode 100644
index 614861c..0000000
--- a/content/2014/go1.3/liblink2.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers.slide b/content/2014/go4gophers.slide
deleted file mode 100644
index f840d83..0000000
--- a/content/2014/go4gophers.slide
+++ /dev/null
@@ -1,836 +0,0 @@
-Go for gophers
-GopherCon closing keynote
-25 Apr 2014
-
-Andrew Gerrand
-Google, Inc.
-@enneff
-adg@golang.org
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=dKGmK_Z1Zl0 Watch the talk on YouTube
-
-
-* About me
-
-.image go4gophers/gopherswim.jpg
-
-I joined Google and the Go team in February 2010.
-
-Had to re-think some of my preconceptions about programming.
-
-Let me share what I have learned since.
-
-
-* Interfaces
-
-
-* Interfaces: first impressions
-
-I used to think about classes and types.
-
-Go resists this:
-
-- No inheritance.
-- No subtype polymorphism.
-- No generics.
-
-It instead emphasizes _interfaces_.
-
-
-* Interfaces: the Go way
-
-Go interfaces are small.
-
-	type Stringer interface {
-		String() string
-	}
-
-A `Stringer` can pretty print itself.
-Anything that implements `String` is a `Stringer`.
-
-
-* An interface example
-
-An `io.Reader` value emits a stream of binary data.
-
-	type Reader interface {
-		Read([]byte) (int, error)
-	}
-
-Like a UNIX pipe.
-
-
-* Implementing interfaces
-
-.code go4gophers/reader.go /ByteReader/,/^}/
-
-
-* Wrapping interfaces
-
-.code go4gophers/reader.go /LogReader/,/STOP/
-
-Wrapping a `ByteReader` with a `LogReader`:
-
-.play go4gophers/reader.go /START/,/STOP/
-
-By wrapping we compose interface _values_.
-
-
-* Chaining interfaces
-
-Wrapping wrappers to build chains:
-
-.code go4gophers/chain.go /START/,/STOP/
-
-More succinctly:
-
-.play go4gophers/chain.go /LogReader{io/
-
-Implement complex behavior by composing small pieces.
-
-
-* Programming with interfaces
-
-Interfaces separate data from behavior.
-
-With interfaces, functions can operate on _behavior:_
-
-	// Copy copies from src to dst until either EOF is reached
-	// on src or an error occurs.  It returns the number of bytes
-	// copied and the first error encountered while copying, if any.
-	func Copy(dst Writer, src Reader) (written int64, err error) {
-
-.play go4gophers/chain.go /LogReader{io/
-
-`Copy` can't know about the underlying data structures.
-
-
-* A larger interface
-
-`sort.Interface` describes the operations required to sort a collection:
-
-	type Interface interface {
-	    Len() int
-	    Less(i, j int) bool
-	    Swap(i, j int)
-	}
-
-`IntSlice` can sort a slice of ints:
-
-	type IntSlice []int
-
-	func (p IntSlice) Len() int           { return len(p) }
-	func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
-	func (p IntSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
-
-`sort.Sort` uses can sort a `[]int` with `IntSlice`:
-
-.play go4gophers/sort.go /START/,/STOP/
-
-
-* Another interface example
-
-The `Organ` type describes a body part and can print itself:
-
-.play go4gophers/organs.go /type Organ/,$
-
-
-* Sorting organs
-
-The `Organs` type knows how to describe and mutate a slice of organs:
-
-.code go4gophers/organs2.go /PART1/,/PART2/
-
-The `ByName` and `ByWeight` types embed `Organs` to sort by different fields:
-
-.code go4gophers/organs2.go /PART2/,/PART3/
-
-With embedding we compose _types_.
-
-
-* Sorting organs (continued)
-
-To sort a `[]*Organ`, wrap it with `ByName` or `ByWeight` and pass it to `sort.Sort`:
-
-.play go4gophers/organs2.go /START/,/STOP/
-
-
-* Another wrapper
-
-The `Reverse` function takes a `sort.Interface` and
-returns a `sort.Interface` with an inverted `Less` method:
-
-.code go4gophers/organs3.go /func Reverse/,$
-
-To sort the organs in descending order, compose our sort types with `Reverse`:
-
-.play go4gophers/organs3.go /START/,/STOP/
-
-
-* Interfaces: why they work
-
-These are not just cool tricks.
-
-This is how we structure programs in Go.
-
-
-* Interfaces: Sigourney
-
-Sigourney is a modular audio synthesizer I wrote in Go.
-
-.image go4gophers/sigourney.png
-
-Audio is generated by a chain of `Processors`:
-
-	type Processor interface {
-		Process(buffer []Sample)
-	}
-
-([[https://github.com/nf/sigourney][github.com/nf/sigourney]])
-
-
-* Interfaces: Roshi
-
-Roshi is a time-series event store written by Peter Bourgon. It provides this API:
-	
-	Insert(key, timestamp, value)
-	Delete(key, timestamp, value)
-	Select(key, offset, limit) []TimestampValue
-
-The same API is implemented by the `farm` and `cluster` parts of the system.
-
-.image go4gophers/roshi.png
-
-An elegant design that exhibits composition.
-([[https://github.com/soundcloud/roshi][github.com/soundcloud/roshi]])
-
-
-* Interfaces: why they work (continued)
-
-Interfaces are _the_ generic programming mechanism.
-
-This gives all Go code a familiar shape.
-
-Less is more.
-
-
-* Interfaces: why they work (continued)
-
-It's all about composition.
-
-Interfaces—by design and convention—encourage us to write composable code.
-
-
-* Interfaces: why they work (continued)
-
-Interfaces types are just types
-and interface values are just values.
-
-They are orthogonal to the rest of the language.
-
-
-* Interfaces: why they work (continued)
-
-Interfaces separate data from behavior. (Classes conflate them.)
-
-	type HandlerFunc func(ResponseWriter, *Request)
-
-	func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
-		f(w, r)
-	}
-
-
-* Interfaces: what I learned
-
-Think about composition.
-
-Better to have many small simple things than one big complex thing.
-
-Also: what I thought of as small is pretty big.
-
-Some repetition in the small is okay when it benefits "the large".
-
-
-* Concurrency
-
-
-* Concurrency: first impressions
-
-My first exposure to concurrency was in C, Java, and Python.
-Later: event-driven models in Python and JavaScript.
-
-When I saw Go I saw:
-
-"The performance of an event-driven model without callback hell."
-
-But I had questions: "Why can't I wait on or kill a goroutine?"
-
-
-* Concurrency: the Go way
-
-Goroutines provide concurrent execution.
-
-Channels express the communication and synchronization of independent processes.
-
-Select enables computation on channel operations.
-
-.image go4gophers/gopherflag.png
-
-
-* A concurrency example
-
-The binary tree comparison exercise from the Go Tour.
-
-"Implement a function
-
-        func Same(t1, t2 *tree.Tree) bool
-
-that compares the contents of two binary trees."
-
-.image go4gophers/tree.png
-
-
-* Walking a tree
-
-	type Tree struct {
-		Left, Right *Tree
-		Value int
-	}
-
-A simple depth-first tree traversal:
-
-.play go4gophers/tree-walk.go /func Walk/,$
-
-
-* Comparing trees (1/2)
-
-A concurrent walker:
-
-.code go4gophers/tree-thread.go /func Walk/,/STOP/
-
-
-* Comparing trees (2/2)
-
-Walking two trees concurrently:
-
-.play go4gophers/tree-thread.go /func Same/,$
-
-
-* Comparing trees without channels (1/3)
-
-.code go4gophers/tree-nothread.go /func Same/,/^}/
-
-The `Walk` function has nearly the same signature:
-
-.code go4gophers/tree-nothread.go /func Walk/
-.code go4gophers/tree-nothread.go /func.+Next/
-
-(We call `Next` instead of the channel receive.)
-
-
-* Comparing trees without channels (2/3)
-
-But the implementation is much more complex:
-
-.code go4gophers/tree-nothread.go /func Walk/,/CUT/
-
-
-* Comparing trees without channels (3/3)
-
-.code go4gophers/tree-nothread.go /CUT/,/STOP/
-
-
-* Another look at the channel version
-
-.code go4gophers/tree-thread.go /func Walk/,/STOP/
-
-But there's a problem: when an inequality is found,
-a goroutine might be left blocked sending to `ch`.
-
-
-* Stopping early
-
-Add a `quit` channel to the walker so we can stop it mid-stride.
-
-.code go4gophers/tree-select.go /func Walk/,/STOP/
-
-
-* Stopping early (continued)
-
-Create a `quit` channel and pass it to each walker.
-By closing `quit` when the `Same` exits, any running walkers are terminated.
-
-.code go4gophers/tree-select.go /func Same/,/^}/
-
-
-* Why not just kill the goroutines?
-
-Goroutines are invisible to Go code. They can't be killed or waited on.
-
-You have to build that yourself.
-
-There's a reason:
-
-As soon as Go code knows in which thread it runs you get thread-locality.
-
-Thread-locality defeats the concurrency model.
-
-
-* Concurrency: why it works
-
-The model makes concurrent code easy to read and write.
-(Makes concurrency is *accessible*.)
-
-This encourages the decomposition of independent computations.
-
-
-* Concurrency: why it works (continued)
-
-The simplicity of the concurrency model makes it flexible.
-
-Channels are just values; they fit right into the type system.
-
-Goroutines are invisible to Go code; this gives you concurrency anywhere.
-
-Less is more.
-
-
-* Concurrency: what I learned
-
-Concurrency is not just for doing more things faster.
-
-It's for writing better code.
-
-
-* Syntax
-
-
-* Syntax: first impressions
-
-At first, Go syntax felt a bit inflexible and verbose.
-
-It affords few of the conveniences to which I was accustomed.
-
-For instance:
-
-- No getters/setters on fields.
-- No map/filter/reduce/zip.
-- No optional arguments.
-
-
-* Syntax: the Go way
-
-Favor readability above all.
-
-Offer enough sugar to be productive, but not too much.
-
-
-* Getters and setters (or "properties")
-
-Getters and setters turn assignments and reads into function calls.
-This leads to surprising hidden behavior.
-
-In Go, just write (and call) the methods.
-
-The control flow cannot be obscured.
-
-
-* Map/filter/reduce/zip
-
-Map/filter/reduce/zip are useful  in Python.
-
-	a = [1, 2, 3, 4]
-	b = map(lambda x: x+1, a)
-
-In Go, you just write the loops.
-
-	a := []int{1, 2, 3, 4}
-	b := make([]int, len(a))
-	for i, x := range a {
-		b[i] = x+1
-	}
-
-This is a little more verbose,
-but makes the performance characteristics obvious.
-
-It's easy code to write, and you get more control.
-
-
-* Optional arguments
-
-Go functions can't have optional arguments.
-
-Instead, use variations of the function:
-
-	func NewWriter(w io.Writer) *Writer
-	func NewWriterLevel(w io.Writer, level int) (*Writer, error)
-
-Or an options struct:
-
-	func New(o *Options) (*Jar, error)
-
-	type Options struct {
-		PublicSuffixList PublicSuffixList
-	}
-
-Or a variadic list of options.
-
-Create many small simple things, not one big complex thing.
-
-
-* Syntax: why it works
-
-The language resists convoluted code.
-
-With obvious control flow, it's easy to navigate unfamiliar code.
-
-Instead we create more small things that are easy to document and understand.
-
-So Go code is easy to read.
-
-(And with gofmt, it's easy to write readable code.)
-
-
-* Syntax: what I learned
-
-I was often too clever for my own good.
-
-I appreciate the consistency, clarity, and _transparency_ of Go code.
-
-I sometimes miss the conveniences, but rarely.
-
-
-* Error handling
-
-
-* Error handling: first impressions
-
-I had previously used exceptions to handle errors.
-
-Go's error handling model felt verbose by comparison.
-
-I was immediately tired of typing this:
-
-	if err != nil {
-		return err
-	}
-
-
-* Error handling: the Go way
-
-Go codifies errors with the built-in `error` interface:
-
-	type error interface {
-		Error() string
-	}
-
-Error values are used just like any other value.
-
-	func doSomething() error
-
-	err := doSomething()
-	if err != nil {
-		log.Println("An error occurred:", err)
-	}
-
-Error handling code is just code.
-
-(Started as a convention (`os.Error`). We made it built in for Go 1.)
-
-
-* Error handling: why it works
-
-Error handling is important.
-
-Go makes error handling as important as any other code.
-
-
-* Error handling: why it works (continued)
-
-Errors are just values; they fit easily into the rest of the language
-(interfaces, channels, and so on).
-
-Result: Go code handles errors correctly and elegantly.
-
-
-* Error handling: why it works (continued)
-
-We use the same language for errors as everything else.
-
-Lack of hidden control flow (throw/try/catch/finally) improves readability.
-
-Less is more.
-
-
-
-* Error handling: what I learned
-
-To write good code we must think about errors.
-
-Exceptions make it easy to avoid thinking about errors.
-(Errors shouldn't be "exceptional!")
-
-Go encourages us to consider every error condition.
-
-My Go programs are far more robust than my programs in other languages.
-
-I don't miss exceptions at all.
-
-
-* Packages
-
-
-* Packages: first impressions
-
-I found the capital-letter-visibility rule weird;
-"Let me use my own naming scheme!"
-
-I didn't like "package per directory";
-"Let me use my own structure!"
-
-I was disappointed by lack of monkey patching.
-
-
-* Packages: the Go way
-
-Go packages are a name space for types, functions, variables, and constants.
-
-
-* Visibility
-
-Visibility is at the package level.
-Names are "exported" when they begin with a capital letter.
-
-	package zip
-
-	func NewReader(r io.ReaderAt, size int64) (*Reader, error) // exported
-
-	type Reader struct {    // exported
-		File    []*File     // exported
-		Comment string      // exported
-		r       io.ReaderAt // unexported
-	}
-
-	func (f *File) Open() (rc io.ReadCloser, err error)   // exported
-
-	func (f *File) findBodyOffset() (int64, error)        // unexported
-
-	func readDirectoryHeader(f *File, r io.Reader) error  // unexported
-
-Good for readability: easy to see whether a name is part of the public interface.
-Good for design: couples naming decisions with interface decisions.
-
-
-* Package structure
-
-Packages can be spread across multiple files.
-
-Permits shared private implementation and informal code organization.
-
-Packages files must live in a directory unique to the package.
-
-The path to that directory determines the package's import path.
-
-The build system locates dependencies from the source alone.
-
-
-* "Monkey patching"
-
-Go forbids modifying package declarations from outside the package.
-
-But we can get similar behavior using global variables:
-
-	package flag
-
-	var Usage = func() {
-		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
-		PrintDefaults()
-	}
-
-Or registration functions:
-
-	package http
-
-	func Handle(pattern string, handler Handler)
-
-This gives the flexibility of monkey patching but on the package author's terms.
-
-(This depends on Go's initialization semantics.)
-
-
-* Packages: why they work
-
-The loose organization of packages lets us write and refactor code quickly.
-
-But packages encourage the programmer to consider the public interface.
-
-This leads to good names and simpler interfaces.
-
-With the source as the single source of truth,
-there are no makefiles to get out of sync.
-
-(This design enables great tools like [[http://godoc.org][godoc.org]] and goimports.)
-
-Predictable semantics make packages easy to read, understand, and use.
-
-
-* Packages: what I learned
-
-Go's package system taught me to prioritize the consumer of my code.
-(Even if that consumer is me.)
-
-It also stopped me from doing gross stuff.
-
-Packages are rigid where it matters, and loose where it doesn't.
-It just feels right.
-
-Probably my favorite part of the language.
-
-
-* Documentation
-
-
-* Documentation: first impressions
-
-Godoc reads documentation from Go source code, like `pydoc` or `javadoc`.
-
-But unlike those two, it doesn't support complex formatting or other meta data.
-Why?
-
-
-* Documentation: the Go way
-
-Godoc comments precede the declaration of an exported identifier:
-
-	// Join concatenates the elements of a to create a single string.
-	// The separator string sep is placed between elements in the resulting string.
-	func Join(a []string, sep string) string {
-
-It extracts the comments and presents them:
-
-	$ godoc strings Join
-	func Join(a []string, sep string) string
-	    Join concatenates the elements of a to create a single string. The
-	    separator string sep is placed between elements in the resulting string.
-
-Also integrated with the testing framework to provide testable example functions.
-
-	func ExampleJoin() {
-		s := []string{"foo", "bar", "baz"}
-		fmt.Println(strings.Join(s, ", "))
-		// Output: foo, bar, baz
-	}
-
-
-* Documentation: the Go way (continued)
-
-.image go4gophers/godoc.png
-
-
-* Documentation: why it works
-
-Godoc wants you to write good comments, so the source looks great:
-
-	// ValidMove reports whether the specified move is valid.
-	func ValidMove(from, to Position) bool
-
-Javadoc just wants to produce pretty documentation, so the source is hideous:
-
-	/**
-	 * Validates a chess move.
-	 *
-	 * @param fromPos  position from which a piece is being moved
-	 * @param toPos    position to which a piece is being moved
-	 * @return         true if the move is valid, otherwise false
-	 */
-	boolean isValidMove(Position fromPos, Position toPos)
-
-(Also a grep for `"ValidMove"` will return the first line of documentation.)
-
-
-* Documentation: what I learned
-
-Godoc taught me to write documentation _as_I_code._
-
-Writing documentation _improves_the_code_ I write.
-
-
-* More
-
-There are many more examples.
-
-The overriding theme:
-
-- At first, something seemed weird or lacking.
-- I realized it was a design decision.
-
-Those decisions make the language—and Go code—better.
-
-Sometimes you have to live with the language a while to see it.
-
-
-* Lessons
-
-
-* Code is communication
-
-Be articulate:
-
-- Choose good names.
-- Design simple interfaces.
-- Write precise documentation.
-- Don't be too clever.
-
-
-* Less is exponentially more
-
-New features can weaken existing features.
-
-Features multiply complexity.
-
-Complexity defeats orthogonality.
-
-Orthogonality is vital: it enables composition.
-
-
-* Composition is key
-
-Don't solve problems by building _a_ thing.
-
-Instead, combine simple tools and compose them.
-
-
-* Design good interfaces
-
-.image go4gophers/gophertraining.png
-
-.html go4gophers/gophertraining.html
-
-
-* Simplicity is hard
-
-Invest the time to find the simple solution.
-
-
-* Go's effect on me
-
-These lessons were all things I already "knew".
-
-Go helped me internalize them.
-
-.image go4gophers/gopherhat.jpg
-
-Go made me a better programmer.
-
-
-* A message for gophers everywhere
-
-Let's build small, simple, and beautiful things together.
-
-.image go4gophers/gopherswrench.jpg
-
diff --git a/content/2014/go4gophers/chain.go b/content/2014/go4gophers/chain.go
deleted file mode 100644
index f1bde43..0000000
--- a/content/2014/go4gophers/chain.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"io/ioutil"
-	"log"
-)
-
-// ByteReader implements an io.Reader that emits a stream of its byte value.
-type ByteReader byte
-
-func (b ByteReader) Read(buf []byte) (int, error) {
-	for i := range buf {
-		buf[i] = byte(b)
-	}
-	return len(buf), nil
-}
-
-type LogReader struct {
-	io.Reader
-}
-
-func (r LogReader) Read(b []byte) (int, error) {
-	n, err := r.Reader.Read(b)
-	log.Printf("read %d bytes, error: %v", n, err)
-	return n, err
-}
-
-func main() {
-	// START OMIT
-	var r io.Reader = ByteReader('A')
-	r = io.LimitReader(r, 1e6)
-	r = LogReader{r}
-	io.Copy(ioutil.Discard, r)
-	// STOP OMIT
-
-	return
-	io.Copy(ioutil.Discard, LogReader{io.LimitReader(ByteReader('A'), 1e6)})
-}
diff --git a/content/2014/go4gophers/godoc.png b/content/2014/go4gophers/godoc.png
deleted file mode 100644
index 3ef664e..0000000
--- a/content/2014/go4gophers/godoc.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/gopherflag.png b/content/2014/go4gophers/gopherflag.png
deleted file mode 100644
index 230628c..0000000
--- a/content/2014/go4gophers/gopherflag.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/gopherhat.jpg b/content/2014/go4gophers/gopherhat.jpg
deleted file mode 100644
index ad770d9..0000000
--- a/content/2014/go4gophers/gopherhat.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/gopherswim.jpg b/content/2014/go4gophers/gopherswim.jpg
deleted file mode 100644
index 8f80192..0000000
--- a/content/2014/go4gophers/gopherswim.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/gopherswrench.jpg b/content/2014/go4gophers/gopherswrench.jpg
deleted file mode 100644
index 690fdb0..0000000
--- a/content/2014/go4gophers/gopherswrench.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/gophertraining.html b/content/2014/go4gophers/gophertraining.html
deleted file mode 100644
index 42d1bc5..0000000
--- a/content/2014/go4gophers/gophertraining.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div style="width: 700px; margin-left: 50%; left: -350px; position: relative">
-<div style="float:left">Don't over-specify.</div>
-<div style="float:right">Don't under-specify.</div>
-<div style="clear:both; text-align: center"><br>Find the sweet spot.</div>
-</div>
diff --git a/content/2014/go4gophers/gophertraining.png b/content/2014/go4gophers/gophertraining.png
deleted file mode 100644
index b4d4538..0000000
--- a/content/2014/go4gophers/gophertraining.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/organs.go b/content/2014/go4gophers/organs.go
deleted file mode 100644
index 60c1092..0000000
--- a/content/2014/go4gophers/organs.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Organ struct {
-	Name   string
-	Weight Grams
-}
-
-func (o *Organ) String() string { return fmt.Sprintf("%v (%v)", o.Name, o.Weight) }
-
-type Grams int
-
-func (g Grams) String() string { return fmt.Sprintf("%dg", int(g)) }
-
-func main() {
-	s := []*Organ{{"brain", 1340}, {"heart", 290},
-		{"liver", 1494}, {"pancreas", 131}, {"spleen", 162}}
-
-	for _, o := range s {
-		fmt.Println(o)
-	}
-}
diff --git a/content/2014/go4gophers/organs2.go b/content/2014/go4gophers/organs2.go
deleted file mode 100644
index 50c13e4..0000000
--- a/content/2014/go4gophers/organs2.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-type Organ struct {
-	Name   string
-	Weight Grams
-}
-
-func (o *Organ) String() string { return fmt.Sprintf("%v (%v)", o.Name, o.Weight) }
-
-type Grams int
-
-func (g Grams) String() string { return fmt.Sprintf("%dg", int(g)) }
-
-// PART1 OMIT
-
-type Organs []*Organ
-
-func (s Organs) Len() int      { return len(s) }
-func (s Organs) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-
-// PART2 OMIT
-
-type ByName struct{ Organs }
-
-func (s ByName) Less(i, j int) bool { return s.Organs[i].Name < s.Organs[j].Name }
-
-type ByWeight struct{ Organs }
-
-func (s ByWeight) Less(i, j int) bool { return s.Organs[i].Weight < s.Organs[j].Weight }
-
-// PART3 OMIT
-
-func main() {
-	// START OMIT
-	s := []*Organ{
-		{"brain", 1340},
-		{"heart", 290},
-		{"liver", 1494},
-		{"pancreas", 131},
-		{"spleen", 162},
-	}
-
-	sort.Sort(ByWeight{s}) // HL
-	printOrgans("Organs by weight", s)
-
-	sort.Sort(ByName{s}) // HL
-	printOrgans("Organs by name", s)
-	// STOP OMIT
-}
-
-func printOrgans(t string, s []*Organ) {
-	fmt.Printf("%s:\n", t)
-	for _, o := range s {
-		fmt.Printf("  %v\n", o)
-	}
-}
diff --git a/content/2014/go4gophers/organs3.go b/content/2014/go4gophers/organs3.go
deleted file mode 100644
index 3a0b116..0000000
--- a/content/2014/go4gophers/organs3.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-type Organ struct {
-	Name   string
-	Weight Grams
-}
-
-func (o *Organ) String() string { return fmt.Sprintf("%v (%v)", o.Name, o.Weight) }
-
-type Grams int
-
-func (g Grams) String() string { return fmt.Sprintf("%dg", int(g)) }
-
-type Organs []*Organ
-
-func (s Organs) Len() int      { return len(s) }
-func (s Organs) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-
-type ByName struct{ Organs }
-
-func (s ByName) Less(i, j int) bool { return s.Organs[i].Name < s.Organs[j].Name }
-
-type ByWeight struct{ Organs }
-
-func (s ByWeight) Less(i, j int) bool { return s.Organs[i].Weight < s.Organs[j].Weight }
-
-func main() {
-	s := []*Organ{
-		{"brain", 1340},
-		{"heart", 290},
-		{"liver", 1494},
-		{"pancreas", 131},
-		{"spleen", 162},
-	}
-
-	// START OMIT
-	sort.Sort(Reverse(ByWeight{s})) // HL
-	printOrgans("Organs by weight (descending)", s)
-
-	sort.Sort(Reverse(ByName{s})) // HL
-	printOrgans("Organs by name (descending)", s)
-	// STOP OMIT
-}
-
-func printOrgans(t string, s []*Organ) {
-	fmt.Printf("%s:\n", t)
-	for _, o := range s {
-		fmt.Printf("  %v\n", o)
-	}
-}
-
-func Reverse(data sort.Interface) sort.Interface {
-	return &reverse{data}
-}
-
-type reverse struct{ sort.Interface }
-
-func (r reverse) Less(i, j int) bool {
-	return r.Interface.Less(j, i) // HL
-}
diff --git a/content/2014/go4gophers/reader.go b/content/2014/go4gophers/reader.go
deleted file mode 100644
index fa13028..0000000
--- a/content/2014/go4gophers/reader.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-)
-
-// ByteReader implements an io.Reader that emits a stream of its byte value.
-type ByteReader byte
-
-func (b ByteReader) Read(buf []byte) (int, error) {
-	for i := range buf {
-		buf[i] = byte(b)
-	}
-	return len(buf), nil
-}
-
-type LogReader struct {
-	io.Reader
-}
-
-func (r LogReader) Read(b []byte) (int, error) {
-	n, err := r.Reader.Read(b)
-	log.Printf("read %d bytes, error: %v", n, err)
-	return n, err
-}
-
-// STOP OMIT
-
-func main() {
-	// START OMIT
-	r := LogReader{ByteReader('A')}
-	b := make([]byte, 10)
-	r.Read(b)
-	fmt.Printf("b: %q", b)
-	// STOP OMIT
-}
diff --git a/content/2014/go4gophers/roshi.png b/content/2014/go4gophers/roshi.png
deleted file mode 100644
index 3bfbf5f..0000000
--- a/content/2014/go4gophers/roshi.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/sigourney.png b/content/2014/go4gophers/sigourney.png
deleted file mode 100644
index 5bd8403..0000000
--- a/content/2014/go4gophers/sigourney.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4gophers/sort.go b/content/2014/go4gophers/sort.go
deleted file mode 100644
index 35b5c27..0000000
--- a/content/2014/go4gophers/sort.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-type IntSlice []int
-
-func (p IntSlice) Len() int           { return len(p) }
-func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
-func (p IntSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
-
-func main() {
-	// START OMIT
-	s := []int{7, 5, 3, 11, 2}
-	sort.Sort(IntSlice(s))
-	fmt.Println(s)
-	// STOP OMIT
-}
diff --git a/content/2014/go4gophers/tree-nothread.go b/content/2014/go4gophers/tree-nothread.go
deleted file mode 100644
index 3b5c199..0000000
--- a/content/2014/go4gophers/tree-nothread.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"code.google.com/p/go-tour/tree"
-)
-
-func Walk(root *tree.Tree) *Walker {
-	return &Walker{stack: []*frame{{t: root}}}
-}
-
-type Walker struct {
-	stack []*frame
-}
-
-type frame struct {
-	t  *tree.Tree
-	pc int
-}
-
-func (w *Walker) Next() (int, bool) {
-	if len(w.stack) == 0 {
-		return 0, false
-	}
-
-	// continued next slide ...
-	// CUT OMIT
-	f := w.stack[len(w.stack)-1]
-	if f.pc == 0 {
-		f.pc++
-		if l := f.t.Left; l != nil {
-			w.stack = append(w.stack, &frame{t: l})
-			return w.Next()
-		}
-	}
-	if f.pc == 1 {
-		f.pc++
-		return f.t.Value, true
-	}
-	if f.pc == 2 {
-		f.pc++
-		if r := f.t.Right; r != nil {
-			w.stack = append(w.stack, &frame{t: r})
-			return w.Next()
-		}
-	}
-	w.stack = w.stack[:len(w.stack)-1]
-	return w.Next()
-}
-
-// STOP OMIT
-
-func Same(t1, t2 *tree.Tree) bool {
-	w1, w2 := Walk(t1), Walk(t2)
-	for {
-		v1, ok1 := w1.Next()
-		v2, ok2 := w2.Next()
-		if v1 != v2 || ok1 != ok2 {
-			return false
-		}
-		if !ok1 {
-			return true
-		}
-	}
-}
-
-func main() {
-	fmt.Println(Same(tree.New(3), tree.New(3)))
-	fmt.Println(Same(tree.New(1), tree.New(2)))
-}
diff --git a/content/2014/go4gophers/tree-select.go b/content/2014/go4gophers/tree-select.go
deleted file mode 100644
index de8cad5..0000000
--- a/content/2014/go4gophers/tree-select.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"code.google.com/p/go-tour/tree"
-)
-
-func Walk(root *tree.Tree, quit chan struct{}) chan int {
-	ch := make(chan int)
-	go func() {
-		walk(root, ch, quit)
-		close(ch)
-	}()
-	return ch
-}
-
-func walk(t *tree.Tree, ch chan int, quit chan struct{}) {
-	if t.Left != nil {
-		walk(t.Left, ch, quit)
-	}
-	select { // HL
-	case ch <- t.Value: // HL
-	case <-quit: // HL
-		return // HL
-	} // HL
-	if t.Right != nil {
-		walk(t.Right, ch, quit)
-	}
-}
-
-// STOP OMIT
-
-func Same(t1, t2 *tree.Tree) bool {
-	quit := make(chan struct{}) // HL
-	defer close(quit)           // HL
-	w1, w2 := Walk(t1, quit), Walk(t2, quit)
-	for {
-		v1, ok1 := <-w1
-		v2, ok2 := <-w2
-		if v1 != v2 || ok1 != ok2 {
-			return false
-		}
-		if !ok1 {
-			return true
-		}
-	}
-}
-
-func main() {
-	fmt.Println(Same(tree.New(3), tree.New(3)))
-	fmt.Println(Same(tree.New(1), tree.New(2)))
-}
diff --git a/content/2014/go4gophers/tree-thread.go b/content/2014/go4gophers/tree-thread.go
deleted file mode 100644
index 3895044..0000000
--- a/content/2014/go4gophers/tree-thread.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"code.google.com/p/go-tour/tree"
-)
-
-func Walk(root *tree.Tree) chan int {
-	ch := make(chan int)
-	go func() {
-		walk(root, ch)
-		close(ch)
-	}()
-	return ch
-}
-
-func walk(t *tree.Tree, ch chan int) {
-	if t.Left != nil {
-		walk(t.Left, ch)
-	}
-	ch <- t.Value
-	if t.Right != nil {
-		walk(t.Right, ch)
-	}
-}
-
-// STOP OMIT
-
-func Same(t1, t2 *tree.Tree) bool {
-	w1, w2 := Walk(t1), Walk(t2)
-	for {
-		v1, ok1 := <-w1
-		v2, ok2 := <-w2
-		if v1 != v2 || ok1 != ok2 {
-			return false
-		}
-		if !ok1 {
-			return true
-		}
-	}
-}
-
-func main() {
-	fmt.Println(Same(tree.New(3), tree.New(3)))
-	fmt.Println(Same(tree.New(1), tree.New(2)))
-}
diff --git a/content/2014/go4gophers/tree-walk.go b/content/2014/go4gophers/tree-walk.go
deleted file mode 100644
index c43c0e7..0000000
--- a/content/2014/go4gophers/tree-walk.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"code.google.com/p/go-tour/tree"
-)
-
-func Walk(t *tree.Tree) {
-	if t.Left != nil {
-		Walk(t.Left)
-	}
-	fmt.Println(t.Value)
-	if t.Right != nil {
-		Walk(t.Right)
-	}
-}
-
-func main() {
-	Walk(tree.New(1))
-}
diff --git a/content/2014/go4gophers/tree.png b/content/2014/go4gophers/tree.png
deleted file mode 100644
index a140421..0000000
--- a/content/2014/go4gophers/tree.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java.slide b/content/2014/go4java.slide
deleted file mode 100644
index 57def5f..0000000
--- a/content/2014/go4java.slide
+++ /dev/null
@@ -1,667 +0,0 @@
-Go for Javaneros (Javaïstes?)
- #go4java
-
-Francesc Campoy
-Gopher and Developer Advocate
-Google
-@francesc
-campoy@golang.org
-
-* What is Go?
-
-Go is an open-source programming language
-
-- created at Google,
-- to solve Google-scale problems.
-
-.image go4java/img/gopher.jpg 450 _
-
-* Who uses Go?
-
-Google:
-
-- YouTube
-- dl.google.com
-
-Others:
-
-- dotCloud (Docker)
-- SoundCloud
-- Canonical
-- CloudFlare
-- Mozilla
-- ...
-
-[[http://golang.org/wiki/GoUsers][golang.org/wiki/GoUsers]]
-
-* Who uses Go?
-
-.image go4java/img/trends.png _ 800
-
-.caption Google Trends for [[http://www.google.com/trends/explore#q=golang][golang]]
-
-* Why Go?
-
-* Simplicity
-
-Minimal design
-
-.image go4java/img/perfection.jpg
-
-* Consistency
-
-Orthogonal features
-
-.image go4java/img/lego.jpg 400 _
-
-.caption By Kenny Louie from Vancouver, Canada [[http://creativecommons.org/licenses/by/2.0][CC-BY-2.0]], via Wikimedia Commons
-
-* Readability
-
-“The ratio of time spent reading (code) versus writing is well over 10 to 1 ... (therefore) making it easy to read makes it easier to write.”
-― Robert C. Martin
-
-.image go4java/img/piet.png 500 600 
-
-* Safety
-
-Type safety, no buffer overflows, no pointer arithmetic.
-
-.image go4java/img/baby.jpg 500 500
-
-* Built-in concurrency features
-
-“In a concurrent world, imperative is the wrong default!” - Tim Sweeney
-
-Communicating Sequential Processes - Hoare (1978)
-
-.image go4java/img/conc.jpg _ 1000
-
-* Speed
-
-.image go4java/img/fast.jpg 500 _
-
-* Let's dive in
-
-* Go and Java common aspects
-
-Go and Java are
-
-- object oriented
-
-- garbage collected
-
-- statically typed
-
-- part of the C family
-
-* Object oriented flavors
-
-Go is Object Oriented, but doesn't have the keywords:
-
-- `class`,
-- `extends`, or
-- `implements`.
-
-* All types are created equal
-
-* Go types
-
-- primitive types
-
-	int, uint, int8, uint8, ...
-	bool, string
-	float32, float64
-	complex64, complex128
-
-- structs
-
-	struct {
-		Name string
-		Age  int
-	}
-
-- slices and arrays
-	
-	[]int, [3]string, []struct{ Name string }
-
-- maps
-
-	map[string]int
-
-* Kinds of types (continued)
-
-- pointers
-
-	*int, *Person
-
-- functions
-
-	func(int, int) int
-
-- channels
-
-	chan bool
-
-- interfaces
-
-	interface {
-		Start()
-		Stop()
-	}
-
-* Type declarations
-
-	type [name] [specification]
-
-`Person` is a `struct` type.
-
-	type Person struct {
-		name string
-		age  int
-	}
-
-`Celsius` is a `float64` type.
-
-	type Celsius float64
-
-* Function declarations
-
-	func [name] ([params]) [return value]
-	func [name] ([params]) ([return values])
-
-A sum function:
-
-	func sum(a int, b int) int {
-		return a + b
-	}
-
-A function with multiple returned values:
-
-	func div(a, b int) (int, int)
-		return a / b, a % b
-	}
-
-Made clearer by naming the return values:
-
-	func div(den, div int) (q, rem int)
-		return a / b, a % b
-	}
-
-* Method declarations
-
-	func ([receiver]) [name] ([params]) ([return values])
-
-A method on a struct:
-
-	func (p Person) Major() bool {
-		return p.age >= 18
-	}
-
-But also a method on a `float64`:
-
-	func (c Celsius) Freezing() bool {
-		return c <= 0
-	}
-
-_Constraint:_ Methods can be defined *only* on types declared in the same package.
-
-	// This won't compile
-	func (s string) Length() int { return len(s) }
-
-* Wait, pointers?
-
-Use `&` to obtain the address of a variable.
-
-	a := "hello"
-	p := &a
-
-Use `*` to dereference the pointer.
-
-	fmt.Print(*p + ", world")
-
-No pointer arithmetic, no pointers to unsafe memory.
-
-	a := "hello"
-	p := &a
-
-	p += 4  // no, you can't
-
-* Why pointers?
-
-Control what you pass to functions.
-
-- passing values, no side-effects:
-
-	func double(x int) {
-		x *= 2
-	}
-
-- passing pointers: side-effects possible:
-
-	func double(x *int) {
-		*x *= 2
-	}
-
-Control your memory layout.
-
-- compare []Person and []*Person
-
-* Method declarations on pointers
-
-Receivers behave like any other argument.
-
-Pointers allow modifying the pointed receiver:
-
-	func (p *Person) IncAge() {
-		p.age++
-	}
-
-The method receiver is a copy of a pointer (pointing to the same address).
-
-Method calls on nil receivers are perfectly valid (and useful!).
-
-	func (p *Person) Name() string {
-		if p == nil {
-			return "anonymous"
-		}
-		return p.name
-	}
-
-* Interfaces
-
-* Interfaces
-
-An interface is a set of methods.
-
-In Java:
-
-	interface Switch {
-		void open();
-		void close();
-	}
-
-In Go:
-
-	type OpenCloser interface {
-		Open()
-		Close()
-	}
-
-* It's all about satisfaction
-
-Java interfaces are satisfied *explicitly*.
-
-Go interfaces are satisfied *implicitly*.
-
-.image //upload.wikimedia.org/wikipedia/commons/thumb/2/29/Rolling_Stones_09.jpg/512px-Rolling_Stones_09.jpg _ 512
-
-.caption Picture by Gorupdebesanez [[http://creativecommons.org/licenses/by-sa/3.0][CC-BY-SA-3.0]], via [[http://commons.wikimedia.org/wiki/File%3ARolling_Stones_09.jpg][Wikimedia Commons]]
-
-* Go: implicit satisfaction
-
-_If_a_type_defines_all_the_methods_of_an_interface,_the_type_satisfies_that_interface._
-
-Benefits:
-
-- fewer dependencies
-- no type hierarchy
-- organic composition
-
-* Structural subtyping
-
-Think static duck typing, verified at compile time.
-
-.image go4java/img/duck.jpg 500 500
-
-* FuncDraw: an example on interfaces
-
-.image go4java/img/funcdraw.png 500 700
-
-* FuncDraw: package parser
-
-Package `parse` provides a parser of strings into functions.
-
-	func Parse(text string) (*Func, error) { ... }
-
-`Func` is a struct type, with an `Eval` method.
-
-	type Func struct { ... }
-
-	func (p *Func) Eval(x float64) float64 { ... }
-
-* FuncDraw: package draw
-
-Package draw generates images given a function.
-
-	func Draw(f *parser.Func) image.Image {
-		for x := start; x < end; x += inc {
-			y := f.Eval(x)
-			...
-		}
-	}
-
-`draw` depends on `parser`
-
-- makes testing hard
-
-Let's use an interface instead
-
-	type Evaluable interface {
-		Eval(float64) float64
-	}
-
-	func Draw(f Evaluable) image.Image { ... }
-
-* Inheritance vs composition
-
-* Inheritance vs composition
-
-Lots of articles have been written about the topic.
-
-In general, composition is preferred to inheritance.
-
-Lets see why.
-
-* Runner
-
-.code go4java/BadInheritance.java /START_RUNNER/,/END_RUNNER/
-
-* RunCounter is-a Runner that counts
-
-.code go4java/BadInheritance.java /START_COUNTING/,/END_COUNTING/
-
-* Let's run and count
-
-What will this code print?
-
-.code go4java/BadInheritance.java /START_MAIN/,/END_MAIN/
-
-Of course, this prints:
-
-	running one
-	running two
-	running three
-	my runner ran 6 tasks
-
-Wait! How many?
-
-* My runner ran 6 tasks? Six?
-
-Inheritance causes:
-
-- weak encapsulation,
-- tight coupling,
-- surprising bugs.
-
-.image go4java/img/badinheritance.png
-
-* Solution: use composition
-
-.code go4java/Composition.java /START_COUNTING/,/BREAK_COUNTING/
-
-* Solution: use composition (continued)
-
-.code go4java/Composition.java /BREAK_COUNTING/,/END_COUNTING/
-
-* Solution: use composition (continued)
-
-*Pros*
-
-- The bug is gone!
-- `Runner` is completely independent of `RunCounter`.
-- The creation of the `Runner` can be delayed until (and if) needed.
-
-*Cons*
-
-- We need to explicitly define the `Runner` methods on `RunCounter`:
-
-	public String getName() { return runner.getName(); }
-
-- This can cause lots of repetition, and eventually bugs.
-
-* There's no inheritance in Go
-
-* There's no inheritance in Go
-
-Let's use composition directly:
-
-# .code go4java/runner/runner.go /type Task/,/END_TASK/
-
-.code go4java/runner/runner.go /type Runner/,/END_RUNNER/
-
-All very similar to the Java version.
-
-* RunCounter
-
-`RunCounter` has a `Runner` field.
-
-.code go4java/runner/runner.go /type RunCounter/,
-
-* Composition in Go
-
-Same pros and cons as the composition version in Java.
-
-We also have the boilerplate to proxy methods from `Runner`.
-
-.code go4java/runner/runner.go /runner.Name/
-
-But we can remove it!
-
-* Struct embedding
-
-Expressed in Go as unnamed fields in a struct.
-
-It is still *composition*.
-
-The fields and methods of the embedded type are defined on the embedding type.
-
-Similar to inheritance, but the embedded type doesn't know it's embedded.
-
-* Example of struct embedding
-
-Given a type `Person`:
-
-.code go4java/embedsample.go /Person/,/Hi/
-
-We can define a type `Employee` embedding `Person`:
-
-.code go4java/embedsample.go /Employee/,/}/
-
-All fields and methods from `Person` are available on `Employee`:
-
-.code go4java/embedsample.go /var/,/Introduce/
-
-* Struct embedding
-
-.code go4java/runner/embed.go /type RunCounter2/,
-
-* Is struct embedding like inheritance?
-
-No, it is better!
-
-It is composition.
-
-- You can't reach into another type and change the way it works.
-
-- Method dispatching is explicit.
-
-It is more general.
-
-- Struct embedding of interfaces.
-
-* Is struct embedding like inheritance?
-
-Struct embedding is selective.
-
-.code go4java/writecounter.go /WriteCounter/,/MAIN/
-
-WriteCounter can be used with any `io.ReadWriter`.
-
-.play go4java/writecounter.go /func main/,/^}/
-
-* Easy mocking
-
-What if we wanted to fake a part of a `net.Conn`?
-
-	type Conn interface {
-	        Read(b []byte) (n int, err error)
-	        Write(b []byte) (n int, err error)
-	        Close() error
-	        LocalAddr() Addr
-	        RemoteAddr() Addr
-	        SetDeadline(t time.Time) error
-	        SetReadDeadline(t time.Time) error
-	        SetWriteDeadline(t time.Time) error
-	}
-
-I want to test `handleCon`:
-
-.code go4java/loopback.go /handleCon/
-
-- We could create a `fakeConn` and define all the methods of `Conn` on it.
-
-- But that's a lot of boring code.
-
-* Struct embedding of interfaces
-
-_WARNING_:_Cool_stuff_
-
-If a type T has an embedded field of a type E, all the methods of E will be defined on T.
-
-Therefore, if E is an interface T satisfies E.
-
-* Struct embedding of interfaces (continued)
-
-We can test `handleCon` with the `loopBack` type.
-
-.code go4java/loopback.go /loopBack/,/^}/
-
-Any calls to the methods of `net.Conn` will fail, since the field is nil.
-
-We redefine the operations we support:
-
-.code go4java/loopback.go /Read/,
-
-* Concurrency
-
-* Concurrency
-
-It is part of the language, not a library.
-
-Based on two concepts:
-
-- goroutines: lightweight threads
-- channels: typed pipes used to communicate and synchronize between goroutines
-
-So cheap you can use them whenever you want.
-
-.image go4java/img/funnelin.jpg 300 700
-
-* Sleep and talk
-
-.code go4java/conc1.go /sleepAndTalk/,/^}/
-
-We want a message per second.
-
-.play go4java/conc1.go /func main/,/^}/
-
-What if we started all the `sleepAndTalk` concurrently?
-
-Just add `go`!
-
-* Concurrent sleep and talk
-
-.play go4java/conc2.go /func main/,/^}/
-
-That was fast ...
-
-When the `main` goroutine ends, the program ends.
-
-* Concurrent sleep and talk with more sleeping
-
-.play go4java/conc3.go /func main/,/^}/
-
-But synchronizing with `Sleep` is a bad idea.
-
-* Communicating through channels
-
-`sleepAndTalk` sends the string into the channel instead of printing it.
-
-.code go4java/chan.go /sleepAndTalk/,/^}/
-
-We create the channel and pass it to `sleepAndTalk`, then wait for the values to be sent.
-
-.play go4java/chan.go /func main/,/^}/
-
-* Let's count on the web
-
-We receive the next id from a channel.
-
-.code go4java/goodcounter.go /nextID/,/^}/
-
-We need a goroutine sending ids into the channel.
-
-.play go4java/goodcounter.go /func main/,/^}/
-
-[[http://localhost:8080/next]]
-
-* Let's fight!
-
-`select` allows us to chose among multiple channel operations.
-
-.play go4java/battle.go /battle/,/^}/
-
-Go - [[http://localhost:8080/fight?usr=go]]
-Java - [[http://localhost:8080/fight?usr=java]]
-
-* Chain of gophers
-
-.image go4java/img/chain.jpg
-
-Ok, I'm just bragging here
-
-* Chain of gophers
-
-.play go4java/goroutines.go /func f/,
-
-* Concurrency is very powerful
-
-And there's lots to learn!
-
-- [[http://talks.golang.org/2012/concurrency.slide#1][Go Concurrency Patterns]], by Rob Pike
-- [[http://talks.golang.org/2013/advconc.slide#1][Advanced Concurrency Patterns]], by Sameer Ajmani
-- [[http://talks.golang.org/2012/waza.slide#1][Concurrency is not Parellelism]], by Rob Pike
-
-.image go4java/img/busy.jpg
-
-* In conclusion
-
-Go is simple, consistent, readable, and fun.
-
-All types are equal
-
-- methods on any type
-
-Implicit interfaces
-
-- Structural typing
-- Less dependencies
-- Code testable and reusable
-
-Use composition instead of inheritance
-
-- Struct embedding to remove boilerplate.
-- Struct embedding of interfaces to satisfy them fast.
-
-Concurrency is awesome, and you should check it out.
-
-* What to do next?
-
-Learn Go on your browser with [[http://tour.golang.org][tour.golang.org]]
-
-Find more about Go on [[http://golang.org][golang.org]]
-
-Join the community at [[https://groups.google.com/forum/#!forum/Golang-nuts][golang-nuts]]
-
-Link to the slides [[http://talks.golang.org/2014/go4java.slide]]
diff --git a/content/2014/go4java/BadInheritance.java b/content/2014/go4java/BadInheritance.java
deleted file mode 100644
index 8388418..0000000
--- a/content/2014/go4java/BadInheritance.java
+++ /dev/null
@@ -1,82 +0,0 @@
-import java.util.Collection;
-import java.util.ArrayList;
-
-class BadInheritance {
-    // START_TASK OMIT
-    class Task {
-        private String message;
-
-        public Task(String message) {
-            this.message = message;
-        }
-
-        public void run() {
-            System.out.println("running " + this.message);
-        }
-    }
-    // END_TASK OMIT
-
-    // START_RUNNER OMIT
-    class Runner {
-        private String name;
-
-        public Runner(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return this.name;
-        }
-
-        public void run(Task task) { // HL
-            task.run();
-        }
-
-        public void runAll(Task[] tasks) { // HL
-            for (Task task : tasks) {
-                run(task);
-            }
-        }
-    }
-    // END_RUNNER OMIT
-
-    // START_COUNTING OMIT
-    class RunCounter extends Runner {
-        private int count;
-
-        public RunCounter(String message) {
-            super(message);
-            this.count = 0;
-        }
-
-        @Override public void run(Task task) {
-            count++; // HL
-            super.run(task);
-        }
-
-        @Override public void runAll(Task[] tasks) {
-            count += tasks.length; // HL
-            super.runAll(tasks);
-        }
-
-        public int getCount() {
-            return count;
-        }
-    }
-    // END_COUNTING OMIT
-
-    public void test() {
-        // START_MAIN OMIT
-        RunCounter runner = new RunCounter("my runner");
-
-        Task[] tasks = { new Task("one"), new Task("two"), new Task("three")};
-        runner.runAll(tasks);
-
-        System.out.printf("%s ran %d tasks\n", runner.getName(), runner.getCount());
-        // END_MAIN OMIT
-    }
-
-    public static void main(String[] args) {
-        new BadInheritance().test();
-    }
-}
\ No newline at end of file
diff --git a/content/2014/go4java/Composition.java b/content/2014/go4java/Composition.java
deleted file mode 100644
index 345450a..0000000
--- a/content/2014/go4java/Composition.java
+++ /dev/null
@@ -1,86 +0,0 @@
-import java.util.Collection;
-import java.util.ArrayList;
-
-class Composition {
-    class Task {
-        private String message;
-
-        public Task(String message) {
-            this.message = message;
-        }
-
-        public void run() {
-            System.out.println("running " + this.message);
-        }
-    }
-
-    class Runner {
-        private String name;
-
-        public Runner(String name) {
-            this.name = name;
-        }
-
-        public String getName() {
-            return this.name;
-        }
-
-        public void run(Task task) {
-            task.run();
-        }
-
-        public void runAll(Task[] tasks) {
-            for (Task task : tasks) {
-                run(task);
-            }
-        }
-    }
-
-    // START_COUNTING OMIT
-    class RunCounter {
-        private Runner runner; // HL
-        private int count;
-
-        public RunCounter(String message) {
-            this.runner = new Runner(message);
-            this.count = 0;
-        }
-
-        public void run(Task task) {
-            count++;
-            runner.run(task);
-        }
-
-        public void runAll(Task[] tasks) {
-            count += tasks.length;
-            runner.runAll(tasks);
-        }
-
-        // continued on next slide ...
-
-        // BREAK_COUNTING OMIT
-        public int getCount() {
-            return count;
-        }
-
-        public String getName() {
-            return runner.getName();
-        }
-    }
-    // END_COUNTING OMIT
-
-    public void test() {
-        // START_MAIN OMIT
-        RunCounter runner = new RunCounter("my runner");
-
-        Task[] tasks = { new Task("one"), new Task("two"), new Task("three")};
-        runner.runAll(tasks);
-
-        System.out.printf("%s ran %d tasks\n", runner.getName(), runner.getCount());
-        // END_MAIN OMIT
-    }
-
-    public static void main(String[] args) {
-        new Composition().test();
-    }
-}
diff --git a/content/2014/go4java/battle.go b/content/2014/go4java/battle.go
deleted file mode 100644
index fde600c..0000000
--- a/content/2014/go4java/battle.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-var battle = make(chan string)
-
-func handler(w http.ResponseWriter, q *http.Request) {
-	select {
-	case battle <- q.FormValue("usr"):
-		fmt.Fprintf(w, "You won!")
-	case won := <-battle:
-		fmt.Fprintf(w, "You lost, %v is better than you", won)
-	}
-}
-
-func main() {
-	http.HandleFunc("/fight", handler)
-	http.ListenAndServe("localhost:8080", nil)
-}
diff --git a/content/2014/go4java/chan.go b/content/2014/go4java/chan.go
deleted file mode 100644
index 424fa73..0000000
--- a/content/2014/go4java/chan.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(secs time.Duration, msg string, c chan string) {
-	time.Sleep(secs * time.Second)
-	c <- msg
-}
-
-func main() {
-	c := make(chan string)
-
-	go sleepAndTalk(0, "Hello", c)
-	go sleepAndTalk(1, "Gophers!", c)
-	go sleepAndTalk(2, "What's", c)
-	go sleepAndTalk(3, "up?", c)
-
-	for i := 0; i < 4; i++ {
-		fmt.Printf("%v ", <-c)
-	}
-}
diff --git a/content/2014/go4java/conc1.go b/content/2014/go4java/conc1.go
deleted file mode 100644
index b1a599d..0000000
--- a/content/2014/go4java/conc1.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	sleepAndTalk(0*time.Second, "Hello")
-	sleepAndTalk(1*time.Second, "Gophers!")
-	sleepAndTalk(2*time.Second, "What's")
-	sleepAndTalk(3*time.Second, "up?")
-}
diff --git a/content/2014/go4java/conc2.go b/content/2014/go4java/conc2.go
deleted file mode 100644
index 129854e..0000000
--- a/content/2014/go4java/conc2.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	go sleepAndTalk(0*time.Second, "Hello")
-	go sleepAndTalk(1*time.Second, "Gophers!")
-	go sleepAndTalk(2*time.Second, "What's")
-	go sleepAndTalk(3*time.Second, "up?")
-}
diff --git a/content/2014/go4java/conc3.go b/content/2014/go4java/conc3.go
deleted file mode 100644
index 1fe09cf..0000000
--- a/content/2014/go4java/conc3.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	go sleepAndTalk(0*time.Second, "Hello")
-	go sleepAndTalk(1*time.Second, "Gophers!")
-	go sleepAndTalk(2*time.Second, "What's")
-	go sleepAndTalk(3*time.Second, "up?")
-	time.Sleep(4 * time.Second)
-}
diff --git a/content/2014/go4java/embedsample.go b/content/2014/go4java/embedsample.go
deleted file mode 100644
index 48cc267..0000000
--- a/content/2014/go4java/embedsample.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Person struct{ Name string }
-
-func (p Person) Introduce() { fmt.Println("Hi, I'm", p.Name) }
-
-type Employee struct {
-	Person
-	EmployeeID int
-}
-
-func ExampleEmployee() {
-	var e Employee
-	e.Name = "Peter"
-	e.EmployeeID = 1234
-
-	e.Introduce()
-}
diff --git a/content/2014/go4java/goodcounter.go b/content/2014/go4java/goodcounter.go
deleted file mode 100644
index e839a94..0000000
--- a/content/2014/go4java/goodcounter.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-var nextID = make(chan int)
-
-func handler(w http.ResponseWriter, q *http.Request) {
-	fmt.Fprintf(w, "<h1>You got %v<h1>", <-nextID)
-}
-
-func main() {
-	http.HandleFunc("/next", handler)
-	go func() {
-		for i := 0; ; i++ {
-			nextID <- i
-		}
-	}()
-	http.ListenAndServe("localhost:8080", nil)
-}
diff --git a/content/2014/go4java/goroutines.go b/content/2014/go4java/goroutines.go
deleted file mode 100644
index cdcdb85..0000000
--- a/content/2014/go4java/goroutines.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func f(left, right chan int) {
-	left <- 1 + <-right
-}
-
-func main() {
-	start := time.Now()
-	const n = 1000
-	leftmost := make(chan int)
-
-	right := leftmost
-	left := leftmost
-	for i := 0; i < n; i++ {
-		right = make(chan int)
-		go f(left, right)
-		left = right
-	}
-
-	go func(c chan int) { c <- 0 }(right)
-
-	fmt.Println(<-leftmost, time.Since(start))
-}
diff --git a/content/2014/go4java/img/baby.jpg b/content/2014/go4java/img/baby.jpg
deleted file mode 100644
index 2f32877..0000000
--- a/content/2014/go4java/img/baby.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/badinheritance.png b/content/2014/go4java/img/badinheritance.png
deleted file mode 100644
index 91e4070..0000000
--- a/content/2014/go4java/img/badinheritance.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/busy.jpg b/content/2014/go4java/img/busy.jpg
deleted file mode 100644
index 35ce9f4..0000000
--- a/content/2014/go4java/img/busy.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/chain.jpg b/content/2014/go4java/img/chain.jpg
deleted file mode 100644
index 87f8571..0000000
--- a/content/2014/go4java/img/chain.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/conc.jpg b/content/2014/go4java/img/conc.jpg
deleted file mode 100644
index 5813956..0000000
--- a/content/2014/go4java/img/conc.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/duck.jpg b/content/2014/go4java/img/duck.jpg
deleted file mode 100644
index 344b31e..0000000
--- a/content/2014/go4java/img/duck.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/fast.jpg b/content/2014/go4java/img/fast.jpg
deleted file mode 100644
index 9b56e23..0000000
--- a/content/2014/go4java/img/fast.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/funcdraw.png b/content/2014/go4java/img/funcdraw.png
deleted file mode 100644
index 374ea2e..0000000
--- a/content/2014/go4java/img/funcdraw.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/funnelin.jpg b/content/2014/go4java/img/funnelin.jpg
deleted file mode 100644
index 2bf6873..0000000
--- a/content/2014/go4java/img/funnelin.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/gopher.jpg b/content/2014/go4java/img/gopher.jpg
deleted file mode 100644
index 68795a9..0000000
--- a/content/2014/go4java/img/gopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/lego.jpg b/content/2014/go4java/img/lego.jpg
deleted file mode 100644
index 7c77051..0000000
--- a/content/2014/go4java/img/lego.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/perfection.jpg b/content/2014/go4java/img/perfection.jpg
deleted file mode 100644
index ba57eea..0000000
--- a/content/2014/go4java/img/perfection.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/piet.png b/content/2014/go4java/img/piet.png
deleted file mode 100644
index f4856e1..0000000
--- a/content/2014/go4java/img/piet.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/img/trends.png b/content/2014/go4java/img/trends.png
deleted file mode 100644
index 08dc1cf..0000000
--- a/content/2014/go4java/img/trends.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/go4java/loopback.go b/content/2014/go4java/loopback.go
deleted file mode 100644
index 8f7646b..0000000
--- a/content/2014/go4java/loopback.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"net"
-)
-
-func handleConn(conn net.Conn) {
-	// does something that should be tested.
-}
-
-type loopBack struct {
-	net.Conn
-	buf bytes.Buffer
-}
-
-func (c *loopBack) Read(b []byte) (int, error) {
-	return c.buf.Read(b)
-}
-
-func (c *loopBack) Write(b []byte) (int, error) {
-	return c.buf.Write(b)
-}
diff --git a/content/2014/go4java/runner/embed.go b/content/2014/go4java/runner/embed.go
deleted file mode 100644
index aef71d7..0000000
--- a/content/2014/go4java/runner/embed.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package runner
-
-// RunCounter2 is completely equivalent to RunCounter,
-// but uses struct embedding to avoid the boilerplate of redeclaring
-// the Name method.
-type RunCounter2 struct {
-	Runner // HL
-	count  int
-}
-
-func NewRunCounter2(name string) *RunCounter2 {
-	return &RunCounter2{Runner{name}, 0}
-}
-
-func (r *RunCounter2) Run(t Task) {
-	r.count++
-	r.Runner.Run(t) // HL
-}
-
-func (r *RunCounter2) RunAll(ts []Task) {
-	r.count += len(ts)
-	r.Runner.RunAll(ts) // HL
-}
-
-func (r *RunCounter2) Count() int { return r.count }
diff --git a/content/2014/go4java/runner/runner.go b/content/2014/go4java/runner/runner.go
deleted file mode 100644
index 1d01467..0000000
--- a/content/2014/go4java/runner/runner.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Package runner provides a Runner type that is used to define both RunCounter
-// and EmbeddedRunCounter to show examples of how to use composition in Go.
-package runner
-
-import "fmt"
-
-// A Task is a simple task that prints a message when run.
-type Task struct{ Msg string }
-
-func (t Task) Run() {
-	fmt.Println("running", t.Msg)
-}
-
-// END_TASK OMIT
-
-// A Runner provides a way of running tasks.
-type Runner struct{ name string }
-
-func (r *Runner) Name() string { return r.name }
-
-func (r *Runner) Run(t Task) {
-	t.Run()
-}
-
-func (r *Runner) RunAll(ts []Task) {
-	for _, t := range ts {
-		r.Run(t)
-	}
-}
-
-// END_RUNNER OMIT
-
-// A RunCounter is a Runner that keeps a counter of the run tasks.
-type RunCounter struct {
-	runner Runner // HL
-	count  int
-}
-
-func NewRunCounter(name string) *RunCounter {
-	return &RunCounter{runner: Runner{name}}
-}
-
-func (r *RunCounter) Run(t Task) {
-	r.count++
-	r.runner.Run(t) // HL
-}
-
-func (r *RunCounter) RunAll(ts []Task) {
-	r.count += len(ts)
-	r.runner.RunAll(ts) // HL
-}
-
-func (r *RunCounter) Count() int { return r.count }
-
-func (r *RunCounter) Name() string { return r.runner.Name() }
diff --git a/content/2014/go4java/writecounter.go b/content/2014/go4java/writecounter.go
deleted file mode 100644
index e100140..0000000
--- a/content/2014/go4java/writecounter.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-	"io"
-	"os"
-)
-
-var (
-	_ = bytes.Buffer{}
-	_ = os.Stdout
-)
-
-// WriteCounter tracks the total number of bytes written.
-type WriteCounter struct {
-	io.ReadWriter
-	count int
-}
-
-func (w *WriteCounter) Write(b []byte) (int, error) {
-	w.count += len(b)
-	return w.ReadWriter.Write(b)
-}
-
-// MAIN OMIT
-func main() {
-	buf := &bytes.Buffer{}
-	w := &WriteCounter{ReadWriter: buf}
-
-	fmt.Fprintf(w, "Hello, gophers!\n")
-	fmt.Printf("Printed %v bytes", w.count)
-}
diff --git a/content/2014/gocon-tokyo.slide b/content/2014/gocon-tokyo.slide
deleted file mode 100644
index 0aacc3b..0000000
--- a/content/2014/gocon-tokyo.slide
+++ /dev/null
@@ -1,376 +0,0 @@
-Go: 90% Perfect, 100% of the time.
-"GoCon Tokyo"
-31 May 2014
-Tags: go, gocon
-
-Brad Fitzpatrick
-@bradfitz
-bradfitz@golang.org
-http://bradfitz.com
-http://camlistore.org
-
-* Hello!
-
-* "60% of the time, it works every time...."
-
-.image gocon-tokyo/60p.jpg
-
-* "That makes no sense"
-
-* Starting a new project, picking a language...
-
-* Disclaimer
-
-- Personal experience only
-- My opinions
-- Fake, fun numbers (e.g. "90% Perfect, 100% of the time.")
-- Maybe it's 91%.
-- All languages are both wonderful and terrible
-- <3
-
-* 2010
-
-* Idea: Camlistore
-
-- All my life's data from everywhere,
-- Import, backup, serve, browse, search, share, index
-- Designed to last 100+ years
-- Don't trust any company
-- In 2010: an idea
-- In 2014: busy, fun, active project
-
-* Which language to use for Camlistore?
-
-* Before Go
-
-- Starting a new project from 1994 ~ 2010...
-- Perl or C?
-- Rarely but occasionally Java.
-
-* Perl: The Good
-
-- Fun
-- Expressive
-- Get things done, quickly
-
-* Python, Ruby, Javascript: The Good
-
-- Same
-
-* Perl: The Bad
-
-- Not fast like C
-- Sometimes need to write in C
-- ... or write in XS (Perl-C glue language)
-- Perl-C, C-Perl calls are slow
-- Single-threaded, single-core, callback hell
-
-* Python, Ruby, Javascript: The Bad
-
-- Same, but even slower :)
-- JavaScript is faster now, but not as fast as C
-
-* Summary
-
-- Perlythonubyscript: slow for computer, fast & fun for human
-- C: slow for human, fast for computer
-- C++: little more fun than C, but more complexity
-- Java: tedious (verbose), slow start-up, easy to find programmers
-- PHP: if somebody's paying you enough, maybe
-
-* Fun vs. fast
-
-.image gocon-tokyo/funfast-nogo.svg
-
-* Maybe mix of two languages?
-
-- Fun, slow parts in Perlythonubyscript?
-- Important, fast parts in C?
-
-* But...
-
-- You'll want to share code.
-- Calling from C to X or X to C is slow.
-- The C-X glue language is the least fun language
-- You'll be lazy, and write in the fun language
-- Or be lazy and waste time, and write too much stuff in C++ (like Google)
-
-* Server? Threads or events?
-
-* Threads
-
-- C, C++, Java, ...
-- Threads? Heavy. Lots of memory per thread for stacks. Be careful!
-  Executor pool = new ScheduledThreadPoolExecutor(/* ???? guess a number */);
-
-* Events
-
-- Perlythonubyscript: events. no choice. Callback hell.
-- C, C++: libevent, etc. Callback hell.
-
-.image gocon-tokyo/spaghetti.jpg
-
-- C#: await async await async await async await async noise
-
-* Concurrency and performance
-
-.image gocon-tokyo/concurrency0.svg
-
-* It's really hard to pick a language!
-
-* 2010. Let's try Go!
-
-* Go: 90% Perfect, 100% of the time.
-
-* Go: 90% Perfect, 100% of the time.
-
-- Go is very good at lots of things
-- High-level code when you want
-- Low-level code when you want
-- Start high, profile, go low-level when needed
-- Static typing without too much keyboard typing
-
-* Before Go
-
-.image gocon-tokyo/funfast-nogo.svg
-
-* After Go
-
-.image gocon-tokyo/funfast.svg
-
-* Go's Concurrency
-
-- Built-in! Lightweight threads, no callback hell
-- Readable, top-down code
-- So easy to write servers
-
-  for {
-    conn, err := listener.Accept()
-    // check err
-    go serve(conn)
-  }
-
-- Goroutine-per-request can scale
-
-* Concurrency before Go
-
-.image gocon-tokyo/concurrency0.svg
-
-* After Go
-
-.image gocon-tokyo/concurrency.svg
-
-* Go is showing up for all sorts of tasks
-
-* Web frameworks
-
-- Typically a job for scripting languages: Node.js, Python, Ruby, Perl, PHP, etc.
-- net/http in the standard library
-- Other http frameworks on top: gorilla, martini, Revel etc...
-- No need for nginx: standard library's http server scales
-
-* Image processing
-
-- no libpng, imagemagick, etc
-- pure Go PNG, JPEG, GIF encoding & decoding in the standard library
-- slower, but safer
-- getting faster
-
-* Crypto
-
-- no OpenSSL, no GnuTLS
-- pure Go AES, TLS (SSL), OpenPGP, etc
-- slower, but safer
-- getting faster
-
-* Replacing shell scripts
-
-- Instead of little Perl & shell scripts, I now write in Go
-- os/exec package & goroutines makes subprocess management easier than shell
-
-* Camlistore
-
-- web handlers
-- using third-party web APIs
-- image thumbnails: decode, resize, encode
-- EXIF, ID3 parsing
-- database drivers
-- crypto, image decoding/resizing/encoding
-- search, indexing: tight memory layout control
-- WebSockets, HTTPS
-- all pure Go!
-
-* Controlling flying drones
-
-.link http://www.godrone.io
-- "Isn’t Go unsuitable for real-time applications like this?"
-- "However, for all practical purposes the GC just needs to keep up with the stabilization loop which runs at 200 Hz. This means that GC pauses below 5ms have no impact on performance. Longer pauses will degrade stabilization performance, but the tolerance threshold may be up to a second ..." (small heap)
-
-.image gocon-tokyo/drone.png
-
-* Emulators
-
-.link http://dave.cheney.net/2013/01/09/go-the-language-for-emulators Go: The Language For Emulators
-
-.image gocon-tokyo/trs.png
-
-* Disassembler, linker, compiler.
-
-- llgo compiler (Go -> LLVM IR -> ...)
-- Go 1.3's disassembler
-- Go 1.4's linker
-- Go 1.4 or Go 1.5's compiler
-
-* Mobile
-
-- Go runs on ARM
-- minux's iOS port of Go
-- Camlistore child process, goandroid
-
-.image gocon-tokyo/goandroid.png
-
-* Audio synthesis
-
-- https://github.com/nf/sigourney
-
-.image gocon-tokyo/sigourney.png
-
-* Cloud infrastructure
-
-.link http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/ Go: the emerging language of cloud infrastructure
-
-- Docker, Packer
-- CoreOS’s etcd and fleet
-- Ubuntu Juju, Mozilla Heka, Apcera’s NATS, gnatsd
-
-.image gocon-tokyo/docker.png
-
-* Load balancers & servers
-
-- YouTube's vitess: MySQL
-- net/http/httputil.ReverseProxy
-- dl.google.com
-- etc
-
-* Raspberry Pi GPIO
-
-.link https://github.com/davecheney/gpio
-.link https://github.com/stianeikeland/go-rpio
-.link https://github.com/luismesas/goPi
-
-.image gocon-tokyo/gpio.gif
-
-* What other language is used for all these?
-
-- web apps
-- scripts
-- system administration
-- image processing
-- load balancers, servers
-- crypto
-- hardware
-
-Go!
-
-* And even better...
-
-* Go built-in tools
-
-- testing
-- benchmarking
-- profiling (CPU, memory, blocking)
-- huge standard library
-- "go get"
-- godoc
-- gofmt, goimports
-- race detector
-- static binaries
-
-* So why isn't Go perfect?
-
-* Generics
-
-- No generics
-- It sucks sometimes, but rarely
-- Use maps, slices, interfaces
-- Occasionally a gross interface{}
-- No algorithms in stdlib
-- No great proposal yet
-
-* No generics (Simon Peyton Jones: "Haskell is useless")
-
-.image gocon-tokyo/generics.svg
-
-* Data races can happen
-
-- shared, mutable state is possible
-- use channels
-- be careful
-- conventions and documentation help
-- runtime race detector helps too
-  $ go test -race
-* Code generation
-
-- The default Go compiler often generates pretty dumb code
-- Especially on ARM
-- But getting better
-- In Go 1.4, 1.5+: Go compiler in Go, refactor, add SSA, more optimizations
-
-* gccgo
-
-- gccgo generates very good code
-- ... but lacks escape analysis: kills performance with many small allocs + garbage
-- ... GC isn't precise. Bad for 32-bit.
-
-* Compiling to JavaScript isn't yet great
-
-- Would be nice to write frontend & backend in the same language, share code
-- go/types + go/ssa enables many things:
-.link http://tardisgo.github.io/ TARDIS Go Compiler
-.image gocon-tokyo/tardis.png
-
-* Limited Mobile Support
-
-- No built-in Android support (but goandroid, child processes...)
-- No built-in iOS support (but unmerged port...)
-
-* Embedding Go in C/C++/Java/etc
-
-- Can't embed Go in other languages, environments.
-- e.g. Android, iOS, C/C++ programs
-- problems with memory setup, GC, signals, ...
-- need embedding API design
-- In Go 1.4?
-
-* Shared libraries
-
-- no shared libraries
-- can't load Go code at runtime
-
-* Garbage collector
-
-- Pauses: faster each release, good people working on it.
-- Precision: heap in 1.2, most stacks in 1.3, more in 1.4.
-- 4 versions of memcached: Perl, C, C++, Go
-
-* Hot stack splits
-
-- Almost entirely fixed in Go 1.3's contiguous stacks
-- Rest should be in Go 1.4.
-
-.image gocon-tokyo/contig-stack.png
-
-* But...
-
-- Problems are fixable.
-- It all keeps getting better with each release.
-
-* Go for everything
-
-- Since mid-2010, I prefer 90%-perfect Go for all my hacking:
-.image gocon-tokyo/changestats.png
-- Go is flexible, fun, readable
-- Go is fast (for computers & humans)
-- Go is good for working with others
-- Go for everything!
-
diff --git a/content/2014/gocon-tokyo/60p.jpg b/content/2014/gocon-tokyo/60p.jpg
deleted file mode 100755
index 63997c2..0000000
--- a/content/2014/gocon-tokyo/60p.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/changestats.png b/content/2014/gocon-tokyo/changestats.png
deleted file mode 100644
index 3e19877..0000000
--- a/content/2014/gocon-tokyo/changestats.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/concurrency.svg b/content/2014/gocon-tokyo/concurrency.svg
deleted file mode 100644
index 0623b67..0000000
--- a/content/2014/gocon-tokyo/concurrency.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 750.0 446.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l750.0 0l0 446.0l-750.0 0l0 -446.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l750.96063 0l0 446.43045l-750.96063 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l735.33856 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l723.33856 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m731.22046 434.58694l9.076233 -3.3034668l-9.076233 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l0 -427.43307" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l0 -415.43307" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m11.185354 15.850393l-3.3034644 -9.076195l-3.303465 9.076195z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m198.65747 381.08594l330.80316 0l0 37.385834l-330.80316 0z" fill-rule="nonzero"></path><path fill="#000000" d="m270.55606 408.00595l0 -13.59375l5.109375 0q1.546875 0 2.484375 0.40625q0.953125 0.40625 1.484375 1.265625q0.53125 0.859375 0.53125 1.796875q0 0.875 -0.46875 1.65625q-0.46875 0.765625 -1.4375 1.234375q1.234375 0.359375 1.890625 1.234375q0.671875 0.875 0.671875 2.0625q0 0.953125 -0.40625 1.78125q-0.390625 0.8125 -0.984375 1.265625q-0.59375 0.4375 -1.5 0.671875q-0.890625 0.21875 -2.1875 0.21875l-5.1875 0zm1.796875 -7.890625l2.9375 0q1.203125 0 1.71875 -0.15625q0.6875 -0.203125 1.03125 -0.671875q0.359375 -0.46875 0.359375 -1.1875q0 -0.671875 -0.328125 -1.1875q-0.328125 -0.515625 -0.9375 -0.703125q-0.59375 -0.203125 -2.0625 -0.203125l-2.71875 0l0 4.109375zm0 6.28125l3.390625 0q0.875 0 1.21875 -0.0625q0.625 -0.109375 1.046875 -0.359375q0.421875 -0.265625 0.6875 -0.765625q0.265625 -0.5 0.265625 -1.140625q0 -0.765625 -0.390625 -1.328125q-0.390625 -0.5625 -1.078125 -0.78125q-0.6875 -0.234375 -1.984375 -0.234375l-3.15625 0l0 4.671875zm17.256073 -1.5625l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm15.547577 4.65625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.531982 4.9375l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm7.578827 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.5426941 -10.1875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.535431 0l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm11.230194 0l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm3.891327 0l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.6135864 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm9.257233 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm13.65625 1.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.5114136 1.5l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0944824 -6.75l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm3.832306 0.8125l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm9.297607 5.109375l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.09375 0 1.890625 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.546875 -0.578125 -1.53125 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm13.147858 -2.109375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm15.672607 4.921875l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016327 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.8825555 368.01315l0 -299.0551l41.322834 0l0 299.0551z" fill-rule="nonzero"></path><path fill="#000000" d="m34.802555 303.5668l-13.593752 0l0 -9.84375l1.59375 0l0 8.046875l4.171875 0l0 -7.53125l1.59375 0l0 7.53125l4.625002 0l0 -8.359375l1.609375 0l0 10.15625zm0 -12.599823l-8.546877 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546877 0l0 1.65625zm0 -5.1832886l-8.546877 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546877 0l0 1.65625zm-11.687502 -4.792694l-1.90625 0l0 -1.671875l1.90625 0l0 1.671875zm11.687502 0l-9.859377 0l0 -1.671875l9.859377 0l0 1.671875zm-3.609377 -10.566681l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm-8.078125 -2.90625l-1.90625 0l0 -1.671875l1.90625 0l0 1.671875zm11.687502 0l-9.859377 0l0 -1.671875l9.859377 0l0 1.671875zm-3.171877 -10.879211l0.21875 -1.71875q1.5000019 0.40625 2.343752 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.328125 3.421875q-1.328125 1.265625 -3.734377 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484377 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.5468769 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm5.875002 -9.110092l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-1.5 -14.031967l1.484375 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.75 0.703125q-0.46875 0.203125 -1.9843769 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.4375 0l-1.0 -1.65625l3.4375 0l0 -1.6875l1.3125 0l0 1.6875l5.750002 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm-2.109377 -13.147858l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm-1.3125 -2.265625q-2.734375 0 -4.0625 -1.53125q-1.09375 -1.265625 -1.09375 -3.09375q0 -2.03125 1.34375 -3.3125q1.328125 -1.296875 3.671875 -1.296875q1.90625 0 3.000002 0.578125q1.078125 0.5625 1.6875 1.65625q0.59375 1.078125 0.59375 2.375q0 2.0625 -1.328125 3.34375q-1.328125 1.28125 -3.812502 1.28125zm0 -1.71875q1.890625 0 2.828127 -0.828125q0.9375 -0.828125 0.9375 -2.078125q0 -1.25 -0.9375 -2.0625q-0.9531269 -0.828125 -2.890627 -0.828125q-1.828125 0 -2.765625 0.828125q-0.9375 0.828125 -0.9375 2.0625q0 1.25 0.9375 2.078125q0.9375 0.828125 2.828125 0.828125zm4.921877 -9.281952l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-3.609377 -16.813232l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm3.609377 -9.34375l-1.453125 0q1.671875 1.140625 1.671875 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625019 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.7656269 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.6718769 -0.28125 -1.9375019 -0.28125l-5.28125 0l0 -1.671875l9.859377 0l0 1.5zm0 -3.906952l-9.859377 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.156252 0l0 1.671875zm0 -6.212677l-9.859377 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.156252 0l0 1.671875zm-3.171877 -12.978302l0.21875 -1.71875q1.5000019 0.40625 2.343752 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.328125 3.421875q-1.328125 1.265625 -3.734377 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484377 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.5468769 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm5.875002 -9.110107l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-3.609377 -16.813202l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm7.406252 -2.8125l-1.5625 0.171875q0.140625 -0.546875 0.140625 -0.953125q0 -0.546875 -0.1875 -0.875q-0.1875 -0.34375 -0.515625 -0.5625q-0.25 -0.15625 -1.25 -0.5q-0.140625 -0.046875 -0.40625 -0.15625l-9.875002 3.734375l0 -1.796875l5.71875 -2.046875q1.078125 -0.40625 2.281252 -0.71875q-1.1562519 -0.28125 -2.250002 -0.6875l-5.75 -2.09375l0 -1.671875l10.031252 3.75q1.625 0.59375 2.234375 0.9375q0.828125 0.4375 1.203125 1.015625q0.390625 0.578125 0.390625 1.375q0 0.484375 -0.203125 1.078125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m11.692741 31.321877l0 0c0 -11.854553 14.016661 -21.464567 31.307087 -21.464567l0 0c17.290424 0 31.307087 9.610014 31.307087 21.464567l0 0c0 11.854553 -14.016663 21.464565 -31.307087 21.464565l0 0c-17.290426 0 -31.307087 -9.610012 -31.307087 -21.464565z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.692741 31.321877l0 0c0 -11.854553 14.016661 -21.464567 31.307087 -21.464567l0 0c17.290424 0 31.307087 9.610014 31.307087 21.464567l0 0c0 11.854553 -14.016663 21.464565 -31.307087 21.464565l0 0c-17.290426 0 -31.307087 -9.610012 -31.307087 -21.464565z" fill-rule="nonzero"></path><path fill="#000000" d="m46.52019 32.63625l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890623q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.3593731 0.390625 2.390623q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m62.79527 31.322834l0 0c0 -11.854553 15.715862 -21.464565 35.10236 -21.464565l0 0c19.386505 0 35.10237 9.610013 35.10237 21.464565l0 0c0 11.854553 -15.715866 21.46457 -35.10237 21.46457l0 0c-19.386497 0 -35.10236 -9.610016 -35.10236 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m62.79527 31.322834l0 0c0 -11.854553 15.715862 -21.464565 35.10236 -21.464565l0 0c19.386505 0 35.10237 9.610013 35.10237 21.464565l0 0c0 11.854553 -15.715866 21.46457 -35.10237 21.46457l0 0c-19.386497 0 -35.10236 -9.610016 -35.10236 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m92.85897 32.637207l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890623q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.3593731 0.390625 2.390623q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm5.5217743 2.03125l0 -2.953123l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953123l-1.25 0zm8.559021 0l0 -2.953123l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953123l-1.25 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m42.879677 405.65063l0 0c0 -11.854553 18.00732 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m42.879677 405.65063l0 0c0 -11.854553 18.00732 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m67.16472 410.73065l0 -10.734375l4.765625 0q1.4375 0 2.1875 0.296875q0.75 0.28125 1.1875 1.015625q0.453125 0.734375 0.453125 1.609375q0 1.140625 -0.75 1.9375q-0.734375 0.78125 -2.28125 0.984375q0.5625 0.28125 0.859375 0.546875q0.625 0.5625 1.1875 1.421875l1.859375 2.921875l-1.78125 0l-1.421875 -2.234375q-0.625 -0.96875 -1.03125 -1.46875q-0.40625 -0.515625 -0.71875 -0.71875q-0.3125 -0.21875 -0.640625 -0.296875q-0.25 -0.046875 -0.796875 -0.046875l-1.65625 0l0 4.765625l-1.421875 0zm1.421875 -6.0l3.0625 0q0.96875 0 1.515625 -0.203125q0.5625 -0.203125 0.84375 -0.640625q0.28125 -0.4375 0.28125 -0.96875q0 -0.75 -0.5625 -1.234375q-0.546875 -0.5 -1.734375 -0.5l-3.40625 0l0 3.546875zm14.084274 6.0l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828125l1.328125 0l0 4.3125q0 1.03125 0.078125 1.390625q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.53125l0 -4.171875l1.3125 0l0 7.78125l-1.171875 0zm4.260483 0l-1.21875 0l0 -10.734375l1.3125 0l0 3.828125q0.84375 -1.046875 2.140625 -1.046875q0.71875 0 1.359375 0.296875q0.640625 0.28125 1.046875 0.8125q0.421875 0.515625 0.65625 1.265625q0.234375 0.734375 0.234375 1.578125q0 2.0 -1.0 3.09375q-0.984375 1.078125 -2.375 1.078125q-1.375 0 -2.15625 -1.140625l0 0.96875zm-0.015625 -3.953125q0 1.40625 0.390625 2.03125q0.609375 1.015625 1.671875 1.015625q0.875 0 1.5 -0.75q0.625 -0.75 0.625 -2.234375q0 -1.53125 -0.609375 -2.25q-0.59375 -0.734375 -1.453125 -0.734375q-0.859375 0 -1.5 0.75q-0.625 0.75 -0.625 2.171875zm6.901108 6.953125l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m62.79522 366.1942l0 0c0 -11.854553 21.299965 -21.46457 47.5748 -21.46457l0 0c26.274834 0 47.574806 9.610016 47.574806 21.46457l0 0c0 11.854553 -21.299973 21.46457 -47.574806 21.46457l0 0c-26.274834 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m62.79522 366.1942l0 0c0 -11.854553 21.299965 -21.46457 47.5748 -21.46457l0 0c26.274834 0 47.574806 9.610016 47.574806 21.46457l0 0c0 11.854553 -21.299973 21.46457 -47.574806 21.46457l0 0c-26.274834 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m88.711754 371.27423l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm8.134979 8.625l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625zm10.265625 -4.171875l0.1875 1.15625q-0.5625 0.125 -1.0 0.125q-0.71875 0 -1.125 -0.234375q-0.390625 -0.234375 -0.546875 -0.59375q-0.15625 -0.375 -0.15625 -1.5625l0 -4.46875l-0.96875 0l0 -1.03125l0.96875 0l0 -1.921875l1.3125 -0.796875l0 2.71875l1.328125 0l0 1.03125l-1.328125 0l0 4.546875q0 0.5625 0.0625 0.734375q0.078125 0.15625 0.234375 0.25q0.15625 0.09375 0.4375 0.09375q0.234375 0 0.59375 -0.046875zm1.1813507 1.171875l0 -10.734375l1.328125 0l0 3.84375q0.921875 -1.0625 2.328125 -1.0625q0.859375 0 1.5 0.34375q0.640625 0.34375 0.90625 0.9375q0.28125 0.59375 0.28125 1.75l0 4.921875l-1.328125 0l0 -4.921875q0 -1.0 -0.421875 -1.4375q-0.421875 -0.453125 -1.21875 -0.453125q-0.578125 0 -1.09375 0.296875q-0.515625 0.296875 -0.734375 0.828125q-0.21875 0.515625 -0.21875 1.4375l0 4.25l-1.328125 0zm7.666733 -3.890625q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276108 3.890625l0 -7.78125l1.1875 0l0 1.109375q0.8593826 -1.28125 2.4843826 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.4531326 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m12.472783 340.2766l0 0c0 -11.854553 18.007317 -21.464539 40.220474 -21.464539l0 0c22.213154 0 40.22047 9.609985 40.22047 21.464539l0 0c0 11.854553 -18.007317 21.46457 -40.22047 21.46457l0 0c-22.213156 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m12.472783 340.2766l0 0c0 -11.854553 18.007317 -21.464539 40.220474 -21.464539l0 0c22.213154 0 40.22047 9.609985 40.22047 21.464539l0 0c0 11.854553 -18.007317 21.46457 -40.22047 21.46457l0 0c-22.213156 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m44.57889 342.30975l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm7.5625 -0.40625l1.34375 -0.109375q0.09375 0.796875 0.4375 1.3125q0.359375 0.515625 1.078125 0.84375q0.734375 0.3125 1.65625 0.3125q0.8125 0 1.4375 -0.234375q0.625 -0.25 0.921875 -0.671875q0.3125 -0.421875 0.3125 -0.921875q0 -0.5 -0.296875 -0.875q-0.296875 -0.375 -0.96875 -0.640625q-0.4375 -0.15625 -1.921875 -0.515625q-1.46875 -0.359375 -2.0625 -0.671875q-0.765625 -0.40625 -1.15625 -1.0q-0.375 -0.59375 -0.375 -1.34375q0 -0.8125 0.453125 -1.515625q0.46875 -0.703125 1.359375 -1.0625q0.890625 -0.375 1.96875 -0.375q1.203125 0 2.109375 0.390625q0.90625 0.375 1.390625 1.125q0.5 0.75 0.546875 1.6875l-1.375 0.109375q-0.109375 -1.015625 -0.75 -1.53125q-0.625 -0.53125 -1.859375 -0.53125q-1.28125 0 -1.875 0.484375q-0.59375 0.46875 -0.59375 1.125q0 0.578125 0.421875 0.953125q0.40625 0.375 2.140625 0.765625q1.734375 0.390625 2.375 0.6875q0.9375 0.4375 1.375 1.109375q0.453125 0.65625 0.453125 1.515625q0 0.859375 -0.5 1.625q-0.484375 0.75 -1.40625 1.171875q-0.90625 0.421875 -2.0625 0.421875q-1.453125 0 -2.4375 -0.421875q-0.984375 -0.4375 -1.546875 -1.28125q-0.5625 -0.859375 -0.59375 -1.9375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m28.561682 62.385826l0 0c0 -11.854553 16.710005 -21.464565 37.32283 -21.464565l0 0c20.612839 0 37.322838 9.610012 37.322838 21.464565l0 0c0 11.854553 -16.71 21.46457 -37.322838 21.46457l0 0c-20.612827 0 -37.32283 -9.610016 -37.32283 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m28.561682 62.385826l0 0c0 -11.854553 16.710005 -21.464565 37.32283 -21.464565l0 0c20.612839 0 37.322838 9.610012 37.322838 21.464565l0 0c0 11.854553 -16.71 21.46457 -37.322838 21.46457l0 0c-20.612827 0 -37.32283 -9.610016 -37.32283 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m50.842785 64.41895l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390629l1.40625 0l0 7.312504q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm12.953125 2.09375q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.4687538 0.6875 -0.7500038q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.6249962 0.234375 0.9218712 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.7500038q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.20312119 -0.40625 -0.2656212 -0.953125zm-0.109375 -2.9531288q-0.71875 0.296875 -2.15625 0.5000038q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.4843788zm5.354229 3.9062538l-2.96875 -7.781254l1.390625 0l1.671875 4.656254q0.265625 0.765625 0.5 1.578125q0.171875 -0.625 0.484375 -1.484375l1.734375 -4.750004l1.359375 0l-2.953125 7.781254l-1.21875 0zm10.234375 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.4687538 0.6875 -0.7500038q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.7500038q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.9531288q-0.71875 0.296875 -2.15625 0.5000038q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.4843788z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m7.8828444 376.3685l0 0c0 -11.854553 18.007318 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.8828444 376.3685l0 0c0 -11.854553 18.007318 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m36.227814 381.4485l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm13.509979 3.125l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.135483 4.640625l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.8650208 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m325.13385 62.385826l0 0c0 -11.854553 15.715851 -21.464565 35.102356 -21.464565l0 0c19.386505 0 35.102356 9.610012 35.102356 21.464565l0 0c0 11.854553 -15.715851 21.46457 -35.102356 21.46457l0 0c-19.386505 0 -35.102356 -9.610016 -35.102356 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m325.13385 62.385826l0 0c0 -11.854553 15.715851 -21.464565 35.102356 -21.464565l0 0c19.386505 0 35.102356 9.610012 35.102356 21.464565l0 0c0 11.854553 -15.715851 21.46457 -35.102356 21.46457l0 0c-19.386505 0 -35.102356 -9.610016 -35.102356 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m359.68103 63.7002l1.421875 0.3593788q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.3437538 -0.5625 -2.8906288q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.3906288q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.0468788zm2.521759 3.9531288l0.640625 -3.125l-1.234375 0l0 -1.0937538l1.453125 0l0.546875 -2.65625l-2.0 0l0 -1.09375l2.21875 0l0.640625 -3.140625l1.09375 0l-0.640625 3.140625l2.3125 0l0.640625 -3.140625l1.09375 0l-0.625 3.140625l1.265625 0l0 1.09375l-1.484375 0l-0.5625 2.65625l2.046875 0l0 1.0937538l-2.265625 0l-0.625 3.125l-1.109375 0l0.640625 -3.125l-2.3125 0l-0.625 3.125l-1.109375 0zm1.953125 -4.218754l2.3125 0l0.546875 -2.65625l-2.3125 0l-0.546875 2.65625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m477.6299 62.385826l0 0c0 -11.854553 21.299988 -21.464565 47.5748 -21.464565l0 0c26.274841 0 47.57483 9.610012 47.57483 21.464565l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.27481 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m477.6299 62.385826l0 0c0 -11.854553 21.299988 -21.464565 47.5748 -21.464565l0 0c26.274841 0 47.57483 9.610012 47.57483 21.464565l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.27481 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m510.80194 63.7002l1.421875 0.3593788q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.3437538 -0.5625 -2.8906288q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.3906288q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.0468788zm2.7249146 3.7656288l0 -10.734379l1.328125 0l0 10.734379l-1.328125 0zm2.8030396 -3.8906288q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5000038 -0.453125 2.3593788q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.0156288zm1.359375 0q0 1.5000038 0.640625 2.2500038q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.2812538q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276062 -5.3125l0 -1.53125l1.3125 0l0 1.53125l-1.3125 0zm-1.671875 12.218754l0.25 -1.125q0.390625 0.109375 0.625 0.109375q0.40625 0 0.59375 -0.265625q0.203125 -0.265625 0.203125 -1.34375l0 -8.171879l1.3125 0l0 8.203129q0 1.4375 -0.375 2.0q-0.46875 0.734375 -1.578125 0.734375q-0.53125 0 -1.03125 -0.140625zm10.037415 -3.015625l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828129l1.328125 0l0 4.3125q0 1.0312538 0.078125 1.3906288q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.5312538l0 -4.171875l1.3125 0l0 7.781254l-1.171875 0zm3.026123 0l0 -7.781254l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078129l-1.328125 0zm10.224365 -2.5l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.9531288q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.2812538 0.71875 1.9687538q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.1406288l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m655.07086 42.73491l0 0c0 -11.854553 16.710022 -21.464567 37.322815 -21.464567l0 0c20.612854 0 37.322876 9.610014 37.322876 21.464567l0 0c0 11.854553 -16.710022 21.46457 -37.322876 21.46457l0 0c-20.612793 0 -37.322815 -9.610016 -37.322815 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m655.07086 42.73491l0 0c0 -11.854553 16.710022 -21.464567 37.322815 -21.464567l0 0c20.612854 0 37.322876 9.610014 37.322876 21.464567l0 0c0 11.854553 -16.710022 21.46457 -37.322876 21.46457l0 0c-20.612793 0 -37.322815 -9.610016 -37.322815 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m688.8056 43.596157l0 -1.25l4.546875 -0.015625l0 3.984375q-1.046875 0.84375 -2.171875 1.265625q-1.109375 0.421875 -2.28125 0.421875q-1.578125 0 -2.875 -0.671875q-1.296875 -0.6875 -1.953125 -1.96875q-0.65625 -1.28125 -0.65625 -2.859375q0 -1.578125 0.65625 -2.9375q0.65625 -1.359375 1.890625 -2.015625q1.234375 -0.65625 2.828125 -0.65625q1.171875 0 2.109375 0.375q0.9375 0.375 1.46875 1.0625q0.546875 0.671875 0.8125 1.75l-1.28125 0.34375q-0.234375 -0.8125 -0.59375 -1.28125q-0.359375 -0.46875 -1.03125 -0.75q-0.65625 -0.28125 -1.46875 -0.28125q-0.984375 0 -1.703125 0.296875q-0.703125 0.296875 -1.140625 0.78125q-0.421875 0.484375 -0.671875 1.0625q-0.40625 1.0 -0.40625 2.15625q0 1.4375 0.484375 2.40625q0.5 0.96875 1.4375 1.4375q0.953125 0.46875 2.015625 0.46875q0.921875 0 1.796875 -0.359375q0.890625 -0.359375 1.34375 -0.765625l0 -2.0l-3.15625 0zm5.7125854 0.328125q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m634.56696 230.72966l0 0c0 -11.854553 21.299927 -21.46457 47.574768 -21.46457l0 0c26.274841 0 47.57483 9.610016 47.57483 21.46457l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.274841 0 -47.574768 -9.610016 -47.574768 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m634.56696 230.72966l0 0c0 -11.854553 21.299927 -21.46457 47.574768 -21.46457l0 0c26.274841 0 47.57483 9.610016 47.57483 21.46457l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.274841 0 -47.574768 -9.610016 -47.574768 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m662.14636 235.80966l0 -10.734375l7.765625 0l0 1.265625l-6.34375 0l0 3.28125l5.9375 0l0 1.265625l-5.9375 0l0 3.65625l6.59375 0l0 1.265625l-8.015625 0zm9.556885 0l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.86499 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0zm8.36554 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm3.182373 3.90625l0 -7.78125l1.1875 0l0 1.109375q0.859375 -1.28125 2.484375 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.453125 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0zm7.916687 0.640625l1.28125 0.1875q0.078125 0.59375 0.4375 0.875q0.5 0.359375 1.34375 0.359375q0.921875 0 1.421875 -0.375q0.5 -0.359375 0.671875 -1.015625q0.09375 -0.40625 0.09375 -1.6875q-0.859375 1.015625 -2.15625 1.015625q-1.609375 0 -2.484375 -1.15625q-0.875 -1.15625 -0.875 -2.78125q0 -1.109375 0.40625 -2.046875q0.40625 -0.9375 1.15625 -1.453125q0.765625 -0.515625 1.8125 -0.515625q1.375 0 2.265625 1.109375l0 -0.9375l1.21875 0l0 6.71875q0 1.828125 -0.375 2.578125q-0.375 0.765625 -1.171875 1.203125q-0.796875 0.4375 -1.96875 0.4375q-1.390625 0 -2.25 -0.625q-0.859375 -0.625 -0.828125 -1.890625zm1.09375 -4.671875q0 1.53125 0.59375 2.234375q0.609375 0.703125 1.53125 0.703125q0.90625 0 1.515625 -0.6875q0.625 -0.703125 0.625 -2.203125q0 -1.421875 -0.640625 -2.140625q-0.625 -0.734375 -1.515625 -0.734375q-0.890625 0 -1.5 0.71875q-0.609375 0.703125 -0.609375 2.109375z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gocon-tokyo/concurrency0.svg b/content/2014/gocon-tokyo/concurrency0.svg
deleted file mode 100644
index 1cab5d7..0000000
--- a/content/2014/gocon-tokyo/concurrency0.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 750.0 446.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l750.0 0l0 446.0l-750.0 0l0 -446.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l750.96063 0l0 446.43045l-750.96063 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l735.33856 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l723.33856 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m731.22046 434.58694l9.076233 -3.3034668l-9.076233 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l0 -427.43307" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l0 -415.43307" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m11.185354 15.850393l-3.3034644 -9.076195l-3.303465 9.076195z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m198.65747 381.08594l330.80316 0l0 37.385834l-330.80316 0z" fill-rule="nonzero"></path><path fill="#000000" d="m270.55606 408.00595l0 -13.59375l5.109375 0q1.546875 0 2.484375 0.40625q0.953125 0.40625 1.484375 1.265625q0.53125 0.859375 0.53125 1.796875q0 0.875 -0.46875 1.65625q-0.46875 0.765625 -1.4375 1.234375q1.234375 0.359375 1.890625 1.234375q0.671875 0.875 0.671875 2.0625q0 0.953125 -0.40625 1.78125q-0.390625 0.8125 -0.984375 1.265625q-0.59375 0.4375 -1.5 0.671875q-0.890625 0.21875 -2.1875 0.21875l-5.1875 0zm1.796875 -7.890625l2.9375 0q1.203125 0 1.71875 -0.15625q0.6875 -0.203125 1.03125 -0.671875q0.359375 -0.46875 0.359375 -1.1875q0 -0.671875 -0.328125 -1.1875q-0.328125 -0.515625 -0.9375 -0.703125q-0.59375 -0.203125 -2.0625 -0.203125l-2.71875 0l0 4.109375zm0 6.28125l3.390625 0q0.875 0 1.21875 -0.0625q0.625 -0.109375 1.046875 -0.359375q0.421875 -0.265625 0.6875 -0.765625q0.265625 -0.5 0.265625 -1.140625q0 -0.765625 -0.390625 -1.328125q-0.390625 -0.5625 -1.078125 -0.78125q-0.6875 -0.234375 -1.984375 -0.234375l-3.15625 0l0 4.671875zm17.256073 -1.5625l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm15.547577 4.65625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.531982 4.9375l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm7.578827 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.5426941 -10.1875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.535431 0l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm11.230194 0l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm3.891327 0l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.6135864 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm9.257233 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm13.65625 1.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.5114136 1.5l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0944824 -6.75l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm3.832306 0.8125l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm9.297607 5.109375l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.09375 0 1.890625 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.546875 -0.578125 -1.53125 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm13.147858 -2.109375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm15.672607 4.921875l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016327 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.8825555 368.01315l0 -299.0551l41.322834 0l0 299.0551z" fill-rule="nonzero"></path><path fill="#000000" d="m34.802555 303.5668l-13.593752 0l0 -9.84375l1.59375 0l0 8.046875l4.171875 0l0 -7.53125l1.59375 0l0 7.53125l4.625002 0l0 -8.359375l1.609375 0l0 10.15625zm0 -12.599823l-8.546877 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546877 0l0 1.65625zm0 -5.1832886l-8.546877 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546877 0l0 1.65625zm-11.687502 -4.792694l-1.90625 0l0 -1.671875l1.90625 0l0 1.671875zm11.687502 0l-9.859377 0l0 -1.671875l9.859377 0l0 1.671875zm-3.609377 -10.566681l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm-8.078125 -2.90625l-1.90625 0l0 -1.671875l1.90625 0l0 1.671875zm11.687502 0l-9.859377 0l0 -1.671875l9.859377 0l0 1.671875zm-3.171877 -10.879211l0.21875 -1.71875q1.5000019 0.40625 2.343752 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.328125 3.421875q-1.328125 1.265625 -3.734377 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484377 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.5468769 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm5.875002 -9.110092l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-1.5 -14.031967l1.484375 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.75 0.703125q-0.46875 0.203125 -1.9843769 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.4375 0l-1.0 -1.65625l3.4375 0l0 -1.6875l1.3125 0l0 1.6875l5.750002 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm-2.109377 -13.147858l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm-1.3125 -2.265625q-2.734375 0 -4.0625 -1.53125q-1.09375 -1.265625 -1.09375 -3.09375q0 -2.03125 1.34375 -3.3125q1.328125 -1.296875 3.671875 -1.296875q1.90625 0 3.000002 0.578125q1.078125 0.5625 1.6875 1.65625q0.59375 1.078125 0.59375 2.375q0 2.0625 -1.328125 3.34375q-1.328125 1.28125 -3.812502 1.28125zm0 -1.71875q1.890625 0 2.828127 -0.828125q0.9375 -0.828125 0.9375 -2.078125q0 -1.25 -0.9375 -2.0625q-0.9531269 -0.828125 -2.890627 -0.828125q-1.828125 0 -2.765625 0.828125q-0.9375 0.828125 -0.9375 2.0625q0 1.25 0.9375 2.078125q0.9375 0.828125 2.828125 0.828125zm4.921877 -9.281952l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-3.609377 -16.813232l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm3.609377 -9.34375l-1.453125 0q1.671875 1.140625 1.671875 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625019 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.7656269 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.6718769 -0.28125 -1.9375019 -0.28125l-5.28125 0l0 -1.671875l9.859377 0l0 1.5zm0 -3.906952l-9.859377 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.156252 0l0 1.671875zm0 -6.212677l-9.859377 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.156252 0l0 1.671875zm-3.171877 -12.978302l0.21875 -1.71875q1.5000019 0.40625 2.343752 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.328125 3.421875q-1.328125 1.265625 -3.734377 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484377 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.5468769 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm5.875002 -9.110107l-9.859377 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062502 0l0 1.671875l-6.000002 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375002 0l0 1.671875zm-3.609377 -16.813202l0.21875 -1.640625q1.6875019 0.265625 2.656252 1.375q0.953125 1.109375 0.953125 2.734375q0 2.015625 -1.3125 3.25q-1.328125 1.21875 -3.796877 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890627 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.8593769 -0.84375zm7.406252 -2.8125l-1.5625 0.171875q0.140625 -0.546875 0.140625 -0.953125q0 -0.546875 -0.1875 -0.875q-0.1875 -0.34375 -0.515625 -0.5625q-0.25 -0.15625 -1.25 -0.5q-0.140625 -0.046875 -0.40625 -0.15625l-9.875002 3.734375l0 -1.796875l5.71875 -2.046875q1.078125 -0.40625 2.281252 -0.71875q-1.1562519 -0.28125 -2.250002 -0.6875l-5.75 -2.09375l0 -1.671875l10.031252 3.75q1.625 0.59375 2.234375 0.9375q0.828125 0.4375 1.203125 1.015625q0.390625 0.578125 0.390625 1.375q0 0.484375 -0.203125 1.078125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m11.692741 31.321877l0 0c0 -11.854553 14.016661 -21.464567 31.307087 -21.464567l0 0c17.290424 0 31.307087 9.610014 31.307087 21.464567l0 0c0 11.854553 -14.016663 21.464565 -31.307087 21.464565l0 0c-17.290426 0 -31.307087 -9.610012 -31.307087 -21.464565z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.692741 31.321877l0 0c0 -11.854553 14.016661 -21.464567 31.307087 -21.464567l0 0c17.290424 0 31.307087 9.610014 31.307087 21.464567l0 0c0 11.854553 -14.016663 21.464565 -31.307087 21.464565l0 0c-17.290426 0 -31.307087 -9.610012 -31.307087 -21.464565z" fill-rule="nonzero"></path><path fill="#000000" d="m46.52019 32.63625l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890623q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.3593731 0.390625 2.390623q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m62.79527 31.322834l0 0c0 -11.854553 15.715862 -21.464565 35.10236 -21.464565l0 0c19.386505 0 35.10237 9.610013 35.10237 21.464565l0 0c0 11.854553 -15.715866 21.46457 -35.10237 21.46457l0 0c-19.386497 0 -35.10236 -9.610016 -35.10236 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m62.79527 31.322834l0 0c0 -11.854553 15.715862 -21.464565 35.10236 -21.464565l0 0c19.386505 0 35.10237 9.610013 35.10237 21.464565l0 0c0 11.854553 -15.715866 21.46457 -35.10237 21.46457l0 0c-19.386497 0 -35.10236 -9.610016 -35.10236 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m92.85897 32.637207l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890623q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.3593731 0.390625 2.390623q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm5.5217743 2.03125l0 -2.953123l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953123l-1.25 0zm8.559021 0l0 -2.953123l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953123l-1.25 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m42.879677 405.65063l0 0c0 -11.854553 18.00732 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m42.879677 405.65063l0 0c0 -11.854553 18.00732 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m67.16472 410.73065l0 -10.734375l4.765625 0q1.4375 0 2.1875 0.296875q0.75 0.28125 1.1875 1.015625q0.453125 0.734375 0.453125 1.609375q0 1.140625 -0.75 1.9375q-0.734375 0.78125 -2.28125 0.984375q0.5625 0.28125 0.859375 0.546875q0.625 0.5625 1.1875 1.421875l1.859375 2.921875l-1.78125 0l-1.421875 -2.234375q-0.625 -0.96875 -1.03125 -1.46875q-0.40625 -0.515625 -0.71875 -0.71875q-0.3125 -0.21875 -0.640625 -0.296875q-0.25 -0.046875 -0.796875 -0.046875l-1.65625 0l0 4.765625l-1.421875 0zm1.421875 -6.0l3.0625 0q0.96875 0 1.515625 -0.203125q0.5625 -0.203125 0.84375 -0.640625q0.28125 -0.4375 0.28125 -0.96875q0 -0.75 -0.5625 -1.234375q-0.546875 -0.5 -1.734375 -0.5l-3.40625 0l0 3.546875zm14.084274 6.0l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828125l1.328125 0l0 4.3125q0 1.03125 0.078125 1.390625q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.53125l0 -4.171875l1.3125 0l0 7.78125l-1.171875 0zm4.260483 0l-1.21875 0l0 -10.734375l1.3125 0l0 3.828125q0.84375 -1.046875 2.140625 -1.046875q0.71875 0 1.359375 0.296875q0.640625 0.28125 1.046875 0.8125q0.421875 0.515625 0.65625 1.265625q0.234375 0.734375 0.234375 1.578125q0 2.0 -1.0 3.09375q-0.984375 1.078125 -2.375 1.078125q-1.375 0 -2.15625 -1.140625l0 0.96875zm-0.015625 -3.953125q0 1.40625 0.390625 2.03125q0.609375 1.015625 1.671875 1.015625q0.875 0 1.5 -0.75q0.625 -0.75 0.625 -2.234375q0 -1.53125 -0.609375 -2.25q-0.59375 -0.734375 -1.453125 -0.734375q-0.859375 0 -1.5 0.75q-0.625 0.75 -0.625 2.171875zm6.901108 6.953125l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m62.79522 366.1942l0 0c0 -11.854553 21.299965 -21.46457 47.5748 -21.46457l0 0c26.274834 0 47.574806 9.610016 47.574806 21.46457l0 0c0 11.854553 -21.299973 21.46457 -47.574806 21.46457l0 0c-26.274834 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m62.79522 366.1942l0 0c0 -11.854553 21.299965 -21.46457 47.5748 -21.46457l0 0c26.274834 0 47.574806 9.610016 47.574806 21.46457l0 0c0 11.854553 -21.299973 21.46457 -47.574806 21.46457l0 0c-26.274834 0 -47.5748 -9.610016 -47.5748 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m88.711754 371.27423l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm8.134979 8.625l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625zm10.265625 -4.171875l0.1875 1.15625q-0.5625 0.125 -1.0 0.125q-0.71875 0 -1.125 -0.234375q-0.390625 -0.234375 -0.546875 -0.59375q-0.15625 -0.375 -0.15625 -1.5625l0 -4.46875l-0.96875 0l0 -1.03125l0.96875 0l0 -1.921875l1.3125 -0.796875l0 2.71875l1.328125 0l0 1.03125l-1.328125 0l0 4.546875q0 0.5625 0.0625 0.734375q0.078125 0.15625 0.234375 0.25q0.15625 0.09375 0.4375 0.09375q0.234375 0 0.59375 -0.046875zm1.1813507 1.171875l0 -10.734375l1.328125 0l0 3.84375q0.921875 -1.0625 2.328125 -1.0625q0.859375 0 1.5 0.34375q0.640625 0.34375 0.90625 0.9375q0.28125 0.59375 0.28125 1.75l0 4.921875l-1.328125 0l0 -4.921875q0 -1.0 -0.421875 -1.4375q-0.421875 -0.453125 -1.21875 -0.453125q-0.578125 0 -1.09375 0.296875q-0.515625 0.296875 -0.734375 0.828125q-0.21875 0.515625 -0.21875 1.4375l0 4.25l-1.328125 0zm7.666733 -3.890625q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276108 3.890625l0 -7.78125l1.1875 0l0 1.109375q0.8593826 -1.28125 2.4843826 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.4531326 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m12.472783 340.2766l0 0c0 -11.854553 18.007317 -21.464539 40.220474 -21.464539l0 0c22.213154 0 40.22047 9.609985 40.22047 21.464539l0 0c0 11.854553 -18.007317 21.46457 -40.22047 21.46457l0 0c-22.213156 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m12.472783 340.2766l0 0c0 -11.854553 18.007317 -21.464539 40.220474 -21.464539l0 0c22.213154 0 40.22047 9.609985 40.22047 21.464539l0 0c0 11.854553 -18.007317 21.46457 -40.22047 21.46457l0 0c-22.213156 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m44.57889 342.30975l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm7.5625 -0.40625l1.34375 -0.109375q0.09375 0.796875 0.4375 1.3125q0.359375 0.515625 1.078125 0.84375q0.734375 0.3125 1.65625 0.3125q0.8125 0 1.4375 -0.234375q0.625 -0.25 0.921875 -0.671875q0.3125 -0.421875 0.3125 -0.921875q0 -0.5 -0.296875 -0.875q-0.296875 -0.375 -0.96875 -0.640625q-0.4375 -0.15625 -1.921875 -0.515625q-1.46875 -0.359375 -2.0625 -0.671875q-0.765625 -0.40625 -1.15625 -1.0q-0.375 -0.59375 -0.375 -1.34375q0 -0.8125 0.453125 -1.515625q0.46875 -0.703125 1.359375 -1.0625q0.890625 -0.375 1.96875 -0.375q1.203125 0 2.109375 0.390625q0.90625 0.375 1.390625 1.125q0.5 0.75 0.546875 1.6875l-1.375 0.109375q-0.109375 -1.015625 -0.75 -1.53125q-0.625 -0.53125 -1.859375 -0.53125q-1.28125 0 -1.875 0.484375q-0.59375 0.46875 -0.59375 1.125q0 0.578125 0.421875 0.953125q0.40625 0.375 2.140625 0.765625q1.734375 0.390625 2.375 0.6875q0.9375 0.4375 1.375 1.109375q0.453125 0.65625 0.453125 1.515625q0 0.859375 -0.5 1.625q-0.484375 0.75 -1.40625 1.171875q-0.90625 0.421875 -2.0625 0.421875q-1.453125 0 -2.4375 -0.421875q-0.984375 -0.4375 -1.546875 -1.28125q-0.5625 -0.859375 -0.59375 -1.9375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m28.561682 62.385826l0 0c0 -11.854553 16.710005 -21.464565 37.32283 -21.464565l0 0c20.612839 0 37.322838 9.610012 37.322838 21.464565l0 0c0 11.854553 -16.71 21.46457 -37.322838 21.46457l0 0c-20.612827 0 -37.32283 -9.610016 -37.32283 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m28.561682 62.385826l0 0c0 -11.854553 16.710005 -21.464565 37.32283 -21.464565l0 0c20.612839 0 37.322838 9.610012 37.322838 21.464565l0 0c0 11.854553 -16.71 21.46457 -37.322838 21.46457l0 0c-20.612827 0 -37.32283 -9.610016 -37.32283 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m50.842785 64.41895l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390629l1.40625 0l0 7.312504q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm12.953125 2.09375q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.4687538 0.6875 -0.7500038q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.6249962 0.234375 0.9218712 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.7500038q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.20312119 -0.40625 -0.2656212 -0.953125zm-0.109375 -2.9531288q-0.71875 0.296875 -2.15625 0.5000038q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.4843788zm5.354229 3.9062538l-2.96875 -7.781254l1.390625 0l1.671875 4.656254q0.265625 0.765625 0.5 1.578125q0.171875 -0.625 0.484375 -1.484375l1.734375 -4.750004l1.359375 0l-2.953125 7.781254l-1.21875 0zm10.234375 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.4687538 0.6875 -0.7500038q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.7500038q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.9531288q-0.71875 0.296875 -2.15625 0.5000038q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.4843788z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m7.8828444 376.3685l0 0c0 -11.854553 18.007318 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.8828444 376.3685l0 0c0 -11.854553 18.007318 -21.46457 40.220474 -21.46457l0 0c22.21315 0 40.220474 9.610016 40.220474 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.220474 21.46457l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m36.227814 381.4485l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm13.509979 3.125l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.135483 4.640625l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.8650208 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m634.56696 230.72966l0 0c0 -11.854553 21.299927 -21.46457 47.574768 -21.46457l0 0c26.274841 0 47.57483 9.610016 47.57483 21.46457l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.274841 0 -47.574768 -9.610016 -47.574768 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m634.56696 230.72966l0 0c0 -11.854553 21.299927 -21.46457 47.574768 -21.46457l0 0c26.274841 0 47.57483 9.610016 47.57483 21.46457l0 0c0 11.854553 -21.299988 21.46457 -47.57483 21.46457l0 0c-26.274841 0 -47.574768 -9.610016 -47.574768 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m662.14636 235.80966l0 -10.734375l7.765625 0l0 1.265625l-6.34375 0l0 3.28125l5.9375 0l0 1.265625l-5.9375 0l0 3.65625l6.59375 0l0 1.265625l-8.015625 0zm9.556885 0l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.86499 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0zm8.36554 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm3.182373 3.90625l0 -7.78125l1.1875 0l0 1.109375q0.859375 -1.28125 2.484375 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.453125 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0zm7.916687 0.640625l1.28125 0.1875q0.078125 0.59375 0.4375 0.875q0.5 0.359375 1.34375 0.359375q0.921875 0 1.421875 -0.375q0.5 -0.359375 0.671875 -1.015625q0.09375 -0.40625 0.09375 -1.6875q-0.859375 1.015625 -2.15625 1.015625q-1.609375 0 -2.484375 -1.15625q-0.875 -1.15625 -0.875 -2.78125q0 -1.109375 0.40625 -2.046875q0.40625 -0.9375 1.15625 -1.453125q0.765625 -0.515625 1.8125 -0.515625q1.375 0 2.265625 1.109375l0 -0.9375l1.21875 0l0 6.71875q0 1.828125 -0.375 2.578125q-0.375 0.765625 -1.171875 1.203125q-0.796875 0.4375 -1.96875 0.4375q-1.390625 0 -2.25 -0.625q-0.859375 -0.625 -0.828125 -1.890625zm1.09375 -4.671875q0 1.53125 0.59375 2.234375q0.609375 0.703125 1.53125 0.703125q0.90625 0 1.515625 -0.6875q0.625 -0.703125 0.625 -2.203125q0 -1.421875 -0.640625 -2.140625q-0.625 -0.734375 -1.515625 -0.734375q-0.890625 0 -1.5 0.71875q-0.609375 0.703125 -0.609375 2.109375z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gocon-tokyo/concurrent.jpg b/content/2014/gocon-tokyo/concurrent.jpg
deleted file mode 100644
index 132d190..0000000
--- a/content/2014/gocon-tokyo/concurrent.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/contig-stack.png b/content/2014/gocon-tokyo/contig-stack.png
deleted file mode 100644
index 04559a4..0000000
--- a/content/2014/gocon-tokyo/contig-stack.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/docker.png b/content/2014/gocon-tokyo/docker.png
deleted file mode 100644
index 9af27aa..0000000
--- a/content/2014/gocon-tokyo/docker.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/drone.png b/content/2014/gocon-tokyo/drone.png
deleted file mode 100644
index 591f830..0000000
--- a/content/2014/gocon-tokyo/drone.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/funfast-nogo.svg b/content/2014/gocon-tokyo/funfast-nogo.svg
deleted file mode 100644
index ca8f7d8..0000000
--- a/content/2014/gocon-tokyo/funfast-nogo.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 750.0 446.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l750.0 0l0 446.0l-750.0 0l0 -446.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l750.96063 0l0 446.43045l-750.96063 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l735.33856 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l723.33856 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m731.22046 434.58694l9.076233 -3.3034668l-9.076233 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l0 -427.43307" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l0 -415.43307" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m11.185354 15.850393l-3.3034644 -9.076195l-3.303465 9.076195z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m198.65747 381.08594l330.80316 0l0 37.385834l-330.80316 0z" fill-rule="nonzero"></path><path fill="#000000" d="m250.53217 408.00595l0 -13.59375l9.171875 0l0 1.59375l-7.375 0l0 4.21875l6.375 0l0 1.609375l-6.375 0l0 6.171875l-1.796875 0zm17.520996 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm3.406952 2.0l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm13.65625 1.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.9645691 1.5l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm16.679108 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.516327 5.875l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm5.183319 0l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7926636 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.566711 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 -8.078125l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879181 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm7.1166077 1.5l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.152069 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.266327 4.921875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm17.849121 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281952 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 3.78125l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.313232 4.875l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm7.578827 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277069 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094452 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.556427 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m17.257883 377.96854l0 -299.0551l41.322838 0l0 299.0551z" fill-rule="nonzero"></path><path fill="#000000" d="m44.177883 312.42575l-13.593752 0l0 -9.171875l1.5937519 0l0 7.375l4.21875 0l0 -6.375l1.609375 0l0 6.375l6.171875 0l0 1.796875zm-1.21875 -17.520966q0.796875 0.9375 1.125 1.796875q0.3125 0.859375 0.3125 1.84375q0 1.609375 -0.78125 2.484375q-0.796875 0.875 -2.03125 0.875q-0.734375 0 -1.328125 -0.328125q-0.59375 -0.328125 -0.953125 -0.859375q-0.359375 -0.53125 -0.546875 -1.203125q-0.140625 -0.5 -0.25 -1.484375q-0.25 -2.03125 -0.578125 -2.984375q-0.34375 0 -0.4375 0q-1.015625 0 -1.4375 0.46875q-0.5625 0.640625 -0.5625 1.90625q0 1.171875 0.40625 1.734375q0.40625 0.5625 1.46875 0.828125l-0.234375 1.640625q-1.046875 -0.234375 -1.6875 -0.734375q-0.640625 -0.515625 -0.984375 -1.46875q-0.359375 -0.96875 -0.359375 -2.25q0 -1.265625 0.296875 -2.046875q0.296875 -0.78125 0.75 -1.15625q0.453125 -0.375 1.140625 -0.515625q0.421875 -0.09375 1.53125 -0.09375l2.234375 0q2.328125 0 2.953125 -0.09375q0.609375 -0.109375 1.171875 -0.4375l0 1.75q-0.515625 0.265625 -1.21875 0.328125zm-3.71875 0.140625q0.359375 0.90625 0.625 2.734375q0.140625 1.03125 0.328125 1.453125q0.1875 0.421875 0.546875 0.65625q0.359375 0.234375 0.796875 0.234375q0.671875 0 1.125 -0.5q0.4375 -0.515625 0.4375 -1.484375q0 -0.96875 -0.421875 -1.71875q-0.4375 -0.75 -1.15625 -1.109375q-0.578125 -0.265625 -1.671875 -0.265625l-0.609375 0zm2.0 -3.4069824l-0.265625 -1.65625q1.0 -0.140625 1.53125 -0.765625q0.515625 -0.640625 0.515625 -1.78125q0 -1.15625 -0.46875 -1.703125q-0.46875 -0.5625 -1.09375 -0.5625q-0.5625 0 -0.890625 0.484375q-0.21875 0.34375 -0.5625 1.703125q-0.46875 1.84375 -0.796875 2.5625q-0.34375 0.703125 -0.9375 1.078125q-0.609375 0.359375 -1.328125 0.359375q-0.65625 0 -1.21875 -0.296875q-0.5625 -0.3125 -0.9375 -0.828125q-0.28125 -0.390625 -0.484375 -1.0625q-0.203125 -0.671875 -0.203125 -1.4375q0 -1.171875 0.34375 -2.046875q0.328125 -0.875 0.90625 -1.28125q0.5625 -0.421875 1.515625 -0.578125l0.21875 1.625q-0.75 0.109375 -1.171875 0.65625q-0.4375 0.53125 -0.4375 1.5q0 1.15625 0.390625 1.640625q0.375 0.484375 0.875 0.484375q0.328125 0 0.59375 -0.203125q0.265625 -0.203125 0.4375 -0.640625q0.09375 -0.25 0.4375 -1.46875q0.46875 -1.765625 0.765625 -2.46875q0.296875 -0.703125 0.875 -1.09375q0.578125 -0.40625 1.4375 -0.40625q0.828125 0 1.578125 0.484375q0.734375 0.484375 1.140625 1.40625q0.390625 0.921875 0.390625 2.078125q0 1.921875 -0.796875 2.9375q-0.796875 1.0 -2.359375 1.28125zm1.4375 -13.65625l1.484375 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.75 0.703125q-0.46875 0.203125 -1.984375 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.437502 0l-1.0 -1.65625l3.437502 0l0 -1.6875l1.3125 0l0 1.6875l5.75 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm1.5 -1.9645386l-1.90625 0l0 -1.90625l1.90625 0q1.046875 0 1.6875 0.375q0.65625 0.375 1.0 1.171875l-0.71875 0.46875q-0.21875 -0.53125 -0.671875 -0.78125q-0.453125 -0.25 -1.296875 -0.28125l0 0.953125zm0 -10.335358l-8.546875 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.4687519 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.3281269 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546875 0l0 1.65625zm0 -11.230179l-1.453125 0q1.671875 1.140625 1.671875 3.1249847q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.4062347q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859375 0l0 1.5zm0 -3.9225922l-9.859375 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.0625 0l0 1.671875l-6.0 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375 0l0 1.671875zm0 -15.965271l-8.546875 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.4687519 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.3281269 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546875 0l0 1.65625zm-4.921875 -4.152054q-2.734375 0 -4.0625 -1.53125q-1.09375 -1.265625 -1.09375 -3.09375q0 -2.03125 1.34375 -3.3125q1.328125 -1.296875 3.671875 -1.296875q1.90625 0 3.0 0.578125q1.078125 0.5625 1.6875 1.65625q0.59375 1.078125 0.59375 2.375q0 2.0625 -1.328125 3.34375q-1.328125 1.28125 -3.8125 1.28125zm0 -1.71875q1.890625 0 2.828125 -0.828125q0.9375 -0.828125 0.9375 -2.078125q0 -1.25 -0.9375 -2.0625q-0.953125 -0.828125 -2.890625 -0.828125q-1.828125 0 -2.765625 0.828125q-0.9375 0.828125 -0.9375 2.0625q0 1.25 0.9375 2.078125q0.9375 0.828125 2.828125 0.828125zm4.921875 -9.266342l-9.859375 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.15625 0l0 1.671875zm0 -11.411606l-13.593752 0l0 -1.671875l4.875002 0q-1.359375 -1.171875 -1.359375 -2.953125q0 -1.09375 0.4375 -1.890625q0.421875 -0.8125 1.1875 -1.15625q0.765625 -0.359375 2.203125 -0.359375l6.25 0l0 1.671875l-6.25 0q-1.25 0 -1.8125 0.546875q-0.578125 0.546875 -0.578125 1.53125q0 0.75 0.390625 1.40625q0.375 0.640625 1.046875 0.921875q0.65625 0.28125 1.8125 0.28125l5.390625 0l0 1.671875zm0 -16.828842l-1.453125 0q1.671875 1.140625 1.671875 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859375 0l0 1.5zm0 -3.9225922l-9.859375 0l0 -1.5l1.390625 0q-0.71875 -0.453125 -1.15625 -1.21875q-0.453125 -0.78125 -0.453125 -1.765625q0 -1.09375 0.453125 -1.796875q0.453125 -0.703125 1.28125 -0.984375q-1.734375 -1.171875 -1.734375 -3.046875q0 -1.46875 0.8125 -2.25q0.8125 -0.796875 2.5 -0.796875l6.765625 0l0 1.671875l-6.203125 0q-1.0 0 -1.4375 0.15625q-0.453125 0.15625 -0.71875 0.59375q-0.265625 0.421875 -0.265625 1.0q0 1.03125 0.6875 1.71875q0.6875 0.6875 2.21875 0.6875l5.71875 0l0 1.671875l-6.40625 0q-1.109375 0 -1.65625 0.40625q-0.5625 0.40625 -0.5625 1.34375q0 0.703125 0.375 1.3125q0.359375 0.59375 1.078125 0.859375q0.71875 0.265625 2.0625 0.265625l5.109375 0l0 1.671875zm-1.21875 -21.978302q0.796875 0.9375 1.125 1.796875q0.3125 0.859375 0.3125 1.84375q0 1.609375 -0.78125 2.484375q-0.796875 0.875 -2.03125 0.875q-0.734375 0 -1.328125 -0.328125q-0.59375 -0.328125 -0.953125 -0.859375q-0.359375 -0.53125 -0.546875 -1.203125q-0.140625 -0.5 -0.25 -1.484375q-0.25 -2.03125 -0.578125 -2.984375q-0.34375 0 -0.4375 0q-1.015625 0 -1.4375 0.46875q-0.5625 0.640625 -0.5625 1.90625q0 1.171875 0.40625 1.734375q0.40625 0.5625 1.46875 0.828125l-0.234375 1.640625q-1.046875 -0.234375 -1.6875 -0.734375q-0.640625 -0.515625 -0.984375 -1.46875q-0.359375 -0.96875 -0.359375 -2.25q0 -1.265625 0.296875 -2.046875q0.296875 -0.78125 0.75 -1.15625q0.453125 -0.375 1.140625 -0.515625q0.421875 -0.09375 1.53125 -0.09375l2.234375 0q2.328125 0 2.953125 -0.09375q0.609375 -0.109375 1.171875 -0.4375l0 1.75q-0.515625 0.265625 -1.21875 0.328125zm-3.71875 0.140625q0.359375 0.90625 0.625 2.734375q0.140625 1.03125 0.328125 1.453125q0.1875 0.421875 0.546875 0.65625q0.359375 0.234375 0.796875 0.234375q0.671875 0 1.125 -0.5q0.4375 -0.515625 0.4375 -1.484375q0 -0.96875 -0.421875 -1.71875q-0.4375 -0.75 -1.15625 -1.109375q-0.578125 -0.265625 -1.671875 -0.265625l-0.609375 0zm4.9375 -4.078842l-9.859375 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.0625 0l0 1.671875l-6.0 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375 0l0 1.671875zm-2.9375 -9.703842l-0.265625 -1.65625q1.0 -0.140625 1.53125 -0.765625q0.515625 -0.640625 0.515625 -1.78125q0 -1.15625 -0.46875 -1.703125q-0.46875 -0.5625 -1.09375 -0.5625q-0.5625 0 -0.890625 0.484375q-0.21875 0.34375 -0.5625 1.703125q-0.46875 1.84375 -0.796875 2.5625q-0.34375 0.703125 -0.9375 1.078125q-0.609375 0.359375 -1.328125 0.359375q-0.65625 0 -1.21875 -0.296875q-0.5625 -0.3125 -0.9375 -0.828125q-0.28125 -0.390625 -0.484375 -1.0625q-0.203125 -0.671875 -0.203125 -1.4375q0 -1.171875 0.34375 -2.046875q0.328125 -0.875 0.90625 -1.28125q0.5625 -0.421875 1.515625 -0.578125l0.21875 1.625q-0.75 0.109375 -1.171875 0.65625q-0.4375 0.53125 -0.4375 1.5q0 1.15625 0.390625 1.640625q0.375 0.484375 0.875 0.484375q0.328125 0 0.59375 -0.203125q0.265625 -0.203125 0.4375 -0.640625q0.09375 -0.25 0.4375 -1.46875q0.46875 -1.765625 0.765625 -2.46875q0.296875 -0.703125 0.875 -1.09375q0.578125 -0.40625 1.4375 -0.40625q0.828125 0 1.578125 0.484375q0.734375 0.484375 1.140625 1.40625q0.390625 0.921875 0.390625 2.078125q0 1.921875 -0.796875 2.9375q-0.796875 1.0 -2.359375 1.28125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m671.5313 399.77856l0 0c0 -11.854553 14.016663 -21.46457 31.307129 -21.46457l0 0c17.290405 0 31.307068 9.610016 31.307068 21.46457l0 0c0 11.854553 -14.016663 21.46457 -31.307068 21.46457l0 0c-17.290466 0 -31.307129 -9.610016 -31.307129 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m671.5313 399.77856l0 0c0 -11.854553 14.016663 -21.46457 31.307129 -21.46457l0 0c17.290405 0 31.307068 9.610016 31.307068 21.46457l0 0c0 11.854553 -14.016663 21.46457 -31.307068 21.46457l0 0c-17.290466 0 -31.307129 -9.610016 -31.307129 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m706.35876 401.09296l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m653.7063 346.8091l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m653.7063 346.8091l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m688.8881 348.12347l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm5.5217896 2.03125l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0zm8.559021 0l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m23.531908 25.329119l0 0c0 -11.854553 18.007318 -21.464567 40.220474 -21.464567l0 0c22.213158 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007317 21.464567 -40.220474 21.464567l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m23.531908 25.329119l0 0c0 -11.854553 18.007318 -21.464567 40.220474 -21.464567l0 0c22.213158 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007317 21.464567 -40.220474 21.464567l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m47.816948 30.409119l0 -10.734375l4.765625 0q1.4375 0 2.1875 0.296875q0.75 0.28125 1.1875 1.015625q0.453125 0.734375 0.453125 1.609375q0 1.140625 -0.75 1.9375q-0.734375 0.78125 -2.28125 0.984375q0.5625 0.28125 0.859375 0.546875q0.625 0.5625 1.1875 1.421875l1.859375 2.921875l-1.78125 0l-1.421875 -2.234375q-0.625 -0.96875 -1.03125 -1.46875q-0.40625 -0.515625 -0.71875 -0.71875q-0.3125 -0.21875 -0.640625 -0.296875q-0.25 -0.046875 -0.796875 -0.046875l-1.65625 0l0 4.765625l-1.421875 0zm1.421875 -6.0l3.0625 0q0.96875 0 1.515625 -0.203125q0.5625 -0.203125 0.84375 -0.640625q0.28125 -0.4375 0.28125 -0.96875q0 -0.75 -0.5625 -1.234375q-0.546875 -0.5 -1.734375 -0.5l-3.40625 0l0 3.546875zm14.084274 6.0l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828125l1.328125 0l0 4.3125q0 1.03125 0.078125 1.390625q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.53125l0 -4.171875l1.3125 0l0 7.78125l-1.171875 0zm4.260483 0l-1.21875 0l0 -10.734375l1.3125 0l0 3.828125q0.84375 -1.046875 2.140625 -1.046875q0.71875 0 1.359375 0.296875q0.640625 0.28125 1.046875 0.8125q0.421875 0.515625 0.65625 1.265625q0.234375 0.734375 0.234375 1.578125q0 2.0 -1.0 3.09375q-0.984375 1.078125 -2.375 1.078125q-1.375 0 -2.15625 -1.140625l0 0.96875zm-0.015625 -3.953125q0 1.40625 0.390625 2.03125q0.609375 1.015625 1.671875 1.015625q0.875 0 1.5 -0.75q0.625 -0.75 0.625 -2.234375q0 -1.53125 -0.609375 -2.25q-0.59375 -0.734375 -1.453125 -0.734375q-0.859375 0 -1.5 0.75q-0.625 0.75 -0.625 2.171875zm6.901108 6.953125l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m78.1148 25.329119l0 0c0 -11.854553 23.245941 -21.464567 51.921257 -21.464567l0 0c28.675323 0 51.921265 9.610014 51.921265 21.464567l0 0c0 11.854551 -23.245941 21.464567 -51.921265 21.464567l0 0c-28.675316 0 -51.921257 -9.610016 -51.921257 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m78.1148 25.329119l0 0c0 -11.854553 23.245941 -21.464567 51.921257 -21.464567l0 0c28.675323 0 51.921265 9.610014 51.921265 21.464567l0 0c0 11.854551 -23.245941 21.464567 -51.921265 21.464567l0 0c-28.675316 0 -51.921257 -9.610016 -51.921257 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m108.37779 30.409119l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm8.134979 8.625l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625zm10.265625 -4.171875l0.1875 1.15625q-0.5625 0.125 -1.0 0.125q-0.71875 0 -1.125 -0.234375q-0.390625 -0.234375 -0.546875 -0.59375q-0.15625 -0.375 -0.15625 -1.5625l0 -4.46875l-0.96875 0l0 -1.03125l0.96875 0l0 -1.921875l1.3125 -0.796875l0 2.71875l1.328125 0l0 1.03125l-1.328125 0l0 4.546875q0 0.5625 0.0625 0.734375q0.078125 0.15625 0.234375 0.25q0.15625 0.09375 0.4375 0.09375q0.234375 0 0.59375 -0.046875zm1.1813507 1.171875l0 -10.734375l1.328125 0l0 3.84375q0.921875 -1.0625 2.328125 -1.0625q0.859375 0 1.5 0.34375q0.640625 0.34375 0.90625 0.9375q0.28125 0.59375 0.28125 1.75l0 4.921875l-1.328125 0l0 -4.921875q0 -1.0 -0.421875 -1.4375q-0.421875 -0.453125 -1.21875 -0.453125q-0.578125 0 -1.09375 0.296875q-0.515625 0.296875 -0.734375 0.828125q-0.21875 0.515625 -0.21875 1.4375l0 4.25l-1.328125 0zm7.666733 -3.890625q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276108 3.890625l0 -7.78125l1.1875 0l0 1.109375q0.859375 -1.28125 2.484375 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.453125 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m275.7274 25.329119l0 0c0 -11.854553 18.007294 -21.464567 40.22046 -21.464567l0 0c22.213165 0 40.22049 9.610014 40.22049 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.22049 21.464567l0 0c-22.213165 0 -40.22046 -9.610016 -40.22046 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m275.7274 25.329119l0 0c0 -11.854553 18.007294 -21.464567 40.22046 -21.464567l0 0c22.213165 0 40.22049 9.610014 40.22049 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.22049 21.464567l0 0c-22.213165 0 -40.22046 -9.610016 -40.22046 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m307.8335 27.362244l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm7.5625 -0.40625l1.34375 -0.109375q0.09375 0.796875 0.4375 1.3125q0.359375 0.515625 1.078125 0.84375q0.734375 0.3125 1.65625 0.3125q0.8125 0 1.4375 -0.234375q0.625 -0.25 0.921875 -0.671875q0.3125 -0.421875 0.3125 -0.921875q0 -0.5 -0.296875 -0.875q-0.296875 -0.375 -0.96875 -0.640625q-0.4375 -0.15625 -1.921875 -0.515625q-1.46875 -0.359375 -2.0625 -0.671875q-0.765625 -0.40625 -1.15625 -1.0q-0.375 -0.59375 -0.375 -1.34375q0 -0.8125 0.453125 -1.515625q0.46875 -0.703125 1.359375 -1.0625q0.890625 -0.375 1.96875 -0.375q1.203125 0 2.109375 0.390625q0.90625 0.375 1.390625 1.125q0.5 0.75 0.546875 1.6875l-1.375 0.109375q-0.109375 -1.015625 -0.75 -1.53125q-0.625 -0.53125 -1.859375 -0.53125q-1.28125 0 -1.875 0.484375q-0.59375 0.46875 -0.59375 1.125q0 0.578125 0.421875 0.953125q0.40625 0.375 2.140625 0.765625q1.734375 0.390625 2.375 0.6875q0.9375 0.4375 1.375 1.109375q0.453125 0.65625 0.453125 1.515625q0 0.859375 -0.5 1.625q-0.484375 0.75 -1.40625 1.171875q-0.90625 0.421875 -2.0625 0.421875q-1.453125 0 -2.4375 -0.421875q-0.984375 -0.4375 -1.546875 -1.28125q-0.5625 -0.859375 -0.59375 -1.9375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m541.4957 217.56654l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m541.4957 217.56654l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m566.6745 219.59967l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm12.953125 2.09375q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm5.354187 3.90625l-2.96875 -7.78125l1.390625 0l1.671875 4.65625q0.265625 0.765625 0.5 1.578125q0.171875 -0.625 0.484375 -1.484375l1.734375 -4.75l1.359375 0l-2.953125 7.78125l-1.21875 0zm10.234375 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m137.07707 25.329119l0 0c0 -11.854553 18.007324 -21.464567 40.220474 -21.464567l0 0c22.21315 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.220474 21.464567l0 0c-22.21315 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m137.07707 25.329119l0 0c0 -11.854553 18.007324 -21.464567 40.220474 -21.464567l0 0c22.21315 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.220474 21.464567l0 0c-22.21315 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m165.42204 30.409119l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm13.509979 3.125l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.135483 4.640625l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.8650208 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gocon-tokyo/funfast.svg b/content/2014/gocon-tokyo/funfast.svg
deleted file mode 100644
index 4e7aad4..0000000
--- a/content/2014/gocon-tokyo/funfast.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 750.0 446.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l750.0 0l0 446.0l-750.0 0l0 -446.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l750.96063 0l0 446.43045l-750.96063 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l735.33856 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l723.33856 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m731.22046 434.58694l9.076233 -3.3034668l-9.076233 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m7.88189 431.28348l0 -427.43307" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.88189 431.28348l0 -415.43307" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m11.185354 15.850393l-3.3034644 -9.076195l-3.303465 9.076195z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m198.65747 381.08594l330.80316 0l0 37.385834l-330.80316 0z" fill-rule="nonzero"></path><path fill="#000000" d="m250.53217 408.00595l0 -13.59375l9.171875 0l0 1.59375l-7.375 0l0 4.21875l6.375 0l0 1.609375l-6.375 0l0 6.171875l-1.796875 0zm17.520996 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm3.406952 2.0l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm13.65625 1.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.9645691 1.5l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm16.679108 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.516327 5.875l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm5.183319 0l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7926636 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.566711 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 -8.078125l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879181 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm7.1166077 1.5l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.152069 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.266327 4.921875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm17.849121 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281952 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 3.78125l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.313232 4.875l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm7.578827 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277069 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094452 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.556427 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m17.257883 377.96854l0 -299.0551l41.322838 0l0 299.0551z" fill-rule="nonzero"></path><path fill="#000000" d="m44.177883 312.42575l-13.593752 0l0 -9.171875l1.5937519 0l0 7.375l4.21875 0l0 -6.375l1.609375 0l0 6.375l6.171875 0l0 1.796875zm-1.21875 -17.520966q0.796875 0.9375 1.125 1.796875q0.3125 0.859375 0.3125 1.84375q0 1.609375 -0.78125 2.484375q-0.796875 0.875 -2.03125 0.875q-0.734375 0 -1.328125 -0.328125q-0.59375 -0.328125 -0.953125 -0.859375q-0.359375 -0.53125 -0.546875 -1.203125q-0.140625 -0.5 -0.25 -1.484375q-0.25 -2.03125 -0.578125 -2.984375q-0.34375 0 -0.4375 0q-1.015625 0 -1.4375 0.46875q-0.5625 0.640625 -0.5625 1.90625q0 1.171875 0.40625 1.734375q0.40625 0.5625 1.46875 0.828125l-0.234375 1.640625q-1.046875 -0.234375 -1.6875 -0.734375q-0.640625 -0.515625 -0.984375 -1.46875q-0.359375 -0.96875 -0.359375 -2.25q0 -1.265625 0.296875 -2.046875q0.296875 -0.78125 0.75 -1.15625q0.453125 -0.375 1.140625 -0.515625q0.421875 -0.09375 1.53125 -0.09375l2.234375 0q2.328125 0 2.953125 -0.09375q0.609375 -0.109375 1.171875 -0.4375l0 1.75q-0.515625 0.265625 -1.21875 0.328125zm-3.71875 0.140625q0.359375 0.90625 0.625 2.734375q0.140625 1.03125 0.328125 1.453125q0.1875 0.421875 0.546875 0.65625q0.359375 0.234375 0.796875 0.234375q0.671875 0 1.125 -0.5q0.4375 -0.515625 0.4375 -1.484375q0 -0.96875 -0.421875 -1.71875q-0.4375 -0.75 -1.15625 -1.109375q-0.578125 -0.265625 -1.671875 -0.265625l-0.609375 0zm2.0 -3.4069824l-0.265625 -1.65625q1.0 -0.140625 1.53125 -0.765625q0.515625 -0.640625 0.515625 -1.78125q0 -1.15625 -0.46875 -1.703125q-0.46875 -0.5625 -1.09375 -0.5625q-0.5625 0 -0.890625 0.484375q-0.21875 0.34375 -0.5625 1.703125q-0.46875 1.84375 -0.796875 2.5625q-0.34375 0.703125 -0.9375 1.078125q-0.609375 0.359375 -1.328125 0.359375q-0.65625 0 -1.21875 -0.296875q-0.5625 -0.3125 -0.9375 -0.828125q-0.28125 -0.390625 -0.484375 -1.0625q-0.203125 -0.671875 -0.203125 -1.4375q0 -1.171875 0.34375 -2.046875q0.328125 -0.875 0.90625 -1.28125q0.5625 -0.421875 1.515625 -0.578125l0.21875 1.625q-0.75 0.109375 -1.171875 0.65625q-0.4375 0.53125 -0.4375 1.5q0 1.15625 0.390625 1.640625q0.375 0.484375 0.875 0.484375q0.328125 0 0.59375 -0.203125q0.265625 -0.203125 0.4375 -0.640625q0.09375 -0.25 0.4375 -1.46875q0.46875 -1.765625 0.765625 -2.46875q0.296875 -0.703125 0.875 -1.09375q0.578125 -0.40625 1.4375 -0.40625q0.828125 0 1.578125 0.484375q0.734375 0.484375 1.140625 1.40625q0.390625 0.921875 0.390625 2.078125q0 1.921875 -0.796875 2.9375q-0.796875 1.0 -2.359375 1.28125zm1.4375 -13.65625l1.484375 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.75 0.703125q-0.46875 0.203125 -1.984375 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.437502 0l-1.0 -1.65625l3.437502 0l0 -1.6875l1.3125 0l0 1.6875l5.75 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm1.5 -1.9645386l-1.90625 0l0 -1.90625l1.90625 0q1.046875 0 1.6875 0.375q0.65625 0.375 1.0 1.171875l-0.71875 0.46875q-0.21875 -0.53125 -0.671875 -0.78125q-0.453125 -0.25 -1.296875 -0.28125l0 0.953125zm0 -10.335358l-8.546875 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.4687519 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.3281269 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546875 0l0 1.65625zm0 -11.230179l-1.453125 0q1.671875 1.140625 1.671875 3.1249847q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.4062347q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859375 0l0 1.5zm0 -3.9225922l-9.859375 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.0625 0l0 1.671875l-6.0 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375 0l0 1.671875zm0 -15.965271l-8.546875 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.4687519 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.3281269 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546875 0l0 1.65625zm-4.921875 -4.152054q-2.734375 0 -4.0625 -1.53125q-1.09375 -1.265625 -1.09375 -3.09375q0 -2.03125 1.34375 -3.3125q1.328125 -1.296875 3.671875 -1.296875q1.90625 0 3.0 0.578125q1.078125 0.5625 1.6875 1.65625q0.59375 1.078125 0.59375 2.375q0 2.0625 -1.328125 3.34375q-1.328125 1.28125 -3.8125 1.28125zm0 -1.71875q1.890625 0 2.828125 -0.828125q0.9375 -0.828125 0.9375 -2.078125q0 -1.25 -0.9375 -2.0625q-0.953125 -0.828125 -2.890625 -0.828125q-1.828125 0 -2.765625 0.828125q-0.9375 0.828125 -0.9375 2.0625q0 1.25 0.9375 2.078125q0.9375 0.828125 2.828125 0.828125zm4.921875 -9.266342l-9.859375 0l0 -1.5l1.5 0q-1.046875 -0.578125 -1.375 -1.0625q-0.34375 -0.484375 -0.34375 -1.078125q0 -0.84375 0.546875 -1.71875l1.546875 0.578125q-0.359375 0.609375 -0.359375 1.234375q0 0.546875 0.328125 0.984375q0.328125 0.421875 0.90625 0.609375q0.890625 0.28125 1.953125 0.28125l5.15625 0l0 1.671875zm0 -11.411606l-13.593752 0l0 -1.671875l4.875002 0q-1.359375 -1.171875 -1.359375 -2.953125q0 -1.09375 0.4375 -1.890625q0.421875 -0.8125 1.1875 -1.15625q0.765625 -0.359375 2.203125 -0.359375l6.25 0l0 1.671875l-6.25 0q-1.25 0 -1.8125 0.546875q-0.578125 0.546875 -0.578125 1.53125q0 0.75 0.390625 1.40625q0.375 0.640625 1.046875 0.921875q0.65625 0.28125 1.8125 0.28125l5.390625 0l0 1.671875zm0 -16.828842l-1.453125 0q1.671875 1.140625 1.671875 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.84375 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859375 0l0 1.5zm0 -3.9225922l-9.859375 0l0 -1.5l1.390625 0q-0.71875 -0.453125 -1.15625 -1.21875q-0.453125 -0.78125 -0.453125 -1.765625q0 -1.09375 0.453125 -1.796875q0.453125 -0.703125 1.28125 -0.984375q-1.734375 -1.171875 -1.734375 -3.046875q0 -1.46875 0.8125 -2.25q0.8125 -0.796875 2.5 -0.796875l6.765625 0l0 1.671875l-6.203125 0q-1.0 0 -1.4375 0.15625q-0.453125 0.15625 -0.71875 0.59375q-0.265625 0.421875 -0.265625 1.0q0 1.03125 0.6875 1.71875q0.6875 0.6875 2.21875 0.6875l5.71875 0l0 1.671875l-6.40625 0q-1.109375 0 -1.65625 0.40625q-0.5625 0.40625 -0.5625 1.34375q0 0.703125 0.375 1.3125q0.359375 0.59375 1.078125 0.859375q0.71875 0.265625 2.0625 0.265625l5.109375 0l0 1.671875zm-1.21875 -21.978302q0.796875 0.9375 1.125 1.796875q0.3125 0.859375 0.3125 1.84375q0 1.609375 -0.78125 2.484375q-0.796875 0.875 -2.03125 0.875q-0.734375 0 -1.328125 -0.328125q-0.59375 -0.328125 -0.953125 -0.859375q-0.359375 -0.53125 -0.546875 -1.203125q-0.140625 -0.5 -0.25 -1.484375q-0.25 -2.03125 -0.578125 -2.984375q-0.34375 0 -0.4375 0q-1.015625 0 -1.4375 0.46875q-0.5625 0.640625 -0.5625 1.90625q0 1.171875 0.40625 1.734375q0.40625 0.5625 1.46875 0.828125l-0.234375 1.640625q-1.046875 -0.234375 -1.6875 -0.734375q-0.640625 -0.515625 -0.984375 -1.46875q-0.359375 -0.96875 -0.359375 -2.25q0 -1.265625 0.296875 -2.046875q0.296875 -0.78125 0.75 -1.15625q0.453125 -0.375 1.140625 -0.515625q0.421875 -0.09375 1.53125 -0.09375l2.234375 0q2.328125 0 2.953125 -0.09375q0.609375 -0.109375 1.171875 -0.4375l0 1.75q-0.515625 0.265625 -1.21875 0.328125zm-3.71875 0.140625q0.359375 0.90625 0.625 2.734375q0.140625 1.03125 0.328125 1.453125q0.1875 0.421875 0.546875 0.65625q0.359375 0.234375 0.796875 0.234375q0.671875 0 1.125 -0.5q0.4375 -0.515625 0.4375 -1.484375q0 -0.96875 -0.421875 -1.71875q-0.4375 -0.75 -1.15625 -1.109375q-0.578125 -0.265625 -1.671875 -0.265625l-0.609375 0zm4.9375 -4.078842l-9.859375 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.0625 0l0 1.671875l-6.0 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.375 0l0 1.671875zm-2.9375 -9.703842l-0.265625 -1.65625q1.0 -0.140625 1.53125 -0.765625q0.515625 -0.640625 0.515625 -1.78125q0 -1.15625 -0.46875 -1.703125q-0.46875 -0.5625 -1.09375 -0.5625q-0.5625 0 -0.890625 0.484375q-0.21875 0.34375 -0.5625 1.703125q-0.46875 1.84375 -0.796875 2.5625q-0.34375 0.703125 -0.9375 1.078125q-0.609375 0.359375 -1.328125 0.359375q-0.65625 0 -1.21875 -0.296875q-0.5625 -0.3125 -0.9375 -0.828125q-0.28125 -0.390625 -0.484375 -1.0625q-0.203125 -0.671875 -0.203125 -1.4375q0 -1.171875 0.34375 -2.046875q0.328125 -0.875 0.90625 -1.28125q0.5625 -0.421875 1.515625 -0.578125l0.21875 1.625q-0.75 0.109375 -1.171875 0.65625q-0.4375 0.53125 -0.4375 1.5q0 1.15625 0.390625 1.640625q0.375 0.484375 0.875 0.484375q0.328125 0 0.59375 -0.203125q0.265625 -0.203125 0.4375 -0.640625q0.09375 -0.25 0.4375 -1.46875q0.46875 -1.765625 0.765625 -2.46875q0.296875 -0.703125 0.875 -1.09375q0.578125 -0.40625 1.4375 -0.40625q0.828125 0 1.578125 0.484375q0.734375 0.484375 1.140625 1.40625q0.390625 0.921875 0.390625 2.078125q0 1.921875 -0.796875 2.9375q-0.796875 1.0 -2.359375 1.28125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m671.5313 399.77856l0 0c0 -11.854553 14.016663 -21.46457 31.307129 -21.46457l0 0c17.290405 0 31.307068 9.610016 31.307068 21.46457l0 0c0 11.854553 -14.016663 21.46457 -31.307068 21.46457l0 0c-17.290466 0 -31.307129 -9.610016 -31.307129 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m671.5313 399.77856l0 0c0 -11.854553 14.016663 -21.46457 31.307129 -21.46457l0 0c17.290405 0 31.307068 9.610016 31.307068 21.46457l0 0c0 11.854553 -14.016663 21.46457 -31.307068 21.46457l0 0c-17.290466 0 -31.307129 -9.610016 -31.307129 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m706.35876 401.09296l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m653.7063 346.8091l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m653.7063 346.8091l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m688.8881 348.12347l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm5.5217896 2.03125l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0zm8.559021 0l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m23.531908 25.329119l0 0c0 -11.854553 18.007318 -21.464567 40.220474 -21.464567l0 0c22.213158 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007317 21.464567 -40.220474 21.464567l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m23.531908 25.329119l0 0c0 -11.854553 18.007318 -21.464567 40.220474 -21.464567l0 0c22.213158 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007317 21.464567 -40.220474 21.464567l0 0c-22.213154 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m47.816948 30.409119l0 -10.734375l4.765625 0q1.4375 0 2.1875 0.296875q0.75 0.28125 1.1875 1.015625q0.453125 0.734375 0.453125 1.609375q0 1.140625 -0.75 1.9375q-0.734375 0.78125 -2.28125 0.984375q0.5625 0.28125 0.859375 0.546875q0.625 0.5625 1.1875 1.421875l1.859375 2.921875l-1.78125 0l-1.421875 -2.234375q-0.625 -0.96875 -1.03125 -1.46875q-0.40625 -0.515625 -0.71875 -0.71875q-0.3125 -0.21875 -0.640625 -0.296875q-0.25 -0.046875 -0.796875 -0.046875l-1.65625 0l0 4.765625l-1.421875 0zm1.421875 -6.0l3.0625 0q0.96875 0 1.515625 -0.203125q0.5625 -0.203125 0.84375 -0.640625q0.28125 -0.4375 0.28125 -0.96875q0 -0.75 -0.5625 -1.234375q-0.546875 -0.5 -1.734375 -0.5l-3.40625 0l0 3.546875zm14.084274 6.0l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828125l1.328125 0l0 4.3125q0 1.03125 0.078125 1.390625q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.53125l0 -4.171875l1.3125 0l0 7.78125l-1.171875 0zm4.260483 0l-1.21875 0l0 -10.734375l1.3125 0l0 3.828125q0.84375 -1.046875 2.140625 -1.046875q0.71875 0 1.359375 0.296875q0.640625 0.28125 1.046875 0.8125q0.421875 0.515625 0.65625 1.265625q0.234375 0.734375 0.234375 1.578125q0 2.0 -1.0 3.09375q-0.984375 1.078125 -2.375 1.078125q-1.375 0 -2.15625 -1.140625l0 0.96875zm-0.015625 -3.953125q0 1.40625 0.390625 2.03125q0.609375 1.015625 1.671875 1.015625q0.875 0 1.5 -0.75q0.625 -0.75 0.625 -2.234375q0 -1.53125 -0.609375 -2.25q-0.59375 -0.734375 -1.453125 -0.734375q-0.859375 0 -1.5 0.75q-0.625 0.75 -0.625 2.171875zm6.901108 6.953125l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m78.1148 25.329119l0 0c0 -11.854553 23.245941 -21.464567 51.921257 -21.464567l0 0c28.675323 0 51.921265 9.610014 51.921265 21.464567l0 0c0 11.854551 -23.245941 21.464567 -51.921265 21.464567l0 0c-28.675316 0 -51.921257 -9.610016 -51.921257 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m78.1148 25.329119l0 0c0 -11.854553 23.245941 -21.464567 51.921257 -21.464567l0 0c28.675323 0 51.921265 9.610014 51.921265 21.464567l0 0c0 11.854551 -23.245941 21.464567 -51.921265 21.464567l0 0c-28.675316 0 -51.921257 -9.610016 -51.921257 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m108.37779 30.409119l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm8.134979 8.625l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625zm10.265625 -4.171875l0.1875 1.15625q-0.5625 0.125 -1.0 0.125q-0.71875 0 -1.125 -0.234375q-0.390625 -0.234375 -0.546875 -0.59375q-0.15625 -0.375 -0.15625 -1.5625l0 -4.46875l-0.96875 0l0 -1.03125l0.96875 0l0 -1.921875l1.3125 -0.796875l0 2.71875l1.328125 0l0 1.03125l-1.328125 0l0 4.546875q0 0.5625 0.0625 0.734375q0.078125 0.15625 0.234375 0.25q0.15625 0.09375 0.4375 0.09375q0.234375 0 0.59375 -0.046875zm1.1813507 1.171875l0 -10.734375l1.328125 0l0 3.84375q0.921875 -1.0625 2.328125 -1.0625q0.859375 0 1.5 0.34375q0.640625 0.34375 0.90625 0.9375q0.28125 0.59375 0.28125 1.75l0 4.921875l-1.328125 0l0 -4.921875q0 -1.0 -0.421875 -1.4375q-0.421875 -0.453125 -1.21875 -0.453125q-0.578125 0 -1.09375 0.296875q-0.515625 0.296875 -0.734375 0.828125q-0.21875 0.515625 -0.21875 1.4375l0 4.25l-1.328125 0zm7.666733 -3.890625q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276108 3.890625l0 -7.78125l1.1875 0l0 1.109375q0.859375 -1.28125 2.484375 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.453125 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m275.7274 25.329119l0 0c0 -11.854553 18.007294 -21.464567 40.22046 -21.464567l0 0c22.213165 0 40.22049 9.610014 40.22049 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.22049 21.464567l0 0c-22.213165 0 -40.22046 -9.610016 -40.22046 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m275.7274 25.329119l0 0c0 -11.854553 18.007294 -21.464567 40.22046 -21.464567l0 0c22.213165 0 40.22049 9.610014 40.22049 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.22049 21.464567l0 0c-22.213165 0 -40.22046 -9.610016 -40.22046 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m307.8335 27.362244l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm7.5625 -0.40625l1.34375 -0.109375q0.09375 0.796875 0.4375 1.3125q0.359375 0.515625 1.078125 0.84375q0.734375 0.3125 1.65625 0.3125q0.8125 0 1.4375 -0.234375q0.625 -0.25 0.921875 -0.671875q0.3125 -0.421875 0.3125 -0.921875q0 -0.5 -0.296875 -0.875q-0.296875 -0.375 -0.96875 -0.640625q-0.4375 -0.15625 -1.921875 -0.515625q-1.46875 -0.359375 -2.0625 -0.671875q-0.765625 -0.40625 -1.15625 -1.0q-0.375 -0.59375 -0.375 -1.34375q0 -0.8125 0.453125 -1.515625q0.46875 -0.703125 1.359375 -1.0625q0.890625 -0.375 1.96875 -0.375q1.203125 0 2.109375 0.390625q0.90625 0.375 1.390625 1.125q0.5 0.75 0.546875 1.6875l-1.375 0.109375q-0.109375 -1.015625 -0.75 -1.53125q-0.625 -0.53125 -1.859375 -0.53125q-1.28125 0 -1.875 0.484375q-0.59375 0.46875 -0.59375 1.125q0 0.578125 0.421875 0.953125q0.40625 0.375 2.140625 0.765625q1.734375 0.390625 2.375 0.6875q0.9375 0.4375 1.375 1.109375q0.453125 0.65625 0.453125 1.515625q0 0.859375 -0.5 1.625q-0.484375 0.75 -1.40625 1.171875q-0.90625 0.421875 -2.0625 0.421875q-1.453125 0 -2.4375 -0.421875q-0.984375 -0.4375 -1.546875 -1.28125q-0.5625 -0.859375 -0.59375 -1.9375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m505.5692 217.57442l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m505.5692 217.57442l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22052 9.610016 40.22052 21.46457l0 0c0 11.854553 -18.007324 21.46457 -40.22052 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m530.748 219.60754l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm12.953125 2.09375q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm5.354187 3.90625l-2.96875 -7.78125l1.390625 0l1.671875 4.65625q0.265625 0.765625 0.5 1.578125q0.171875 -0.625 0.484375 -1.484375l1.734375 -4.75l1.359375 0l-2.953125 7.78125l-1.21875 0zm10.234375 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m516.03046 100.357605l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22046 9.610016 40.22046 21.46457l0 0c0 11.854553 -18.007263 21.46457 -40.22046 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m516.03046 100.357605l0 0c0 -11.854553 18.007324 -21.46457 40.22046 -21.46457l0 0c22.213196 0 40.22046 9.610016 40.22046 21.46457l0 0c0 11.854553 -18.007263 21.46457 -40.22046 21.46457l0 0c-22.213135 0 -40.22046 -9.610016 -40.22046 -21.46457z" fill-rule="nonzero"></path><path fill="#000000" d="m552.66284 101.21886l0 -1.25l4.546875 -0.015625l0 3.984375q-1.046875 0.84375 -2.171875 1.265625q-1.109375 0.421875 -2.28125 0.421875q-1.578125 0 -2.875 -0.671875q-1.296875 -0.6875 -1.953125 -1.96875q-0.65625 -1.28125 -0.65625 -2.859375q0 -1.578125 0.65625 -2.9375q0.65625 -1.359375 1.890625 -2.015625q1.234375 -0.65625 2.828125 -0.65625q1.171875 0 2.109375 0.375q0.9375 0.375 1.46875 1.0625q0.546875 0.671875 0.8125 1.75l-1.28125 0.34375q-0.234375 -0.8125 -0.59375 -1.28125q-0.359375 -0.46875 -1.03125 -0.75q-0.65625 -0.28125 -1.46875 -0.28125q-0.984375 0 -1.703125 0.296875q-0.703125 0.296875 -1.140625 0.78125q-0.421875 0.484375 -0.671875 1.0625q-0.40625 1.0 -0.40625 2.15625q0 1.4375 0.484375 2.40625q0.5 0.96875 1.4375 1.4375q0.953125 0.46875 2.015625 0.46875q0.921875 0 1.796875 -0.359375q0.890625 -0.359375 1.34375 -0.765625l0 -2.0l-3.15625 0zm5.7125854 0.328125q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m137.07707 25.329119l0 0c0 -11.854553 18.007324 -21.464567 40.220474 -21.464567l0 0c22.21315 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.220474 21.464567l0 0c-22.21315 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m137.07707 25.329119l0 0c0 -11.854553 18.007324 -21.464567 40.220474 -21.464567l0 0c22.21315 0 40.220474 9.610014 40.220474 21.464567l0 0c0 11.854551 -18.007324 21.464567 -40.220474 21.464567l0 0c-22.21315 0 -40.220474 -9.610016 -40.220474 -21.464567z" fill-rule="nonzero"></path><path fill="#000000" d="m165.42204 30.409119l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm13.509979 3.125l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.135483 4.640625l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.8650208 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gocon-tokyo/generics.svg b/content/2014/gocon-tokyo/generics.svg
deleted file mode 100644
index 0d1525e..0000000
--- a/content/2014/gocon-tokyo/generics.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 798.0 443.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l798.0 0l0 443.0l-798.0 0l0 -443.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l798.90814 0l0 443.0l-798.90814 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m5.7122254 426.2519l786.7087 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m5.7122254 426.2519l774.70874 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m780.42096 429.55536l9.076172 -3.3034668l-9.076172 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m5.7122254 426.2519l0 -422.4252" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m5.7122254 426.2519l0 -410.4252" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m9.015691 15.826691l-3.3034654 -9.076195l-3.303465 9.076195z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m206.04163 379.86475l353.88977 0l0 36.944885l-353.88977 0z" fill-rule="nonzero"></path><path fill="#000000" d="m230.90198 402.40976l1.6875 -0.140625q0.125 1.015625 0.5625 1.671875q0.4375 0.65625 1.359375 1.0625q0.9375 0.40625 2.09375 0.40625q1.03125 0 1.8125 -0.3125q0.796875 -0.3125 1.1875 -0.84375q0.390625 -0.53125 0.390625 -1.15625q0 -0.640625 -0.375 -1.109375q-0.375 -0.484375 -1.234375 -0.8125q-0.546875 -0.21875 -2.421875 -0.65625q-1.875 -0.453125 -2.625 -0.859375q-0.96875 -0.515625 -1.453125 -1.265625q-0.46875 -0.75 -0.46875 -1.6875q0 -1.03125 0.578125 -1.921875q0.59375 -0.90625 1.703125 -1.359375q1.125 -0.46875 2.5 -0.46875q1.515625 0 2.671875 0.484375q1.15625 0.484375 1.765625 1.4375q0.625 0.9375 0.671875 2.140625l-1.71875 0.125q-0.140625 -1.28125 -0.953125 -1.9375q-0.796875 -0.671875 -2.359375 -0.671875q-1.625 0 -2.375 0.609375q-0.75 0.59375 -0.75 1.4375q0 0.734375 0.53125 1.203125q0.515625 0.46875 2.703125 0.96875q2.203125 0.5 3.015625 0.875q1.1875 0.546875 1.75 1.390625q0.578125 0.828125 0.578125 1.921875q0 1.09375 -0.625 2.0625q-0.625 0.953125 -1.796875 1.484375q-1.15625 0.53125 -2.609375 0.53125q-1.84375 0 -3.09375 -0.53125q-1.25 -0.546875 -1.96875 -1.625q-0.703125 -1.078125 -0.734375 -2.453125zm16.490448 2.875l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm7.964554 0.28125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.1562347 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.7499847 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm7.735092 3.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.5426636 -10.1875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.566711 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.328125 2.390625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.047577 4.9375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.1448364 0l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.097931 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm21.02707 -7.40625l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.890625 3.609375l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.09375 0 1.890625 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.546875 -0.578125 -1.53125 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm17.125702 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm15.547607 2.265625l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm15.500702 5.875l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.449646 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm22.290802 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm12.766357 4.375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm7.9645386 0.28125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 8.71875l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm8.844452 4.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm8.985107 5.734375l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm9.281952 5.109375l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.6658325 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078827 4.9375l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.5563965 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.1292114 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm10.078857 0.8125l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m5.711286 379.13077l0 -295.5905l44.220478 0l0 295.5905z" fill-rule="nonzero"></path><path fill="#000000" d="m27.30316 315.80026l-1.609375 0l0 -5.765625l5.046875 0q1.0625 1.328125 1.5937481 2.75q0.53125 1.40625 0.53125 2.890625q0 2.0 -0.859375 3.640625q-0.8593731 1.625 -2.484373 2.46875q-1.625 0.828125 -3.625 0.828125q-1.984375 0 -3.703125 -0.828125q-1.71875 -0.828125 -2.546875 -2.390625q-0.84375 -1.5625 -0.84375 -3.59375q0 -1.46875 0.484375 -2.65625q0.46875 -1.203125 1.328125 -1.875q0.84375 -0.671875 2.21875 -1.03125l0.4375 1.625q-1.03125 0.3125 -1.625 0.765625q-0.59375 0.453125 -0.953125 1.296875q-0.359375 0.84375 -0.359375 1.875q0 1.234375 0.375 2.140625q0.375 0.890625 1.0 1.453125q0.609375 0.546875 1.34375 0.84375q1.25 0.53125 2.734375 0.53125q1.8125 0 3.046875 -0.625q1.21875 -0.640625 1.8125 -1.828125q0.59375 -1.203125 0.59375 -2.546875q0 -1.171875 -0.453125 -2.28125q-0.453125 -1.109375 -0.953125 -1.6875l-2.53125 0l0 4.0zm2.15625 -14.683319l0.21875 -1.71875q1.5 0.40625 2.343748 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.3281231 3.421875q-1.328125 1.265625 -3.734375 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484375 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.546875 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm4.375 -12.766327l1.4843731 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.7499981 0.703125q-0.46875 0.203125 -1.984375 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.4375 0l-1.0 -1.65625l3.4375 0l0 -1.6875l1.3125 0l0 1.6875l5.75 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm-1.4375 -6.0384827l-0.265625 -1.65625q1.0 -0.140625 1.53125 -0.765625q0.515625 -0.640625 0.515625 -1.78125q0 -1.15625 -0.46875 -1.703125q-0.46875 -0.5625 -1.09375 -0.5625q-0.5625 0 -0.890625 0.484375q-0.21875 0.34375 -0.5625 1.703125q-0.46875 1.84375 -0.796875 2.5625q-0.34375 0.703125 -0.9375 1.078125q-0.609375 0.359375 -1.328125 0.359375q-0.65625 0 -1.21875 -0.296875q-0.5625 -0.3125 -0.9375 -0.828125q-0.28125 -0.390625 -0.484375 -1.0625q-0.203125 -0.671875 -0.203125 -1.4375q0 -1.171875 0.34375 -2.046875q0.328125 -0.875 0.90625 -1.28125q0.5625 -0.421875 1.515625 -0.578125l0.21875 1.625q-0.75 0.109375 -1.171875 0.65625q-0.4375 0.53125 -0.4375 1.5q0 1.15625 0.390625 1.640625q0.375 0.484375 0.875 0.484375q0.328125 0 0.59375 -0.203125q0.265625 -0.203125 0.4375 -0.640625q0.09375 -0.25 0.4375 -1.46875q0.46875 -1.765625 0.765625 -2.46875q0.296875 -0.703125 0.875 -1.09375q0.578125 -0.40625 1.4375 -0.40625q0.828125 0 1.578125 0.484375q0.7343731 0.484375 1.1406231 1.40625q0.390625 0.921875 0.390625 2.078125q0 1.921875 -0.796875 2.9375q-0.7968731 1.0 -2.359373 1.28125zm1.4375 -13.65625l1.4843731 -0.234375q0.140625 0.703125 0.140625 1.265625q0 0.90625 -0.28125 1.40625q-0.296875 0.5 -0.7499981 0.703125q-0.46875 0.203125 -1.984375 0.203125l-5.65625 0l0 1.234375l-1.3125 0l0 -1.234375l-2.4375 0l-1.0 -1.65625l3.4375 0l0 -1.6875l1.3125 0l0 1.6875l5.75 0q0.71875 0 0.921875 -0.078125q0.203125 -0.09375 0.328125 -0.296875q0.125 -0.203125 0.125 -0.578125q0 -0.265625 -0.078125 -0.734375zm1.4999981 -7.980194l-1.4531231 0q1.6718731 1.140625 1.6718731 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.8437481 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859373 0l0 1.5zm0 -4.328827l-8.546873 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546873 0l0 1.65625zm0 -5.183319l-8.546873 0l0 1.484375l-1.3125 0l0 -1.484375l-1.046875 0q-0.984375 0 -1.46875 -0.171875q-0.65625 -0.234375 -1.046875 -0.84375q-0.40625 -0.609375 -0.40625 -1.703125q0 -0.703125 0.15625 -1.5625l1.46875 0.25q-0.09375 0.515625 -0.09375 0.984375q0 0.765625 0.328125 1.078125q0.3125 0.3125 1.203125 0.3125l0.90625 0l0 -1.921875l1.3125 0l0 1.921875l8.546873 0l0 1.65625zm0 -16.350967l-1.2499981 0q1.4687481 0.9375 1.4687481 2.75q0 1.171875 -0.640625 2.171875q-0.6562481 0.984375 -1.8124981 1.53125q-1.171875 0.53125 -2.6875 0.53125q-1.46875 0 -2.671875 -0.484375q-1.203125 -0.5 -1.84375 -1.46875q-0.640625 -0.984375 -0.640625 -2.203125q0 -0.890625 0.375 -1.578125q0.375 -0.703125 0.984375 -1.140625l-4.875 0l0 -1.65625l13.593748 0l0 1.546875zm-4.921873 5.28125q1.890625 0 2.828125 -0.796875q0.9375 -0.8125 0.9375 -1.890625q0 -1.09375 -0.890625 -1.859375q-0.890625 -0.765625 -2.734375 -0.765625q-2.015625 0 -2.953125 0.78125q-0.953125 0.78125 -0.953125 1.921875q0 1.109375 0.90625 1.859375q0.90625 0.75 2.859375 0.75zm0 -8.641357q-2.734375 0 -4.0625 -1.53125q-1.09375 -1.265625 -1.09375 -3.09375q0 -2.03125 1.34375 -3.3125q1.328125 -1.296875 3.671875 -1.296875q1.90625 0 3.0 0.578125q1.078125 0.5625 1.6874981 1.65625q0.59375 1.078125 0.59375 2.375q0 2.0625 -1.3281231 3.34375q-1.328125 1.28125 -3.8125 1.28125zm0 -1.71875q1.890625 0 2.828125 -0.828125q0.9375 -0.828125 0.9375 -2.078125q0 -1.25 -0.9375 -2.0625q-0.953125 -0.828125 -2.890625 -0.828125q-1.828125 0 -2.765625 0.828125q-0.9375 0.828125 -0.9375 2.0625q0 1.25 0.9375 2.078125q0.9375 0.828125 2.828125 0.828125zm4.921873 -9.281952l-9.859373 0l0 -1.5l1.40625 0q-1.625 -1.09375 -1.625 -3.140625q0 -0.890625 0.328125 -1.640625q0.3125 -0.75 0.84375 -1.109375q0.515625 -0.375 1.21875 -0.53125q0.46875 -0.09375 1.625 -0.09375l6.062498 0l0 1.671875l-5.999998 0q-1.015625 0 -1.515625 0.203125q-0.515625 0.1875 -0.8125 0.6875q-0.296875 0.5 -0.296875 1.171875q0 1.0625 0.671875 1.84375q0.671875 0.765625 2.578125 0.765625l5.374998 0l0 1.671875zm-3.171873 -17.125732l0.21875 -1.71875q1.5 0.40625 2.343748 1.515625q0.828125 1.09375 0.828125 2.8125q0 2.15625 -1.3281231 3.421875q-1.328125 1.265625 -3.734375 1.265625q-2.484375 0 -3.859375 -1.265625q-1.375 -1.28125 -1.375 -3.328125q0 -1.984375 1.34375 -3.234375q1.34375 -1.25 3.796875 -1.25q0.140625 0 0.4375 0.015625l0 7.34375q1.625 -0.09375 2.484375 -0.921875q0.859375 -0.828125 0.859375 -2.0625q0 -0.90625 -0.46875 -1.546875q-0.484375 -0.65625 -1.546875 -1.046875zm-2.703125 5.484375l0 -5.5q-1.234375 0.109375 -1.859375 0.625q-0.96875 0.796875 -0.96875 2.078125q0 1.140625 0.78125 1.9375q0.765625 0.78125 2.046875 0.859375zm5.874998 -9.547577l-1.9062481 0l0 -1.90625l1.9062481 0q1.046875 0 1.6875 0.375q0.65625 0.375 1.0 1.171875l-0.71875 0.46875q-0.21875 -0.53125 -0.671875 -0.78125q-0.453125 -0.25 -1.296875 -0.28125l0 0.953125zm3.78125 -16.210358l-4.828123 0q0.5468731 0.390625 0.9062481 1.09375q0.359375 0.6875 0.359375 1.484375q0 1.75 -1.3906231 3.015625q-1.40625 1.265625 -3.84375 1.265625q-1.484375 0 -2.65625 -0.515625q-1.1875 -0.515625 -1.796875 -1.484375q-0.609375 -0.984375 -0.609375 -2.15625q0 -1.828125 1.546875 -2.875l-1.328125 0l0 -1.5l13.640623 0l0 1.671875zm-8.734373 5.140625q1.90625 0 2.859375 -0.796875q0.9375 -0.796875 0.9375 -1.90625q0 -1.0625 -0.890625 -1.828125q-0.90625 -0.78125 -2.765625 -0.78125q-1.953125 0 -2.953125 0.8125q-1.0 0.8125 -1.0 1.90625q0 1.09375 0.9375 1.84375q0.921875 0.75 2.875 0.75zm4.953123 -15.688232l-1.4531231 0q1.6718731 1.140625 1.6718731 3.125q0 0.859375 -0.328125 1.625q-0.34375 0.75 -0.8437481 1.125q-0.5 0.359375 -1.234375 0.515625q-0.5 0.09375 -1.5625 0.09375l-6.109375 0l0 -1.671875l5.46875 0q1.3125 0 1.765625 -0.09375q0.65625 -0.15625 1.03125 -0.671875q0.375 -0.515625 0.375 -1.265625q0 -0.75 -0.375 -1.40625q-0.390625 -0.65625 -1.046875 -0.921875q-0.671875 -0.28125 -1.9375 -0.28125l-5.28125 0l0 -1.671875l9.859373 0l0 1.5zm-11.687498 -3.938202l-1.90625 0l0 -1.671875l1.90625 0l0 1.671875zm11.687498 0l-9.859373 0l0 -1.671875l9.859373 0l0 1.671875zm-3.609373 -10.566711l0.21875 -1.640625q1.6875 0.265625 2.65625 1.375q0.9531231 1.109375 0.9531231 2.734375q0 2.015625 -1.3124981 3.25q-1.328125 1.21875 -3.796875 1.21875q-1.59375 0 -2.78125 -0.515625q-1.203125 -0.53125 -1.796875 -1.609375q-0.609375 -1.09375 -0.609375 -2.359375q0 -1.609375 0.8125 -2.625q0.8125 -1.015625 2.3125 -1.3125l0.25 1.625q-1.0 0.234375 -1.5 0.828125q-0.5 0.59375 -0.5 1.421875q0 1.265625 0.90625 2.0625q0.90625 0.78125 2.859375 0.78125q1.984375 0 2.890625 -0.765625q0.890625 -0.765625 0.890625 -1.984375q0 -0.984375 -0.59375 -1.640625q-0.609375 -0.65625 -1.859375 -0.84375zm3.609373 -2.90625l-13.593748 0l0 -1.671875l7.75 0l-4.015625 -3.953125l0 -2.15625l3.65625 3.765625l6.203123 -4.140625l0 2.0625l-5.031248 3.25l1.125 1.171875l3.906248 0l0 1.671875zm0 -9.28125l-13.593748 0l0 -1.671875l13.593748 0l0 1.671875zm3.796875 -4.097931l-1.5625 0.171875q0.140625 -0.546875 0.140625 -0.953125q0 -0.546875 -0.1875 -0.875q-0.1875 -0.34375 -0.515625 -0.5625q-0.25 -0.15625 -1.25 -0.5q-0.140625 -0.046875 -0.40625 -0.15625l-9.874998 3.734375l0 -1.796875l5.71875 -2.046875q1.078125 -0.40625 2.28125 -0.71875q-1.15625 -0.28125 -2.25 -0.6875l-5.75 -2.09375l0 -1.671875l10.031248 3.75q1.625 0.59375 2.234375 0.9375q0.828125 0.4375 1.203125 1.015625q0.390625 0.578125 0.390625 1.375q0 0.484375 -0.203125 1.078125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m55.67132 381.09348l0 0c0 -11.715393 14.989643 -21.212616 33.480312 -21.212616l0 0c18.49067 0 33.480316 9.497223 33.480316 21.212616l0 0c0 11.715393 -14.989647 21.212585 -33.480316 21.212585l0 0c-18.49067 0 -33.480312 -9.497192 -33.480312 -21.212585z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m55.67132 381.09348l0 0c0 -11.715393 14.989643 -21.212616 33.480312 -21.212616l0 0c18.49067 0 33.480316 9.497223 33.480316 21.212616l0 0c0 11.715393 -14.989647 21.212585 -33.480316 21.212585l0 0c-18.49067 0 -33.480312 -9.497192 -33.480312 -21.212585z" fill-rule="nonzero"></path><path fill="#000000" d="m92.672 382.40784l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m567.669 328.54565l0 0c0 -11.715393 16.286987 -21.212616 36.37793 -21.212616l0 0c20.091003 0 36.37799 9.497223 36.37799 21.212616l0 0c0 11.715393 -16.286987 21.212585 -36.37799 21.212585l0 0c-20.090942 0 -36.37793 -9.497192 -36.37793 -21.212585z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m567.669 328.54565l0 0c0 -11.715393 16.286987 -21.212616 36.37793 -21.212616l0 0c20.091003 0 36.37799 9.497223 36.37799 21.212616l0 0c0 11.715393 -16.286987 21.212585 -36.37799 21.212585l0 0c-20.090942 0 -36.37793 -9.497192 -36.37793 -21.212585z" fill-rule="nonzero"></path><path fill="#000000" d="m599.0083 329.86002l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm5.5217896 2.03125l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0zm8.559021 0l0 -2.953125l-2.921875 0l0 -1.21875l2.921875 0l0 -2.921875l1.25 0l0 2.921875l2.921875 0l0 1.21875l-2.921875 0l0 2.953125l-1.25 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m27.731716 89.39058l0 0c0 -11.715393 19.262333 -21.2126 43.023624 -21.2126l0 0c23.761292 0 43.02362 9.497208 43.02362 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761292 0 -43.023624 -9.497208 -43.023624 -21.2126z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m27.731716 89.39058l0 0c0 -11.715393 19.262333 -21.2126 43.023624 -21.2126l0 0c23.761292 0 43.02362 9.497208 43.02362 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761292 0 -43.023624 -9.497208 -43.023624 -21.2126z" fill-rule="nonzero"></path><path fill="#000000" d="m58.879837 94.47058l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm13.509979 3.125l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.135483 4.640625l0 -7.78125l1.1875 0l0 1.1875q0.453125 -0.828125 0.84375 -1.09375q0.390625 -0.265625 0.84375 -0.265625q0.671875 0 1.359375 0.421875l-0.453125 1.21875q-0.484375 -0.28125 -0.96875 -0.28125q-0.4375 0 -0.78125 0.265625q-0.34375 0.25 -0.484375 0.71875q-0.21875 0.703125 -0.21875 1.53125l0 4.078125l-1.328125 0zm4.8650208 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m23.645636 44.00525l0 0c0 -11.715393 23.676027 -21.212599 52.88189 -21.212599l0 0c29.205856 0 52.88188 9.497206 52.88188 21.212599l0 0c0 11.715393 -23.676025 21.2126 -52.88188 21.2126l0 0c-29.205864 0 -52.88189 -9.497208 -52.88189 -21.2126z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m23.645636 44.00525l0 0c0 -11.715393 23.676027 -21.212599 52.88189 -21.212599l0 0c29.205856 0 52.88188 9.497206 52.88188 21.212599l0 0c0 11.715393 -23.676025 21.2126 -52.88188 21.2126l0 0c-29.205864 0 -52.88189 -9.497208 -52.88189 -21.2126z" fill-rule="nonzero"></path><path fill="#000000" d="m54.869263 49.08525l0 -10.734375l4.046875 0q1.078125 0 1.640625 0.09375q0.78125 0.140625 1.3125 0.515625q0.546875 0.359375 0.875 1.03125q0.328125 0.65625 0.328125 1.46875q0 1.359375 -0.875 2.3125q-0.875 0.953125 -3.15625 0.953125l-2.75 0l0 4.359375l-1.421875 0zm1.421875 -5.625l2.78125 0q1.375 0 1.953125 -0.515625q0.578125 -0.515625 0.578125 -1.453125q0 -0.671875 -0.34375 -1.140625q-0.34375 -0.484375 -0.890625 -0.640625q-0.359375 -0.09375 -1.328125 -0.09375l-2.75 0l0 3.84375zm8.134979 8.625l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625zm10.265625 -4.171875l0.1875 1.15625q-0.5625 0.125 -1.0 0.125q-0.71875 0 -1.125 -0.234375q-0.390625 -0.234375 -0.546875 -0.59375q-0.15625 -0.375 -0.15625 -1.5625l0 -4.46875l-0.96875 0l0 -1.03125l0.96875 0l0 -1.921875l1.3125 -0.796875l0 2.71875l1.328125 0l0 1.03125l-1.328125 0l0 4.546875q0 0.5625 0.0625 0.734375q0.078125 0.15625 0.234375 0.25q0.15625 0.09375 0.4375 0.09375q0.234375 0 0.59375 -0.046875zm1.1813507 1.171875l0 -10.734375l1.328125 0l0 3.84375q0.921875 -1.0625 2.328125 -1.0625q0.859375 0 1.5 0.34375q0.640625 0.34375 0.90625 0.9375q0.28125 0.59375 0.28125 1.75l0 4.921875l-1.328125 0l0 -4.921875q0 -1.0 -0.421875 -1.4375q-0.421875 -0.453125 -1.21875 -0.453125q-0.578125 0 -1.09375 0.296875q-0.515625 0.296875 -0.734375 0.828125q-0.21875 0.515625 -0.21875 1.4375l0 4.25l-1.328125 0zm7.666733 -3.890625q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375zm7.276108 3.890625l0 -7.78125l1.1875 0l0 1.109375q0.859375 -1.28125 2.484375 -1.28125q0.703125 0 1.28125 0.25q0.59375 0.25 0.890625 0.671875q0.296875 0.40625 0.40625 0.96875q0.078125 0.359375 0.078125 1.28125l0 4.78125l-1.328125 0l0 -4.734375q0 -0.796875 -0.15625 -1.1875q-0.140625 -0.40625 -0.53125 -0.640625q-0.390625 -0.25 -0.921875 -0.25q-0.84375 0 -1.453125 0.53125q-0.609375 0.53125 -0.609375 2.03125l0 4.25l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m292.5149 201.49901l0 0c0 -11.715393 19.26236 -21.212585 43.02365 -21.212585l0 0c23.761292 0 43.02362 9.497192 43.02362 21.212585l0 0c0 11.715408 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761292 0 -43.02365 -9.497192 -43.02365 -21.2126z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m292.5149 201.49901l0 0c0 -11.715393 19.26236 -21.212585 43.02365 -21.212585l0 0c23.761292 0 43.02362 9.497192 43.02362 21.212585l0 0c0 11.715408 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761292 0 -43.02365 -9.497192 -43.02365 -21.2126z" fill-rule="nonzero"></path><path fill="#000000" d="m320.4968 203.53214l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm12.953125 2.09375q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm5.354248 3.90625l-2.96875 -7.78125l1.390625 0l1.671875 4.65625q0.265625 0.765625 0.5 1.578125q0.171875 -0.625 0.484375 -1.484375l1.734375 -4.75l1.359375 0l-2.953125 7.78125l-1.21875 0zm10.234375 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m119.55249 44.006237l0 0c0 -11.715393 19.26233 -21.212597 43.02362 -21.212597l0 0c23.761292 0 43.02362 9.497204 43.02362 21.212597l0 0c0 11.715397 -19.26233 21.212597 -43.02362 21.212597l0 0c-23.761292 0 -43.02362 -9.4972 -43.02362 -21.212597z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m119.55249 44.006237l0 0c0 -11.715393 19.26233 -21.212597 43.02362 -21.212597l0 0c23.761292 0 43.02362 9.497204 43.02362 21.212597l0 0c0 11.715397 -19.26233 21.212597 -43.02362 21.212597l0 0c-23.761292 0 -43.02362 -9.4972 -43.02362 -21.212597z" fill-rule="nonzero"></path><path fill="#000000" d="m158.988 44.86749l0 -1.25l4.546875 -0.015625l0 3.984375q-1.046875 0.84375 -2.171875 1.265625q-1.109375 0.421875 -2.28125 0.421875q-1.578125 0 -2.875 -0.671875q-1.296875 -0.6875 -1.953125 -1.96875q-0.65625 -1.28125 -0.65625 -2.859375q0 -1.578125 0.65625 -2.9375q0.65625 -1.359375 1.890625 -2.015625q1.234375 -0.65625 2.828125 -0.65625q1.171875 0 2.109375 0.375q0.9375 0.375 1.46875 1.0625q0.546875 0.671875 0.8125 1.75l-1.28125 0.34375q-0.234375 -0.8125 -0.59375 -1.28125q-0.359375 -0.46875 -1.03125 -0.75q-0.65625 -0.28125 -1.46875 -0.28125q-0.984375 0 -1.703125 0.296875q-0.703125 0.296875 -1.140625 0.78125q-0.421875 0.484375 -0.671875 1.0625q-0.40625 1.0 -0.40625 2.15625q0 1.4375 0.484375 2.40625q0.5 0.96875 1.4375 1.4375q0.953125 0.46875 2.015625 0.46875q0.921875 0 1.796875 -0.359375q0.890625 -0.359375 1.34375 -0.765625l0 -2.0l-3.15625 0zm5.7126007 0.328125q0 -2.15625 1.203125 -3.203125q1.0 -0.859375 2.4375 -0.859375q1.609375 0 2.625 1.046875q1.015625 1.046875 1.015625 2.90625q0 1.5 -0.453125 2.359375q-0.4375 0.859375 -1.3125 1.34375q-0.859375 0.46875 -1.875 0.46875q-1.625 0 -2.640625 -1.046875q-1.0 -1.046875 -1.0 -3.015625zm1.359375 0q0 1.5 0.640625 2.25q0.65625 0.734375 1.640625 0.734375q0.984375 0 1.640625 -0.75q0.65625 -0.75 0.65625 -2.28125q0 -1.4375 -0.65625 -2.171875q-0.65625 -0.75 -1.640625 -0.75q-0.984375 0 -1.640625 0.734375q-0.640625 0.734375 -0.640625 2.234375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m447.41135 174.22841l0 0c0 -11.715393 19.26233 -21.2126 43.02362 -21.2126l0 0c23.761261 0 43.02359 9.497208 43.02359 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02359 21.2126l0 0c-23.761292 0 -43.02362 -9.497208 -43.02362 -21.2126z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m447.41135 174.22841l0 0c0 -11.715393 19.26233 -21.2126 43.02362 -21.2126l0 0c23.761261 0 43.02359 9.497208 43.02359 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02359 21.2126l0 0c-23.761292 0 -43.02362 -9.497208 -43.02362 -21.2126z" fill-rule="nonzero"></path><path fill="#000000" d="m489.87976 175.54279l1.421875 0.359375q-0.4375 1.75 -1.609375 2.671875q-1.15625 0.921875 -2.828125 0.921875q-1.734375 0 -2.828125 -0.703125q-1.09375 -0.71875 -1.65625 -2.046875q-0.5625 -1.34375 -0.5625 -2.890625q0 -1.671875 0.640625 -2.921875q0.640625 -1.25 1.8125 -1.890625q1.1875 -0.65625 2.609375 -0.65625q1.609375 0 2.703125 0.828125q1.109375 0.8125 1.546875 2.296875l-1.40625 0.328125q-0.375 -1.171875 -1.09375 -1.703125q-0.703125 -0.53125 -1.78125 -0.53125q-1.234375 0 -2.0625 0.59375q-0.828125 0.59375 -1.171875 1.59375q-0.328125 1.0 -0.328125 2.0625q0 1.359375 0.390625 2.390625q0.40625 1.015625 1.234375 1.53125q0.84375 0.5 1.828125 0.5q1.203125 0 2.03125 -0.6875q0.828125 -0.6875 1.109375 -2.046875zm2.5217896 3.953125l0.640625 -3.125l-1.234375 0l0 -1.09375l1.453125 0l0.546875 -2.65625l-2.0 0l0 -1.09375l2.21875 0l0.640625 -3.140625l1.09375 0l-0.640625 3.140625l2.3125 0l0.640625 -3.140625l1.09375 0l-0.625 3.140625l1.265625 0l0 1.09375l-1.484375 0l-0.5625 2.65625l2.046875 0l0 1.09375l-2.265625 0l-0.625 3.125l-1.109375 0l0.640625 -3.125l-2.3125 0l-0.625 3.125l-1.109375 0zm1.953125 -4.21875l2.3125 0l0.546875 -2.65625l-2.3125 0l-0.546875 2.65625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m673.8365 387.86002l0 0c0 -10.202026 25.0932 -18.472412 56.04724 -18.472412l0 0c30.95404 0 56.04724 8.270386 56.04724 18.472412l0 0c0 10.202057 -25.0932 18.472443 -56.04724 18.472443l0 0c-30.95404 0 -56.04724 -8.270386 -56.04724 -18.472443z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m673.8365 387.86002l0 0c0 -10.202026 25.0932 -18.472412 56.04724 -18.472412l0 0c30.95404 0 56.04724 8.270386 56.04724 18.472412l0 0c0 10.202057 -25.0932 18.472443 -56.04724 18.472443l0 0c-30.95404 0 -56.04724 -8.270386 -56.04724 -18.472443z" fill-rule="nonzero"></path><path fill="#000000" d="m707.0593 392.94003l0 -10.734375l1.421875 0l0 4.40625l5.578125 0l0 -4.40625l1.421875 0l0 10.734375l-1.421875 0l0 -5.0625l-5.578125 0l0 5.0625l-1.421875 0zm15.443665 -0.953125q-0.734375 0.609375 -1.40625 0.875q-0.671875 0.25 -1.453125 0.25q-1.28125 0 -1.96875 -0.625q-0.6875 -0.625 -0.6875 -1.59375q0 -0.578125 0.25 -1.046875q0.265625 -0.46875 0.6875 -0.75q0.421875 -0.296875 0.953125 -0.4375q0.375 -0.109375 1.171875 -0.203125q1.59375 -0.1875 2.34375 -0.453125q0.015625 -0.265625 0.015625 -0.34375q0 -0.8125 -0.375 -1.140625q-0.515625 -0.4375 -1.5 -0.4375q-0.9375 0 -1.390625 0.328125q-0.4375 0.3125 -0.640625 1.140625l-1.296875 -0.171875q0.171875 -0.828125 0.578125 -1.328125q0.40625 -0.515625 1.171875 -0.78125q0.765625 -0.28125 1.765625 -0.28125q1.0 0 1.609375 0.234375q0.625 0.234375 0.921875 0.59375q0.296875 0.34375 0.40625 0.890625q0.0625 0.34375 0.0625 1.21875l0 1.75q0 1.84375 0.078125 2.328125q0.09375 0.484375 0.34375 0.9375l-1.375 0q-0.203125 -0.40625 -0.265625 -0.953125zm-0.109375 -2.953125q-0.71875 0.296875 -2.15625 0.5q-0.8125 0.125 -1.15625 0.265625q-0.328125 0.140625 -0.515625 0.421875q-0.171875 0.28125 -0.171875 0.625q0 0.53125 0.390625 0.890625q0.40625 0.34375 1.171875 0.34375q0.765625 0 1.359375 -0.328125q0.59375 -0.34375 0.875 -0.921875q0.203125 -0.4375 0.203125 -1.3125l0 -0.484375zm2.666748 1.578125l1.296875 -0.203125q0.109375 0.78125 0.609375 1.203125q0.5 0.421875 1.40625 0.421875q0.90625 0 1.34375 -0.359375q0.4375 -0.375 0.4375 -0.875q0 -0.453125 -0.390625 -0.703125q-0.265625 -0.1875 -1.34375 -0.453125q-1.453125 -0.359375 -2.015625 -0.625q-0.546875 -0.28125 -0.84375 -0.75q-0.28125 -0.46875 -0.28125 -1.046875q0 -0.515625 0.234375 -0.953125q0.234375 -0.453125 0.640625 -0.734375q0.3125 -0.234375 0.84375 -0.390625q0.53125 -0.15625 1.140625 -0.15625q0.90625 0 1.59375 0.265625q0.703125 0.265625 1.03125 0.71875q0.328125 0.4375 0.453125 1.203125l-1.28125 0.171875q-0.09375 -0.609375 -0.515625 -0.9375q-0.421875 -0.34375 -1.1875 -0.34375q-0.90625 0 -1.296875 0.3125q-0.390625 0.296875 -0.390625 0.703125q0 0.25 0.15625 0.453125q0.171875 0.21875 0.515625 0.359375q0.1875 0.0625 1.15625 0.328125q1.40625 0.375 1.953125 0.609375q0.5625 0.234375 0.875 0.703125q0.3125 0.453125 0.3125 1.125q0 0.65625 -0.390625 1.234375q-0.375 0.578125 -1.109375 0.90625q-0.71875 0.3125 -1.640625 0.3125q-1.515625 0 -2.3125 -0.625q-0.78125 -0.625 -1.0 -1.875zm7.859375 2.328125l0 -10.734375l1.3125 0l0 6.125l3.125 -3.171875l1.703125 0l-2.96875 2.890625l3.265625 4.890625l-1.625 0l-2.5625 -3.984375l-0.9375 0.90625l0 3.078125l-1.3125 0zm12.640625 -2.5l1.359375 0.15625q-0.3125 1.203125 -1.1875 1.859375q-0.875 0.65625 -2.234375 0.65625q-1.703125 0 -2.703125 -1.046875q-1.0 -1.046875 -1.0 -2.953125q0 -1.953125 1.015625 -3.03125q1.015625 -1.09375 2.625 -1.09375q1.5625 0 2.546875 1.0625q0.984375 1.0625 0.984375 2.984375q0 0.125 0 0.359375l-5.8125 0q0.078125 1.28125 0.71875 1.96875q0.65625 0.671875 1.640625 0.671875q0.71875 0 1.234375 -0.375q0.515625 -0.390625 0.8125 -1.21875zm-4.328125 -2.140625l4.34375 0q-0.09375 -0.984375 -0.5 -1.46875q-0.625 -0.765625 -1.625 -0.765625q-0.921875 0 -1.546875 0.609375q-0.609375 0.609375 -0.671875 1.625zm7.119812 4.640625l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0zm3.2561646 0l0 -10.734375l1.328125 0l0 10.734375l-1.328125 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m77.403496 68.78227l0 0c0 -11.715397 19.26233 -21.2126 43.02362 -21.2126l0 0c23.761284 0 43.023613 9.497204 43.023613 21.2126l0 0c0 11.715393 -19.26233 21.212593 -43.023613 21.212593l0 0c-23.761292 0 -43.02362 -9.4972 -43.02362 -21.212593z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m77.403496 68.78227l0 0c0 -11.715397 19.26233 -21.2126 43.02362 -21.2126l0 0c23.761284 0 43.023613 9.497204 43.023613 21.2126l0 0c0 11.715393 -19.26233 21.212593 -43.023613 21.212593l0 0c-23.761292 0 -43.02362 -9.4972 -43.02362 -21.212593z" fill-rule="nonzero"></path><path fill="#000000" d="m104.491684 73.862274l0 -10.734379l4.765625 0q1.4375 0 2.1875 0.296875q0.75 0.28125 1.1875 1.0156288q0.453125 0.734375 0.453125 1.609375q0 1.140625 -0.75 1.9375q-0.734375 0.78125 -2.28125 0.984375q0.5625 0.28125 0.859375 0.546875q0.625 0.5625 1.1875 1.421875l1.859375 2.921875l-1.78125 0l-1.421875 -2.234375q-0.625 -0.96875 -1.03125 -1.46875q-0.40625 -0.515625 -0.71875 -0.71875q-0.3125 -0.21875 -0.640625 -0.296875q-0.25 -0.046875 -0.796875 -0.046875l-1.65625 0l0 4.765625l-1.421875 0zm1.421875 -6.0l3.0625 0q0.96875 0 1.515625 -0.203125q0.5625 -0.203125 0.84375 -0.640625q0.28125 -0.4375 0.28125 -0.96875q0 -0.75 -0.5625 -1.234375q-0.546875 -0.5 -1.734375 -0.5l-3.40625 0l0 3.546875zm14.084274 6.0l0 -1.140625q-0.921875 1.3125 -2.46875 1.3125q-0.6875 0 -1.296875 -0.265625q-0.59375 -0.265625 -0.890625 -0.65625q-0.28125 -0.40625 -0.390625 -0.984375q-0.09375 -0.375 -0.09375 -1.21875l0 -4.828125l1.328125 0l0 4.3125q0 1.03125 0.078125 1.390625q0.125 0.53125 0.515625 0.828125q0.40625 0.296875 1.0 0.296875q0.59375 0 1.109375 -0.296875q0.53125 -0.3125 0.75 -0.828125q0.21875 -0.53125 0.21875 -1.53125l0 -4.171875l1.3125 0l0 7.78125l-1.171875 0zm4.260483 0l-1.21875 0l0 -10.734379l1.3125 0l0 3.8281288q0.84375 -1.046875 2.140625 -1.046875q0.71875 0 1.359375 0.296875q0.640625 0.28125 1.046875 0.8125q0.421875 0.515625 0.65625 1.265625q0.234375 0.734375 0.234375 1.578125q0 2.0 -1.0 3.09375q-0.984375 1.078125 -2.375 1.078125q-1.375 0 -2.15625 -1.140625l0 0.96875zm-0.015625 -3.953125q0 1.40625 0.390625 2.03125q0.609375 1.015625 1.671875 1.015625q0.875 0 1.5 -0.75q0.625 -0.75 0.625 -2.234375q0 -1.53125 -0.609375 -2.25q-0.59375 -0.734375 -1.453125 -0.734375q-0.859375 0 -1.5 0.75q-0.625 0.75 -0.625 2.171875zm6.901108 6.953125l-0.15625 -1.234375q0.4375 0.109375 0.75 0.109375q0.453125 0 0.703125 -0.15625q0.265625 -0.140625 0.4375 -0.40625q0.125 -0.1875 0.40625 -0.96875q0.03125 -0.109375 0.109375 -0.328125l-2.953125 -7.796875l1.421875 0l1.625 4.5q0.3125 0.859375 0.5625 1.8125q0.234375 -0.90625 0.546875 -1.78125l1.65625 -4.53125l1.328125 0l-2.96875 7.90625q-0.46875 1.28125 -0.734375 1.765625q-0.359375 0.65625 -0.8125 0.953125q-0.453125 0.3125 -1.078125 0.3125q-0.375 0 -0.84375 -0.15625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m105.9569 86.430504l0 0c0 -11.715393 19.26233 -21.2126 43.023613 -21.2126l0 0c23.761292 0 43.02362 9.497208 43.02362 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761284 0 -43.023613 -9.497208 -43.023613 -21.2126z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m105.9569 86.430504l0 0c0 -11.715393 19.26233 -21.2126 43.023613 -21.2126l0 0c23.761292 0 43.02362 9.497208 43.02362 21.2126l0 0c0 11.715393 -19.26233 21.2126 -43.02362 21.2126l0 0c-23.761284 0 -43.023613 -9.497208 -43.023613 -21.2126z" fill-rule="nonzero"></path><path fill="#000000" d="m140.86615 88.46363l1.28125 -0.171875q0.046875 1.21875 0.453125 1.6875q0.40625 0.453125 1.140625 0.453125q0.53125 0 0.921875 -0.25q0.390625 -0.25 0.53125 -0.671875q0.15625 -0.421875 0.15625 -1.34375l0 -7.390625l1.40625 0l0 7.3125q0 1.34375 -0.328125 2.09375q-0.3125 0.734375 -1.03125 1.125q-0.703125 0.390625 -1.65625 0.390625q-1.40625 0 -2.15625 -0.8125q-0.75 -0.8125 -0.71875 -2.421875zm7.5625 -0.40625l1.34375 -0.109375q0.09375 0.796875 0.4375 1.3125q0.359375 0.515625 1.078125 0.84375q0.734375 0.3125 1.65625 0.3125q0.8125 0 1.4375 -0.234375q0.625 -0.25 0.921875 -0.671875q0.3125 -0.421875 0.3125 -0.921875q0 -0.5 -0.296875 -0.875q-0.296875 -0.375 -0.96875 -0.640625q-0.4375 -0.15625 -1.921875 -0.515625q-1.46875 -0.359375 -2.0625 -0.671875q-0.765625 -0.40625 -1.15625 -1.0q-0.375 -0.59375 -0.375 -1.34375q0 -0.8125 0.453125 -1.515625q0.46875 -0.703125 1.359375 -1.0625q0.890625 -0.375 1.96875 -0.375q1.203125 0 2.109375 0.390625q0.90625 0.375 1.390625 1.125q0.5 0.75 0.546875 1.6875l-1.375 0.109375q-0.109375 -1.015625 -0.75 -1.53125q-0.625 -0.53125 -1.859375 -0.53125q-1.28125 0 -1.875 0.484375q-0.59375 0.46875 -0.59375 1.125q0 0.578125 0.421875 0.953125q0.40625 0.375 2.140625 0.765625q1.734375 0.390625 2.375 0.6875q0.9375 0.4375 1.375 1.109375q0.453125 0.65625 0.453125 1.515625q0 0.859375 -0.5 1.625q-0.484375 0.75 -1.40625 1.171875q-0.90625 0.421875 -2.0625 0.421875q-1.453125 0 -2.4375 -0.421875q-0.984375 -0.4375 -1.546875 -1.28125q-0.5625 -0.859375 -0.59375 -1.9375z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gocon-tokyo/goandroid.png b/content/2014/gocon-tokyo/goandroid.png
deleted file mode 100644
index e88e849..0000000
--- a/content/2014/gocon-tokyo/goandroid.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/gpio.gif b/content/2014/gocon-tokyo/gpio.gif
deleted file mode 100644
index 206a006..0000000
--- a/content/2014/gocon-tokyo/gpio.gif
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/sigourney.png b/content/2014/gocon-tokyo/sigourney.png
deleted file mode 100644
index bdf9a4e..0000000
--- a/content/2014/gocon-tokyo/sigourney.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/spaghetti.jpg b/content/2014/gocon-tokyo/spaghetti.jpg
deleted file mode 100644
index f8fb625..0000000
--- a/content/2014/gocon-tokyo/spaghetti.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/tardis.png b/content/2014/gocon-tokyo/tardis.png
deleted file mode 100644
index 95f9389..0000000
--- a/content/2014/gocon-tokyo/tardis.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gocon-tokyo/trs.png b/content/2014/gocon-tokyo/trs.png
deleted file mode 100644
index 7afc8a0..0000000
--- a/content/2014/gocon-tokyo/trs.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/gotham-context.slide b/content/2014/gotham-context.slide
deleted file mode 100644
index aebaf61..0000000
--- a/content/2014/gotham-context.slide
+++ /dev/null
@@ -1,335 +0,0 @@
-Cancelation, Context, and Plumbing
-GothamGo 2014
-
-Sameer Ajmani
-sameer@golang.org
-
-* Video
-
-This talk was presented at GothamGo in New York City, November 2014.
-
-.link http://vimeo.com/115309491 Watch the talk on Vimeo
-
-* Introduction
-
-In Go servers, each incoming request is handled in its own goroutine.
-
-Handler code needs access to request-specific values:
-
-- security credentials
-- request deadline
-- operation priority
-
-When the request completes or times out, its work should be canceled.
-
-* Cancelation
-
-Abandon work when the caller no longer needs the result.
-
-- user navigates away, closes connection
-- operation exceeds its deadline
-- when using hedged requests, cancel the laggards
-
-Efficiently canceling unneeded work saves resources.
-
-* Cancelation is advisory
-
-Cancelation does not stop execution or trigger panics.
-
-Cancelation informs code that its work is no longer needed.
-
-Code checks for cancelation and decides what to do:
-shut down, clean up, return errors.
-
-* Cancelation is transitive
-
-.image gotham-context/transitive.svg
-
-* Cancelation affects all APIs on the request path
-
-Network protocols support cancelation.
-
-- HTTP: close the connection
-- RPC: send a control message
-
-APIs above network need cancelation, too.
-
-- Database clients
-- Network file system clients
-- Cloud service clients
-
-And all the layers atop those, up to the UI.
-
-*Goal:* provide a uniform cancelation API that works across package boundaries.
-
-* Cancelation APIs
-
-Many Go APIs support cancelation and deadlines already.
-
-Go APIs are synchronous, so cancelation comes from another goroutine.
-
-Method on the connection or client object:
-
-  // goroutine #1
-  result, err := conn.Do(req)
-
-  // goroutine #2
-  conn.Cancel(req)
-
-Method on the request object:
-
-  // goroutine #1
-  result, err := conn.Do(req)
-
-  // goroutine #2
-  req.Cancel()
-
-* Cancelation APIs (continued)
-
-Method on the pending result object:
-
-  // goroutine #1
-  pending := conn.Start(req)
-  ...
-  result, err := pending.Result()
-
-  // goroutine #2
-  pending.Cancel()
-
-
-Different cancelation APIs in each package are a headache.
-
-We need one that's independent of package or transport:
-
-  // goroutine #1
-  result, err := conn.Do(x, req)
-
-  // goroutine #2
-  x.Cancel()
-
-* Context
-
-A `Context` carries a cancelation signal and request-scoped values to all functions running on behalf of the same task.  It's safe for concurrent access.
-
-.code gotham-context/interface.go /type Context/,/^}/
-
-*Idiom:* pass `ctx` as the first argument to a function.
-
-  import "golang.org/x/net/context"
-
-  // ReadFile reads file name and returns its contents.
-  // If ctx.Done is closed, ReadFile returns ctx.Err immediately.
-  func ReadFile(ctx context.Context, name string) ([]byte, error)
-
-Examples and discussion in [[http://blog.golang.org/context][blog.golang.org/context]].
-
-* Contexts are hierarchical
-
-`Context` has no `Cancel` method; obtain a cancelable `Context` using `WithCancel`:
-
-.code gotham-context/interface.go /WithCancel /,/func WithCancel/
-
-Passing a `Context` to a function does not pass the ability to cancel that `Context`.
-
-  // goroutine #1
-  ctx, cancel := context.WithCancel(parent)
-  ...
-  data, err := ReadFile(ctx, name)
-
-  // goroutine #2
-  cancel()
-
-Contexts form a tree, any subtree of which can be canceled.
-
-* Why does Done return a channel?
-
-Closing a channel works well as a broadcast signal.
-
-_After_the_last_value_has_been_received_from_a_closed_channel_c,_any_receive_from_c_will_succeed_without_blocking,_returning_the_zero_value_for_the_channel_element._
-
-Any number of goroutines can `select` on `<-ctx.Done()`.
-
-Examples and discussion in in [[http://blog.golang.org/pipelines][blog.golang.org/pipelines]].
-
-Using `close` requires care.
-
-- closing a nil channel panics
-- closing a closed channel panics
-
-`Done` returns a receive-only channel that can only be canceled using the `cancel` function returned by `WithCancel`.  It ensures the channel is closed exactly once.
-
-* Context values
-
-Contexts carry request-scoped values across API boundaries.
-
-- deadline
-- cancelation signal
-- security credentials
-- distributed trace IDs
-- operation priority
-- network QoS label
-
-RPC clients encode `Context` values onto the wire.
-
-RPC servers decode them into a new `Context` for the handler function.
-
-* Replicated Search
-
-Example from [[https://talks.golang.org/2012/concurrency.slide][Go Concurrency Patterns]].
-
-.code gotham-context/first.go /START1/,/STOP1/
-
-Remaining searches may continue running after First returns.
-
-* Cancelable Search
-
-.code gotham-context/first-context.go /START1/,/STOP1/
-
-* Context plumbing
-
-*Goal:* pass a `Context` parameter from each inbound RPC at a server through the call stack to each outgoing RPC.
-
-.code gotham-context/before.go /START/,/END/
-
-* Context plumbing (after)
-
-.code gotham-context/after.go /START/,/END/
-
-* Problem: Existing and future code
-
-Google has millions of lines of Go code.
-
-We've retrofitted the internal RPC and distributed file system APIs to take a Context.
-
-Lots more to do, growing every day.
-
-* Why not use (something like) thread local storage?
-
-C++ and Java pass request state in thread-local storage.
-
-Requires no API changes, but ...
-requires custom thread and callback libraries.
-
-Mostly works, except when it doesn't. Failures are hard to debug.
-
-Serious consequences if credential-passing bugs affect user privacy.
-
-"Goroutine-local storage" doesn't exist, and even if it did,
-request processing may flow between goroutines via channels.
-
-We won't sacrifice clarity for convenience.
-
-* In Go, pass Context explicitly
-
-Easy to tell when a Context passes between functions, goroutines, and processes.
-
-Invest up front to make the system easier to maintain:
-
-- update relevant functions to accept a `Context`
-- update function calls to provide a `Context`
-- update interface methods and implementations
-
-Go's awesome tools can help.
-
-* Automated refactoring
-
-*Initial*State:*
-
-Pass `context.TODO()` to outbound RPCs.
-
-`context.TODO()` is a sentinel for static analysis tools. Use it wherever a `Context` is needed but there isn't one available.
-
-*Iteration:*
-
-For each function `F(x)` whose body contains `context.TODO()`,
-
-- add a `Context` parameter to `F`
-- update callers to use `F(context.TODO(),`x)`
-- if the caller has a `Context` available, pass it to `F` instead
-
-Repeat until `context.TODO()` is gone.
-
-* Finding relevant functions
-
-The [[http://godoc.org/golang.org/x/tools/cmd/callgraph][golang.org/x/tools/cmd/callgraph]] tool constructs the call graph of a Go program.
-
-It uses whole-program pointer analysis to find dynamic calls (via interfaces or function values).
-
-*For*context*plumbing:*
-
-Find all functions on call paths from `Context` _suppliers_ (inbound RPCs) to `Context` _consumers_ (`context.TODO`).
-
-* Updating function calls
-
-To change add all `F(x)` to `F(context.TODO(),`x)`:
-
-- define `FContext(ctx,`x)`
-- `F(x)` → `FContext(context.TODO(),`x)`
-- change `F(x)` to `F(ctx,`x)`
-- `FContext(context.TODO(),`x)` → `F(context.TODO(),`x)`
-- remove `FContext(ctx,`x)`
-
-* gofmt -r
-
-Works well for simple replacements:
-
-  gofmt -r 'pkg.F(a) -> pkg.FContext(context.TODO(), a)'
-
-But this is too imprecise for methods.  There may be many methods named M:
-
-  gofmt -r 'x.M(y) -> x.MContext(context.TODO(), y)'
-
-We want to restrict the transformation to specific method signatures.
-
-* The eg tool
-
-The [[http://godoc.org/golang.org/x/tools/cmd/eg][golang.org/x/tools/cmd/eg]] tool performs precise example-based refactoring.
-
-The `before` expression specifies a pattern and the `after` expression its replacement.
-
-To replace `x.M(y)` with `x.MContext(context.TODO(),`y)`:
-
-.code gotham-context/eg.go
-
-* Dealing with interfaces
-
-We need to update dynamic calls to `x.M(y)`.
-
-If `M` called via interface `I`, then `I.M` also needs to change.  The eg tool can update call sites with receiver type `I`.
-
-When we change `I`, we need to update all of its implementations.
-
-Find types assignable to `I` using [[http://godoc.org/golang.org/x/tools/go/types][golang.org/x/tools/go/types]].
-
-More to do here.
-
-* What about the standard library?
-
-The Go 1.0 compatibility guarantee means we will not break existing code.
-
-Interfaces like `io.Reader` and `io.Writer` are widely used.
-
-For Google files, used a currying approach:
-
-  f, err := file.Open(ctx, "/gfs/cell/path")
-  ...
-  fio := f.IO(ctx)  // returns an io.ReadWriteCloser that passes ctx
-  data, err := ioutil.ReadAll(fio)
-
-For versioned public packages, add `Context` parameters in a new API version and provide `eg` templates to insert `context.TODO()`.
-
-More to do here.
-
-* Conclusion
-
-Cancelation needs a uniform API across package boundaries.
-
-Retrofitting code is hard, but Go is tool-friendly.
-
-New code should use `Context`.
-
-Links:
-
-- [[http://golang.org/x/net/context][golang.org/x/net/context]] - package
-- [[http://blog.golang.org/context][blog.golang.org/context]] - blog post
-- [[http://golang.org/x/tools/cmd/eg][golang.org/x/tools/cmd/eg]] - eg tool
diff --git a/content/2014/gotham-context/after.go b/content/2014/gotham-context/after.go
deleted file mode 100644
index dbec869..0000000
--- a/content/2014/gotham-context/after.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package after
-
-// START OMIT
-func (*ServiceA) HandleRPC(ctx context.Context, a Arg) {
-	f(ctx, a)
-}
-
-func f(ctx context.Context, a Args) { // HL
-	x.M(ctx, a)
-}
-
-func (x *X) M(ctx context.Context, a Args) { // HL
-	serviceB.IssueRPC(ctx, a)
-}
-
-// END OMIT
diff --git a/content/2014/gotham-context/before.go b/content/2014/gotham-context/before.go
deleted file mode 100644
index 1da89ef..0000000
--- a/content/2014/gotham-context/before.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package before
-
-// START OMIT
-func (*ServiceA) HandleRPC(ctx context.Context, a Arg) {
-	f(a)
-}
-
-func f(a Args) {
-	x.M(a)
-}
-
-func (x *X) M(a Args) {
-	// TODO(sameer): pass a real Context here.
-	serviceB.IssueRPC(context.TODO(), a) // HL
-}
-
-// END OMIT
diff --git a/content/2014/gotham-context/eg.go b/content/2014/gotham-context/eg.go
deleted file mode 100644
index 7f9e9fb..0000000
--- a/content/2014/gotham-context/eg.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package P
-
-import (
-	"xpkg"
-	"ypkg"
-
-	"golang.org/x/net/context"
-)
-
-func before(x xpkg.X, y ypkg.Y) error { // HL
-	return x.M(y)
-}
-
-func after(x xpkg.X, y ypkg.Y) error { // HL
-	return x.MContext(context.TODO(), y)
-}
diff --git a/content/2014/gotham-context/first-context.go b/content/2014/gotham-context/first-context.go
deleted file mode 100644
index 774d881..0000000
--- a/content/2014/gotham-context/first-context.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/net/context"
-)
-
-type Result struct {
-	Hit string
-	Err error
-}
-
-// START1 OMIT
-// Search runs query on a backend and returns the result.
-type Search func(ctx context.Context, query string) Result // HL
-
-// First runs query on replicas and returns the first result.
-func First(ctx context.Context, query string, replicas ...Search) Result {
-	c := make(chan Result, len(replicas))
-	ctx, cancel := context.WithCancel(ctx)                      // HL
-	defer cancel()                                              // HL
-	search := func(replica Search) { c <- replica(ctx, query) } // HL
-	for _, replica := range replicas {
-		go search(replica)
-	}
-	select {
-	case <-ctx.Done(): // HL
-		return Result{Err: ctx.Err()} // HL
-	case r := <-c:
-		return r
-	}
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	result := First(context.Background(),
-		"golang",
-		fakeSearch("replica 1"),
-		fakeSearch("replica 2"))
-	elapsed := time.Since(start)
-	fmt.Printf("%+v\n", result)
-	fmt.Println(elapsed)
-}
-
-// STOP2 OMIT
-
-func fakeSearch(kind string) Search {
-	return func(ctx context.Context, query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result{Hit: fmt.Sprintf("%s result for %q\n", kind, query)}
-	}
-}
diff --git a/content/2014/gotham-context/first.go b/content/2014/gotham-context/first.go
deleted file mode 100644
index e267a81..0000000
--- a/content/2014/gotham-context/first.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START1 OMIT
-// Search runs query on a backend and returns the result.
-type Search func(query string) Result
-type Result struct {
-	Hit string
-	Err error
-}
-
-// First runs query on replicas and returns the first result.
-func First(query string, replicas ...Search) Result {
-	c := make(chan Result, len(replicas))
-	search := func(replica Search) { c <- replica(query) }
-	for _, replica := range replicas {
-		go search(replica)
-	}
-	return <-c
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-func main() {
-	rand.Seed(time.Now().UnixNano())
-	start := time.Now()
-	result := First("golang",
-		fakeSearch("replica 1"),
-		fakeSearch("replica 2"))
-	elapsed := time.Since(start)
-	fmt.Printf("%+v\n", result)
-	fmt.Println(elapsed)
-}
-
-// STOP2 OMIT
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result{Hit: fmt.Sprintf("%s result for %q\n", kind, query)}
-	}
-}
diff --git a/content/2014/gotham-context/interface.go b/content/2014/gotham-context/interface.go
deleted file mode 100644
index 51450c5..0000000
--- a/content/2014/gotham-context/interface.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build ignore,OMIT
-
-package context
-
-import "time"
-
-// A Context carries a deadline, cancelation signal, and request-scoped values
-// across API boundaries. Its methods are safe for simultaneous use by multiple
-// goroutines.
-type Context interface {
-	Done() <-chan struct{}                   // closed when this Context is canceled
-	Err() error                              // why this Context was canceled
-	Deadline() (deadline time.Time, ok bool) // when this Context will be canceled
-	Value(key interface{}) interface{}       // data associated with this Context
-}
-
-// WithCancel returns a copy of parent whose Done channel is closed as soon as
-// parent.Done is closed or cancel is called.
-func WithCancel(parent Context) (ctx Context, cancel CancelFunc)
-
-// A CancelFunc cancels a Context.
-type CancelFunc func()
-
-// WithTimeout returns a copy of parent whose Done channel is closed as soon as
-// parent.Done is closed, cancel is called, or timeout elapses. The new
-// Context's Deadline is the sooner of now+timeout and the parent's deadline, if
-// any. If the timer is still running, the cancel function releases its
-// resources.
-func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc)
-
-// WithValue returns a copy of parent whose Value method returns val for key.
-func WithValue(parent Context, key interface{}, val interface{}) Context
-
-// Background returns an empty Context. It is never canceled, has no deadline,
-// and has no values. Background is typically used in main, init, and tests,
-// and as the top-level Context for incoming requests.
-func Background() Context
diff --git a/content/2014/gotham-context/transitive.svg b/content/2014/gotham-context/transitive.svg
deleted file mode 100644
index e89c01d..0000000
--- a/content/2014/gotham-context/transitive.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 938.0 518.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l938.0 0l0 518.0l-938.0 0l0 -518.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l938.5066 0l0 518.7297l-938.5066 0z" fill-rule="nonzero"></path><path fill="#a2c4c9" d="m193.52625 221.31859l0 0c0 -27.562607 22.343903 -49.90651 49.90651 -49.90651l200.43895 0l0 0c13.236023 0 25.929932 5.2579803 35.289246 14.617279c9.359283 9.359283 14.617279 22.053192 14.617279 35.28923l0 199.62004c0 27.562592 -22.343933 49.906525 -49.906525 49.906525l-200.43895 0c-27.562607 0 -49.90651 -22.343933 -49.90651 -49.906525z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m193.52625 221.31859l0 0c0 -27.562607 22.343903 -49.90651 49.90651 -49.90651l200.43895 0l0 0c13.236023 0 25.929932 5.2579803 35.289246 14.617279c9.359283 9.359283 14.617279 22.053192 14.617279 35.28923l0 199.62004c0 27.562592 -22.343933 49.906525 -49.906525 49.906525l-200.43895 0c-27.562607 0 -49.90651 -22.343933 -49.90651 -49.906525z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m230.32677 206.8348l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l127.99971 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863403 3.298584 2.1863403 5.278351l0 29.857971c0 4.12265 -3.342041 7.4647064 -7.464691 7.4647064l-127.99971 0c-4.12265 0 -7.4647217 -3.3420563 -7.4647217 -7.4647064z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m230.32677 206.8348l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l127.99971 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863403 3.298584 2.1863403 5.278351l0 29.857971c0 4.12265 -3.342041 7.4647064 -7.464691 7.4647064l-127.99971 0c-4.12265 0 -7.4647217 -3.3420563 -7.4647217 -7.4647064z" fill-rule="nonzero"></path><path fill="#000000" d="m250.6754 228.68378l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.0937347 0 1.8906097 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.54685974 -0.578125 -1.5312347 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm16.813217 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078827 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm9.235077 4.921875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.926086 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.375702 5.875l0 -13.59375l1.8125 0l0 5.578125l7.0625 0l0 -5.578125l1.796875 0l0 13.59375l-1.796875 0l0 -6.40625l-7.0625 0l0 6.40625l-1.8125 0zm16.879211 0l0 -12.0l-4.46875 0l0 -1.59375l10.765625 0l0 1.59375l-4.5 0l0 12.0l-1.796875 0zm11.395966 0l0 -12.0l-4.46875 0l0 -1.59375l10.765625 0l0 1.59375l-4.5 0l0 12.0l-1.796875 0zm7.942871 0l0 -13.59375l5.125 0q1.359375 0 2.078125 0.125q1.0 0.171875 1.671875 0.640625q0.671875 0.46875 1.078125 1.3125q0.421875 0.84375 0.421875 1.84375q0 1.734375 -1.109375 2.9375q-1.09375 1.203125 -3.984375 1.203125l-3.484375 0l0 5.53125l-1.796875 0zm1.796875 -7.140625l3.515625 0q1.75 0 2.46875 -0.640625q0.734375 -0.65625 0.734375 -1.828125q0 -0.859375 -0.4375 -1.46875q-0.421875 -0.609375 -1.125 -0.796875q-0.453125 -0.125 -1.671875 -0.125l-3.484375 0l0 4.859375z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m274.59448 300.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m274.59448 300.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path fill="#000000" d="m295.5383 322.01712l5.234375 -13.59375l1.9375 0l5.5625 13.59375l-2.046875 0l-1.59375 -4.125l-5.6875 0l-1.484375 4.125l-1.921875 0zm3.921875 -5.578125l4.609375 0l-1.40625 -3.78125q-0.65625 -1.703125 -0.96875 -2.8125q-0.265625 1.3125 -0.734375 2.59375l-1.5 4.0z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m274.59448 380.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m274.59448 380.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999023 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path fill="#000000" d="m296.96017 402.01712l0 -13.59375l5.109375 0q1.546875 0 2.484375 0.40625q0.953125 0.40625 1.484375 1.265625q0.53125 0.859375 0.53125 1.796875q0 0.875 -0.46875 1.65625q-0.46875 0.765625 -1.4375 1.234375q1.234375 0.359375 1.890625 1.234375q0.671875 0.875 0.671875 2.0625q0 0.953125 -0.40625 1.78125q-0.390625 0.8125 -0.984375 1.265625q-0.59375 0.4375 -1.5 0.671875q-0.890625 0.21875 -2.1875 0.21875l-5.1875 0zm1.796875 -7.890625l2.9375 0q1.203125 0 1.71875 -0.15625q0.6875 -0.203125 1.03125 -0.671875q0.359375 -0.46875 0.359375 -1.1875q0 -0.671875 -0.328125 -1.1875q-0.328125 -0.515625 -0.9375 -0.703125q-0.59375 -0.203125 -2.0625 -0.203125l-2.71875 0l0 4.109375zm0 6.28125l3.390625 0q0.875 0 1.21875 -0.0625q0.625 -0.109375 1.046875 -0.359375q0.421875 -0.265625 0.6875 -0.765625q0.265625 -0.5 0.265625 -1.140625q0 -0.765625 -0.390625 -1.328125q-0.390625 -0.5625 -1.078125 -0.78125q-0.6875 -0.234375 -1.984375 -0.234375l-3.15625 0l0 4.671875z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m412.72833 300.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999329 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m412.72833 300.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999329 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path fill="#000000" d="m440.49762 316.689l0 -1.609375l5.765625 0l0 5.046875q-1.328125 1.0625 -2.75 1.59375q-1.40625 0.53125 -2.890625 0.53125q-2.0 0 -3.640625 -0.859375q-1.625 -0.859375 -2.46875 -2.484375q-0.828125 -1.625 -0.828125 -3.625q0 -1.984375 0.828125 -3.703125q0.828125 -1.71875 2.390625 -2.546875q1.5625 -0.84375 3.59375 -0.84375q1.46875 0 2.65625 0.484375q1.203125 0.46875 1.875 1.328125q0.671875 0.84375 1.03125 2.21875l-1.625 0.4375q-0.3125 -1.03125 -0.765625 -1.625q-0.453125 -0.59375 -1.296875 -0.953125q-0.84375 -0.359375 -1.875 -0.359375q-1.234375 0 -2.140625 0.375q-0.890625 0.375 -1.453125 1.0q-0.546875 0.609375 -0.84375 1.34375q-0.53125 1.25 -0.53125 2.734375q0 1.8125 0.625 3.046875q0.640625 1.21875 1.828125 1.8125q1.203125 0.59375 2.546875 0.59375q1.171875 0 2.28125 -0.453125q1.109375 -0.453125 1.6875 -0.953125l0 -2.53125l-4.0 0z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m412.72833 380.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999329 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m412.72833 380.16812l0 0c0 -4.12265 3.3420715 -7.4647217 7.4647217 -7.4647217l39.464264 0c1.9797668 0 3.8784485 0.7864685 5.278351 2.1863708c1.3999329 1.3999023 2.1863708 3.298584 2.1863708 5.278351l0 29.857971c0 4.12265 -3.3420715 7.4647217 -7.4647217 7.4647217l-39.464264 0c-4.12265 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path fill="#000000" d="m434.70435 402.01712l0 -13.59375l1.8125 0l0 5.578125l7.0625 0l0 -5.578125l1.796875 0l0 13.59375l-1.796875 0l0 -6.40625l-7.0625 0l0 6.40625l-1.8125 0z" fill-rule="nonzero"></path><path fill="#e69138" d="m250.59448 61.769028l0 0c0 -28.275238 22.92163 -51.19685 51.19687 -51.19685c28.275238 0 51.19684 22.921612 51.19684 51.19685c0 28.275246 -22.9216 51.196854 -51.19684 51.196854c-28.275238 0 -51.19687 -22.921608 -51.19687 -51.196854z" fill-rule="nonzero"></path><path fill="#b7732c" d="m280.05637 46.45738c0 -2.9453354 2.3876953 -5.333004 5.333008 -5.333004c2.945343 0 5.333008 2.3876686 5.333008 5.333004c0 2.9453392 -2.3876648 5.333004 -5.333008 5.333004c-2.9453125 0 -5.333008 -2.3876648 -5.333008 -5.333004m32.803925 0c0 -2.9453354 2.3876648 -5.333004 5.333008 -5.333004c2.945343 0 5.333008 2.3876686 5.333008 5.333004c0 2.9453392 -2.3876648 5.333004 -5.333008 5.333004c-2.945343 0 -5.333008 -2.3876648 -5.333008 -5.333004" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m274.0423 84.09632q27.749054 19.05751 55.433258 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m250.59448 61.769028l0 0c0 -28.275238 22.92163 -51.19685 51.19687 -51.19685c28.275238 0 51.19684 22.921612 51.19684 51.19685c0 28.275246 -22.9216 51.196854 -51.19684 51.196854c-28.275238 0 -51.19687 -22.921608 -51.19687 -51.196854z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m280.05637 46.45738c0 -2.9453354 2.3876953 -5.333004 5.333008 -5.333004c2.945343 0 5.333008 2.3876686 5.333008 5.333004c0 2.9453392 -2.3876648 5.333004 -5.333008 5.333004c-2.9453125 0 -5.333008 -2.3876648 -5.333008 -5.333004m32.803925 0c0 -2.9453354 2.3876648 -5.333004 5.333008 -5.333004c2.945343 0 5.333008 2.3876686 5.333008 5.333004c0 2.9453392 -2.3876648 5.333004 -5.333008 5.333004c-2.945343 0 -5.333008 -2.3876648 -5.333008 -5.333004" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m274.0423 84.09632q27.749054 19.05751 55.433258 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m250.59448 61.769028l0 0c0 -28.275238 22.92163 -51.19685 51.19687 -51.19685c28.275238 0 51.19684 22.921612 51.19684 51.19685c0 28.275246 -22.9216 51.196854 -51.19684 51.196854c-28.275238 0 -51.19687 -22.921608 -51.19687 -51.196854z" fill-rule="nonzero"></path><path fill="#a2c4c9" d="m563.6575 380.8614l0 0c0 -14.061066 11.398743 -25.459808 25.459839 -25.459808l130.4032 0c6.7523193 0 13.228149 2.682373 18.002808 7.4570007c4.774658 4.774658 7.45697 11.250458 7.45697 18.002808l0 101.83627c0 14.061066 -11.398743 25.459808 -25.459778 25.459808l-130.4032 0c-14.061096 0 -25.459839 -11.398743 -25.459839 -25.459808z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m563.6575 380.8614l0 0c0 -14.061066 11.398743 -25.459808 25.459839 -25.459808l130.4032 0c6.7523193 0 13.228149 2.682373 18.002808 7.4570007c4.774658 4.774658 7.45697 11.250458 7.45697 18.002808l0 101.83627c0 14.061066 -11.398743 25.459808 -25.459778 25.459808l-130.4032 0c-14.061096 0 -25.459839 -11.398743 -25.459839 -25.459808z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m583.2638 380.4658l0 0c0 -4.12265 3.342041 -7.4647217 7.4647217 -7.4647217l127.999695 0c1.9797363 0 3.878418 0.7864685 5.2783203 2.1863708c1.3999023 1.3999023 2.1864014 3.298584 2.1864014 5.278351l0 29.857971c0 4.12265 -3.342102 7.464691 -7.4647217 7.464691l-127.999695 0c-4.1226807 0 -7.4647217 -3.342041 -7.4647217 -7.464691z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m583.2638 380.4658l0 0c0 -4.12265 3.342041 -7.4647217 7.4647217 -7.4647217l127.999695 0c1.9797363 0 3.878418 0.7864685 5.2783203 2.1863708c1.3999023 1.3999023 2.1864014 3.298584 2.1864014 5.278351l0 29.857971c0 4.12265 -3.342102 7.464691 -7.4647217 7.464691l-127.999695 0c-4.1226807 0 -7.4647217 -3.342041 -7.4647217 -7.464691z" fill-rule="nonzero"></path><path fill="#000000" d="m608.2719 402.31476l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.09375 0 1.890625 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.546875 -0.578125 -1.53125 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm16.813232 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0787964 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm9.235107 4.921875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.926086 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.360107 5.875l0 -13.59375l6.03125 0q1.8125 0 2.75 0.359375q0.953125 0.359375 1.515625 1.296875q0.5625 0.921875 0.5625 2.046875q0 1.453125 -0.9375 2.453125q-0.921875 0.984375 -2.890625 1.25q0.71875 0.34375 1.09375 0.671875q0.78125 0.734375 1.484375 1.8125l2.375 3.703125l-2.265625 0l-1.796875 -2.828125q-0.796875 -1.21875 -1.3125 -1.875q-0.5 -0.65625 -0.90625 -0.90625q-0.40625 -0.265625 -0.8125 -0.359375q-0.3125 -0.078125 -1.015625 -0.078125l-2.078125 0l0 6.046875l-1.796875 0zm1.796875 -7.59375l3.859375 0q1.234375 0 1.921875 -0.25q0.703125 -0.265625 1.0625 -0.828125q0.375 -0.5625 0.375 -1.21875q0 -0.96875 -0.703125 -1.578125q-0.703125 -0.625 -2.21875 -0.625l-4.296875 0l0 4.5zm11.644775 7.59375l0 -13.59375l5.125 0q1.359375 0 2.078125 0.125q1.0 0.171875 1.671875 0.640625q0.671875 0.46875 1.078125 1.3125q0.421875 0.84375 0.421875 1.84375q0 1.734375 -1.109375 2.9375q-1.09375 1.203125 -3.984375 1.203125l-3.484375 0l0 5.53125l-1.796875 0zm1.796875 -7.140625l3.515625 0q1.75 0 2.46875 -0.640625q0.734375 -0.65625 0.734375 -1.828125q0 -0.859375 -0.4375 -1.46875q-0.421875 -0.609375 -1.125 -0.796875q-0.453125 -0.125 -1.671875 -0.125l-3.484375 0l0 4.859375zm20.349854 2.375l1.796875 0.453125q-0.5625 2.21875 -2.03125 3.390625q-1.46875 1.15625 -3.59375 1.15625q-2.203125 0 -3.578125 -0.890625q-1.375 -0.90625 -2.09375 -2.59375q-0.71875 -1.703125 -0.71875 -3.65625q0 -2.125 0.796875 -3.703125q0.8125 -1.578125 2.3125 -2.390625q1.5 -0.828125 3.296875 -0.828125q2.046875 0 3.4375 1.046875q1.390625 1.03125 1.9375 2.90625l-1.765625 0.421875q-0.46875 -1.484375 -1.375 -2.15625q-0.90625 -0.6875 -2.265625 -0.6875q-1.5625 0 -2.625 0.75q-1.046875 0.75 -1.484375 2.03125q-0.421875 1.265625 -0.421875 2.609375q0 1.734375 0.5 3.03125q0.515625 1.28125 1.578125 1.921875q1.078125 0.640625 2.3125 0.640625q1.515625 0 2.5625 -0.859375q1.046875 -0.875 1.421875 -2.59375z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m627.5315 456.7335l0 0c0 -4.12265 3.342041 -7.4647217 7.4647217 -7.4647217l39.464294 0c1.9797363 0 3.878418 0.7864685 5.2783203 2.1863708c1.3999023 1.3999023 2.1863403 3.298584 2.1863403 5.278351l0 29.857971c0 4.12265 -3.342041 7.4647217 -7.4646606 7.4647217l-39.464294 0c-4.1226807 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m627.5315 456.7335l0 0c0 -4.12265 3.342041 -7.4647217 7.4647217 -7.4647217l39.464294 0c1.9797363 0 3.878418 0.7864685 5.2783203 2.1863708c1.3999023 1.3999023 2.1863403 3.298584 2.1863403 5.278351l0 29.857971c0 4.12265 -3.342041 7.4647217 -7.4646606 7.4647217l-39.464294 0c-4.1226807 0 -7.4647217 -3.3420715 -7.4647217 -7.4647217z" fill-rule="nonzero"></path><path fill="#000000" d="m650.59283 478.5825l0 -13.59375l9.171875 0l0 1.59375l-7.375 0l0 4.21875l6.375 0l0 1.609375l-6.375 0l0 6.171875l-1.796875 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m301.79135 112.96588l0 86.39371" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,6.0" d="m301.79135 112.96588l0 74.39369" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m298.48788 187.35957l3.3034668 9.076202l3.3034668 -9.076202z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m301.79135 244.15747l0 48.53543" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m301.79135 244.15749l0 36.535416" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m298.48788 280.6929l3.3034668 9.076202l3.3034668 -9.076202z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m301.79135 337.4908l0 35.212585" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m301.79135 337.4908l0 23.212585" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m298.48788 360.7034l3.3034668 9.076202l3.3034668 -9.076202z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m328.9882 315.0971l83.74802 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="2.0,6.0" d="m328.9882 315.0971l71.74802 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m400.7362 318.40057l9.076202 -3.3034668l-9.076202 -3.3034668z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m439.9252 337.4908l0 35.212585" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m439.9252 337.4908l0 23.212585" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m436.62173 360.7034l3.3034668 9.076202l3.3034668 -9.076202z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m467.12204 395.0971l116.12601 0.28347778" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="8.0,6.0" d="m467.12204 395.0971l104.12601 0.2541809" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m571.24 398.65475l9.0842285 -3.281311l-9.068115 -3.3256226z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m654.72833 417.78845l0 31.496063" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m654.72833 417.78848l0 19.496063" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="2.0" stroke-linecap="butt" d="m651.42487 437.28455l3.3034668 9.076172l3.3034668 -9.076172z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m332.18738 279.88574l75.74802 -0.03149414l0 35.212585l-75.74802 0.03152466z" fill-rule="nonzero"></path><path fill="#000000" d="m342.31238 307.4578l2.96875 0.35812378q0.078125 0.5155945 0.34375 0.7030029q0.375 0.2810669 1.171875 0.28076172q1.03125 -4.272461E-4 1.53125 -0.29751587q0.34375 -0.20327759 0.515625 -0.6564636q0.125 -0.32818604 0.125 -1.203186l0 -1.4375q-1.171875 1.5942383 -2.953125 1.5949707q-1.984375 8.239746E-4 -3.140625 -1.6705627q-0.90625 -1.3277588 -0.90625 -3.3121338q0 -2.46875 1.1875 -3.7817383q1.1875 -1.3129883 2.96875 -1.3137207q1.828125 -7.6293945E-4 3.015625 1.6081238l0 -1.390625l2.4375 -0.0010375977l0 8.84375q0 1.75 -0.296875 2.6095276q-0.28125 0.85946655 -0.796875 1.3440552q-0.515625 0.5002136 -1.390625 0.78182983q-0.859375 0.2816162 -2.1875 0.28216553q-2.515625 0.0010375977 -3.5625 -0.85787964q-1.046875 -0.85894775 -1.046875 -2.1714478q0 -0.140625 0.015625 -0.3125zm2.328125 -5.7822266q0 1.5625 0.609375 2.2966309q0.609375 0.71847534 1.5 0.71810913q0.953125 -3.9672852E-4 1.609375 -0.7350464q0.65625 -0.75027466 0.65625 -2.2190247q0 -1.53125 -0.640625 -2.2653503q-0.625 -0.74972534 -1.578125 -0.7493286q-0.9375 3.6621094E-4 -1.546875 0.73501587q-0.609375 0.71899414 -0.609375 2.2189941zm8.708466 0.05886841q0 -1.296875 0.640625 -2.5158691q0.640625 -1.2190247 1.8125 -1.8601379q1.171875 -0.6411133 2.609375 -0.64172363q2.25 -9.1552734E-4 3.671875 1.4515991q1.421875 1.4525452 1.421875 3.6712952q0 2.234375 -1.4375 3.7037354q-1.4375 1.4693298 -3.625 1.4702454q-1.359375 5.493164E-4 -2.59375 -0.6083069q-1.21875 -0.6088562 -1.859375 -1.7960815q-0.640625 -1.1872559 -0.640625 -2.8747559zm2.671875 0.13952637q0 1.46875 0.6875 2.2497253q0.703125 0.7653198 1.71875 0.7648926q1.015625 -4.272461E-4 1.703125 -0.7663269q0.703125 -0.7815552 0.703125 -2.2659302q0 -1.453125 -0.703125 -2.2340698q-0.6875 -0.78097534 -1.703125 -0.7805481q-1.015625 4.272461E-4 -1.71875 0.7819824q-0.6875 0.78152466 -0.6875 2.2502747zm20.84491 -0.08679199l0 -2.296875l5.921875 -0.0024719238l0 5.421875q-0.859375 0.8284912 -2.5 1.4697876q-1.640625 0.6413269 -3.3125 0.6419983q-2.140625 9.1552734E-4 -3.734375 -0.8890686q-1.578125 -0.9055786 -2.375 -2.561493q-0.796875 -1.6715393 -0.796875 -3.6246643q0 -2.125 0.890625 -3.7816467q0.890625 -1.6566162 2.609375 -2.532318q1.3125 -0.6724243 3.25 -0.6732178q2.546875 -0.0010681152 3.96875 1.0608215q1.421875 1.0619202 1.828125 2.9367676l-2.734375 0.50112915q-0.28125 -0.9998779 -1.078125 -1.5776978q-0.796875 -0.5777893 -1.984375 -0.5772705q-1.796875 7.324219E-4 -2.859375 1.1417847q-1.0625 1.1410828 -1.0625 3.3910828q0 2.421875 1.078125 3.6401672q1.078125 1.2026978 2.828125 1.2019653q0.859375 -3.6621094E-4 1.71875 -0.34448242q0.875 -0.3441162 1.5 -0.82873535l0 -1.71875l-3.15625 0.0013122559zm12.495819 8.994812l-1.796875 7.324219E-4q-1.40625 -2.1400452 -2.15625 -4.4522095q-0.734375 -2.3121948 -0.734375 -4.468445q0 -2.6875 0.90625 -5.0785217q0.796875 -2.0784607 2.03125 -3.8289795l1.78125 -7.324219E-4q-1.28125 2.8130493 -1.765625 4.7819824q-0.46875 1.9689636 -0.46875 4.1720886q0 1.53125 0.28125 3.124878q0.28125 1.5936279 0.78125 3.0309143q0.328125 0.9530029 1.140625 2.7182922zm1.165802 -4.8828125E-4q0.765625 -1.6565857 1.078125 -2.5473328q0.328125 -0.8751221 0.59375 -2.0158691q0.265625 -1.1563721 0.390625 -2.1876526q0.140625 -1.031311 0.140625 -2.125061q0 -2.203125 -0.484375 -4.171692q-0.46875 -1.9685364 -1.734375 -4.7805176l1.765625 -7.324219E-4q1.40625 1.9837952 2.171875 4.2334595q0.78125 2.2340698 0.78125 4.530945q0 1.9375 -0.609375 4.156494q-0.703125 2.4846802 -2.296875 4.907196l-1.796875 7.6293945E-4z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m300.7257 122.03674l75.74805 0l0 31.496063l-75.74805 0z" fill-rule="nonzero"></path><path fill="#000000" d="m311.11633 148.95674l0 -13.59375l2.75 0l0 5.34375l5.375 0l0 -5.34375l2.75 0l0 13.59375l-2.75 0l0 -5.953125l-5.375 0l0 5.953125l-2.75 0zm16.519836 0l0 -11.296875l-4.03125 0l0 -2.296875l10.8125 0l0 2.296875l-4.03125 0l0 11.296875l-2.75 0zm11.395966 0l0 -11.296875l-4.03125 0l0 -2.296875l10.8125 0l0 2.296875l-4.03125 0l0 11.296875l-2.75 0zm8.333496 0l0 -13.59375l4.421875 0q2.5 0 3.265625 0.203125q1.15625 0.296875 1.9375 1.328125q0.796875 1.015625 0.796875 2.640625q0 1.25 -0.453125 2.109375q-0.453125 0.859375 -1.15625 1.34375q-0.703125 0.484375 -1.421875 0.640625q-0.984375 0.203125 -2.84375 0.203125l-1.796875 0l0 5.125l-2.75 0zm2.75 -11.296875l0 3.859375l1.5 0q1.625 0 2.171875 -0.21875q0.546875 -0.21875 0.859375 -0.671875q0.3125 -0.453125 0.3125 -1.046875q0 -0.75 -0.4375 -1.234375q-0.4375 -0.484375 -1.09375 -0.59375q-0.5 -0.09375 -1.984375 -0.09375l-1.328125 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m498.58084 359.88452l61.858246 0l0 35.212585l-61.858246 0z" fill-rule="nonzero"></path><path fill="#000000" d="m508.97147 386.8045l0 -13.59375l5.7812195 0q2.1875 0 3.171875 0.359375q0.984375 0.359375 1.578125 1.296875q0.59375 0.9375 0.59375 2.15625q0 1.53125 -0.90625 2.53125q-0.890625 0.984375 -2.6875 1.25q0.890625 0.515625 1.46875 1.140625q0.578125 0.625 1.5625 2.203125l1.671875 2.65625l-3.296875 0l-1.984375 -2.953125q-1.046875 -1.59375 -1.4375 -2.0q-0.390625 -0.421875 -0.828125 -0.5625q-0.4375 -0.15625 -1.390625 -0.15625l-0.5468445 0l0 5.671875l-2.75 0zm2.75 -7.84375l2.0312195 0q1.96875 0 2.453125 -0.171875q0.5 -0.171875 0.78125 -0.578125q0.28125 -0.40625 0.28125 -1.015625q0 -0.6875 -0.375 -1.109375q-0.359375 -0.421875 -1.03125 -0.53125q-0.328125 -0.046875 -2.0 -0.046875l-2.1405945 0l0 3.453125zm10.707306 7.84375l0 -13.59375l4.421875 0q2.5 0 3.265625 0.203125q1.15625 0.296875 1.9375 1.328125q0.796875 1.015625 0.796875 2.640625q0 1.25 -0.453125 2.109375q-0.453125 0.859375 -1.15625 1.34375q-0.703125 0.484375 -1.421875 0.640625q-0.984375 0.203125 -2.84375 0.203125l-1.796875 0l0 5.125l-2.75 0zm2.75 -11.296875l0 3.859375l1.5 0q1.625 0 2.171875 -0.21875q0.546875 -0.21875 0.859375 -0.671875q0.3125 -0.453125 0.3125 -1.046875q0 -0.75 -0.4375 -1.234375q-0.4375 -0.484375 -1.09375 -0.59375q-0.5 -0.09375 -1.984375 -0.09375l-1.328125 0zm18.396729 6.296875l2.671875 0.84375q-0.609375 2.21875 -2.046875 3.3125q-1.421875 1.078125 -3.609375 1.078125q-2.703125 0 -4.453125 -1.84375q-1.734375 -1.859375 -1.734375 -5.078125q0 -3.390625 1.75 -5.265625q1.75 -1.875 4.609375 -1.875q2.5 0 4.046875 1.46875q0.9375 0.875 1.390625 2.5l-2.71875 0.65625q-0.234375 -1.0625 -1.0 -1.671875q-0.765625 -0.609375 -1.859375 -0.609375q-1.515625 0 -2.453125 1.09375q-0.9375 1.078125 -0.9375 3.5q0 2.578125 0.921875 3.6875q0.921875 1.09375 2.40625 1.09375q1.109375 0 1.890625 -0.6875q0.78125 -0.703125 1.125 -2.203125z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/gothamgo-android.slide b/content/2014/gothamgo-android.slide
deleted file mode 100644
index ec9fd1c..0000000
--- a/content/2014/gothamgo-android.slide
+++ /dev/null
@@ -1,149 +0,0 @@
-Go on Android
-
-GothamGo
-15 Nov 2014
-
-David Crawshaw
-Google
-@davidcrawshaw
-
-* Video
-
-This talk was presented at GothamGo in New York City, November 2014.
-
-.link http://vimeo.com/115307069 Watch the talk on Vimeo
-
-* Go on Mobile
-
-The goal is to bring Go to Android and iOS,
-starting with Android.
-
-This is new territory for Go and a well-established
-ecosystem. A lot of experimentation is necessary.
-
-* Today
-
-* Go 1.4 Status
-
-The coming 1.4 release can build binaries for Android OS.
-
-With the `mobile` subrepository and the Android SDK/NDK, it can:
-
-- Build `.so` files for linking into Android Apps
-- Build apps based on NativeActivity ("All Go")
-
-* What's there
-
-- Go standard library tests running on Android OS
-
-- JDK / runtime hooks
-
-- The `gobind` tool, for calling Go from Java: [[http://golang.org/s/gobind]]
-
-Packages for cross-device apps:
-
-- [[https://godoc.org/golang.org/x/mobile/app][App control]]
-
-- [[https://godoc.org/golang.org/x/mobile/gl][OpenGL ES 2]]
-
-- [[https://godoc.org/golang.org/x/mobile/event][Touch events]]
-
-- [[https://godoc.org/golang.org/x/mobile/geom][Screen geometry]]
-
-* What's missing — a good build system
-
-There's more than one way to build an Android App.
-
-None of them
-
-- fit well with what go programmers expect (the go tool)
-- work for cross-device development
-
-We are working on this for Go 1.5.
-
-Until it is done, using Go on Android requires some bravery.
-
-* What it's for — the two kinds of apps
-
-*SDK* *Apps*
-
-Write your Android UI in Java.
-Write your iOS UI in Objective-C/Swift.
-Write your logic in Go.
-
-Share the Go using interfaces generated by `gobind`.
-
-*NDK* *Apps*
-
-Games.
-
-Use OpenGL or the coming 2D [[http://godoc.org/golang.org/x/mobile/sprite][sprite]] package to write to the screen.
-Everything is written in Go.
-
-* Hello, World!
-
-Portable APIs, just Go. This is a complete app:
-
-.play gothamgo-android/red.go
-
-* Write anywhere
-
-Developing with portable APIs means starting from very little.
-It is a lot of work to get going and limits access to device features.
-
-But it also frees us from device-specific build systems.
-
-The app package includes Mac/X11 shims for starting as normal programs.
-We can write Apps anywhere we can write Go.
-
-(Windows coming soon.)
-
-* Touch events
-
-.play gothamgo-android/touch.go
-
-* Package sprite
-
-We are building a 2D rendering and compositing package.
-
-It renders a scene graph. A scene starts with a root
-`*sprite.Node`, which can have child nodes.
-
-Each node may have an affine transform and texture.
-
-Rendering is done in a depth-first traversal of the scene,
-with transforms applied relative to the parent.
-
-Composition is done in OpenGL.
-
-* Sprite — affine transform
-
-.image gothamgo-android/sprite_affine.svg
-
-* Sprite — depth first traversal, applying parent's transforms
-
-.image gothamgo-android/sprite_subtex.svg
-
-* Sprite Demo
-
-* Sprite — what's next
-
-- Rasterizer, CPU-based for now
-
-- Text, based on freetype-go
-
-- Simple UI elements, focused on game menu needs
-
-- Debugging tools
-
-- Performance
-
-* Go 1.5 Plans (July 2015)
-
-- A build system
-
-- OpenAL bindings for sound
-
-- Very basic UI building blocks for game-like apps
-
-- iOS experimental support
diff --git a/content/2014/gothamgo-android/red.go b/content/2014/gothamgo-android/red.go
deleted file mode 100644
index b00a0cf..0000000
--- a/content/2014/gothamgo-android/red.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"golang.org/x/mobile/app"
-	"golang.org/x/mobile/app/debug"
-	"golang.org/x/mobile/gl"
-)
-
-func main() {
-	app.Run(app.Callbacks{
-		Draw: draw,
-	})
-}
-
-func draw() {
-	gl.ClearColor(1, 0, 0, 1) // RGBA value used to clear buffer: red
-	gl.Clear(gl.COLOR_BUFFER_BIT)
-	debug.DrawFPS()
-}
diff --git a/content/2014/gothamgo-android/sprite_affine.svg b/content/2014/gothamgo-android/sprite_affine.svg
deleted file mode 100644
index 1584a6b..0000000
--- a/content/2014/gothamgo-android/sprite_affine.svg
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="900" height="535.2" viewBox="0, 0, 750, 446">
-  <g id="graphs">
-    <g>
-      <g>
-        <path d="M81.429,204.5 L81.429,335.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-        <path d="M78.429,335.5 L81.429,343.5 L84.429,335.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-      </g>
-      <g>
-        <path d="M51,234.5 L182,234.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-        <path d="M182,237.5 L190,234.5 L182,231.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-      </g>
-      <text transform="matrix(1, 0, 0, 1, 196.716, 248.5)">
-        <tspan x="-6.216" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#A8A8A8">x</tspan>
-      </text>
-      <text transform="matrix(1, -0.008, 0.008, 1, 87.5, 358.549)">
-        <tspan x="-6" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#A8A8A8">y</tspan>
-      </text>
-      <path d="M81.89,304.5 L87,304.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <path d="M151.25,234.5 L151.25,242" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <text transform="matrix(1, 0, 0, 1, 69.685, 218.5)">
-        <tspan x="-6.672" y="8.5" font-family="HelveticaNeue-Thin" font-size="24" fill="#A8A8A8">0</tspan>
-      </text>
-      <text transform="matrix(1, 0, 0, 1, 69.685, 304)">
-        <tspan x="-6.672" y="8.5" font-family="HelveticaNeue-Thin" font-size="24" fill="#A8A8A8">1</tspan>
-      </text>
-      <text transform="matrix(1, 0, 0, 1, 150.75, 218.5)">
-        <tspan x="-6.672" y="8.5" font-family="HelveticaNeue-Thin" font-size="24" fill="#A8A8A8">1</tspan>
-      </text>
-    </g>
-    <g>
-      <path d="M327.212,204.5 L327.212,335.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <path d="M324.212,335.5 L327.212,343.5 L330.212,335.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <g>
-      <path d="M296.784,234.5 L427.784,234.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <path d="M427.784,237.5 L435.784,234.5 L427.784,231.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <path d="M327.674,304.5 L332.784,304.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-    <path d="M397.034,234.5 L397.034,242" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-    <g>
-      <path d="M577.996,204.5 L577.996,335.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <path d="M574.996,335.5 L577.996,343.5 L580.996,335.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <g>
-      <path d="M547.568,234.5 L678.568,234.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-      <path d="M678.568,237.5 L686.568,234.5 L678.568,231.5 z" fill="#A8A8A8" fill-opacity="1" stroke="#A8A8A8" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <path d="M578.458,304.5 L583.568,304.5" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-    <path d="M647.818,234.5 L647.818,242" fill-opacity="0" stroke="#A8A8A8" stroke-width="1"/>
-  </g>
-  <g id="unit_drawings">
-    <g>
-      <path d="M82.5,235.5 L151.5,235.5 L151.5,304.5 L82.5,304.5 L82.5,235.5 z" fill-opacity="0" stroke="#FFBE9D" stroke-width="1" stroke-dasharray="3,2"/>
-      <g>
-        <path d="M102.566,287.872 C106.827,287.872 110.28,284.341 110.28,279.991 C110.28,275.642 106.827,272.116 102.566,272.116 C98.316,272.116 94.86,275.642 94.86,279.991 C94.86,284.341 98.316,287.872 102.566,287.872 M93.104,279.991 C93.104,274.652 97.349,270.333 102.566,270.333 C107.796,270.333 112.041,274.652 112.041,279.991 C112.041,285.336 107.796,289.653 102.566,289.653 C97.349,289.653 93.104,285.335 93.104,279.991" fill="#FFBE9D"/>
-        <path d="M130.434,287.963 C134.684,287.963 138.136,284.437 138.136,280.088 C138.136,275.738 134.685,272.207 130.434,272.207 C126.173,272.207 122.714,275.738 122.714,280.088 C122.714,284.437 126.173,287.963 130.434,287.963 M120.959,280.088 C120.959,274.743 125.204,270.429 130.434,270.429 C135.646,270.429 139.895,274.744 139.895,280.088 C139.895,285.427 135.646,289.749 130.434,289.749 C125.204,289.749 120.959,285.427 120.959,280.088" fill="#FFBE9D"/>
-        <path d="M120.985,256.51 C122.947,256.51 124.546,254.89 124.546,252.884 C124.546,250.881 122.947,249.251 120.985,249.251 C119.02,249.251 117.423,250.882 117.423,252.884 C117.423,254.891 119.02,256.51 120.985,256.51" fill="#FFBE9D"/>
-        <path d="M121.133,265.326 C120.615,265.337 120.061,265.073 119.653,264.414 L117.339,260.724 L112.568,265.546 L116.989,267.924 C118.808,268.81 118.539,270.444 118.539,270.444 L118.539,280.663 C118.539,281.822 117.624,282.765 116.49,282.765 C115.352,282.765 114.439,281.82 114.439,280.663 L114.439,272.482 L106.769,268.132 C105.855,267.609 105.235,266.61 105.235,265.474 C105.235,264.692 105.521,263.972 105.999,263.437 L113.525,255.742 C114.459,254.667 115.763,254.836 115.763,254.836 C117.339,254.836 118.169,256.243 118.169,256.243 L122.077,262.491 L128.011,262.48 C130.146,262.48 130.146,265.325 128.011,265.325 L121.133,265.325 z" fill="#FFBE9D"/>
-      </g>
-    </g>
-    <path d="M88.182,110.594 L88.182,124.516 L91.557,124.516 Q91.908,124.516 92.061,124.65 Q92.213,124.785 92.213,125.008 Q92.213,125.219 92.061,125.359 Q91.908,125.5 91.557,125.5 L83.822,125.5 Q83.471,125.5 83.318,125.359 Q83.166,125.219 83.166,125.008 Q83.166,124.785 83.318,124.65 Q83.471,124.516 83.822,124.516 L87.197,124.516 L87.197,111.953 L83.986,112.961 Q83.752,113.031 83.646,113.031 Q83.471,113.031 83.324,112.885 Q83.178,112.738 83.178,112.539 Q83.178,112.363 83.295,112.211 Q83.389,112.117 83.682,112.012 z" fill="#000000"/>
-    <path d="M121.018,116.934 L121.018,119.371 Q121.018,122.547 119.506,124.398 Q118.322,125.852 116.518,125.852 Q115.65,125.852 114.883,125.506 Q114.115,125.16 113.576,124.539 Q113.236,124.152 112.832,123.297 Q112.428,122.441 112.252,121.727 Q111.982,120.719 111.982,119.371 L111.982,116.934 Q111.982,113.746 113.494,111.895 Q114.678,110.441 116.482,110.441 Q117.361,110.441 118.123,110.787 Q118.885,111.133 119.424,111.754 Q119.775,112.152 120.174,113.008 Q120.572,113.863 120.76,114.566 Q121.018,115.574 121.018,116.934 z M120.033,117.062 Q120.033,115.668 119.641,114.467 Q119.248,113.266 118.756,112.551 Q118.463,112.141 117.994,111.848 Q117.326,111.438 116.494,111.438 Q114.842,111.438 113.904,113.125 Q112.967,114.812 112.967,117.062 L112.967,119.23 Q112.967,120.625 113.359,121.832 Q113.752,123.039 114.256,123.754 Q114.537,124.152 115.006,124.445 Q115.674,124.867 116.518,124.867 Q118.158,124.867 119.096,123.174 Q120.033,121.48 120.033,119.23 z" fill="#000000"/>
-    <path d="M149.822,116.934 L149.822,119.371 Q149.822,122.547 148.311,124.398 Q147.127,125.852 145.322,125.852 Q144.455,125.852 143.688,125.506 Q142.92,125.16 142.381,124.539 Q142.041,124.152 141.637,123.297 Q141.232,122.441 141.057,121.727 Q140.787,120.719 140.787,119.371 L140.787,116.934 Q140.787,113.746 142.299,111.895 Q143.482,110.441 145.287,110.441 Q146.166,110.441 146.928,110.787 Q147.689,111.133 148.229,111.754 Q148.58,112.152 148.979,113.008 Q149.377,113.863 149.564,114.566 Q149.822,115.574 149.822,116.934 z M148.838,117.062 Q148.838,115.668 148.445,114.467 Q148.053,113.266 147.561,112.551 Q147.268,112.141 146.799,111.848 Q146.131,111.438 145.299,111.438 Q143.646,111.438 142.709,113.125 Q141.771,114.812 141.771,117.062 L141.771,119.23 Q141.771,120.625 142.164,121.832 Q142.557,123.039 143.061,123.754 Q143.342,124.152 143.811,124.445 Q144.479,124.867 145.322,124.867 Q146.963,124.867 147.9,123.174 Q148.838,121.48 148.838,119.23 z" fill="#000000"/>
-    <path d="M92.213,143.934 L92.213,146.371 Q92.213,149.547 90.701,151.398 Q89.518,152.852 87.713,152.852 Q86.846,152.852 86.078,152.506 Q85.311,152.16 84.771,151.539 Q84.432,151.152 84.027,150.297 Q83.623,149.441 83.447,148.727 Q83.178,147.719 83.178,146.371 L83.178,143.934 Q83.178,140.746 84.689,138.895 Q85.873,137.441 87.678,137.441 Q88.557,137.441 89.318,137.787 Q90.08,138.133 90.619,138.754 Q90.971,139.152 91.369,140.008 Q91.768,140.863 91.955,141.566 Q92.213,142.574 92.213,143.934 z M91.229,144.062 Q91.229,142.668 90.836,141.467 Q90.443,140.266 89.951,139.551 Q89.658,139.141 89.189,138.848 Q88.521,138.438 87.689,138.438 Q86.037,138.438 85.1,140.125 Q84.162,141.812 84.162,144.062 L84.162,146.23 Q84.162,147.625 84.555,148.832 Q84.947,150.039 85.451,150.754 Q85.732,151.152 86.201,151.445 Q86.869,151.867 87.713,151.867 Q89.354,151.867 90.291,150.174 Q91.229,148.48 91.229,146.23 z" fill="#000000"/>
-    <path d="M116.986,137.594 L116.986,151.516 L120.361,151.516 Q120.713,151.516 120.865,151.65 Q121.018,151.785 121.018,152.008 Q121.018,152.219 120.865,152.359 Q120.713,152.5 120.361,152.5 L112.627,152.5 Q112.275,152.5 112.123,152.359 Q111.971,152.219 111.971,152.008 Q111.971,151.785 112.123,151.65 Q112.275,151.516 112.627,151.516 L116.002,151.516 L116.002,138.953 L112.791,139.961 Q112.557,140.031 112.451,140.031 Q112.275,140.031 112.129,139.885 Q111.982,139.738 111.982,139.539 Q111.982,139.363 112.1,139.211 Q112.193,139.117 112.486,139.012 z" fill="#000000"/>
-    <path d="M149.822,143.934 L149.822,146.371 Q149.822,149.547 148.311,151.398 Q147.127,152.852 145.322,152.852 Q144.455,152.852 143.688,152.506 Q142.92,152.16 142.381,151.539 Q142.041,151.152 141.637,150.297 Q141.232,149.441 141.057,148.727 Q140.787,147.719 140.787,146.371 L140.787,143.934 Q140.787,140.746 142.299,138.895 Q143.482,137.441 145.287,137.441 Q146.166,137.441 146.928,137.787 Q147.689,138.133 148.229,138.754 Q148.58,139.152 148.979,140.008 Q149.377,140.863 149.564,141.566 Q149.822,142.574 149.822,143.934 z M148.838,144.062 Q148.838,142.668 148.445,141.467 Q148.053,140.266 147.561,139.551 Q147.268,139.141 146.799,138.848 Q146.131,138.438 145.299,138.438 Q143.646,138.438 142.709,140.125 Q141.771,141.812 141.771,144.062 L141.771,146.23 Q141.771,147.625 142.164,148.832 Q142.557,150.039 143.061,150.754 Q143.342,151.152 143.811,151.445 Q144.479,151.867 145.322,151.867 Q146.963,151.867 147.9,150.174 Q148.838,148.48 148.838,146.23 z" fill="#000000"/>
-    <path d="M92.213,170.934 L92.213,173.371 Q92.213,176.547 90.701,178.398 Q89.518,179.852 87.713,179.852 Q86.846,179.852 86.078,179.506 Q85.311,179.16 84.771,178.539 Q84.432,178.152 84.027,177.297 Q83.623,176.441 83.447,175.727 Q83.178,174.719 83.178,173.371 L83.178,170.934 Q83.178,167.746 84.689,165.895 Q85.873,164.441 87.678,164.441 Q88.557,164.441 89.318,164.787 Q90.08,165.133 90.619,165.754 Q90.971,166.152 91.369,167.008 Q91.768,167.863 91.955,168.566 Q92.213,169.574 92.213,170.934 z M91.229,171.062 Q91.229,169.668 90.836,168.467 Q90.443,167.266 89.951,166.551 Q89.658,166.141 89.189,165.848 Q88.521,165.438 87.689,165.438 Q86.037,165.438 85.1,167.125 Q84.162,168.812 84.162,171.062 L84.162,173.23 Q84.162,174.625 84.555,175.832 Q84.947,177.039 85.451,177.754 Q85.732,178.152 86.201,178.445 Q86.869,178.867 87.713,178.867 Q89.354,178.867 90.291,177.174 Q91.229,175.48 91.229,173.23 z" fill="#000000"/>
-    <path d="M121.018,170.934 L121.018,173.371 Q121.018,176.547 119.506,178.398 Q118.322,179.852 116.518,179.852 Q115.65,179.852 114.883,179.506 Q114.115,179.16 113.576,178.539 Q113.236,178.152 112.832,177.297 Q112.428,176.441 112.252,175.727 Q111.982,174.719 111.982,173.371 L111.982,170.934 Q111.982,167.746 113.494,165.895 Q114.678,164.441 116.482,164.441 Q117.361,164.441 118.123,164.787 Q118.885,165.133 119.424,165.754 Q119.775,166.152 120.174,167.008 Q120.572,167.863 120.76,168.566 Q121.018,169.574 121.018,170.934 z M120.033,171.062 Q120.033,169.668 119.641,168.467 Q119.248,167.266 118.756,166.551 Q118.463,166.141 117.994,165.848 Q117.326,165.438 116.494,165.438 Q114.842,165.438 113.904,167.125 Q112.967,168.812 112.967,171.062 L112.967,173.23 Q112.967,174.625 113.359,175.832 Q113.752,177.039 114.256,177.754 Q114.537,178.152 115.006,178.445 Q115.674,178.867 116.518,178.867 Q118.158,178.867 119.096,177.174 Q120.033,175.48 120.033,173.23 z" fill="#000000"/>
-    <path d="M145.791,164.594 L145.791,178.516 L149.166,178.516 Q149.518,178.516 149.67,178.65 Q149.822,178.785 149.822,179.008 Q149.822,179.219 149.67,179.359 Q149.518,179.5 149.166,179.5 L141.432,179.5 Q141.08,179.5 140.928,179.359 Q140.775,179.219 140.775,179.008 Q140.775,178.785 140.928,178.65 Q141.08,178.516 141.432,178.516 L144.807,178.516 L144.807,165.953 L141.596,166.961 Q141.361,167.031 141.256,167.031 Q141.08,167.031 140.934,166.885 Q140.787,166.738 140.787,166.539 Q140.787,166.363 140.904,166.211 Q140.998,166.117 141.291,166.012 z" fill="#000000"/>
-    <path d="M283.014,125.5 L281.467,125.5 L278.678,115.762 L275.947,125.5 L274.4,125.5 L272.947,112.773 L272.584,112.773 Q272.232,112.773 272.08,112.639 Q271.928,112.504 271.928,112.281 Q271.928,112.059 272.08,111.924 Q272.232,111.789 272.584,111.789 L276.24,111.789 Q276.604,111.789 276.756,111.924 Q276.908,112.059 276.908,112.281 Q276.908,112.504 276.756,112.639 Q276.604,112.773 276.24,112.773 L273.943,112.773 L275.244,124.375 L277.904,114.824 L279.416,114.824 L282.146,124.375 L283.424,112.773 L281.115,112.773 Q280.764,112.773 280.611,112.639 Q280.459,112.504 280.459,112.281 Q280.459,112.059 280.611,111.924 Q280.764,111.789 281.115,111.789 L284.748,111.789 Q285.111,111.789 285.264,111.924 Q285.416,112.059 285.416,112.281 Q285.416,112.504 285.264,112.639 Q285.111,112.773 284.748,112.773 L284.385,112.773 z" fill="#000000"/>
-    <path d="M312.018,116.934 L312.018,119.371 Q312.018,122.547 310.506,124.398 Q309.322,125.852 307.518,125.852 Q306.65,125.852 305.883,125.506 Q305.115,125.16 304.576,124.539 Q304.236,124.152 303.832,123.297 Q303.428,122.441 303.252,121.727 Q302.982,120.719 302.982,119.371 L302.982,116.934 Q302.982,113.746 304.494,111.895 Q305.678,110.441 307.482,110.441 Q308.361,110.441 309.123,110.787 Q309.885,111.133 310.424,111.754 Q310.775,112.152 311.174,113.008 Q311.572,113.863 311.76,114.566 Q312.018,115.574 312.018,116.934 z M311.033,117.062 Q311.033,115.668 310.641,114.467 Q310.248,113.266 309.756,112.551 Q309.463,112.141 308.994,111.848 Q308.326,111.438 307.494,111.438 Q305.842,111.438 304.904,113.125 Q303.967,114.812 303.967,117.062 L303.967,119.23 Q303.967,120.625 304.359,121.832 Q304.752,123.039 305.256,123.754 Q305.537,124.152 306.006,124.445 Q306.674,124.867 307.518,124.867 Q309.158,124.867 310.096,123.174 Q311.033,121.48 311.033,119.23 z" fill="#000000"/>
-    <path d="M340.822,116.934 L340.822,119.371 Q340.822,122.547 339.311,124.398 Q338.127,125.852 336.322,125.852 Q335.455,125.852 334.688,125.506 Q333.92,125.16 333.381,124.539 Q333.041,124.152 332.637,123.297 Q332.232,122.441 332.057,121.727 Q331.787,120.719 331.787,119.371 L331.787,116.934 Q331.787,113.746 333.299,111.895 Q334.482,110.441 336.287,110.441 Q337.166,110.441 337.928,110.787 Q338.689,111.133 339.229,111.754 Q339.58,112.152 339.979,113.008 Q340.377,113.863 340.564,114.566 Q340.822,115.574 340.822,116.934 z M339.838,117.062 Q339.838,115.668 339.445,114.467 Q339.053,113.266 338.561,112.551 Q338.268,112.141 337.799,111.848 Q337.131,111.438 336.299,111.438 Q334.646,111.438 333.709,113.125 Q332.771,114.812 332.771,117.062 L332.771,119.23 Q332.771,120.625 333.164,121.832 Q333.557,123.039 334.061,123.754 Q334.342,124.152 334.811,124.445 Q335.479,124.867 336.322,124.867 Q337.963,124.867 338.9,123.174 Q339.838,121.48 339.838,119.23 z" fill="#000000"/>
-    <path d="M283.213,143.934 L283.213,146.371 Q283.213,149.547 281.701,151.398 Q280.518,152.852 278.713,152.852 Q277.846,152.852 277.078,152.506 Q276.311,152.16 275.771,151.539 Q275.432,151.152 275.027,150.297 Q274.623,149.441 274.447,148.727 Q274.178,147.719 274.178,146.371 L274.178,143.934 Q274.178,140.746 275.689,138.895 Q276.873,137.441 278.678,137.441 Q279.557,137.441 280.318,137.787 Q281.08,138.133 281.619,138.754 Q281.971,139.152 282.369,140.008 Q282.768,140.863 282.955,141.566 Q283.213,142.574 283.213,143.934 z M282.229,144.062 Q282.229,142.668 281.836,141.467 Q281.443,140.266 280.951,139.551 Q280.658,139.141 280.189,138.848 Q279.521,138.438 278.689,138.438 Q277.037,138.438 276.1,140.125 Q275.162,141.812 275.162,144.062 L275.162,146.23 Q275.162,147.625 275.555,148.832 Q275.947,150.039 276.451,150.754 Q276.732,151.152 277.201,151.445 Q277.869,151.867 278.713,151.867 Q280.354,151.867 281.291,150.174 Q282.229,148.48 282.229,146.23 z" fill="#000000"/>
-    <path d="M310.834,145.867 L304.307,145.867 L304.307,151.516 L305.631,151.516 Q305.982,151.516 306.135,151.65 Q306.287,151.785 306.287,152.008 Q306.287,152.219 306.135,152.359 Q305.982,152.5 305.631,152.5 L302.209,152.5 Q301.857,152.5 301.705,152.359 Q301.553,152.219 301.553,152.008 Q301.553,151.785 301.705,151.65 Q301.857,151.516 302.209,151.516 L303.322,151.516 L303.322,139.773 L302.713,139.773 Q302.35,139.773 302.197,139.639 Q302.045,139.504 302.045,139.281 Q302.045,139.059 302.197,138.924 Q302.35,138.789 302.713,138.789 L305.631,138.789 Q305.982,138.789 306.135,138.924 Q306.287,139.059 306.287,139.281 Q306.287,139.504 306.135,139.639 Q305.982,139.773 305.631,139.773 L304.307,139.773 L304.307,144.883 L310.834,144.883 L310.834,139.773 L309.521,139.773 Q309.17,139.773 309.018,139.639 Q308.865,139.504 308.865,139.281 Q308.865,139.059 309.012,138.924 Q309.158,138.789 309.521,138.789 L312.439,138.789 Q312.803,138.789 312.955,138.924 Q313.107,139.059 313.107,139.281 Q313.107,139.504 312.955,139.639 Q312.803,139.773 312.439,139.773 L311.83,139.773 L311.83,151.516 L312.943,151.516 Q313.295,151.516 313.447,151.65 Q313.6,151.785 313.6,152.008 Q313.6,152.219 313.447,152.359 Q313.295,152.5 312.943,152.5 L309.521,152.5 Q309.17,152.5 309.018,152.359 Q308.865,152.219 308.865,152.008 Q308.865,151.785 309.012,151.65 Q309.158,151.516 309.521,151.516 L310.834,151.516 z" fill="#000000"/>
-    <path d="M340.822,143.934 L340.822,146.371 Q340.822,149.547 339.311,151.398 Q338.127,152.852 336.322,152.852 Q335.455,152.852 334.688,152.506 Q333.92,152.16 333.381,151.539 Q333.041,151.152 332.637,150.297 Q332.232,149.441 332.057,148.727 Q331.787,147.719 331.787,146.371 L331.787,143.934 Q331.787,140.746 333.299,138.895 Q334.482,137.441 336.287,137.441 Q337.166,137.441 337.928,137.787 Q338.689,138.133 339.229,138.754 Q339.58,139.152 339.979,140.008 Q340.377,140.863 340.564,141.566 Q340.822,142.574 340.822,143.934 z M339.838,144.062 Q339.838,142.668 339.445,141.467 Q339.053,140.266 338.561,139.551 Q338.268,139.141 337.799,138.848 Q337.131,138.438 336.299,138.438 Q334.646,138.438 333.709,140.125 Q332.771,141.812 332.771,144.062 L332.771,146.23 Q332.771,147.625 333.164,148.832 Q333.557,150.039 334.061,150.754 Q334.342,151.152 334.811,151.445 Q335.479,151.867 336.322,151.867 Q337.963,151.867 338.9,150.174 Q339.838,148.48 339.838,146.23 z" fill="#000000"/>
-    <path d="M283.213,170.934 L283.213,173.371 Q283.213,176.547 281.701,178.398 Q280.518,179.852 278.713,179.852 Q277.846,179.852 277.078,179.506 Q276.311,179.16 275.771,178.539 Q275.432,178.152 275.027,177.297 Q274.623,176.441 274.447,175.727 Q274.178,174.719 274.178,173.371 L274.178,170.934 Q274.178,167.746 275.689,165.895 Q276.873,164.441 278.678,164.441 Q279.557,164.441 280.318,164.787 Q281.08,165.133 281.619,165.754 Q281.971,166.152 282.369,167.008 Q282.768,167.863 282.955,168.566 Q283.213,169.574 283.213,170.934 z M282.229,171.062 Q282.229,169.668 281.836,168.467 Q281.443,167.266 280.951,166.551 Q280.658,166.141 280.189,165.848 Q279.521,165.438 278.689,165.438 Q277.037,165.438 276.1,167.125 Q275.162,168.812 275.162,171.062 L275.162,173.23 Q275.162,174.625 275.555,175.832 Q275.947,177.039 276.451,177.754 Q276.732,178.152 277.201,178.445 Q277.869,178.867 278.713,178.867 Q280.354,178.867 281.291,177.174 Q282.229,175.48 282.229,173.23 z" fill="#000000"/>
-    <path d="M312.018,170.934 L312.018,173.371 Q312.018,176.547 310.506,178.398 Q309.322,179.852 307.518,179.852 Q306.65,179.852 305.883,179.506 Q305.115,179.16 304.576,178.539 Q304.236,178.152 303.832,177.297 Q303.428,176.441 303.252,175.727 Q302.982,174.719 302.982,173.371 L302.982,170.934 Q302.982,167.746 304.494,165.895 Q305.678,164.441 307.482,164.441 Q308.361,164.441 309.123,164.787 Q309.885,165.133 310.424,165.754 Q310.775,166.152 311.174,167.008 Q311.572,167.863 311.76,168.566 Q312.018,169.574 312.018,170.934 z M311.033,171.062 Q311.033,169.668 310.641,168.467 Q310.248,167.266 309.756,166.551 Q309.463,166.141 308.994,165.848 Q308.326,165.438 307.494,165.438 Q305.842,165.438 304.904,167.125 Q303.967,168.812 303.967,171.062 L303.967,173.23 Q303.967,174.625 304.359,175.832 Q304.752,177.039 305.256,177.754 Q305.537,178.152 306.006,178.445 Q306.674,178.867 307.518,178.867 Q309.158,178.867 310.096,177.174 Q311.033,175.48 311.033,173.23 z" fill="#000000"/>
-    <path d="M336.791,164.594 L336.791,178.516 L340.166,178.516 Q340.518,178.516 340.67,178.65 Q340.822,178.785 340.822,179.008 Q340.822,179.219 340.67,179.359 Q340.518,179.5 340.166,179.5 L332.432,179.5 Q332.08,179.5 331.928,179.359 Q331.775,179.219 331.775,179.008 Q331.775,178.785 331.928,178.65 Q332.08,178.516 332.432,178.516 L335.807,178.516 L335.807,165.953 L332.596,166.961 Q332.361,167.031 332.256,167.031 Q332.08,167.031 331.934,166.885 Q331.787,166.738 331.787,166.539 Q331.787,166.363 331.904,166.211 Q331.998,166.117 332.291,166.012 z" fill="#000000"/>
-    <g>
-      <path d="M328.5,235.5 L397.5,235.5 L397.5,304.5 L328.5,304.5 L328.5,235.5 z" fill-opacity="0" stroke="#FFBE9D" stroke-width="1" stroke-dasharray="3,2"/>
-      <g>
-        <path d="M348.566,287.872 C352.827,287.872 356.28,284.341 356.28,279.991 C356.28,275.642 352.827,272.116 348.566,272.116 C344.316,272.116 340.86,275.642 340.86,279.991 C340.86,284.341 344.316,287.872 348.566,287.872 M339.105,279.991 C339.105,274.652 343.349,270.333 348.566,270.333 C353.796,270.333 358.041,274.652 358.041,279.991 C358.041,285.336 353.796,289.653 348.566,289.653 C343.349,289.653 339.105,285.335 339.105,279.991" fill="#FFBE9D"/>
-        <path d="M376.434,287.963 C380.684,287.963 384.136,284.437 384.136,280.088 C384.136,275.738 380.685,272.207 376.434,272.207 C372.173,272.207 368.714,275.738 368.714,280.088 C368.714,284.437 372.173,287.963 376.434,287.963 M366.959,280.088 C366.959,274.743 371.204,270.429 376.434,270.429 C381.646,270.429 385.896,274.744 385.896,280.088 C385.896,285.427 381.646,289.749 376.434,289.749 C371.204,289.749 366.959,285.427 366.959,280.088" fill="#FFBE9D"/>
-        <path d="M366.985,256.51 C368.947,256.51 370.546,254.89 370.546,252.884 C370.546,250.881 368.947,249.251 366.985,249.251 C365.02,249.251 363.423,250.882 363.423,252.884 C363.423,254.891 365.02,256.51 366.985,256.51" fill="#FFBE9D"/>
-        <path d="M367.133,265.326 C366.615,265.337 366.061,265.073 365.653,264.414 L363.339,260.724 L358.568,265.546 L362.989,267.924 C364.808,268.81 364.539,270.444 364.539,270.444 L364.539,280.663 C364.539,281.822 363.624,282.765 362.49,282.765 C361.352,282.765 360.439,281.82 360.439,280.663 L360.439,272.482 L352.769,268.132 C351.855,267.609 351.235,266.61 351.235,265.474 C351.235,264.692 351.521,263.972 351.999,263.437 L359.525,255.742 C360.459,254.667 361.763,254.836 361.763,254.836 C363.339,254.836 364.169,256.243 364.169,256.243 L368.077,262.491 L374.011,262.48 C376.147,262.48 376.147,265.325 374.011,265.325 L367.133,265.325 z" fill="#FFBE9D"/>
-      </g>
-    </g>
-    <g>
-      <path d="M578.5,235.5 L647.5,235.5 L647.5,304.5 L578.5,304.5 L578.5,235.5 z" fill-opacity="0" stroke="#FFBE9D" stroke-width="1" stroke-dasharray="3,2"/>
-      <g>
-        <path d="M598.566,287.872 C602.827,287.872 606.28,284.341 606.28,279.991 C606.28,275.642 602.827,272.116 598.566,272.116 C594.316,272.116 590.86,275.642 590.86,279.991 C590.86,284.341 594.316,287.872 598.566,287.872 M589.104,279.991 C589.104,274.652 593.349,270.333 598.566,270.333 C603.796,270.333 608.041,274.652 608.041,279.991 C608.041,285.336 603.796,289.653 598.566,289.653 C593.349,289.653 589.104,285.335 589.104,279.991" fill="#FFBE9D"/>
-        <path d="M626.434,287.963 C630.684,287.963 634.136,284.437 634.136,280.088 C634.136,275.738 630.685,272.207 626.434,272.207 C622.173,272.207 618.714,275.738 618.714,280.088 C618.714,284.437 622.173,287.963 626.434,287.963 M616.959,280.088 C616.959,274.743 621.204,270.429 626.434,270.429 C631.646,270.429 635.896,274.744 635.896,280.088 C635.896,285.427 631.646,289.749 626.434,289.749 C621.204,289.749 616.959,285.427 616.959,280.088" fill="#FFBE9D"/>
-        <path d="M616.985,256.51 C618.947,256.51 620.546,254.89 620.546,252.884 C620.546,250.881 618.947,249.251 616.985,249.251 C615.02,249.251 613.423,250.882 613.423,252.884 C613.423,254.891 615.02,256.51 616.985,256.51" fill="#FFBE9D"/>
-        <path d="M617.133,265.326 C616.615,265.337 616.061,265.073 615.653,264.414 L613.339,260.724 L608.568,265.546 L612.989,267.924 C614.807,268.81 614.539,270.444 614.539,270.444 L614.539,280.663 C614.539,281.822 613.624,282.765 612.49,282.765 C611.352,282.765 610.439,281.82 610.439,280.663 L610.439,272.482 L602.769,268.132 C601.855,267.609 601.235,266.61 601.235,265.474 C601.235,264.692 601.521,263.972 601.999,263.437 L609.525,255.742 C610.459,254.667 611.763,254.836 611.763,254.836 C613.339,254.836 614.169,256.243 614.169,256.243 L618.077,262.491 L624.011,262.48 C626.146,262.48 626.146,265.325 624.011,265.325 L617.133,265.325 z" fill="#FFBE9D"/>
-      </g>
-    </g>
-    <path d="M551.797,116.348 L551.797,116.02 Q551.797,115.656 551.938,115.504 Q552.078,115.352 552.289,115.352 Q552.512,115.352 552.652,115.504 Q552.793,115.656 552.793,116.02 L552.793,118.246 Q552.781,118.609 552.646,118.762 Q552.512,118.914 552.289,118.914 Q552.09,118.914 551.955,118.779 Q551.82,118.645 551.797,118.328 Q551.727,117.496 550.701,116.746 Q549.676,115.996 547.941,115.996 Q545.75,115.996 544.613,117.367 Q543.477,118.738 543.477,120.508 Q543.477,122.418 544.73,123.66 Q545.984,124.902 547.977,124.902 Q549.125,124.902 550.314,124.48 Q551.504,124.059 552.465,123.121 Q552.711,122.887 552.898,122.887 Q553.098,122.887 553.232,123.021 Q553.367,123.156 553.367,123.355 Q553.367,123.859 552.184,124.633 Q550.273,125.887 547.93,125.887 Q545.551,125.887 544.021,124.369 Q542.492,122.852 542.492,120.52 Q542.492,118.141 544.057,116.57 Q545.621,115 548,115 Q550.262,115 551.797,116.348 z" fill="#000000"/>
-    <path d="M567.594,120.449 Q567.594,122.699 565.982,124.293 Q564.371,125.887 562.098,125.887 Q559.801,125.887 558.195,124.287 Q556.59,122.688 556.59,120.449 Q556.59,118.199 558.195,116.6 Q559.801,115 562.098,115 Q564.371,115 565.982,116.594 Q567.594,118.188 567.594,120.449 z M566.598,120.449 Q566.598,118.598 565.279,117.297 Q563.961,115.996 562.086,115.996 Q560.211,115.996 558.893,117.303 Q557.574,118.609 557.574,120.449 Q557.574,122.277 558.893,123.59 Q560.211,124.902 562.086,124.902 Q563.961,124.902 565.279,123.596 Q566.598,122.289 566.598,120.449 z" fill="#000000"/>
-    <path d="M579.746,115.996 Q579.746,115.656 579.887,115.504 Q580.027,115.352 580.238,115.352 Q580.461,115.352 580.602,115.504 Q580.742,115.656 580.742,116.02 L580.742,117.707 Q580.742,118.059 580.602,118.211 Q580.461,118.363 580.238,118.363 Q580.039,118.363 579.904,118.234 Q579.77,118.105 579.746,117.812 Q579.676,117.109 579.02,116.652 Q578.059,115.996 576.477,115.996 Q574.824,115.996 573.91,116.664 Q573.219,117.168 573.219,117.789 Q573.219,118.492 574.039,118.961 Q574.602,119.289 576.172,119.465 Q578.223,119.688 579.02,119.969 Q580.156,120.379 580.713,121.105 Q581.27,121.832 581.27,122.676 Q581.27,123.93 580.062,124.908 Q578.855,125.887 576.523,125.887 Q574.191,125.887 572.703,124.703 Q572.703,125.102 572.656,125.219 Q572.609,125.336 572.486,125.418 Q572.363,125.5 572.211,125.5 Q572,125.5 571.859,125.348 Q571.719,125.195 571.719,124.844 L571.719,122.816 Q571.719,122.465 571.854,122.312 Q571.988,122.16 572.211,122.16 Q572.422,122.16 572.568,122.307 Q572.715,122.453 572.715,122.699 Q572.715,123.238 572.984,123.602 Q573.395,124.164 574.291,124.533 Q575.188,124.902 576.488,124.902 Q578.41,124.902 579.348,124.188 Q580.285,123.473 580.285,122.676 Q580.285,121.762 579.336,121.211 Q578.375,120.66 576.541,120.473 Q574.707,120.285 573.91,119.98 Q573.113,119.676 572.668,119.066 Q572.223,118.457 572.223,117.754 Q572.223,116.488 573.465,115.744 Q574.707,115 576.43,115 Q578.469,115 579.746,115.996 z" fill="#000000"/>
-    <path d="M585.793,118.34 Q585.793,115.023 587.211,112.908 Q588.629,110.793 590.902,110.793 Q593.188,110.793 594.6,112.92 Q596.012,115.047 596.012,118.34 Q596.012,121.621 594.582,123.754 Q593.152,125.887 590.902,125.887 Q588.652,125.887 587.223,123.777 Q585.793,121.668 585.793,118.34 z M595.016,117.848 Q594.969,115.223 593.879,113.506 Q592.789,111.789 590.902,111.789 Q589.062,111.789 587.926,113.506 Q586.789,115.223 586.777,117.848 z M586.777,118.844 Q586.789,121.457 587.926,123.18 Q589.062,124.902 590.902,124.902 Q592.742,124.902 593.873,123.186 Q595.004,121.469 595.016,118.844 z" fill="#000000"/>
-    <path d="M622.953,115.996 Q622.953,115.656 623.094,115.504 Q623.234,115.352 623.445,115.352 Q623.668,115.352 623.809,115.504 Q623.949,115.656 623.949,116.02 L623.949,117.707 Q623.949,118.059 623.809,118.211 Q623.668,118.363 623.445,118.363 Q623.246,118.363 623.111,118.234 Q622.977,118.105 622.953,117.812 Q622.883,117.109 622.227,116.652 Q621.266,115.996 619.684,115.996 Q618.031,115.996 617.117,116.664 Q616.426,117.168 616.426,117.789 Q616.426,118.492 617.246,118.961 Q617.809,119.289 619.379,119.465 Q621.43,119.688 622.227,119.969 Q623.363,120.379 623.92,121.105 Q624.477,121.832 624.477,122.676 Q624.477,123.93 623.27,124.908 Q622.062,125.887 619.73,125.887 Q617.398,125.887 615.91,124.703 Q615.91,125.102 615.863,125.219 Q615.816,125.336 615.693,125.418 Q615.57,125.5 615.418,125.5 Q615.207,125.5 615.066,125.348 Q614.926,125.195 614.926,124.844 L614.926,122.816 Q614.926,122.465 615.061,122.312 Q615.195,122.16 615.418,122.16 Q615.629,122.16 615.775,122.307 Q615.922,122.453 615.922,122.699 Q615.922,123.238 616.191,123.602 Q616.602,124.164 617.498,124.533 Q618.395,124.902 619.695,124.902 Q621.617,124.902 622.555,124.188 Q623.492,123.473 623.492,122.676 Q623.492,121.762 622.543,121.211 Q621.582,120.66 619.748,120.473 Q617.914,120.285 617.117,119.98 Q616.32,119.676 615.875,119.066 Q615.43,118.457 615.43,117.754 Q615.43,116.488 616.672,115.744 Q617.914,115 619.637,115 Q621.676,115 622.953,115.996 z" fill="#000000"/>
-    <path d="M634.59,110.301 L634.59,112.844 L633.137,112.844 L633.137,110.301 z M634.625,115.352 L634.625,124.516 L638.492,124.516 Q638.855,124.516 639.008,124.65 Q639.16,124.785 639.16,125.008 Q639.16,125.219 639.008,125.359 Q638.855,125.5 638.492,125.5 L629.773,125.5 Q629.422,125.5 629.27,125.359 Q629.117,125.219 629.117,125.008 Q629.117,124.785 629.27,124.65 Q629.422,124.516 629.773,124.516 L633.641,124.516 L633.641,116.348 L630.77,116.348 Q630.418,116.348 630.26,116.207 Q630.102,116.066 630.102,115.855 Q630.102,115.633 630.254,115.492 Q630.406,115.352 630.77,115.352 z" fill="#000000"/>
-    <path d="M645.324,115.352 L645.324,116.84 Q646.355,115.797 647.188,115.398 Q648.02,115 649.062,115 Q650.188,115 651.113,115.48 Q651.77,115.832 652.303,116.646 Q652.836,117.461 652.836,118.316 L652.836,124.516 L653.668,124.516 Q654.02,124.516 654.172,124.65 Q654.324,124.785 654.324,125.008 Q654.324,125.219 654.172,125.359 Q654.02,125.5 653.668,125.5 L651.031,125.5 Q650.668,125.5 650.516,125.359 Q650.363,125.219 650.363,125.008 Q650.363,124.785 650.516,124.65 Q650.668,124.516 651.031,124.516 L651.852,124.516 L651.852,118.48 Q651.852,117.438 651.09,116.717 Q650.328,115.996 649.051,115.996 Q648.078,115.996 647.363,116.389 Q646.648,116.781 645.324,118.34 L645.324,124.516 L646.438,124.516 Q646.789,124.516 646.941,124.65 Q647.094,124.785 647.094,125.008 Q647.094,125.219 646.941,125.359 Q646.789,125.5 646.438,125.5 L643.227,125.5 Q642.875,125.5 642.723,125.359 Q642.57,125.219 642.57,125.008 Q642.57,124.785 642.723,124.65 Q642.875,124.516 643.227,124.516 L644.34,124.516 L644.34,116.348 L643.508,116.348 Q643.156,116.348 643.004,116.207 Q642.852,116.066 642.852,115.844 Q642.852,115.633 643.004,115.492 Q643.156,115.352 643.508,115.352 z" fill="#000000"/>
-    <path d="M657.805,118.34 Q657.805,115.023 659.223,112.908 Q660.641,110.793 662.914,110.793 Q665.199,110.793 666.611,112.92 Q668.023,115.047 668.023,118.34 Q668.023,121.621 666.594,123.754 Q665.164,125.887 662.914,125.887 Q660.664,125.887 659.234,123.777 Q657.805,121.668 657.805,118.34 z M667.027,117.848 Q666.98,115.223 665.891,113.506 Q664.801,111.789 662.914,111.789 Q661.074,111.789 659.938,113.506 Q658.801,115.223 658.789,117.848 z M658.789,118.844 Q658.801,121.457 659.938,123.18 Q661.074,124.902 662.914,124.902 Q664.754,124.902 665.885,123.186 Q667.016,121.469 667.027,118.844 z" fill="#000000"/>
-    <path d="M696.23,116.934 L696.23,119.371 Q696.23,122.547 694.719,124.398 Q693.535,125.852 691.73,125.852 Q690.863,125.852 690.096,125.506 Q689.328,125.16 688.789,124.539 Q688.449,124.152 688.045,123.297 Q687.641,122.441 687.465,121.727 Q687.195,120.719 687.195,119.371 L687.195,116.934 Q687.195,113.746 688.707,111.895 Q689.891,110.441 691.695,110.441 Q692.574,110.441 693.336,110.787 Q694.098,111.133 694.637,111.754 Q694.988,112.152 695.387,113.008 Q695.785,113.863 695.973,114.566 Q696.23,115.574 696.23,116.934 z M695.246,117.062 Q695.246,115.668 694.854,114.467 Q694.461,113.266 693.969,112.551 Q693.676,112.141 693.207,111.848 Q692.539,111.438 691.707,111.438 Q690.055,111.438 689.117,113.125 Q688.18,114.812 688.18,117.062 L688.18,119.23 Q688.18,120.625 688.572,121.832 Q688.965,123.039 689.469,123.754 Q689.75,124.152 690.219,124.445 Q690.887,124.867 691.73,124.867 Q693.371,124.867 694.309,123.174 Q695.246,121.48 695.246,119.23 z" fill="#000000"/>
-    <path d="M538.309,145.012 L538.309,146.418 L528.266,146.418 L528.266,145.012 z" fill="#000000"/>
-    <path d="M550.941,142.996 Q550.941,142.656 551.082,142.504 Q551.223,142.352 551.434,142.352 Q551.656,142.352 551.797,142.504 Q551.938,142.656 551.938,143.02 L551.938,144.707 Q551.938,145.059 551.797,145.211 Q551.656,145.363 551.434,145.363 Q551.234,145.363 551.1,145.234 Q550.965,145.105 550.941,144.812 Q550.871,144.109 550.215,143.652 Q549.254,142.996 547.672,142.996 Q546.02,142.996 545.105,143.664 Q544.414,144.168 544.414,144.789 Q544.414,145.492 545.234,145.961 Q545.797,146.289 547.367,146.465 Q549.418,146.688 550.215,146.969 Q551.352,147.379 551.908,148.105 Q552.465,148.832 552.465,149.676 Q552.465,150.93 551.258,151.908 Q550.051,152.887 547.719,152.887 Q545.387,152.887 543.898,151.703 Q543.898,152.102 543.852,152.219 Q543.805,152.336 543.682,152.418 Q543.559,152.5 543.406,152.5 Q543.195,152.5 543.055,152.348 Q542.914,152.195 542.914,151.844 L542.914,149.816 Q542.914,149.465 543.049,149.312 Q543.184,149.16 543.406,149.16 Q543.617,149.16 543.764,149.307 Q543.91,149.453 543.91,149.699 Q543.91,150.238 544.18,150.602 Q544.59,151.164 545.486,151.533 Q546.383,151.902 547.684,151.902 Q549.605,151.902 550.543,151.188 Q551.48,150.473 551.48,149.676 Q551.48,148.762 550.531,148.211 Q549.57,147.66 547.736,147.473 Q545.902,147.285 545.105,146.98 Q544.309,146.676 543.863,146.066 Q543.418,145.457 543.418,144.754 Q543.418,143.488 544.66,142.744 Q545.902,142 547.625,142 Q549.664,142 550.941,142.996 z" fill="#000000"/>
-    <path d="M562.578,137.301 L562.578,139.844 L561.125,139.844 L561.125,137.301 z M562.613,142.352 L562.613,151.516 L566.48,151.516 Q566.844,151.516 566.996,151.65 Q567.148,151.785 567.148,152.008 Q567.148,152.219 566.996,152.359 Q566.844,152.5 566.48,152.5 L557.762,152.5 Q557.41,152.5 557.258,152.359 Q557.105,152.219 557.105,152.008 Q557.105,151.785 557.258,151.65 Q557.41,151.516 557.762,151.516 L561.629,151.516 L561.629,143.348 L558.758,143.348 Q558.406,143.348 558.248,143.207 Q558.09,143.066 558.09,142.855 Q558.09,142.633 558.242,142.492 Q558.395,142.352 558.758,142.352 z" fill="#000000"/>
-    <path d="M573.312,142.352 L573.312,143.84 Q574.344,142.797 575.176,142.398 Q576.008,142 577.051,142 Q578.176,142 579.102,142.48 Q579.758,142.832 580.291,143.646 Q580.824,144.461 580.824,145.316 L580.824,151.516 L581.656,151.516 Q582.008,151.516 582.16,151.65 Q582.312,151.785 582.312,152.008 Q582.312,152.219 582.16,152.359 Q582.008,152.5 581.656,152.5 L579.02,152.5 Q578.656,152.5 578.504,152.359 Q578.352,152.219 578.352,152.008 Q578.352,151.785 578.504,151.65 Q578.656,151.516 579.02,151.516 L579.84,151.516 L579.84,145.48 Q579.84,144.438 579.078,143.717 Q578.316,142.996 577.039,142.996 Q576.066,142.996 575.352,143.389 Q574.637,143.781 573.312,145.34 L573.312,151.516 L574.426,151.516 Q574.777,151.516 574.93,151.65 Q575.082,151.785 575.082,152.008 Q575.082,152.219 574.93,152.359 Q574.777,152.5 574.426,152.5 L571.215,152.5 Q570.863,152.5 570.711,152.359 Q570.559,152.219 570.559,152.008 Q570.559,151.785 570.711,151.65 Q570.863,151.516 571.215,151.516 L572.328,151.516 L572.328,143.348 L571.496,143.348 Q571.145,143.348 570.992,143.207 Q570.84,143.066 570.84,142.844 Q570.84,142.633 570.992,142.492 Q571.145,142.352 571.496,142.352 z" fill="#000000"/>
-    <path d="M585.793,145.34 Q585.793,142.023 587.211,139.908 Q588.629,137.793 590.902,137.793 Q593.188,137.793 594.6,139.92 Q596.012,142.047 596.012,145.34 Q596.012,148.621 594.582,150.754 Q593.152,152.887 590.902,152.887 Q588.652,152.887 587.223,150.777 Q585.793,148.668 585.793,145.34 z M595.016,144.848 Q594.969,142.223 593.879,140.506 Q592.789,138.789 590.902,138.789 Q589.062,138.789 587.926,140.506 Q586.789,142.223 586.777,144.848 z M586.777,145.844 Q586.789,148.457 587.926,150.18 Q589.062,151.902 590.902,151.902 Q592.742,151.902 593.873,150.186 Q595.004,148.469 595.016,145.844 z" fill="#000000"/>
-    <path d="M623.809,143.348 L623.809,143.02 Q623.809,142.656 623.949,142.504 Q624.09,142.352 624.301,142.352 Q624.523,142.352 624.664,142.504 Q624.805,142.656 624.805,143.02 L624.805,145.246 Q624.793,145.609 624.658,145.762 Q624.523,145.914 624.301,145.914 Q624.102,145.914 623.967,145.779 Q623.832,145.645 623.809,145.328 Q623.738,144.496 622.713,143.746 Q621.688,142.996 619.953,142.996 Q617.762,142.996 616.625,144.367 Q615.488,145.738 615.488,147.508 Q615.488,149.418 616.742,150.66 Q617.996,151.902 619.988,151.902 Q621.137,151.902 622.326,151.48 Q623.516,151.059 624.477,150.121 Q624.723,149.887 624.91,149.887 Q625.109,149.887 625.244,150.021 Q625.379,150.156 625.379,150.355 Q625.379,150.859 624.195,151.633 Q622.285,152.887 619.941,152.887 Q617.562,152.887 616.033,151.369 Q614.504,149.852 614.504,147.52 Q614.504,145.141 616.068,143.57 Q617.633,142 620.012,142 Q622.273,142 623.809,143.348 z" fill="#000000"/>
-    <path d="M639.605,147.449 Q639.605,149.699 637.994,151.293 Q636.383,152.887 634.109,152.887 Q631.812,152.887 630.207,151.287 Q628.602,149.688 628.602,147.449 Q628.602,145.199 630.207,143.6 Q631.812,142 634.109,142 Q636.383,142 637.994,143.594 Q639.605,145.188 639.605,147.449 z M638.609,147.449 Q638.609,145.598 637.291,144.297 Q635.973,142.996 634.098,142.996 Q632.223,142.996 630.904,144.303 Q629.586,145.609 629.586,147.449 Q629.586,149.277 630.904,150.59 Q632.223,151.902 634.098,151.902 Q635.973,151.902 637.291,150.596 Q638.609,149.289 638.609,147.449 z" fill="#000000"/>
-    <path d="M651.758,142.996 Q651.758,142.656 651.898,142.504 Q652.039,142.352 652.25,142.352 Q652.473,142.352 652.613,142.504 Q652.754,142.656 652.754,143.02 L652.754,144.707 Q652.754,145.059 652.613,145.211 Q652.473,145.363 652.25,145.363 Q652.051,145.363 651.916,145.234 Q651.781,145.105 651.758,144.812 Q651.688,144.109 651.031,143.652 Q650.07,142.996 648.488,142.996 Q646.836,142.996 645.922,143.664 Q645.23,144.168 645.23,144.789 Q645.23,145.492 646.051,145.961 Q646.613,146.289 648.184,146.465 Q650.234,146.688 651.031,146.969 Q652.168,147.379 652.725,148.105 Q653.281,148.832 653.281,149.676 Q653.281,150.93 652.074,151.908 Q650.867,152.887 648.535,152.887 Q646.203,152.887 644.715,151.703 Q644.715,152.102 644.668,152.219 Q644.621,152.336 644.498,152.418 Q644.375,152.5 644.223,152.5 Q644.012,152.5 643.871,152.348 Q643.73,152.195 643.73,151.844 L643.73,149.816 Q643.73,149.465 643.865,149.312 Q644,149.16 644.223,149.16 Q644.434,149.16 644.58,149.307 Q644.727,149.453 644.727,149.699 Q644.727,150.238 644.996,150.602 Q645.406,151.164 646.303,151.533 Q647.199,151.902 648.5,151.902 Q650.422,151.902 651.359,151.188 Q652.297,150.473 652.297,149.676 Q652.297,148.762 651.348,148.211 Q650.387,147.66 648.553,147.473 Q646.719,147.285 645.922,146.98 Q645.125,146.676 644.68,146.066 Q644.234,145.457 644.234,144.754 Q644.234,143.488 645.477,142.744 Q646.719,142 648.441,142 Q650.48,142 651.758,142.996 z" fill="#000000"/>
-    <path d="M657.805,145.34 Q657.805,142.023 659.223,139.908 Q660.641,137.793 662.914,137.793 Q665.199,137.793 666.611,139.92 Q668.023,142.047 668.023,145.34 Q668.023,148.621 666.594,150.754 Q665.164,152.887 662.914,152.887 Q660.664,152.887 659.234,150.777 Q657.805,148.668 657.805,145.34 z M667.027,144.848 Q666.98,142.223 665.891,140.506 Q664.801,138.789 662.914,138.789 Q661.074,138.789 659.938,140.506 Q658.801,142.223 658.789,144.848 z M658.789,145.844 Q658.801,148.457 659.938,150.18 Q661.074,151.902 662.914,151.902 Q664.754,151.902 665.885,150.186 Q667.016,148.469 667.027,145.844 z" fill="#000000"/>
-    <path d="M696.23,143.934 L696.23,146.371 Q696.23,149.547 694.719,151.398 Q693.535,152.852 691.73,152.852 Q690.863,152.852 690.096,152.506 Q689.328,152.16 688.789,151.539 Q688.449,151.152 688.045,150.297 Q687.641,149.441 687.465,148.727 Q687.195,147.719 687.195,146.371 L687.195,143.934 Q687.195,140.746 688.707,138.895 Q689.891,137.441 691.695,137.441 Q692.574,137.441 693.336,137.787 Q694.098,138.133 694.637,138.754 Q694.988,139.152 695.387,140.008 Q695.785,140.863 695.973,141.566 Q696.23,142.574 696.23,143.934 z M695.246,144.062 Q695.246,142.668 694.854,141.467 Q694.461,140.266 693.969,139.551 Q693.676,139.141 693.207,138.848 Q692.539,138.438 691.707,138.438 Q690.055,138.438 689.117,140.125 Q688.18,141.812 688.18,144.062 L688.18,146.23 Q688.18,147.625 688.572,148.832 Q688.965,150.039 689.469,150.754 Q689.75,151.152 690.219,151.445 Q690.887,151.867 691.73,151.867 Q693.371,151.867 694.309,150.174 Q695.246,148.48 695.246,146.23 z" fill="#000000"/>
-    <path d="M595.414,170.934 L595.414,173.371 Q595.414,176.547 593.902,178.398 Q592.719,179.852 590.914,179.852 Q590.047,179.852 589.279,179.506 Q588.512,179.16 587.973,178.539 Q587.633,178.152 587.229,177.297 Q586.824,176.441 586.648,175.727 Q586.379,174.719 586.379,173.371 L586.379,170.934 Q586.379,167.746 587.891,165.895 Q589.074,164.441 590.879,164.441 Q591.758,164.441 592.52,164.787 Q593.281,165.133 593.82,165.754 Q594.172,166.152 594.57,167.008 Q594.969,167.863 595.156,168.566 Q595.414,169.574 595.414,170.934 z M594.43,171.062 Q594.43,169.668 594.037,168.467 Q593.645,167.266 593.152,166.551 Q592.859,166.141 592.391,165.848 Q591.723,165.438 590.891,165.438 Q589.238,165.438 588.301,167.125 Q587.363,168.812 587.363,171.062 L587.363,173.23 Q587.363,174.625 587.756,175.832 Q588.148,177.039 588.652,177.754 Q588.934,178.152 589.402,178.445 Q590.07,178.867 590.914,178.867 Q592.555,178.867 593.492,177.174 Q594.43,175.48 594.43,173.23 z" fill="#000000"/>
-    <path d="M667.426,170.934 L667.426,173.371 Q667.426,176.547 665.914,178.398 Q664.73,179.852 662.926,179.852 Q662.059,179.852 661.291,179.506 Q660.523,179.16 659.984,178.539 Q659.645,178.152 659.24,177.297 Q658.836,176.441 658.66,175.727 Q658.391,174.719 658.391,173.371 L658.391,170.934 Q658.391,167.746 659.902,165.895 Q661.086,164.441 662.891,164.441 Q663.77,164.441 664.531,164.787 Q665.293,165.133 665.832,165.754 Q666.184,166.152 666.582,167.008 Q666.98,167.863 667.168,168.566 Q667.426,169.574 667.426,170.934 z M666.441,171.062 Q666.441,169.668 666.049,168.467 Q665.656,167.266 665.164,166.551 Q664.871,166.141 664.402,165.848 Q663.734,165.438 662.902,165.438 Q661.25,165.438 660.312,167.125 Q659.375,168.812 659.375,171.062 L659.375,173.23 Q659.375,174.625 659.768,175.832 Q660.16,177.039 660.664,177.754 Q660.945,178.152 661.414,178.445 Q662.082,178.867 662.926,178.867 Q664.566,178.867 665.504,177.174 Q666.441,175.48 666.441,173.23 z" fill="#000000"/>
-    <path d="M692.199,164.594 L692.199,178.516 L695.574,178.516 Q695.926,178.516 696.078,178.65 Q696.23,178.785 696.23,179.008 Q696.23,179.219 696.078,179.359 Q695.926,179.5 695.574,179.5 L687.84,179.5 Q687.488,179.5 687.336,179.359 Q687.184,179.219 687.184,179.008 Q687.184,178.785 687.336,178.65 Q687.488,178.516 687.84,178.516 L691.215,178.516 L691.215,165.953 L688.004,166.961 Q687.77,167.031 687.664,167.031 Q687.488,167.031 687.342,166.885 Q687.195,166.738 687.195,166.539 Q687.195,166.363 687.312,166.211 Q687.406,166.117 687.699,166.012 z" fill="#000000"/>
-    <path d="M395.785,110.594 L395.785,124.516 L399.16,124.516 Q399.512,124.516 399.664,124.65 Q399.816,124.785 399.816,125.008 Q399.816,125.219 399.664,125.359 Q399.512,125.5 399.16,125.5 L391.426,125.5 Q391.074,125.5 390.922,125.359 Q390.77,125.219 390.77,125.008 Q390.77,124.785 390.922,124.65 Q391.074,124.516 391.426,124.516 L394.801,124.516 L394.801,111.953 L391.59,112.961 Q391.355,113.031 391.25,113.031 Q391.074,113.031 390.928,112.885 Q390.781,112.738 390.781,112.539 Q390.781,112.363 390.898,112.211 Q390.992,112.117 391.285,112.012 z" fill="#000000"/>
-    <path d="M428.621,116.934 L428.621,119.371 Q428.621,122.547 427.109,124.398 Q425.926,125.852 424.121,125.852 Q423.254,125.852 422.486,125.506 Q421.719,125.16 421.18,124.539 Q420.84,124.152 420.436,123.297 Q420.031,122.441 419.855,121.727 Q419.586,120.719 419.586,119.371 L419.586,116.934 Q419.586,113.746 421.098,111.895 Q422.281,110.441 424.086,110.441 Q424.965,110.441 425.727,110.787 Q426.488,111.133 427.027,111.754 Q427.379,112.152 427.777,113.008 Q428.176,113.863 428.363,114.566 Q428.621,115.574 428.621,116.934 z M427.637,117.062 Q427.637,115.668 427.244,114.467 Q426.852,113.266 426.359,112.551 Q426.066,112.141 425.598,111.848 Q424.93,111.438 424.098,111.438 Q422.445,111.438 421.508,113.125 Q420.57,114.812 420.57,117.062 L420.57,119.23 Q420.57,120.625 420.963,121.832 Q421.355,123.039 421.859,123.754 Q422.141,124.152 422.609,124.445 Q423.277,124.867 424.121,124.867 Q425.762,124.867 426.699,123.174 Q427.637,121.48 427.637,119.23 z" fill="#000000"/>
-    <path d="M453.5,118.48 L458.176,124.516 L458.551,124.516 Q458.902,124.516 459.055,124.65 Q459.207,124.785 459.207,125.008 Q459.207,125.219 459.055,125.359 Q458.902,125.5 458.551,125.5 L455.387,125.5 Q455.035,125.5 454.883,125.359 Q454.73,125.219 454.73,125.008 Q454.73,124.785 454.883,124.65 Q455.035,124.516 455.387,124.516 L456.957,124.516 L452.891,119.289 L448.871,124.516 L450.441,124.516 Q450.793,124.516 450.945,124.65 Q451.098,124.785 451.098,125.008 Q451.098,125.219 450.945,125.359 Q450.793,125.5 450.441,125.5 L447.301,125.5 Q446.949,125.5 446.797,125.359 Q446.645,125.219 446.645,125.008 Q446.645,124.844 446.738,124.715 Q446.832,124.586 446.949,124.551 Q447.066,124.516 447.664,124.516 L452.281,118.48 L447.875,112.773 L447.512,112.773 Q447.16,112.773 447.008,112.639 Q446.855,112.504 446.855,112.281 Q446.855,112.059 447.008,111.924 Q447.16,111.789 447.512,111.789 L450.195,111.789 Q450.559,111.789 450.711,111.924 Q450.863,112.059 450.863,112.281 Q450.863,112.504 450.711,112.639 Q450.559,112.773 450.195,112.773 L449.094,112.773 L452.891,117.684 L456.664,112.773 L455.562,112.773 Q455.199,112.773 455.047,112.639 Q454.895,112.504 454.895,112.281 Q454.895,112.059 455.047,111.924 Q455.199,111.789 455.562,111.789 L458.258,111.789 Q458.609,111.789 458.762,111.924 Q458.914,112.059 458.914,112.281 Q458.914,112.504 458.762,112.639 Q458.609,112.773 458.258,112.773 L457.883,112.773 z" fill="#000000"/>
-    <path d="M399.816,143.934 L399.816,146.371 Q399.816,149.547 398.305,151.398 Q397.121,152.852 395.316,152.852 Q394.449,152.852 393.682,152.506 Q392.914,152.16 392.375,151.539 Q392.035,151.152 391.631,150.297 Q391.227,149.441 391.051,148.727 Q390.781,147.719 390.781,146.371 L390.781,143.934 Q390.781,140.746 392.293,138.895 Q393.477,137.441 395.281,137.441 Q396.16,137.441 396.922,137.787 Q397.684,138.133 398.223,138.754 Q398.574,139.152 398.973,140.008 Q399.371,140.863 399.559,141.566 Q399.816,142.574 399.816,143.934 z M398.832,144.062 Q398.832,142.668 398.439,141.467 Q398.047,140.266 397.555,139.551 Q397.262,139.141 396.793,138.848 Q396.125,138.438 395.293,138.438 Q393.641,138.438 392.703,140.125 Q391.766,141.812 391.766,144.062 L391.766,146.23 Q391.766,147.625 392.158,148.832 Q392.551,150.039 393.055,150.754 Q393.336,151.152 393.805,151.445 Q394.473,151.867 395.316,151.867 Q396.957,151.867 397.895,150.174 Q398.832,148.48 398.832,146.23 z" fill="#000000"/>
-    <path d="M424.59,137.594 L424.59,151.516 L427.965,151.516 Q428.316,151.516 428.469,151.65 Q428.621,151.785 428.621,152.008 Q428.621,152.219 428.469,152.359 Q428.316,152.5 427.965,152.5 L420.23,152.5 Q419.879,152.5 419.727,152.359 Q419.574,152.219 419.574,152.008 Q419.574,151.785 419.727,151.65 Q419.879,151.516 420.23,151.516 L423.605,151.516 L423.605,138.953 L420.395,139.961 Q420.16,140.031 420.055,140.031 Q419.879,140.031 419.732,139.885 Q419.586,139.738 419.586,139.539 Q419.586,139.363 419.703,139.211 Q419.797,139.117 420.09,139.012 z" fill="#000000"/>
-    <path d="M453.43,146.312 L453.43,151.516 L455.984,151.516 Q456.336,151.516 456.488,151.65 Q456.641,151.785 456.641,152.008 Q456.641,152.219 456.488,152.359 Q456.336,152.5 455.984,152.5 L449.879,152.5 Q449.527,152.5 449.375,152.359 Q449.223,152.219 449.223,152.008 Q449.223,151.785 449.369,151.65 Q449.516,151.516 449.879,151.516 L452.434,151.516 L452.434,146.312 L448.109,139.773 L447.523,139.773 Q447.172,139.773 447.02,139.639 Q446.867,139.504 446.867,139.281 Q446.867,139.059 447.02,138.924 Q447.172,138.789 447.523,138.789 L450.23,138.789 Q450.582,138.789 450.734,138.924 Q450.887,139.059 450.887,139.281 Q450.887,139.504 450.734,139.639 Q450.582,139.773 450.23,139.773 L449.258,139.773 L452.938,145.316 L456.535,139.773 L455.574,139.773 Q455.211,139.773 455.059,139.639 Q454.906,139.504 454.906,139.281 Q454.906,139.059 455.059,138.924 Q455.211,138.789 455.574,138.789 L458.27,138.789 Q458.621,138.789 458.773,138.924 Q458.926,139.059 458.926,139.281 Q458.926,139.504 458.773,139.639 Q458.621,139.773 458.27,139.773 L457.684,139.773 z" fill="#000000"/>
-    <path d="M399.816,170.934 L399.816,173.371 Q399.816,176.547 398.305,178.398 Q397.121,179.852 395.316,179.852 Q394.449,179.852 393.682,179.506 Q392.914,179.16 392.375,178.539 Q392.035,178.152 391.631,177.297 Q391.227,176.441 391.051,175.727 Q390.781,174.719 390.781,173.371 L390.781,170.934 Q390.781,167.746 392.293,165.895 Q393.477,164.441 395.281,164.441 Q396.16,164.441 396.922,164.787 Q397.684,165.133 398.223,165.754 Q398.574,166.152 398.973,167.008 Q399.371,167.863 399.559,168.566 Q399.816,169.574 399.816,170.934 z M398.832,171.062 Q398.832,169.668 398.439,168.467 Q398.047,167.266 397.555,166.551 Q397.262,166.141 396.793,165.848 Q396.125,165.438 395.293,165.438 Q393.641,165.438 392.703,167.125 Q391.766,168.812 391.766,171.062 L391.766,173.23 Q391.766,174.625 392.158,175.832 Q392.551,177.039 393.055,177.754 Q393.336,178.152 393.805,178.445 Q394.473,178.867 395.316,178.867 Q396.957,178.867 397.895,177.174 Q398.832,175.48 398.832,173.23 z" fill="#000000"/>
-    <path d="M428.621,170.934 L428.621,173.371 Q428.621,176.547 427.109,178.398 Q425.926,179.852 424.121,179.852 Q423.254,179.852 422.486,179.506 Q421.719,179.16 421.18,178.539 Q420.84,178.152 420.436,177.297 Q420.031,176.441 419.855,175.727 Q419.586,174.719 419.586,173.371 L419.586,170.934 Q419.586,167.746 421.098,165.895 Q422.281,164.441 424.086,164.441 Q424.965,164.441 425.727,164.787 Q426.488,165.133 427.027,165.754 Q427.379,166.152 427.777,167.008 Q428.176,167.863 428.363,168.566 Q428.621,169.574 428.621,170.934 z M427.637,171.062 Q427.637,169.668 427.244,168.467 Q426.852,167.266 426.359,166.551 Q426.066,166.141 425.598,165.848 Q424.93,165.438 424.098,165.438 Q422.445,165.438 421.508,167.125 Q420.57,168.812 420.57,171.062 L420.57,173.23 Q420.57,174.625 420.963,175.832 Q421.355,177.039 421.859,177.754 Q422.141,178.152 422.609,178.445 Q423.277,178.867 424.121,178.867 Q425.762,178.867 426.699,177.174 Q427.637,175.48 427.637,173.23 z" fill="#000000"/>
-    <path d="M453.395,164.594 L453.395,178.516 L456.77,178.516 Q457.121,178.516 457.273,178.65 Q457.426,178.785 457.426,179.008 Q457.426,179.219 457.273,179.359 Q457.121,179.5 456.77,179.5 L449.035,179.5 Q448.684,179.5 448.531,179.359 Q448.379,179.219 448.379,179.008 Q448.379,178.785 448.531,178.65 Q448.684,178.516 449.035,178.516 L452.41,178.516 L452.41,165.953 L449.199,166.961 Q448.965,167.031 448.859,167.031 Q448.684,167.031 448.537,166.885 Q448.391,166.738 448.391,166.539 Q448.391,166.363 448.508,166.211 Q448.602,166.117 448.895,166.012 z" fill="#000000"/>
-    <path d="M366.29,146.348 L363.208,149.43 Q363.032,149.605 362.95,149.646 Q362.868,149.688 362.751,149.688 Q362.54,149.688 362.393,149.541 Q362.247,149.395 362.247,149.184 Q362.247,148.984 362.516,148.727 L365.587,145.645 L362.505,142.562 Q362.247,142.305 362.247,142.105 Q362.247,141.895 362.393,141.748 Q362.54,141.602 362.751,141.602 Q362.95,141.602 363.208,141.871 L366.29,144.953 L369.348,141.883 Q369.618,141.625 369.817,141.625 Q370.028,141.625 370.169,141.771 Q370.309,141.918 370.309,142.129 Q370.309,142.328 370.052,142.586 L366.993,145.645 L370.075,148.727 Q370.333,148.996 370.333,149.195 Q370.333,149.406 370.186,149.553 Q370.04,149.699 369.829,149.699 Q369.723,149.699 369.653,149.652 Q369.536,149.605 369.372,149.43 z" fill="#333333"/>
-  </g>
-  <g id="transformed_drawings">
-    <g>
-      <path d="M82.5,235.5 L151.5,235.5 L151.5,304.5 L82.5,304.5 L82.5,235.5 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-      <g>
-        <g>
-          <path d="M103.066,288.372 C107.327,288.372 110.78,284.841 110.78,280.491 C110.78,276.142 107.327,272.616 103.066,272.616 C98.816,272.616 95.36,276.142 95.36,280.491 C95.36,284.841 98.816,288.372 103.066,288.372 M93.604,280.491 C93.604,275.152 97.849,270.833 103.066,270.833 C108.296,270.833 112.541,275.152 112.541,280.491 C112.541,285.836 108.296,290.153 103.066,290.153 C97.849,290.153 93.604,285.835 93.604,280.491" fill="#FF5838"/>
-          <path d="M103.066,288.372 C107.327,288.372 110.78,284.841 110.78,280.491 C110.78,276.142 107.327,272.616 103.066,272.616 C98.816,272.616 95.36,276.142 95.36,280.491 C95.36,284.841 98.816,288.372 103.066,288.372 M93.604,280.491 C93.604,275.152 97.849,270.833 103.066,270.833 C108.296,270.833 112.541,275.152 112.541,280.491 C112.541,285.836 108.296,290.153 103.066,290.153 C97.849,290.153 93.604,285.835 93.604,280.491" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M130.934,288.463 C135.184,288.463 138.636,284.937 138.636,280.588 C138.636,276.238 135.185,272.707 130.934,272.707 C126.673,272.707 123.214,276.238 123.214,280.588 C123.214,284.937 126.673,288.463 130.934,288.463 M121.459,280.588 C121.459,275.243 125.704,270.929 130.934,270.929 C136.146,270.929 140.395,275.244 140.395,280.588 C140.395,285.927 136.146,290.249 130.934,290.249 C125.704,290.249 121.459,285.927 121.459,280.588" fill="#FF5838"/>
-          <path d="M130.934,288.463 C135.184,288.463 138.636,284.937 138.636,280.588 C138.636,276.238 135.185,272.707 130.934,272.707 C126.673,272.707 123.214,276.238 123.214,280.588 C123.214,284.937 126.673,288.463 130.934,288.463 M121.459,280.588 C121.459,275.243 125.704,270.929 130.934,270.929 C136.146,270.929 140.395,275.244 140.395,280.588 C140.395,285.927 136.146,290.249 130.934,290.249 C125.704,290.249 121.459,285.927 121.459,280.588" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M121.485,257.01 C123.447,257.01 125.046,255.39 125.046,253.384 C125.046,251.381 123.447,249.751 121.485,249.751 C119.52,249.751 117.923,251.382 117.923,253.384 C117.923,255.391 119.52,257.01 121.485,257.01" fill="#FF5838"/>
-          <path d="M121.485,257.01 C123.447,257.01 125.046,255.39 125.046,253.384 C125.046,251.381 123.447,249.751 121.485,249.751 C119.52,249.751 117.923,251.382 117.923,253.384 C117.923,255.391 119.52,257.01 121.485,257.01" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M121.633,265.826 C121.115,265.837 120.561,265.573 120.153,264.914 L117.839,261.224 L113.068,266.046 L117.489,268.424 C119.308,269.31 119.039,270.944 119.039,270.944 L119.039,281.163 C119.039,282.322 118.124,283.265 116.99,283.265 C115.852,283.265 114.939,282.32 114.939,281.163 L114.939,272.982 L107.269,268.632 C106.355,268.109 105.735,267.11 105.735,265.974 C105.735,265.192 106.021,264.472 106.499,263.937 L114.025,256.242 C114.959,255.167 116.263,255.336 116.263,255.336 C117.839,255.336 118.669,256.743 118.669,256.743 L122.577,262.991 L128.511,262.98 C130.646,262.98 130.646,265.825 128.511,265.825 L121.633,265.825 z" fill="#FF5838"/>
-          <path d="M121.633,265.826 C121.115,265.837 120.561,265.573 120.153,264.914 L117.839,261.224 L113.068,266.046 L117.489,268.424 C119.308,269.31 119.039,270.944 119.039,270.944 L119.039,281.163 C119.039,282.322 118.124,283.265 116.99,283.265 C115.852,283.265 114.939,282.32 114.939,281.163 L114.939,272.982 L107.269,268.632 C106.355,268.109 105.735,267.11 105.735,265.974 C105.735,265.192 106.021,264.472 106.499,263.937 L114.025,256.242 C114.959,255.167 116.263,255.336 116.263,255.336 C117.839,255.336 118.669,256.743 118.669,256.743 L122.577,262.991 L128.511,262.98 C130.646,262.98 130.646,265.825 128.511,265.825 L121.633,265.825 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-      </g>
-    </g>
-    <g>
-      <path d="M392.034,301 L421.367,301 L421.367,365.167 L392.034,365.167 L392.034,301 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-      <g>
-        <g>
-          <path d="M400.777,350.168 C402.588,350.168 404.057,346.885 404.057,342.84 C404.057,338.795 402.588,335.517 400.777,335.517 C398.97,335.517 397.501,338.795 397.501,342.84 C397.501,346.885 398.97,350.168 400.777,350.168 M396.755,342.84 C396.755,337.875 398.559,333.858 400.777,333.858 C403.001,333.858 404.805,337.875 404.805,342.84 C404.805,347.81 403.001,351.824 400.777,351.824 C398.559,351.824 396.755,347.809 396.755,342.84" fill="#FF5838"/>
-          <path d="M400.777,350.168 C402.588,350.168 404.057,346.885 404.057,342.84 C404.057,338.795 402.588,335.517 400.777,335.517 C398.97,335.517 397.501,338.795 397.501,342.84 C397.501,346.885 398.97,350.168 400.777,350.168 M396.755,342.84 C396.755,337.875 398.559,333.858 400.777,333.858 C403.001,333.858 404.805,337.875 404.805,342.84 C404.805,347.81 403.001,351.824 400.777,351.824 C398.559,351.824 396.755,347.809 396.755,342.84" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M412.624,350.253 C414.431,350.253 415.899,346.974 415.899,342.929 C415.899,338.885 414.432,335.601 412.624,335.601 C410.813,335.601 409.342,338.885 409.342,342.929 C409.342,346.974 410.813,350.253 412.624,350.253 M408.596,342.929 C408.596,337.959 410.401,333.947 412.624,333.947 C414.84,333.947 416.647,337.96 416.647,342.929 C416.647,347.895 414.84,351.914 412.624,351.914 C410.401,351.914 408.596,347.895 408.596,342.929" fill="#FF5838"/>
-          <path d="M412.624,350.253 C414.431,350.253 415.899,346.974 415.899,342.929 C415.899,338.885 414.432,335.601 412.624,335.601 C410.813,335.601 409.342,338.885 409.342,342.929 C409.342,346.974 410.813,350.253 412.624,350.253 M408.596,342.929 C408.596,337.959 410.401,333.947 412.624,333.947 C414.84,333.947 416.647,337.96 416.647,342.929 C416.647,347.895 414.84,351.914 412.624,351.914 C410.401,351.914 408.596,347.895 408.596,342.929" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M408.607,321.003 C409.441,321.003 410.121,319.497 410.121,317.631 C410.121,315.768 409.441,314.253 408.607,314.253 C407.772,314.253 407.093,315.77 407.093,317.631 C407.093,319.498 407.772,321.003 408.607,321.003" fill="#FF5838"/>
-          <path d="M408.607,321.003 C409.441,321.003 410.121,319.497 410.121,317.631 C410.121,315.768 409.441,314.253 408.607,314.253 C407.772,314.253 407.093,315.77 407.093,317.631 C407.093,319.498 407.772,321.003 408.607,321.003" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M408.67,329.202 C408.45,329.212 408.214,328.967 408.041,328.354 L407.057,324.922 L405.029,329.406 L406.909,331.617 C407.682,332.442 407.567,333.961 407.567,333.961 L407.567,343.464 C407.567,344.542 407.178,345.419 406.696,345.419 C406.213,345.419 405.825,344.54 405.825,343.464 L405.825,335.856 L402.564,331.811 C402.175,331.325 401.911,330.395 401.911,329.34 C401.911,328.612 402.033,327.943 402.236,327.445 L405.436,320.289 C405.833,319.289 406.387,319.446 406.387,319.446 C407.057,319.446 407.41,320.755 407.41,320.755 L409.072,326.565 L411.594,326.555 C412.502,326.555 412.502,329.2 411.594,329.2 L408.67,329.2 z" fill="#FF5838"/>
-          <path d="M408.67,329.202 C408.45,329.212 408.214,328.967 408.041,328.354 L407.057,324.922 L405.029,329.406 L406.909,331.617 C407.682,332.442 407.567,333.961 407.567,333.961 L407.567,343.464 C407.567,344.542 407.178,345.419 406.696,345.419 C406.213,345.419 405.825,344.54 405.825,343.464 L405.825,335.856 L402.564,331.811 C402.175,331.325 401.911,330.395 401.911,329.34 C401.911,328.612 402.033,327.943 402.236,327.445 L405.436,320.289 C405.833,319.289 406.387,319.446 406.387,319.446 C407.057,319.446 407.41,320.755 407.41,320.755 L409.072,326.565 L411.594,326.555 C412.502,326.555 412.502,329.2 411.594,329.2 L408.67,329.2 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-      </g>
-    </g>
-    <g>
-      <path d="M578.5,235.5 L643.339,259.099 L619.739,323.938 L554.901,300.339 L578.5,235.5 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-      <g>
-        <g>
-          <path d="M579.742,292.217 C583.746,293.675 588.199,291.538 589.687,287.451 C591.174,283.364 589.135,278.869 585.131,277.412 C581.137,275.958 576.684,278.089 575.196,282.176 C573.708,286.263 575.749,290.764 579.742,292.217 M573.547,281.576 C575.373,276.559 580.839,273.952 585.741,275.736 C590.656,277.525 593.167,283.035 591.341,288.053 C589.513,293.075 584.048,295.68 579.133,293.891 C574.231,292.106 571.719,286.597 573.547,281.576" fill="#FF5838"/>
-          <path d="M579.742,292.217 C583.746,293.675 588.199,291.538 589.687,287.451 C591.174,283.364 589.135,278.869 585.131,277.412 C581.137,275.958 576.684,278.089 575.196,282.176 C573.708,286.263 575.749,290.764 579.742,292.217 M573.547,281.576 C575.373,276.559 580.839,273.952 585.741,275.736 C590.656,277.525 593.167,283.035 591.341,288.053 C589.513,293.075 584.048,295.68 579.133,293.891 C574.231,292.106 571.719,286.597 573.547,281.576" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M605.899,301.834 C609.892,303.288 614.342,301.155 615.83,297.068 C617.318,292.981 615.282,288.483 611.287,287.029 C607.284,285.571 602.826,287.706 601.338,291.794 C599.85,295.881 601.895,300.377 605.899,301.834 M599.689,291.193 C601.517,286.171 606.981,283.569 611.896,285.358 C616.793,287.14 619.311,292.649 617.483,297.67 C615.657,302.687 610.185,305.295 605.288,303.512 C600.373,301.723 597.863,296.21 599.689,291.193" fill="#FF5838"/>
-          <path d="M605.899,301.834 C609.892,303.288 614.342,301.155 615.83,297.068 C617.318,292.981 615.282,288.483 611.287,287.029 C607.284,285.571 602.826,287.706 601.338,291.794 C599.85,295.881 601.895,300.377 605.899,301.834 M599.689,291.193 C601.517,286.171 606.981,283.569 611.896,285.358 C616.793,287.14 619.311,292.649 617.483,297.67 C615.657,302.687 610.185,305.295 605.288,303.512 C600.373,301.723 597.863,296.21 599.689,291.193" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M607.777,269.046 C609.621,269.717 611.677,268.742 612.363,266.857 C613.049,264.975 612.103,262.896 610.259,262.225 C608.413,261.553 606.355,262.54 605.67,264.421 C604.984,266.307 605.93,268.374 607.777,269.046" fill="#FF5838"/>
-          <path d="M607.777,269.046 C609.621,269.717 611.677,268.742 612.363,266.857 C613.049,264.975 612.103,262.896 610.259,262.225 C608.413,261.553 606.355,262.54 605.67,264.421 C604.984,266.307 605.93,268.374 607.777,269.046" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-        <g>
-          <path d="M604.901,277.381 C604.41,277.215 603.98,276.777 603.822,276.019 L602.909,271.759 L596.778,274.658 L600.119,278.405 C601.524,279.86 600.712,281.303 600.712,281.303 L597.217,290.906 C596.821,291.995 595.639,292.568 594.574,292.181 C593.504,291.791 592.969,290.591 593.365,289.504 L596.163,281.816 L590.443,275.106 C589.763,274.301 589.522,273.15 589.911,272.083 C590.178,271.348 590.693,270.77 591.325,270.43 L601.029,265.773 C602.275,265.082 603.442,265.687 603.442,265.687 C604.923,266.226 605.222,267.832 605.222,267.832 L606.758,275.04 L612.337,277.059 C614.344,277.79 613.371,280.463 611.364,279.732 L604.901,277.38 z" fill="#FF5838"/>
-          <path d="M604.901,277.381 C604.41,277.215 603.98,276.777 603.822,276.019 L602.909,271.759 L596.778,274.658 L600.119,278.405 C601.524,279.86 600.712,281.303 600.712,281.303 L597.217,290.906 C596.821,291.995 595.639,292.568 594.574,292.181 C593.504,291.791 592.969,290.591 593.365,289.504 L596.163,281.816 L590.443,275.106 C589.763,274.301 589.522,273.15 589.911,272.083 C590.178,271.348 590.693,270.77 591.325,270.43 L601.029,265.773 C602.275,265.082 603.442,265.687 603.442,265.687 C604.923,266.226 605.222,267.832 605.222,267.832 L606.758,275.04 L612.337,277.059 C614.344,277.79 613.371,280.463 611.364,279.732 L604.901,277.38 z" fill-opacity="0" stroke="#FF5838" stroke-width="1"/>
-        </g>
-      </g>
-    </g>
-    <path d="M628.936,235.5 C628.936,243.6 624.913,250.167 619.951,250.167" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-    <text transform="matrix(1, 0, 0, 1, 635.638, 247.333)">
-      <tspan x="-7.201" y="6" font-family="CourierNewPSMT" font-size="24" fill="#1C1C1C">θ</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 116.5, 72)">
-      <tspan x="-39.564" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Identity</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 366.284, 74)">
-      <tspan x="-92.232" y="6.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Scale &amp; Translate</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 612.5, 74)">
-      <tspan x="-35.556" y="6.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Rotate</tspan>
-    </text>
-    <path d="M392.034,304 L392.034,304 L392.034,304 C393.691,304 395.034,302.657 395.034,301 C395.034,299.343 393.691,298 392.034,298 C392.034,298 392.034,298 392.034,298 L392.034,298 C390.377,298 389.034,299.343 389.034,301 C389.034,302.657 390.377,304 392.034,304 L392.034,304" fill="#000000"/>
-    <text transform="matrix(1, 0, 0, 1, 360.451, 314.5)">
-      <tspan x="-36.006" y="6" font-family="CourierNewPSMT" font-size="24" fill="#1C1C1C">(X,Y)</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 445.242, 332.583)">
-      <tspan x="-7.201" y="6" font-family="CourierNewPSMT" font-size="24" fill="#1C1C1C">H</tspan>
-    </text>
-    <g>
-      <path d="M431.167,307 L431.167,359.167" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-      <path d="M431.167,307 L431.167,301 M436.167,301 L426.167,301" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-      <path d="M431.167,359.167 L431.167,365.167 M426.167,365.167 L436.167,365.167" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <g>
-      <path d="M398.034,376.167 L415.367,376.167" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-      <path d="M398.034,376.167 L392.034,376.167 M392.034,371.167 L392.034,381.167" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-      <path d="M415.367,376.167 L421.367,376.167 M421.367,381.167 L421.367,371.167" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <text transform="matrix(1, 0, 0, 1, 406.201, 394)">
-      <tspan x="-7.201" y="6" font-family="CourierNewPSMT" font-size="24" fill="#1C1C1C">W</tspan>
-    </text>
-  </g>
-</svg>
diff --git a/content/2014/gothamgo-android/sprite_subtex.svg b/content/2014/gothamgo-android/sprite_subtex.svg
deleted file mode 100644
index 9053772..0000000
--- a/content/2014/gothamgo-android/sprite_subtex.svg
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="900" height="600" viewBox="0, 0, 900, 600">
-  <defs>
-    <clipPath id="Clip_1">
-      <path d="M207,382.491 L337.776,382.491 L337.776,568.158 L207,568.158 z"/>
-    </clipPath>
-    <clipPath id="Clip_2">
-      <path d="M476.746,-278.824 L722.945,-278.824 L722.945,-226.792 L476.746,-226.792 z"/>
-    </clipPath>
-  </defs>
-  <g id="Layer_2">
-    <g>
-      <path d="M397.515,77.324 L770.124,77.324 L770.124,568.658 L397.515,568.658 L397.515,77.324 z" fill-opacity="0" stroke="#656565" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
-      <path d="M411.691,91.334 L757.568,91.334 L757.568,525.628 L411.691,525.628 L411.691,91.334 z" fill-opacity="0" stroke="#656565" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
-      <path d="M561.139,533.634 L608.12,533.634 C613.488,533.634 617.84,539.01 617.84,545.642 L617.84,545.642 C617.84,552.274 613.488,557.65 608.12,557.65 L561.139,557.65 C555.771,557.65 551.419,552.274 551.419,545.642 L551.419,545.642 C551.419,539.01 555.771,533.634 561.139,533.634 z" fill-opacity="0" stroke="#656565" stroke-width="4"/>
-    </g>
-  </g>
-  <g id="Layer_1">
-    <g>
-      <image xlink:href="data:image/png;base64,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" opacity="1" x="206.375" y="382.491" width="131.401" height="267" preserveAspectRatio="xMidYMid" clip-path="url(#Clip_1)"/>
-      <path d="M207.5,382.991 L288.208,382.991 L288.208,400.158 L207.5,400.158 L207.5,382.991 z" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-      <path d="M207.5,382.991 L338.276,382.991 L338.276,568.658 L207.5,568.658 L207.5,382.991 z" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-    </g>
-    <path d="M70.606,70.053 L64.079,70.053 L64.079,68.917 L69.552,59.46 L71.602,59.46 L71.602,69.069 L72.423,69.069 Q72.786,69.069 72.938,69.204 Q73.091,69.339 73.091,69.561 Q73.091,69.772 72.938,69.913 Q72.786,70.053 72.423,70.053 L71.602,70.053 L71.602,73.182 L72.423,73.182 Q72.786,73.182 72.938,73.317 Q73.091,73.452 73.091,73.674 Q73.091,73.885 72.938,74.026 Q72.786,74.167 72.423,74.167 L68.767,74.167 Q68.403,74.167 68.251,74.026 Q68.099,73.885 68.099,73.674 Q68.099,73.452 68.251,73.317 Q68.403,73.182 68.767,73.182 L70.606,73.182 z M70.606,69.069 L70.606,60.456 L70.091,60.456 L65.11,69.069 z" fill="#000000"/>
-    <path d="M87.692,65.6 L87.692,68.038 Q87.692,71.214 86.181,73.065 Q84.997,74.518 83.192,74.518 Q82.325,74.518 81.558,74.173 Q80.79,73.827 80.251,73.206 Q79.911,72.819 79.507,71.964 Q79.102,71.108 78.927,70.393 Q78.657,69.385 78.657,68.038 L78.657,65.6 Q78.657,62.413 80.169,60.561 Q81.352,59.108 83.157,59.108 Q84.036,59.108 84.798,59.454 Q85.559,59.799 86.099,60.421 Q86.45,60.819 86.849,61.674 Q87.247,62.53 87.434,63.233 Q87.692,64.241 87.692,65.6 z M86.708,65.729 Q86.708,64.335 86.315,63.133 Q85.923,61.932 85.431,61.217 Q85.138,60.807 84.669,60.514 Q84.001,60.104 83.169,60.104 Q81.517,60.104 80.579,61.792 Q79.642,63.479 79.642,65.729 L79.642,67.897 Q79.642,69.292 80.034,70.499 Q80.427,71.706 80.931,72.421 Q81.212,72.819 81.681,73.112 Q82.349,73.534 83.192,73.534 Q84.833,73.534 85.77,71.84 Q86.708,70.147 86.708,67.897 z" fill="#000000"/>
-    <path d="M130.899,65.6 L130.899,68.038 Q130.899,71.214 129.388,73.065 Q128.204,74.518 126.399,74.518 Q125.532,74.518 124.765,74.173 Q123.997,73.827 123.458,73.206 Q123.118,72.819 122.714,71.964 Q122.309,71.108 122.134,70.393 Q121.864,69.385 121.864,68.038 L121.864,65.6 Q121.864,62.413 123.376,60.561 Q124.559,59.108 126.364,59.108 Q127.243,59.108 128.005,59.454 Q128.767,59.799 129.306,60.421 Q129.657,60.819 130.056,61.674 Q130.454,62.53 130.642,63.233 Q130.899,64.241 130.899,65.6 z M129.915,65.729 Q129.915,64.335 129.522,63.133 Q129.13,61.932 128.638,61.217 Q128.345,60.807 127.876,60.514 Q127.208,60.104 126.376,60.104 Q124.724,60.104 123.786,61.792 Q122.849,63.479 122.849,65.729 L122.849,67.897 Q122.849,69.292 123.241,70.499 Q123.634,71.706 124.138,72.421 Q124.419,72.819 124.888,73.112 Q125.556,73.534 126.399,73.534 Q128.04,73.534 128.977,71.84 Q129.915,70.147 129.915,67.897 z" fill="#000000"/>
-    <path d="M171.423,70.053 L164.895,70.053 L164.895,68.917 L170.368,59.46 L172.419,59.46 L172.419,69.069 L173.239,69.069 Q173.602,69.069 173.755,69.204 Q173.907,69.339 173.907,69.561 Q173.907,69.772 173.755,69.913 Q173.602,70.053 173.239,70.053 L172.419,70.053 L172.419,73.182 L173.239,73.182 Q173.602,73.182 173.755,73.317 Q173.907,73.452 173.907,73.674 Q173.907,73.885 173.755,74.026 Q173.602,74.167 173.239,74.167 L169.583,74.167 Q169.22,74.167 169.067,74.026 Q168.915,73.885 168.915,73.674 Q168.915,73.452 169.067,73.317 Q169.22,73.182 169.583,73.182 L171.423,73.182 z M171.423,69.069 L171.423,60.456 L170.907,60.456 L165.927,69.069 z" fill="#000000"/>
-    <path d="M188.509,65.6 L188.509,68.038 Q188.509,71.214 186.997,73.065 Q185.813,74.518 184.009,74.518 Q183.142,74.518 182.374,74.173 Q181.606,73.827 181.067,73.206 Q180.727,72.819 180.323,71.964 Q179.919,71.108 179.743,70.393 Q179.474,69.385 179.474,68.038 L179.474,65.6 Q179.474,62.413 180.985,60.561 Q182.169,59.108 183.974,59.108 Q184.852,59.108 185.614,59.454 Q186.376,59.799 186.915,60.421 Q187.267,60.819 187.665,61.674 Q188.063,62.53 188.251,63.233 Q188.509,64.241 188.509,65.6 z M187.524,65.729 Q187.524,64.335 187.132,63.133 Q186.739,61.932 186.247,61.217 Q185.954,60.807 185.485,60.514 Q184.817,60.104 183.985,60.104 Q182.333,60.104 181.395,61.792 Q180.458,63.479 180.458,65.729 L180.458,67.897 Q180.458,69.292 180.85,70.499 Q181.243,71.706 181.747,72.421 Q182.028,72.819 182.497,73.112 Q183.165,73.534 184.009,73.534 Q185.649,73.534 186.587,71.84 Q187.524,70.147 187.524,67.897 z" fill="#000000"/>
-    <path d="M197.849,63.491 L197.849,60.128 Q197.849,59.764 197.989,59.612 Q198.13,59.46 198.352,59.46 Q198.563,59.46 198.704,59.612 Q198.845,59.764 198.845,60.128 L198.845,63.491 L202.044,62.448 Q202.267,62.378 202.384,62.378 Q202.571,62.378 202.712,62.524 Q202.852,62.671 202.852,62.87 Q202.852,63.046 202.753,63.174 Q202.653,63.303 202.349,63.397 L199.149,64.44 L201.13,67.159 Q201.317,67.428 201.317,67.581 Q201.317,67.792 201.171,67.938 Q201.024,68.085 200.825,68.085 Q200.567,68.085 200.321,67.745 L198.341,65.014 L196.36,67.745 Q196.114,68.085 195.868,68.085 Q195.657,68.085 195.511,67.938 Q195.364,67.792 195.364,67.581 Q195.364,67.428 195.563,67.159 L197.544,64.44 L194.333,63.385 Q194.04,63.292 193.94,63.169 Q193.841,63.046 193.841,62.87 Q193.841,62.671 193.981,62.524 Q194.122,62.378 194.298,62.378 Q194.427,62.378 194.649,62.448 z" fill="#000000"/>
-    <path d="M213.388,67.147 L218.063,73.182 L218.438,73.182 Q218.79,73.182 218.942,73.317 Q219.095,73.452 219.095,73.674 Q219.095,73.885 218.942,74.026 Q218.79,74.167 218.438,74.167 L215.274,74.167 Q214.923,74.167 214.77,74.026 Q214.618,73.885 214.618,73.674 Q214.618,73.452 214.77,73.317 Q214.923,73.182 215.274,73.182 L216.845,73.182 L212.778,67.956 L208.759,73.182 L210.329,73.182 Q210.681,73.182 210.833,73.317 Q210.985,73.452 210.985,73.674 Q210.985,73.885 210.833,74.026 Q210.681,74.167 210.329,74.167 L207.188,74.167 Q206.837,74.167 206.684,74.026 Q206.532,73.885 206.532,73.674 Q206.532,73.51 206.626,73.382 Q206.72,73.253 206.837,73.217 Q206.954,73.182 207.552,73.182 L212.169,67.147 L207.763,61.44 L207.399,61.44 Q207.048,61.44 206.895,61.305 Q206.743,61.171 206.743,60.948 Q206.743,60.725 206.895,60.59 Q207.048,60.456 207.399,60.456 L210.083,60.456 Q210.446,60.456 210.599,60.59 Q210.751,60.725 210.751,60.948 Q210.751,61.171 210.599,61.305 Q210.446,61.44 210.083,61.44 L208.981,61.44 L212.778,66.35 L216.552,61.44 L215.45,61.44 Q215.087,61.44 214.934,61.305 Q214.782,61.171 214.782,60.948 Q214.782,60.725 214.934,60.59 Q215.087,60.456 215.45,60.456 L218.145,60.456 Q218.497,60.456 218.649,60.59 Q218.802,60.725 218.802,60.948 Q218.802,61.171 218.649,61.305 Q218.497,61.44 218.145,61.44 L217.77,61.44 z" fill="#000000"/>
-    <path d="M87.692,92.6 L87.692,95.038 Q87.692,98.214 86.181,100.065 Q84.997,101.518 83.192,101.518 Q82.325,101.518 81.558,101.173 Q80.79,100.827 80.251,100.206 Q79.911,99.819 79.507,98.964 Q79.102,98.108 78.927,97.393 Q78.657,96.385 78.657,95.038 L78.657,92.6 Q78.657,89.413 80.169,87.561 Q81.352,86.108 83.157,86.108 Q84.036,86.108 84.798,86.454 Q85.559,86.799 86.099,87.421 Q86.45,87.819 86.849,88.674 Q87.247,89.53 87.434,90.233 Q87.692,91.241 87.692,92.6 z M86.708,92.729 Q86.708,91.335 86.315,90.133 Q85.923,88.932 85.431,88.217 Q85.138,87.807 84.669,87.514 Q84.001,87.104 83.169,87.104 Q81.517,87.104 80.579,88.792 Q79.642,90.479 79.642,92.729 L79.642,94.897 Q79.642,96.292 80.034,97.499 Q80.427,98.706 80.931,99.421 Q81.212,99.819 81.681,100.112 Q82.349,100.534 83.192,100.534 Q84.833,100.534 85.77,98.84 Q86.708,97.147 86.708,94.897 z" fill="#000000"/>
-    <path d="M112.466,86.26 L112.466,100.182 L115.841,100.182 Q116.192,100.182 116.345,100.317 Q116.497,100.452 116.497,100.674 Q116.497,100.885 116.345,101.026 Q116.192,101.167 115.841,101.167 L108.106,101.167 Q107.755,101.167 107.602,101.026 Q107.45,100.885 107.45,100.674 Q107.45,100.452 107.602,100.317 Q107.755,100.182 108.106,100.182 L111.481,100.182 L111.481,87.62 L108.27,88.628 Q108.036,88.698 107.931,88.698 Q107.755,88.698 107.608,88.551 Q107.462,88.405 107.462,88.206 Q107.462,88.03 107.579,87.878 Q107.673,87.784 107.966,87.678 z" fill="#000000"/>
-    <path d="M130.899,92.6 L130.899,95.038 Q130.899,98.214 129.388,100.065 Q128.204,101.518 126.399,101.518 Q125.532,101.518 124.765,101.173 Q123.997,100.827 123.458,100.206 Q123.118,99.819 122.714,98.964 Q122.309,98.108 122.134,97.393 Q121.864,96.385 121.864,95.038 L121.864,92.6 Q121.864,89.413 123.376,87.561 Q124.559,86.108 126.364,86.108 Q127.243,86.108 128.005,86.454 Q128.767,86.799 129.306,87.421 Q129.657,87.819 130.056,88.674 Q130.454,89.53 130.642,90.233 Q130.899,91.241 130.899,92.6 z M129.915,92.729 Q129.915,91.335 129.522,90.133 Q129.13,88.932 128.638,88.217 Q128.345,87.807 127.876,87.514 Q127.208,87.104 126.376,87.104 Q124.724,87.104 123.786,88.792 Q122.849,90.479 122.849,92.729 L122.849,94.897 Q122.849,96.292 123.241,97.499 Q123.634,98.706 124.138,99.421 Q124.419,99.819 124.888,100.112 Q125.556,100.534 126.399,100.534 Q128.04,100.534 128.977,98.84 Q129.915,97.147 129.915,94.897 z" fill="#000000"/>
-    <path d="M170.075,86.26 L170.075,100.182 L173.45,100.182 Q173.802,100.182 173.954,100.317 Q174.106,100.452 174.106,100.674 Q174.106,100.885 173.954,101.026 Q173.802,101.167 173.45,101.167 L165.716,101.167 Q165.364,101.167 165.212,101.026 Q165.059,100.885 165.059,100.674 Q165.059,100.452 165.212,100.317 Q165.364,100.182 165.716,100.182 L169.091,100.182 L169.091,87.62 L165.88,88.628 Q165.645,88.698 165.54,88.698 Q165.364,88.698 165.218,88.551 Q165.071,88.405 165.071,88.206 Q165.071,88.03 165.188,87.878 Q165.282,87.784 165.575,87.678 z" fill="#000000"/>
-    <path d="M188.509,92.6 L188.509,95.038 Q188.509,98.214 186.997,100.065 Q185.813,101.518 184.009,101.518 Q183.142,101.518 182.374,101.173 Q181.606,100.827 181.067,100.206 Q180.727,99.819 180.323,98.964 Q179.919,98.108 179.743,97.393 Q179.474,96.385 179.474,95.038 L179.474,92.6 Q179.474,89.413 180.985,87.561 Q182.169,86.108 183.974,86.108 Q184.852,86.108 185.614,86.454 Q186.376,86.799 186.915,87.421 Q187.267,87.819 187.665,88.674 Q188.063,89.53 188.251,90.233 Q188.509,91.241 188.509,92.6 z M187.524,92.729 Q187.524,91.335 187.132,90.133 Q186.739,88.932 186.247,88.217 Q185.954,87.807 185.485,87.514 Q184.817,87.104 183.985,87.104 Q182.333,87.104 181.395,88.792 Q180.458,90.479 180.458,92.729 L180.458,94.897 Q180.458,96.292 180.85,97.499 Q181.243,98.706 181.747,99.421 Q182.028,99.819 182.497,100.112 Q183.165,100.534 184.009,100.534 Q185.649,100.534 186.587,98.84 Q187.524,97.147 187.524,94.897 z" fill="#000000"/>
-    <path d="M197.849,90.491 L197.849,87.128 Q197.849,86.764 197.989,86.612 Q198.13,86.46 198.352,86.46 Q198.563,86.46 198.704,86.612 Q198.845,86.764 198.845,87.128 L198.845,90.491 L202.044,89.448 Q202.267,89.378 202.384,89.378 Q202.571,89.378 202.712,89.524 Q202.852,89.671 202.852,89.87 Q202.852,90.046 202.753,90.174 Q202.653,90.303 202.349,90.397 L199.149,91.44 L201.13,94.159 Q201.317,94.428 201.317,94.581 Q201.317,94.792 201.171,94.938 Q201.024,95.085 200.825,95.085 Q200.567,95.085 200.321,94.745 L198.341,92.014 L196.36,94.745 Q196.114,95.085 195.868,95.085 Q195.657,95.085 195.511,94.938 Q195.364,94.792 195.364,94.581 Q195.364,94.428 195.563,94.159 L197.544,91.44 L194.333,90.385 Q194.04,90.292 193.94,90.169 Q193.841,90.046 193.841,89.87 Q193.841,89.671 193.981,89.524 Q194.122,89.378 194.298,89.378 Q194.427,89.378 194.649,89.448 z" fill="#000000"/>
-    <path d="M213.317,94.979 L213.317,100.182 L215.872,100.182 Q216.224,100.182 216.376,100.317 Q216.528,100.452 216.528,100.674 Q216.528,100.885 216.376,101.026 Q216.224,101.167 215.872,101.167 L209.767,101.167 Q209.415,101.167 209.263,101.026 Q209.11,100.885 209.11,100.674 Q209.11,100.452 209.257,100.317 Q209.403,100.182 209.767,100.182 L212.321,100.182 L212.321,94.979 L207.997,88.44 L207.411,88.44 Q207.059,88.44 206.907,88.305 Q206.755,88.171 206.755,87.948 Q206.755,87.725 206.907,87.59 Q207.059,87.456 207.411,87.456 L210.118,87.456 Q210.47,87.456 210.622,87.59 Q210.774,87.725 210.774,87.948 Q210.774,88.171 210.622,88.305 Q210.47,88.44 210.118,88.44 L209.145,88.44 L212.825,93.983 L216.423,88.44 L215.462,88.44 Q215.099,88.44 214.946,88.305 Q214.794,88.171 214.794,87.948 Q214.794,87.725 214.946,87.59 Q215.099,87.456 215.462,87.456 L218.157,87.456 Q218.509,87.456 218.661,87.59 Q218.813,87.725 218.813,87.948 Q218.813,88.171 218.661,88.305 Q218.509,88.44 218.157,88.44 L217.571,88.44 z" fill="#000000"/>
-    <path d="M87.692,119.6 L87.692,122.038 Q87.692,125.214 86.181,127.065 Q84.997,128.518 83.192,128.518 Q82.325,128.518 81.558,128.173 Q80.79,127.827 80.251,127.206 Q79.911,126.819 79.507,125.964 Q79.102,125.108 78.927,124.393 Q78.657,123.385 78.657,122.038 L78.657,119.6 Q78.657,116.413 80.169,114.561 Q81.352,113.108 83.157,113.108 Q84.036,113.108 84.798,113.454 Q85.559,113.799 86.099,114.421 Q86.45,114.819 86.849,115.674 Q87.247,116.53 87.434,117.233 Q87.692,118.241 87.692,119.6 z M86.708,119.729 Q86.708,118.335 86.315,117.133 Q85.923,115.932 85.431,115.217 Q85.138,114.807 84.669,114.514 Q84.001,114.104 83.169,114.104 Q81.517,114.104 80.579,115.792 Q79.642,117.479 79.642,119.729 L79.642,121.897 Q79.642,123.292 80.034,124.499 Q80.427,125.706 80.931,126.421 Q81.212,126.819 81.681,127.112 Q82.349,127.534 83.192,127.534 Q84.833,127.534 85.77,125.84 Q86.708,124.147 86.708,121.897 z" fill="#000000"/>
-    <path d="M130.899,119.6 L130.899,122.038 Q130.899,125.214 129.388,127.065 Q128.204,128.518 126.399,128.518 Q125.532,128.518 124.765,128.173 Q123.997,127.827 123.458,127.206 Q123.118,126.819 122.714,125.964 Q122.309,125.108 122.134,124.393 Q121.864,123.385 121.864,122.038 L121.864,119.6 Q121.864,116.413 123.376,114.561 Q124.559,113.108 126.364,113.108 Q127.243,113.108 128.005,113.454 Q128.767,113.799 129.306,114.421 Q129.657,114.819 130.056,115.674 Q130.454,116.53 130.642,117.233 Q130.899,118.241 130.899,119.6 z M129.915,119.729 Q129.915,118.335 129.522,117.133 Q129.13,115.932 128.638,115.217 Q128.345,114.807 127.876,114.514 Q127.208,114.104 126.376,114.104 Q124.724,114.104 123.786,115.792 Q122.849,117.479 122.849,119.729 L122.849,121.897 Q122.849,123.292 123.241,124.499 Q123.634,125.706 124.138,126.421 Q124.419,126.819 124.888,127.112 Q125.556,127.534 126.399,127.534 Q128.04,127.534 128.977,125.84 Q129.915,124.147 129.915,121.897 z" fill="#000000"/>
-    <path d="M213.282,113.26 L213.282,127.182 L216.657,127.182 Q217.009,127.182 217.161,127.317 Q217.313,127.452 217.313,127.674 Q217.313,127.885 217.161,128.026 Q217.009,128.167 216.657,128.167 L208.923,128.167 Q208.571,128.167 208.419,128.026 Q208.267,127.885 208.267,127.674 Q208.267,127.452 208.419,127.317 Q208.571,127.182 208.923,127.182 L212.298,127.182 L212.298,114.62 L209.087,115.628 Q208.852,115.698 208.747,115.698 Q208.571,115.698 208.425,115.551 Q208.278,115.405 208.278,115.206 Q208.278,115.03 208.395,114.878 Q208.489,114.784 208.782,114.678 z" fill="#000000"/>
-    <path d="M44.129,198.624 L44.128,198.296 Q44.128,197.933 44.268,197.78 Q44.409,197.628 44.619,197.628 Q44.842,197.627 44.983,197.779 Q45.124,197.932 45.124,198.295 L45.127,200.521 Q45.116,200.885 44.982,201.037 Q44.847,201.19 44.624,201.19 Q44.425,201.19 44.29,201.056 Q44.155,200.921 44.131,200.605 Q44.06,199.773 43.034,199.024 Q42.007,198.276 40.273,198.278 Q38.081,198.281 36.947,199.654 Q35.812,201.027 35.814,202.796 Q35.817,204.706 37.073,205.947 Q38.328,207.187 40.32,207.184 Q41.469,207.183 42.658,206.759 Q43.847,206.336 44.806,205.397 Q45.052,205.162 45.239,205.162 Q45.439,205.162 45.574,205.296 Q45.709,205.431 45.709,205.63 Q45.71,206.134 44.527,206.909 Q42.619,208.166 40.275,208.169 Q37.896,208.172 36.365,206.657 Q34.833,205.141 34.83,202.809 Q34.827,200.43 36.389,198.858 Q37.951,197.285 40.33,197.282 Q42.592,197.279 44.129,198.624 z" fill="#333333"/>
-    <path d="M59.931,202.704 Q59.935,204.954 58.325,206.55 Q56.716,208.146 54.443,208.149 Q52.146,208.152 50.538,206.555 Q48.931,204.957 48.927,202.719 Q48.924,200.469 50.527,198.867 Q52.131,197.265 54.428,197.262 Q56.701,197.259 58.315,198.85 Q59.928,200.442 59.931,202.704 z M58.935,202.705 Q58.933,200.853 57.612,199.554 Q56.292,198.256 54.417,198.258 Q52.542,198.261 51.226,199.569 Q49.909,200.878 49.912,202.718 Q49.914,204.546 51.235,205.856 Q52.555,207.167 54.43,207.164 Q56.305,207.162 57.621,205.853 Q58.938,204.545 58.935,202.705 z" fill="#333333"/>
-    <path d="M72.077,198.233 Q72.077,197.893 72.217,197.741 Q72.358,197.588 72.569,197.588 Q72.791,197.588 72.932,197.74 Q73.073,197.892 73.073,198.255 L73.076,199.943 Q73.076,200.294 72.936,200.447 Q72.796,200.599 72.573,200.6 Q72.374,200.6 72.239,200.471 Q72.104,200.343 72.08,200.05 Q72.009,199.347 71.352,198.89 Q70.39,198.236 68.808,198.238 Q67.155,198.24 66.242,198.909 Q65.552,199.414 65.553,200.035 Q65.554,200.739 66.375,201.206 Q66.937,201.533 68.508,201.707 Q70.559,201.927 71.356,202.207 Q72.494,202.615 73.051,203.341 Q73.609,204.067 73.61,204.911 Q73.612,206.165 72.406,207.145 Q71.201,208.125 68.869,208.128 Q66.537,208.132 65.047,206.95 Q65.047,207.349 65.001,207.466 Q64.954,207.583 64.831,207.665 Q64.708,207.748 64.556,207.748 Q64.345,207.748 64.204,207.596 Q64.063,207.444 64.063,207.092 L64.06,205.065 Q64.059,204.713 64.194,204.561 Q64.328,204.408 64.551,204.408 Q64.762,204.408 64.909,204.554 Q65.055,204.7 65.056,204.946 Q65.056,205.485 65.326,205.848 Q65.737,206.41 66.634,206.778 Q67.531,207.146 68.832,207.144 Q70.754,207.141 71.691,206.425 Q72.627,205.709 72.626,204.912 Q72.625,203.998 71.675,203.449 Q70.713,202.899 68.879,202.714 Q67.044,202.529 66.247,202.226 Q65.45,201.922 65.004,201.314 Q64.557,200.705 64.556,200.002 Q64.555,198.736 65.796,197.99 Q67.037,197.244 68.76,197.242 Q70.799,197.239 72.077,198.233 z" fill="#333333"/>
-    <path d="M83.122,201.886 Q83.12,200.538 83.469,199.026 Q83.819,197.513 84.812,195.532 Q85.805,193.55 86.262,193.139 Q86.402,193.01 86.566,193.01 Q86.777,193.009 86.924,193.15 Q87.07,193.29 87.071,193.489 Q87.071,193.606 86.989,193.747 Q85.703,196.116 85.155,198.039 Q84.607,199.962 84.61,201.883 Q84.613,203.817 85.166,205.738 Q85.72,207.659 87.012,210.013 Q87.094,210.153 87.094,210.271 Q87.095,210.47 86.948,210.616 Q86.802,210.763 86.591,210.763 Q86.427,210.764 86.286,210.635 Q85.852,210.237 84.865,208.305 Q83.878,206.373 83.501,204.885 Q83.124,203.397 83.122,201.886 z" fill="#333333"/>
-    <path d="M101.644,198.543 L101.656,206.711 L102.968,206.709 Q103.625,206.708 103.625,207.2 Q103.626,207.692 102.97,207.693 L99.606,207.698 Q98.95,207.699 98.949,207.207 Q98.949,206.715 99.605,206.714 L100.66,206.712 L100.648,198.544 L94.613,198.553 L94.625,206.721 L95.668,206.719 Q96.335,206.718 96.336,207.211 Q96.337,207.703 95.669,207.704 L92.317,207.708 Q91.661,207.709 91.66,207.217 Q91.66,206.725 92.316,206.724 L93.628,206.722 L93.617,198.554 L92.304,198.556 Q91.648,198.557 91.647,198.065 Q91.647,197.561 92.303,197.56 L102.955,197.545 Q103.612,197.544 103.612,198.048 Q103.613,198.54 102.957,198.541 z" fill="#333333"/>
-    <path d="M116.448,192.252 L108.55,209.232 Q108.351,209.666 108.035,209.667 Q107.836,209.667 107.689,209.521 Q107.542,209.374 107.542,209.199 Q107.542,209.058 107.659,208.812 L115.545,191.832 Q115.673,191.562 115.79,191.48 Q115.908,191.398 116.072,191.397 Q116.271,191.397 116.418,191.543 Q116.564,191.69 116.564,191.865 Q116.565,191.994 116.448,192.252 z" fill="#333333"/>
-    <path d="M128.276,203.544 L121.749,203.553 L121.747,202.417 L127.207,192.952 L129.257,192.949 L129.271,202.558 L130.091,202.557 Q130.455,202.557 130.607,202.691 Q130.76,202.826 130.76,203.049 Q130.76,203.259 130.608,203.4 Q130.456,203.541 130.093,203.542 L129.272,203.543 L129.277,206.672 L130.097,206.671 Q130.46,206.67 130.613,206.805 Q130.766,206.939 130.766,207.162 Q130.766,207.373 130.614,207.514 Q130.462,207.654 130.099,207.655 L126.442,207.66 Q126.079,207.661 125.926,207.52 Q125.774,207.38 125.774,207.169 Q125.773,206.946 125.925,206.811 Q126.078,206.676 126.441,206.676 L128.281,206.673 z M128.275,202.56 L128.263,193.947 L127.747,193.947 L122.779,202.568 z" fill="#333333"/>
-    <path d="M141.129,201.815 Q141.131,203.163 140.782,204.669 Q140.432,206.175 139.439,208.163 Q138.446,210.151 137.989,210.55 Q137.849,210.691 137.685,210.691 Q137.474,210.691 137.327,210.545 Q137.181,210.399 137.18,210.2 Q137.18,210.082 137.262,209.942 Q138.548,207.584 139.096,205.662 Q139.644,203.739 139.641,201.817 Q139.638,199.884 139.085,197.963 Q138.531,196.041 137.239,193.676 Q137.157,193.536 137.157,193.418 Q137.156,193.219 137.303,193.078 Q137.449,192.937 137.66,192.937 Q137.824,192.937 137.965,193.066 Q138.399,193.463 139.386,195.396 Q140.373,197.328 140.75,198.816 Q141.127,200.303 141.129,201.815 z" fill="#333333"/>
-    <path d="M172.894,198.09 Q172.893,197.751 173.034,197.598 Q173.174,197.445 173.385,197.445 Q173.608,197.445 173.748,197.597 Q173.889,197.749 173.89,198.112 L173.892,199.8 Q173.893,200.152 173.752,200.304 Q173.612,200.457 173.389,200.457 Q173.19,200.457 173.055,200.328 Q172.92,200.2 172.896,199.907 Q172.825,199.204 172.168,198.748 Q171.206,198.093 169.624,198.095 Q167.972,198.097 167.059,198.767 Q166.368,199.272 166.369,199.893 Q166.37,200.596 167.191,201.063 Q167.754,201.391 169.324,201.564 Q171.375,201.784 172.173,202.064 Q173.31,202.473 173.868,203.198 Q174.425,203.924 174.427,204.768 Q174.428,206.022 173.223,207.002 Q172.017,207.982 169.685,207.986 Q167.353,207.989 165.863,206.807 Q165.864,207.206 165.817,207.323 Q165.77,207.44 165.647,207.523 Q165.524,207.605 165.372,207.605 Q165.161,207.605 165.02,207.453 Q164.879,207.301 164.879,206.949 L164.876,204.922 Q164.875,204.571 165.01,204.418 Q165.145,204.265 165.367,204.265 Q165.578,204.265 165.725,204.411 Q165.872,204.557 165.872,204.803 Q165.873,205.343 166.143,205.705 Q166.554,206.267 167.451,206.635 Q168.348,207.003 169.648,207.001 Q171.57,206.999 172.507,206.282 Q173.443,205.566 173.442,204.769 Q173.441,203.855 172.491,203.306 Q171.529,202.756 169.695,202.572 Q167.861,202.387 167.063,202.083 Q166.266,201.779 165.82,201.171 Q165.374,200.562 165.373,199.859 Q165.371,198.593 166.612,197.847 Q167.853,197.101 169.576,197.099 Q171.615,197.096 172.894,198.09 z" fill="#333333"/>
-    <path d="M184.522,192.379 L184.526,194.922 L183.073,194.924 L183.069,192.381 z M184.565,197.429 L184.578,206.593 L188.445,206.588 Q188.808,206.587 188.961,206.722 Q189.113,206.857 189.113,207.079 Q189.114,207.29 188.962,207.431 Q188.809,207.572 188.446,207.572 L179.727,207.585 Q179.376,207.585 179.223,207.445 Q179.071,207.304 179.07,207.093 Q179.07,206.871 179.222,206.736 Q179.374,206.601 179.726,206.6 L183.593,206.595 L183.582,198.427 L180.711,198.431 Q180.359,198.431 180.201,198.291 Q180.042,198.151 180.042,197.94 Q180.042,197.717 180.194,197.576 Q180.346,197.435 180.709,197.435 z" fill="#333333"/>
-    <path d="M195.264,197.414 L195.266,198.902 Q196.296,197.858 197.127,197.458 Q197.959,197.059 199.002,197.057 Q200.127,197.056 201.053,197.535 Q201.71,197.886 202.244,198.699 Q202.779,199.513 202.78,200.368 L202.788,206.568 L203.621,206.566 Q203.972,206.566 204.125,206.701 Q204.277,206.835 204.277,207.058 Q204.278,207.269 204.126,207.409 Q203.973,207.55 203.622,207.551 L200.985,207.555 Q200.622,207.555 200.469,207.415 Q200.317,207.274 200.317,207.063 Q200.316,206.841 200.468,206.706 Q200.621,206.571 200.984,206.57 L201.804,206.569 L201.796,200.534 Q201.794,199.491 201.031,198.771 Q200.269,198.052 198.991,198.053 Q198.019,198.055 197.304,198.448 Q196.59,198.842 195.268,200.402 L195.277,206.578 L196.39,206.577 Q196.742,206.576 196.894,206.711 Q197.047,206.845 197.047,207.068 Q197.047,207.279 196.895,207.42 Q196.743,207.561 196.391,207.561 L193.181,207.566 Q192.829,207.566 192.676,207.426 Q192.524,207.285 192.524,207.074 Q192.523,206.852 192.675,206.717 Q192.828,206.582 193.179,206.581 L194.292,206.58 L194.281,198.412 L193.449,198.413 Q193.097,198.413 192.945,198.273 Q192.792,198.133 192.792,197.91 Q192.792,197.699 192.944,197.558 Q193.096,197.417 193.447,197.417 z" fill="#333333"/>
-    <path d="M212.743,201.702 Q212.741,200.354 213.09,198.842 Q213.439,197.33 214.433,195.348 Q215.426,193.366 215.883,192.955 Q216.023,192.826 216.187,192.826 Q216.398,192.826 216.545,192.966 Q216.691,193.107 216.692,193.306 Q216.692,193.423 216.61,193.564 Q215.324,195.933 214.776,197.855 Q214.228,199.778 214.231,201.7 Q214.234,203.633 214.787,205.555 Q215.341,207.476 216.633,209.829 Q216.715,209.97 216.715,210.087 Q216.716,210.286 216.569,210.433 Q216.423,210.58 216.212,210.58 Q216.048,210.58 215.907,210.451 Q215.473,210.054 214.486,208.121 Q213.499,206.189 213.122,204.701 Q212.745,203.214 212.743,201.702 z" fill="#333333"/>
-    <path d="M231.265,198.359 L231.277,206.527 L232.589,206.525 Q233.246,206.525 233.246,207.017 Q233.247,207.509 232.591,207.51 L229.227,207.515 Q228.571,207.516 228.57,207.023 Q228.57,206.531 229.226,206.53 L230.281,206.529 L230.269,198.361 L224.234,198.369 L224.246,206.537 L225.288,206.536 Q225.956,206.535 225.957,207.027 Q225.958,207.519 225.29,207.52 L221.938,207.525 Q221.282,207.526 221.281,207.034 Q221.281,206.541 221.937,206.541 L223.249,206.539 L223.238,198.371 L221.925,198.373 Q221.269,198.373 221.268,197.881 Q221.268,197.377 221.924,197.376 L232.576,197.361 Q233.233,197.36 233.233,197.864 Q233.234,198.357 232.578,198.357 z" fill="#333333"/>
-    <path d="M246.069,192.069 L238.171,209.049 Q237.972,209.483 237.656,209.483 Q237.457,209.483 237.31,209.337 Q237.163,209.191 237.163,209.015 Q237.163,208.874 237.28,208.628 L245.166,191.648 Q245.294,191.379 245.411,191.296 Q245.529,191.214 245.693,191.214 Q245.892,191.214 246.038,191.36 Q246.185,191.506 246.185,191.682 Q246.186,191.811 246.069,192.069 z" fill="#333333"/>
-    <path d="M257.897,203.361 L251.37,203.37 L251.368,202.233 L256.828,192.768 L258.878,192.766 L258.892,202.375 L259.712,202.374 Q260.076,202.373 260.228,202.508 Q260.381,202.642 260.381,202.865 Q260.381,203.076 260.229,203.217 Q260.077,203.358 259.714,203.358 L258.893,203.359 L258.898,206.488 L259.718,206.487 Q260.081,206.487 260.234,206.621 Q260.386,206.756 260.387,206.978 Q260.387,207.189 260.235,207.33 Q260.083,207.471 259.72,207.471 L256.063,207.477 Q255.7,207.477 255.547,207.337 Q255.395,207.196 255.395,206.985 Q255.394,206.763 255.546,206.628 Q255.699,206.493 256.062,206.492 L257.902,206.49 z M257.896,202.376 L257.884,193.763 L257.368,193.764 L252.4,202.384 z" fill="#333333"/>
-    <path d="M270.75,201.632 Q270.752,202.979 270.403,204.486 Q270.053,205.992 269.06,207.98 Q268.067,209.967 267.61,210.366 Q267.47,210.507 267.306,210.508 Q267.095,210.508 266.948,210.362 Q266.802,210.215 266.801,210.016 Q266.801,209.899 266.883,209.758 Q268.169,207.401 268.717,205.478 Q269.265,203.556 269.262,201.634 Q269.259,199.7 268.706,197.779 Q268.152,195.858 266.86,193.493 Q266.778,193.352 266.777,193.235 Q266.777,193.036 266.923,192.895 Q267.07,192.754 267.281,192.754 Q267.445,192.753 267.586,192.882 Q268.02,193.28 269.007,195.212 Q269.994,197.144 270.371,198.632 Q270.748,200.12 270.75,201.632 z" fill="#333333"/>
-    <path d="M303.782,198.843 L303.785,201.28 Q303.79,204.456 302.28,206.31 Q301.099,207.764 299.294,207.767 Q298.427,207.768 297.659,207.424 Q296.891,207.079 296.351,206.459 Q296.011,206.072 295.605,205.217 Q295.2,204.363 295.023,203.648 Q294.752,202.641 294.75,201.293 L294.746,198.855 Q294.742,195.668 296.251,193.814 Q297.433,192.359 299.237,192.357 Q300.116,192.356 300.878,192.7 Q301.641,193.045 302.18,193.665 Q302.533,194.063 302.932,194.918 Q303.332,195.773 303.52,196.476 Q303.78,197.483 303.782,198.843 z M302.797,198.973 Q302.795,197.578 302.401,196.378 Q302.007,195.177 301.514,194.463 Q301.22,194.053 300.751,193.761 Q300.082,193.352 299.25,193.353 Q297.598,193.355 296.663,195.044 Q295.728,196.733 295.731,198.983 L295.734,201.151 Q295.736,202.545 296.13,203.752 Q296.525,204.958 297.03,205.672 Q297.311,206.071 297.78,206.363 Q298.449,206.784 299.293,206.783 Q300.933,206.78 301.869,205.086 Q302.804,203.391 302.8,201.141 z" fill="#333333"/>
-    <path d="M30.681,227.307 L30.683,228.714 L20.64,228.728 L20.638,227.322 z" fill="#333333"/>
-    <path d="M43.311,225.274 Q43.31,224.934 43.451,224.782 Q43.591,224.629 43.802,224.629 Q44.025,224.628 44.166,224.781 Q44.307,224.933 44.307,225.296 L44.309,226.983 Q44.31,227.335 44.17,227.488 Q44.029,227.64 43.806,227.64 Q43.607,227.641 43.472,227.512 Q43.337,227.383 43.313,227.09 Q43.242,226.387 42.585,225.931 Q41.623,225.276 40.041,225.279 Q38.389,225.281 37.476,225.95 Q36.785,226.455 36.786,227.076 Q36.787,227.779 37.608,228.247 Q38.171,228.574 39.742,228.748 Q41.793,228.967 42.59,229.248 Q43.727,229.656 44.285,230.382 Q44.843,231.108 44.844,231.951 Q44.846,233.205 43.64,234.186 Q42.434,235.166 40.102,235.169 Q37.77,235.172 36.28,233.991 Q36.281,234.389 36.234,234.507 Q36.187,234.624 36.065,234.706 Q35.942,234.788 35.789,234.789 Q35.578,234.789 35.437,234.637 Q35.297,234.485 35.296,234.133 L35.293,232.106 Q35.293,231.754 35.427,231.602 Q35.562,231.449 35.785,231.449 Q35.995,231.448 36.142,231.595 Q36.289,231.741 36.289,231.987 Q36.29,232.526 36.56,232.889 Q36.971,233.451 37.868,233.819 Q38.765,234.187 40.066,234.185 Q41.988,234.182 42.924,233.466 Q43.861,232.75 43.859,231.953 Q43.858,231.039 42.908,230.489 Q41.946,229.94 40.112,229.755 Q38.278,229.57 37.481,229.267 Q36.683,228.963 36.237,228.354 Q35.791,227.746 35.79,227.042 Q35.788,225.777 37.029,225.031 Q38.27,224.285 39.993,224.283 Q42.032,224.28 43.311,225.274 z" fill="#333333"/>
-    <path d="M54.94,219.562 L54.943,222.105 L53.49,222.107 L53.486,219.564 z M54.982,224.613 L54.995,233.777 L58.862,233.771 Q59.225,233.771 59.378,233.906 Q59.53,234.04 59.531,234.263 Q59.531,234.474 59.379,234.614 Q59.227,234.755 58.863,234.756 L50.145,234.768 Q49.793,234.769 49.641,234.628 Q49.488,234.488 49.488,234.277 Q49.487,234.054 49.64,233.919 Q49.792,233.784 50.143,233.784 L54.01,233.778 L53.999,225.61 L51.128,225.614 Q50.776,225.615 50.618,225.475 Q50.459,225.334 50.459,225.123 Q50.459,224.901 50.611,224.76 Q50.763,224.619 51.126,224.618 z" fill="#333333"/>
-    <path d="M65.681,224.598 L65.683,226.086 Q66.713,225.042 67.544,224.642 Q68.376,224.242 69.419,224.241 Q70.544,224.239 71.47,224.718 Q72.127,225.069 72.661,225.883 Q73.196,226.696 73.197,227.552 L73.206,233.751 L74.038,233.75 Q74.389,233.749 74.542,233.884 Q74.694,234.019 74.695,234.241 Q74.695,234.452 74.543,234.593 Q74.391,234.734 74.039,234.734 L71.402,234.738 Q71.039,234.739 70.887,234.598 Q70.734,234.458 70.734,234.247 Q70.734,234.024 70.886,233.889 Q71.038,233.754 71.401,233.754 L72.221,233.753 L72.213,227.717 Q72.211,226.674 71.449,225.955 Q70.686,225.235 69.409,225.237 Q68.436,225.238 67.722,225.632 Q67.007,226.026 65.685,227.586 L65.694,233.762 L66.807,233.76 Q67.159,233.76 67.311,233.894 Q67.464,234.029 67.464,234.251 Q67.465,234.462 67.312,234.603 Q67.16,234.744 66.809,234.745 L63.598,234.749 Q63.246,234.75 63.094,234.609 Q62.941,234.469 62.941,234.258 Q62.941,234.035 63.093,233.9 Q63.245,233.765 63.596,233.765 L64.71,233.763 L64.698,225.595 L63.866,225.596 Q63.515,225.597 63.362,225.456 Q63.209,225.316 63.209,225.093 Q63.209,224.882 63.361,224.742 Q63.513,224.601 63.865,224.6 z" fill="#333333"/>
-    <path d="M83.16,228.885 Q83.158,227.538 83.507,226.026 Q83.857,224.513 84.85,222.532 Q85.843,220.55 86.3,220.139 Q86.44,220.01 86.604,220.01 Q86.815,220.009 86.962,220.15 Q87.109,220.29 87.109,220.489 Q87.109,220.606 87.027,220.747 Q85.742,223.116 85.193,225.039 Q84.645,226.962 84.648,228.883 Q84.651,230.817 85.204,232.738 Q85.758,234.659 87.05,237.013 Q87.132,237.153 87.133,237.271 Q87.133,237.47 86.987,237.616 Q86.84,237.763 86.629,237.763 Q86.465,237.764 86.325,237.635 Q85.89,237.237 84.903,235.305 Q83.916,233.373 83.539,231.885 Q83.162,230.397 83.16,228.885 z" fill="#333333"/>
-    <path d="M101.682,225.543 L101.694,233.711 L103.007,233.709 Q103.663,233.708 103.663,234.2 Q103.664,234.692 103.008,234.693 L99.645,234.698 Q98.988,234.699 98.988,234.207 Q98.987,233.715 99.643,233.714 L100.698,233.712 L100.686,225.544 L94.651,225.553 L94.663,233.721 L95.706,233.719 Q96.374,233.718 96.374,234.211 Q96.375,234.703 95.707,234.704 L92.356,234.708 Q91.699,234.709 91.699,234.217 Q91.698,233.725 92.354,233.724 L93.667,233.722 L93.655,225.554 L92.343,225.556 Q91.686,225.557 91.686,225.065 Q91.685,224.561 92.341,224.56 L102.994,224.545 Q103.65,224.544 103.651,225.048 Q103.651,225.54 102.995,225.541 z" fill="#333333"/>
-    <path d="M116.486,219.252 L108.588,236.232 Q108.39,236.666 108.073,236.667 Q107.874,236.667 107.727,236.521 Q107.581,236.374 107.58,236.199 Q107.58,236.058 107.697,235.812 L115.583,218.832 Q115.712,218.562 115.829,218.48 Q115.946,218.398 116.11,218.397 Q116.309,218.397 116.456,218.543 Q116.602,218.69 116.603,218.865 Q116.603,218.994 116.486,219.252 z" fill="#333333"/>
-    <path d="M128.315,230.544 L121.787,230.553 L121.786,229.417 L127.245,219.952 L129.296,219.949 L129.309,229.558 L130.13,229.557 Q130.493,229.557 130.645,229.691 Q130.798,229.826 130.798,230.049 Q130.799,230.259 130.646,230.4 Q130.494,230.541 130.131,230.542 L129.311,230.543 L129.315,233.672 L130.135,233.671 Q130.499,233.67 130.651,233.805 Q130.804,233.939 130.804,234.162 Q130.804,234.373 130.652,234.514 Q130.5,234.654 130.137,234.655 L126.481,234.66 Q126.117,234.661 125.965,234.52 Q125.812,234.38 125.812,234.169 Q125.812,233.946 125.964,233.811 Q126.116,233.676 126.479,233.676 L128.319,233.673 z M128.313,229.56 L128.301,220.947 L127.785,220.947 L122.817,229.568 z" fill="#333333"/>
-    <path d="M141.168,228.815 Q141.17,230.163 140.82,231.669 Q140.471,233.175 139.477,235.163 Q138.484,237.151 138.028,237.55 Q137.887,237.691 137.723,237.691 Q137.512,237.691 137.366,237.545 Q137.219,237.399 137.219,237.2 Q137.218,237.082 137.3,236.942 Q138.586,234.584 139.134,232.662 Q139.682,230.739 139.679,228.817 Q139.677,226.884 139.123,224.962 Q138.57,223.041 137.277,220.676 Q137.195,220.536 137.195,220.418 Q137.194,220.219 137.341,220.078 Q137.487,219.937 137.698,219.937 Q137.862,219.937 138.003,220.066 Q138.437,220.463 139.424,222.396 Q140.411,224.328 140.788,225.816 Q141.165,227.303 141.168,228.815 z" fill="#333333"/>
-    <path d="M173.788,225.441 L173.787,225.113 Q173.787,224.749 173.927,224.597 Q174.068,224.444 174.279,224.444 Q174.501,224.444 174.642,224.596 Q174.783,224.748 174.783,225.111 L174.787,227.338 Q174.775,227.701 174.641,227.854 Q174.506,228.006 174.284,228.006 Q174.084,228.007 173.95,227.872 Q173.815,227.738 173.791,227.421 Q173.719,226.589 172.693,225.841 Q171.666,225.092 169.932,225.095 Q167.74,225.098 166.606,226.47 Q165.471,227.843 165.473,229.613 Q165.476,231.523 166.732,232.763 Q167.987,234.004 169.98,234.001 Q171.128,233.999 172.317,233.576 Q173.506,233.152 174.465,232.213 Q174.711,231.979 174.899,231.978 Q175.098,231.978 175.233,232.113 Q175.368,232.247 175.368,232.446 Q175.369,232.95 174.186,233.725 Q172.278,234.982 169.934,234.985 Q167.555,234.989 166.024,233.473 Q164.492,231.958 164.489,229.626 Q164.486,227.247 166.048,225.674 Q167.61,224.102 169.989,224.098 Q172.251,224.095 173.788,225.441 z" fill="#333333"/>
-    <path d="M189.591,229.52 Q189.594,231.77 187.985,233.366 Q186.376,234.962 184.102,234.965 Q181.805,234.968 180.198,233.371 Q178.59,231.774 178.587,229.536 Q178.583,227.286 180.187,225.684 Q181.79,224.082 184.087,224.079 Q186.36,224.075 187.974,225.667 Q189.587,227.258 189.591,229.52 z M188.594,229.521 Q188.592,227.67 187.272,226.371 Q185.951,225.072 184.076,225.075 Q182.201,225.077 180.885,226.386 Q179.568,227.694 179.571,229.534 Q179.574,231.362 180.894,232.673 Q182.214,233.984 184.089,233.981 Q185.964,233.978 187.281,232.67 Q188.597,231.361 188.594,229.521 z" fill="#333333"/>
-    <path d="M201.737,225.05 Q201.736,224.71 201.876,224.557 Q202.017,224.405 202.228,224.404 Q202.45,224.404 202.591,224.556 Q202.732,224.708 202.733,225.072 L202.735,226.759 Q202.736,227.111 202.595,227.263 Q202.455,227.416 202.232,227.416 Q202.033,227.416 201.898,227.288 Q201.763,227.159 201.739,226.866 Q201.668,226.163 201.011,225.707 Q200.049,225.052 198.467,225.054 Q196.815,225.057 195.902,225.726 Q195.211,226.231 195.212,226.852 Q195.213,227.555 196.034,228.023 Q196.597,228.35 198.167,228.523 Q200.218,228.743 201.016,229.023 Q202.153,229.432 202.711,230.158 Q203.268,230.883 203.269,231.727 Q203.271,232.981 202.066,233.961 Q200.86,234.941 198.528,234.945 Q196.196,234.948 194.706,233.767 Q194.706,234.165 194.66,234.282 Q194.613,234.4 194.49,234.482 Q194.367,234.564 194.215,234.564 Q194.004,234.564 193.863,234.412 Q193.722,234.26 193.722,233.909 L193.719,231.881 Q193.718,231.53 193.853,231.377 Q193.987,231.225 194.21,231.224 Q194.421,231.224 194.568,231.37 Q194.714,231.517 194.715,231.763 Q194.716,232.302 194.986,232.665 Q195.397,233.227 196.294,233.594 Q197.191,233.962 198.491,233.96 Q200.413,233.958 201.35,233.242 Q202.286,232.525 202.285,231.729 Q202.284,230.814 201.334,230.265 Q200.372,229.716 198.538,229.531 Q196.704,229.346 195.906,229.042 Q195.109,228.739 194.663,228.13 Q194.217,227.521 194.216,226.818 Q194.214,225.552 195.455,224.807 Q196.696,224.061 198.419,224.058 Q200.458,224.055 201.737,225.05 z" fill="#333333"/>
-    <path d="M212.781,228.702 Q212.779,227.354 213.128,225.842 Q213.478,224.33 214.471,222.348 Q215.464,220.366 215.921,219.955 Q216.061,219.826 216.225,219.826 Q216.436,219.826 216.583,219.966 Q216.73,220.107 216.73,220.306 Q216.73,220.423 216.648,220.564 Q215.362,222.933 214.814,224.855 Q214.266,226.778 214.269,228.7 Q214.272,230.633 214.825,232.555 Q215.379,234.476 216.671,236.829 Q216.753,236.97 216.754,237.087 Q216.754,237.286 216.608,237.433 Q216.461,237.58 216.25,237.58 Q216.086,237.58 215.946,237.451 Q215.511,237.054 214.524,235.121 Q213.537,233.189 213.16,231.701 Q212.783,230.214 212.781,228.702 z" fill="#333333"/>
-    <path d="M231.303,225.359 L231.315,233.527 L232.627,233.525 Q233.284,233.524 233.284,234.017 Q233.285,234.509 232.629,234.51 L229.266,234.515 Q228.609,234.515 228.609,234.023 Q228.608,233.531 229.264,233.53 L230.319,233.529 L230.307,225.361 L224.272,225.369 L224.284,233.537 L225.327,233.536 Q225.995,233.535 225.995,234.027 Q225.996,234.519 225.328,234.52 L221.977,234.525 Q221.32,234.526 221.32,234.034 Q221.319,233.541 221.975,233.54 L223.288,233.539 L223.276,225.371 L221.964,225.373 Q221.307,225.373 221.307,224.881 Q221.306,224.377 221.962,224.376 L232.615,224.361 Q233.271,224.36 233.271,224.864 Q233.272,225.357 232.616,225.357 z" fill="#333333"/>
-    <path d="M246.107,219.069 L238.209,236.049 Q238.011,236.483 237.694,236.483 Q237.495,236.483 237.348,236.337 Q237.202,236.191 237.201,236.015 Q237.201,235.874 237.318,235.628 L245.204,218.648 Q245.333,218.378 245.45,218.296 Q245.567,218.214 245.731,218.214 Q245.93,218.214 246.077,218.36 Q246.223,218.506 246.224,218.682 Q246.224,218.811 246.107,219.069 z" fill="#333333"/>
-    <path d="M257.936,230.361 L251.408,230.37 L251.407,229.233 L256.866,219.768 L258.917,219.766 L258.93,229.375 L259.751,229.374 Q260.114,229.373 260.266,229.508 Q260.419,229.642 260.419,229.865 Q260.42,230.076 260.267,230.217 Q260.115,230.358 259.752,230.358 L258.932,230.359 L258.936,233.488 L259.756,233.487 Q260.12,233.486 260.272,233.621 Q260.425,233.756 260.425,233.978 Q260.425,234.189 260.273,234.33 Q260.121,234.471 259.758,234.471 L256.102,234.477 Q255.738,234.477 255.586,234.337 Q255.433,234.196 255.433,233.985 Q255.433,233.763 255.585,233.628 Q255.737,233.493 256.1,233.492 L257.94,233.49 z M257.934,229.376 L257.922,220.763 L257.406,220.764 L252.438,229.384 z" fill="#333333"/>
-    <path d="M270.789,228.632 Q270.79,229.979 270.441,231.486 Q270.092,232.992 269.098,234.98 Q268.105,236.967 267.649,237.366 Q267.508,237.507 267.344,237.508 Q267.133,237.508 266.986,237.362 Q266.84,237.215 266.839,237.016 Q266.839,236.899 266.921,236.758 Q268.207,234.401 268.755,232.478 Q269.303,230.556 269.3,228.634 Q269.298,226.7 268.744,224.779 Q268.191,222.858 266.898,220.492 Q266.816,220.352 266.816,220.235 Q266.815,220.036 266.962,219.895 Q267.108,219.754 267.319,219.754 Q267.483,219.753 267.624,219.882 Q268.058,220.28 269.045,222.212 Q270.032,224.144 270.409,225.632 Q270.786,227.12 270.789,228.632 z" fill="#333333"/>
-    <path d="M303.82,225.843 L303.823,228.28 Q303.828,231.456 302.319,233.31 Q301.137,234.764 299.332,234.767 Q298.465,234.768 297.697,234.424 Q296.929,234.079 296.389,233.459 Q296.049,233.072 295.643,232.217 Q295.238,231.363 295.061,230.648 Q294.79,229.641 294.788,228.293 L294.785,225.855 Q294.78,222.668 296.289,220.814 Q297.471,219.359 299.275,219.357 Q300.154,219.356 300.917,219.7 Q301.679,220.045 302.219,220.665 Q302.571,221.063 302.97,221.918 Q303.37,222.773 303.559,223.476 Q303.818,224.483 303.82,225.843 z M302.836,225.973 Q302.834,224.578 302.439,223.378 Q302.045,222.177 301.552,221.463 Q301.258,221.053 300.789,220.761 Q300.121,220.352 299.289,220.353 Q297.636,220.355 296.701,222.044 Q295.766,223.733 295.769,225.983 L295.772,228.151 Q295.774,229.545 296.169,230.752 Q296.563,231.958 297.068,232.672 Q297.35,233.07 297.819,233.363 Q298.487,233.784 299.331,233.783 Q300.972,233.78 301.907,232.086 Q302.842,230.391 302.839,228.141 z" fill="#333333"/>
-    <path d="M145.432,253.067 L145.436,255.504 Q145.44,258.68 143.931,260.534 Q142.75,261.989 140.945,261.991 Q140.078,261.992 139.31,261.648 Q138.542,261.303 138.002,260.683 Q137.661,260.297 137.256,259.442 Q136.85,258.587 136.674,257.872 Q136.403,256.865 136.401,255.517 L136.397,253.08 Q136.393,249.892 137.902,248.038 Q139.083,246.584 140.888,246.581 Q141.767,246.58 142.529,246.924 Q143.291,247.269 143.831,247.889 Q144.183,248.287 144.583,249.142 Q144.983,249.997 145.171,250.7 Q145.43,251.707 145.432,253.067 z M144.448,253.197 Q144.446,251.803 144.052,250.602 Q143.658,249.401 143.164,248.687 Q142.871,248.278 142.402,247.985 Q141.733,247.576 140.901,247.577 Q139.249,247.58 138.314,249.268 Q137.379,250.957 137.382,253.207 L137.385,255.375 Q137.387,256.77 137.781,257.976 Q138.175,259.183 138.68,259.897 Q138.962,260.295 139.431,260.587 Q140.1,261.008 140.944,261.007 Q142.584,261.004 143.519,259.31 Q144.454,257.615 144.451,255.365 z" fill="#333333"/>
-    <path d="M275.053,252.883 L275.057,255.321 Q275.061,258.497 273.552,260.35 Q272.371,261.805 270.566,261.808 Q269.699,261.809 268.931,261.464 Q268.163,261.12 267.623,260.499 Q267.282,260.113 266.877,259.258 Q266.471,258.403 266.295,257.689 Q266.024,256.681 266.022,255.334 L266.018,252.896 Q266.014,249.709 267.523,247.855 Q268.704,246.4 270.509,246.398 Q271.388,246.396 272.15,246.741 Q272.912,247.086 273.452,247.706 Q273.804,248.104 274.204,248.959 Q274.604,249.814 274.792,250.516 Q275.051,251.524 275.053,252.883 z M274.069,253.014 Q274.067,251.619 273.673,250.418 Q273.279,249.218 272.785,248.504 Q272.492,248.094 272.023,247.802 Q271.354,247.392 270.522,247.394 Q268.87,247.396 267.935,249.085 Q267,250.774 267.003,253.024 L267.006,255.192 Q267.008,256.586 267.402,257.793 Q267.796,258.999 268.301,259.713 Q268.583,260.111 269.052,260.404 Q269.721,260.824 270.565,260.823 Q272.205,260.821 273.14,259.126 Q274.075,257.432 274.072,255.182 z" fill="#333333"/>
-    <path d="M299.818,246.508 L299.838,260.43 L303.213,260.425 Q303.564,260.425 303.717,260.56 Q303.869,260.694 303.869,260.917 Q303.87,261.128 303.718,261.269 Q303.565,261.409 303.214,261.41 L295.48,261.421 Q295.128,261.421 294.975,261.281 Q294.823,261.14 294.823,260.93 Q294.822,260.707 294.974,260.572 Q295.127,260.437 295.478,260.436 L298.853,260.432 L298.835,247.869 L295.626,248.882 Q295.392,248.952 295.286,248.952 Q295.11,248.953 294.964,248.806 Q294.817,248.66 294.817,248.461 Q294.816,248.285 294.933,248.133 Q295.027,248.039 295.32,247.933 z" fill="#333333"/>
-    <path d="M25.703,336.967 Q25.702,335.619 26.051,334.107 Q26.4,332.595 27.394,330.613 Q28.387,328.631 28.843,328.22 Q28.984,328.091 29.148,328.091 Q29.359,328.091 29.506,328.231 Q29.652,328.372 29.652,328.571 Q29.653,328.688 29.571,328.829 Q28.285,331.198 27.737,333.12 Q27.189,335.043 27.192,336.965 Q27.194,338.898 27.748,340.82 Q28.301,342.741 29.594,345.094 Q29.676,345.235 29.676,345.352 Q29.677,345.551 29.53,345.698 Q29.384,345.845 29.173,345.845 Q29.009,345.845 28.868,345.716 Q28.434,345.319 27.447,343.386 Q26.46,341.454 26.083,339.966 Q25.706,338.479 25.703,336.967 z" fill="#333333"/>
-    <path d="M44.731,334.21 L44.734,336.647 Q44.739,339.823 43.23,341.677 Q42.048,343.131 40.243,343.134 Q39.376,343.135 38.608,342.79 Q37.84,342.446 37.3,341.826 Q36.96,341.439 36.554,340.584 Q36.149,339.729 35.972,339.015 Q35.701,338.007 35.699,336.66 L35.696,334.222 Q35.691,331.035 37.2,329.181 Q38.382,327.726 40.186,327.724 Q41.065,327.723 41.828,328.067 Q42.59,328.412 43.13,329.032 Q43.482,329.43 43.882,330.285 Q44.281,331.14 44.47,331.843 Q44.729,332.85 44.731,334.21 z M43.747,334.34 Q43.745,332.945 43.35,331.745 Q42.956,330.544 42.463,329.83 Q42.169,329.42 41.7,329.128 Q41.032,328.719 40.2,328.72 Q38.547,328.722 37.612,330.411 Q36.677,332.1 36.68,334.35 L36.683,336.518 Q36.685,337.912 37.08,339.119 Q37.474,340.325 37.979,341.039 Q38.261,341.437 38.73,341.73 Q39.398,342.151 40.242,342.149 Q41.883,342.147 42.818,340.452 Q43.753,338.758 43.75,336.508 z" fill="#333333"/>
-    <path d="M52.672,339.226 L55.871,339.221 L52.399,345.695 Q52.084,346.281 51.639,346.282 Q51.346,346.282 51.14,346.077 Q50.935,345.873 50.934,345.58 Q50.934,345.462 50.969,345.322 z" fill="#333333"/>
-    <path d="M73.535,334.169 L73.539,336.606 Q73.543,339.782 72.034,341.636 Q70.853,343.091 69.048,343.093 Q68.181,343.094 67.413,342.75 Q66.645,342.405 66.105,341.785 Q65.764,341.399 65.359,340.544 Q64.953,339.689 64.777,338.974 Q64.506,337.967 64.504,336.619 L64.5,334.182 Q64.496,330.994 66.005,329.14 Q67.186,327.686 68.991,327.683 Q69.87,327.682 70.632,328.026 Q71.394,328.371 71.934,328.991 Q72.287,329.389 72.686,330.244 Q73.086,331.099 73.274,331.802 Q73.534,332.809 73.535,334.169 z M72.551,334.299 Q72.549,332.905 72.155,331.704 Q71.761,330.503 71.268,329.789 Q70.974,329.379 70.505,329.087 Q69.836,328.678 69.004,328.679 Q67.352,328.681 66.417,330.37 Q65.482,332.059 65.485,334.309 L65.488,336.477 Q65.49,337.872 65.884,339.078 Q66.278,340.285 66.783,340.999 Q67.065,341.397 67.534,341.689 Q68.203,342.11 69.047,342.109 Q70.687,342.106 71.622,340.412 Q72.558,338.717 72.554,336.467 z" fill="#333333"/>
-    <path d="M83.711,336.897 Q83.713,338.244 83.364,339.751 Q83.014,341.257 82.021,343.245 Q81.028,345.232 80.571,345.631 Q80.431,345.772 80.267,345.773 Q80.056,345.773 79.909,345.627 Q79.762,345.48 79.762,345.281 Q79.762,345.164 79.844,345.023 Q81.13,342.666 81.678,340.743 Q82.226,338.821 82.223,336.899 Q82.22,334.965 81.667,333.044 Q81.113,331.123 79.821,328.758 Q79.739,328.617 79.738,328.5 Q79.738,328.301 79.884,328.16 Q80.031,328.019 80.242,328.019 Q80.406,328.018 80.546,328.147 Q80.981,328.545 81.968,330.477 Q82.955,332.409 83.332,333.897 Q83.709,335.385 83.711,336.897 z" fill="#333333"/>
-    <path d="M102.846,335.205 L102.848,336.612 L92.805,336.626 L92.803,335.22 z" fill="#333333"/>
-    <path d="M112.117,336.845 Q112.116,335.497 112.465,333.985 Q112.814,332.473 113.808,330.491 Q114.801,328.509 115.257,328.098 Q115.398,327.969 115.562,327.969 Q115.773,327.968 115.92,328.109 Q116.066,328.249 116.066,328.448 Q116.067,328.566 115.985,328.706 Q114.699,331.075 114.151,332.998 Q113.603,334.921 113.606,336.842 Q113.608,338.776 114.162,340.697 Q114.715,342.618 116.008,344.972 Q116.09,345.112 116.09,345.23 Q116.091,345.429 115.944,345.576 Q115.798,345.722 115.587,345.723 Q115.423,345.723 115.282,345.594 Q114.848,345.196 113.861,343.264 Q112.874,341.332 112.497,339.844 Q112.12,338.356 112.117,336.845 z" fill="#333333"/>
-    <path d="M128.65,335.028 Q129.881,335.624 130.51,336.602 Q131.138,337.579 131.14,338.704 Q131.142,340.45 129.831,341.73 Q128.521,343.009 126.646,343.012 Q124.771,343.014 123.456,341.739 Q122.142,340.463 122.14,338.717 Q122.138,337.604 122.764,336.624 Q123.389,335.645 124.63,335.034 Q123.551,334.414 123.058,333.747 Q122.377,332.799 122.376,331.65 Q122.373,330.033 123.62,328.819 Q124.866,327.604 126.624,327.601 Q128.393,327.599 129.637,328.81 Q130.881,330.021 130.883,331.638 Q130.885,332.787 130.207,333.725 Q129.727,334.406 128.65,335.028 z M129.876,331.675 Q129.874,330.409 128.929,329.502 Q127.985,328.596 126.614,328.598 Q125.254,328.599 124.312,329.515 Q123.37,330.43 123.372,331.672 Q123.373,332.821 124.306,333.681 Q125.239,334.541 126.622,334.539 Q128.017,334.537 128.947,333.674 Q129.877,332.812 129.876,331.675 z M130.155,338.729 Q130.153,337.428 129.144,336.469 Q128.135,335.509 126.635,335.512 Q125.135,335.514 124.129,336.476 Q123.122,337.438 123.124,338.727 Q123.126,340.063 124.141,341.046 Q125.156,342.029 126.644,342.027 Q128.133,342.025 129.145,341.039 Q130.157,340.053 130.155,338.729 z" fill="#333333"/>
-    <path d="M145.547,334.067 L145.551,336.504 Q145.555,339.68 144.046,341.534 Q142.864,342.989 141.06,342.991 Q140.193,342.992 139.424,342.648 Q138.656,342.303 138.116,341.683 Q137.776,341.297 137.371,340.442 Q136.965,339.587 136.788,338.872 Q136.517,337.865 136.515,336.517 L136.512,334.08 Q136.507,330.892 138.017,329.038 Q139.198,327.584 141.003,327.581 Q141.882,327.58 142.644,327.924 Q143.406,328.269 143.946,328.889 Q144.298,329.287 144.698,330.142 Q145.097,330.997 145.286,331.7 Q145.545,332.707 145.547,334.067 z M144.563,334.197 Q144.561,332.803 144.167,331.602 Q143.772,330.401 143.279,329.687 Q142.986,329.277 142.516,328.985 Q141.848,328.576 141.016,328.577 Q139.364,328.579 138.428,330.268 Q137.493,331.957 137.497,334.207 L137.5,336.375 Q137.502,337.77 137.896,338.976 Q138.29,340.183 138.795,340.897 Q139.077,341.295 139.546,341.587 Q140.215,342.008 141.058,342.007 Q142.699,342.004 143.634,340.31 Q144.569,338.615 144.566,336.365 z" fill="#333333"/>
-    <path d="M151.721,332.476 L151.723,334.269 Q152.601,333.201 153.608,332.661 Q154.615,332.12 155.986,332.118 Q157.439,332.116 158.67,332.794 Q159.902,333.472 160.577,334.684 Q161.253,335.896 161.255,337.232 Q161.258,339.353 159.742,340.861 Q158.227,342.369 156.012,342.372 Q153.375,342.376 151.732,340.234 L151.74,346.163 L154.131,346.16 Q154.482,346.16 154.635,346.294 Q154.787,346.429 154.788,346.651 Q154.788,346.862 154.636,347.003 Q154.484,347.144 154.132,347.144 L149.433,347.151 Q149.081,347.152 148.929,347.017 Q148.776,346.883 148.776,346.66 Q148.776,346.437 148.928,346.302 Q149.08,346.167 149.431,346.167 L150.756,346.165 L150.738,333.473 L149.413,333.475 Q149.062,333.476 148.909,333.335 Q148.757,333.195 148.757,332.972 Q148.756,332.761 148.908,332.621 Q149.061,332.48 149.412,332.479 z M160.259,337.233 Q160.256,335.534 159.018,334.323 Q157.78,333.112 155.999,333.114 Q154.206,333.117 152.965,334.338 Q151.725,335.558 151.727,337.246 Q151.73,338.945 152.974,340.162 Q154.218,341.379 156.011,341.376 Q157.78,341.374 159.021,340.159 Q160.261,338.944 160.259,337.233 z" fill="#333333"/>
-    <path d="M170.513,337.289 L175.03,341.607 Q175.476,341.606 175.593,341.647 Q175.71,341.688 175.798,341.817 Q175.886,341.946 175.887,342.098 Q175.887,342.309 175.735,342.45 Q175.583,342.591 175.219,342.591 L172.055,342.596 Q171.692,342.596 171.539,342.456 Q171.387,342.315 171.387,342.104 Q171.386,341.882 171.538,341.747 Q171.691,341.612 172.054,341.611 L173.683,341.609 L169.846,337.946 L166.042,341.62 L167.683,341.617 Q168.034,341.617 168.187,341.752 Q168.339,341.886 168.34,342.109 Q168.34,342.32 168.188,342.461 Q168.036,342.601 167.684,342.602 L164.485,342.606 Q164.133,342.607 163.981,342.466 Q163.828,342.326 163.828,342.115 Q163.828,341.963 163.916,341.834 Q164.003,341.705 164.115,341.664 Q164.226,341.622 164.671,341.622 L169.177,337.291 L165.163,333.453 Q164.742,333.454 164.63,333.407 Q164.519,333.36 164.431,333.231 Q164.343,333.103 164.342,332.95 Q164.342,332.739 164.494,332.599 Q164.646,332.458 165.01,332.457 L167.693,332.453 Q168.057,332.453 168.203,332.593 Q168.35,332.734 168.35,332.956 Q168.351,333.167 168.204,333.308 Q168.058,333.449 167.695,333.449 L166.523,333.451 L169.844,336.646 L173.179,333.442 L172.007,333.443 Q171.656,333.444 171.497,333.303 Q171.339,333.163 171.339,332.94 Q171.338,332.729 171.49,332.589 Q171.643,332.448 172.006,332.447 L174.689,332.443 Q175.041,332.443 175.193,332.583 Q175.346,332.724 175.346,332.946 Q175.347,333.087 175.259,333.216 Q175.171,333.345 175.06,333.392 Q174.949,333.439 174.527,333.44 z" fill="#333333"/>
-    <path d="M182.292,339.042 L185.492,339.038 L182.02,345.511 Q181.705,346.098 181.26,346.098 Q180.967,346.099 180.761,345.894 Q180.556,345.689 180.555,345.396 Q180.555,345.279 180.59,345.138 z" fill="#333333"/>
-    <path d="M199.116,327.651 L199.136,341.573 L202.511,341.568 Q202.862,341.568 203.015,341.702 Q203.168,341.837 203.168,342.059 Q203.168,342.27 203.016,342.411 Q202.864,342.552 202.512,342.553 L194.778,342.563 Q194.426,342.564 194.274,342.424 Q194.121,342.283 194.121,342.072 Q194.121,341.85 194.273,341.715 Q194.425,341.58 194.777,341.579 L198.152,341.574 L198.134,329.012 L194.924,330.024 Q194.69,330.095 194.585,330.095 Q194.409,330.095 194.262,329.949 Q194.115,329.803 194.115,329.603 Q194.115,329.428 194.232,329.275 Q194.325,329.181 194.618,329.075 z" fill="#333333"/>
-    <path d="M215.064,334.906 Q216.295,335.502 216.924,336.479 Q217.552,337.457 217.554,338.582 Q217.556,340.328 216.245,341.607 Q214.935,342.887 213.06,342.889 Q211.185,342.892 209.87,341.616 Q208.556,340.341 208.554,338.595 Q208.552,337.481 209.178,336.502 Q209.803,335.523 211.044,334.912 Q209.965,334.292 209.472,333.625 Q208.791,332.676 208.79,331.528 Q208.787,329.911 210.034,328.696 Q211.28,327.482 213.038,327.479 Q214.807,327.477 216.051,328.688 Q217.295,329.899 217.297,331.516 Q217.299,332.664 216.621,333.603 Q216.141,334.283 215.064,334.906 z M216.29,331.553 Q216.288,330.287 215.343,329.38 Q214.399,328.473 213.028,328.475 Q211.668,328.477 210.726,329.392 Q209.784,330.308 209.786,331.55 Q209.787,332.698 210.72,333.558 Q211.653,334.418 213.036,334.417 Q214.43,334.415 215.361,333.552 Q216.291,332.689 216.29,331.553 z M216.569,338.607 Q216.567,337.306 215.558,336.347 Q214.549,335.387 213.049,335.389 Q211.549,335.391 210.543,336.354 Q209.536,337.316 209.538,338.605 Q209.54,339.941 210.555,340.924 Q211.57,341.907 213.058,341.905 Q214.547,341.903 215.559,340.917 Q216.571,339.931 216.569,338.607 z" fill="#333333"/>
-    <path d="M223.732,332.374 L223.735,334.167 Q224.612,333.099 225.619,332.559 Q226.626,332.018 227.997,332.016 Q229.451,332.014 230.682,332.692 Q231.913,333.37 232.589,334.582 Q233.264,335.794 233.266,337.13 Q233.269,339.251 231.754,340.759 Q230.239,342.267 228.024,342.27 Q225.387,342.274 223.743,340.132 L223.752,346.062 L226.142,346.058 Q226.494,346.058 226.646,346.192 Q226.799,346.327 226.799,346.549 Q226.8,346.76 226.647,346.901 Q226.495,347.042 226.144,347.043 L221.444,347.049 Q221.093,347.05 220.94,346.915 Q220.788,346.781 220.788,346.558 Q220.787,346.335 220.939,346.2 Q221.092,346.065 221.443,346.065 L222.767,346.063 L222.749,333.372 L221.425,333.373 Q221.074,333.374 220.921,333.233 Q220.768,333.093 220.768,332.87 Q220.768,332.659 220.92,332.519 Q221.072,332.378 221.424,332.377 z M232.27,337.132 Q232.268,335.432 231.03,334.221 Q229.792,333.01 228.011,333.013 Q226.218,333.015 224.977,334.236 Q223.737,335.456 223.739,337.144 Q223.741,338.843 224.985,340.06 Q226.229,341.277 228.022,341.274 Q229.792,341.272 231.032,340.057 Q232.273,338.842 232.27,337.132 z" fill="#333333"/>
-    <path d="M242.524,337.187 L247.042,341.505 Q247.487,341.504 247.605,341.545 Q247.722,341.586 247.81,341.715 Q247.898,341.844 247.898,341.996 Q247.899,342.207 247.746,342.348 Q247.594,342.489 247.231,342.489 L244.067,342.494 Q243.704,342.494 243.551,342.354 Q243.399,342.213 243.398,342.002 Q243.398,341.78 243.55,341.645 Q243.702,341.51 244.066,341.509 L245.694,341.507 L241.857,337.844 L238.054,341.518 L239.694,341.516 Q240.046,341.515 240.199,341.65 Q240.351,341.784 240.351,342.007 Q240.352,342.218 240.2,342.359 Q240.047,342.499 239.696,342.5 L236.497,342.504 Q236.145,342.505 235.993,342.365 Q235.84,342.224 235.84,342.013 Q235.839,341.861 235.927,341.732 Q236.015,341.603 236.126,341.562 Q236.237,341.52 236.683,341.52 L241.188,337.189 L237.175,333.351 Q236.753,333.352 236.642,333.305 Q236.53,333.258 236.442,333.129 Q236.354,333.001 236.354,332.848 Q236.354,332.637 236.506,332.497 Q236.658,332.356 237.021,332.355 L239.705,332.351 Q240.068,332.351 240.215,332.491 Q240.362,332.632 240.362,332.854 Q240.362,333.065 240.216,333.206 Q240.07,333.347 239.706,333.348 L238.534,333.349 L241.855,336.544 L245.191,333.34 L244.019,333.341 Q243.667,333.342 243.509,333.202 Q243.35,333.061 243.35,332.838 Q243.35,332.628 243.502,332.487 Q243.654,332.346 244.017,332.345 L246.701,332.341 Q247.053,332.341 247.205,332.481 Q247.358,332.622 247.358,332.844 Q247.358,332.985 247.27,333.114 Q247.183,333.243 247.072,333.29 Q246.96,333.337 246.538,333.338 z" fill="#333333"/>
-    <path d="M256.539,336.652 Q256.541,337.999 256.192,339.506 Q255.842,341.012 254.849,343 Q253.856,344.988 253.399,345.387 Q253.259,345.528 253.095,345.528 Q252.884,345.528 252.737,345.382 Q252.59,345.236 252.59,345.036 Q252.59,344.919 252.672,344.778 Q253.957,342.421 254.506,340.498 Q255.054,338.576 255.051,336.654 Q255.048,334.72 254.495,332.799 Q253.941,330.878 252.649,328.513 Q252.566,328.372 252.566,328.255 Q252.566,328.056 252.712,327.915 Q252.859,327.774 253.07,327.774 Q253.234,327.774 253.374,327.902 Q253.809,328.3 254.796,330.232 Q255.783,332.165 256.16,333.652 Q256.537,335.14 256.539,336.652 z" fill="#333333"/>
-    <g>
-      <path d="M551.804,130.616 L717.978,296.79" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-      <path d="M551.804,130.616 L547.561,126.373 M551.097,122.838 L544.026,129.909" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-      <path d="M717.978,296.79 L722.221,301.033 M718.685,304.568 L725.756,297.497" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <g>
-      <path d="M721.803,335.295 L693.398,363.7" fill-opacity="0" stroke="#000000" stroke-width="1"/>
-      <path d="M721.803,335.295 L726.046,331.052 M729.581,334.587 L722.51,327.516" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-      <path d="M693.398,363.7 L689.155,367.943 M685.619,364.407 L692.69,371.478" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="1"/>
-    </g>
-    <text transform="matrix(1, 0, 0, 1, 644.104, 184.5)">
-      <tspan x="-14.402" y="6" font-family="CourierNewPSMT" font-size="24" fill="#000000">40</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 722.76, 364.833)">
-      <tspan x="-14.402" y="6" font-family="CourierNewPSMT" font-size="24" fill="#000000">10</tspan>
-    </text>
-    <image xlink:href="data:image/png;base64,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" opacity="1" x="476.746" y="-278.824" width="246.2" height="52.032" preserveAspectRatio="xMidYMid" transform="matrix(0.707, 0.707, -0.707, 0.707, 0, 0)" clip-path="url(#Clip_2)"/>
-    <path d="M497.977,174 L497.977,174 L497.977,174 C499.633,174 500.977,172.657 500.977,171 C500.977,169.343 499.633,168 497.977,168 C497.977,168 497.977,168 497.977,168 L497.977,168 C496.32,168 494.977,169.343 494.977,171 C494.977,172.657 496.32,174 497.977,174 L497.977,174" fill="#000000"/>
-    <text transform="matrix(1, 0, 0, 1, 461.471, 170.5)">
-      <tspan x="-36.006" y="6" font-family="CourierNewPSMT" font-size="24" fill="#000000">(X,Y)</tspan>
-    </text>
-    <path d="M207.5,400.158 L497.977,171" fill-opacity="0" stroke="#656565" stroke-width="1" stroke-dasharray="3,2"/>
-    <path d="M288.208,400.158 L668.5,344.5" fill-opacity="0" stroke="#5A5A5A" stroke-width="1" stroke-dasharray="3,2"/>
-    <text transform="matrix(1, 0, 0, 1, 79.541, 39.608)">
-      <tspan x="-72.048" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Parent Affine:</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 72.425, 170.5)">
-      <tspan x="-64.932" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Child Affine:</tspan>
-    </text>
-    <text transform="matrix(1, 0, 0, 1, 81.725, 305)">
-      <tspan x="-74.232" y="8.5" font-family="HelveticaNeue" font-size="24" fill="#000000">Child SubTex:</tspan>
-    </text>
-  </g>
-</svg>
diff --git a/content/2014/gothamgo-android/touch.go b/content/2014/gothamgo-android/touch.go
deleted file mode 100644
index 7091c1d..0000000
--- a/content/2014/gothamgo-android/touch.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"golang.org/x/mobile/app"
-	"golang.org/x/mobile/event"
-	"golang.org/x/mobile/gl"
-)
-
-func main() {
-	app.Run(app.Callbacks{
-		Draw: func() {
-			gl.ClearColor(0, 0, 1, 1) // blue
-			gl.Clear(gl.COLOR_BUFFER_BIT)
-		},
-		Touch: func(e event.Touch) { fmt.Println(e) },
-	})
-}
diff --git a/content/2014/hammers.slide b/content/2014/hammers.slide
deleted file mode 100644
index 04504c0..0000000
--- a/content/2014/hammers.slide
+++ /dev/null
@@ -1,398 +0,0 @@
-Gophers With Hammers
-
-Josh Bleecher Snyder
-PayPal
-josharian@gmail.com
-@offbymany
-
-
-* Go was designed with tools in mind. (Rob Pike)
-
-* Designed with tools in mind
-
-Simple, regular syntax
-Simple semantics
-Batteries included
-
-* Tools everywhere
-
-- go
-- gofmt, goimports
-- godoc
-- go test [-cover] [-race]
-- go vet
-- gofix, gofmt -r, eg
-- oracle
-- golint
-- godep
-
-and more...
-
-* go command
-
-	$ go list -f '{{.Deps}}' bytes
-	[errors io runtime sync sync/atomic unicode unicode/utf8 unsafe]
-
-* gofmt
-
-from
-
-	for{
-	fmt.Println(      "I feel pretty." );
-	       }
-
-to
-
-	for {
-		fmt.Println("I feel pretty.")
-	}
-
-* godoc
-
-	$ godoc strings Repeat
-	func Repeat(s string, count int) string
-	    Repeat returns a new string consisting of count copies of the string s.
-
-* go vet
-
-Oops
-
-	if suffix != ".md" || suffix != ".markdown" {
-
-Flagged
-
-	suspect or: suffix != ".md" || suffix != ".markdown"
-
-* go tool cover -mode=set
-
-	func Repeat(s string, count int) string {
-		b := make([]byte, len(s)*count)
-		bp := 0
-		for i := 0; i < count; i++ {
-			bp += copy(b[bp:], s)
-		}
-		return string(b)
-	}
-
-to
-
-	func Repeat(s string, count int) string {
-		GoCover.Count[0] = 1
-		b := make([]byte, len(s)*count)
-		bp := 0
-		for i := 0; i < count; i++ {
-			GoCover.Count[2] = 1
-			bp += copy(b[bp:], s)
-		}
-		GoCover.Count[1] = 1
-		return string(b)
-	}
-
-* go test -cover
-
-	$ go test -coverprofile=c.out strings
-	ok  	strings	0.455s	coverage: 96.9% of statements
-
-	$ go tool cover -func=c.out
-	strings/reader.go:	Len				66.7%
-	strings/reader.go:	Read				100.0%
-	strings/reader.go:	ReadAt				100.0%
-	strings/reader.go:	ReadByte			100.0%
-	strings/reader.go:	UnreadByte			100.0%
-	strings/reader.go:	ReadRune			100.0%
-	strings/reader.go:	UnreadRune			100.0%
-	strings/reader.go:	Seek				90.9%
-	strings/reader.go:	WriteTo				83.3%
-	...
-	
-	$ go tool cover -html=c.out
-	# opens a browser window, shows line-by-line coverage
-
-
-* Tools to make tools
-
-- text/template
-- go/build
-- go/doc
-- go/format
-- go/{parser,token,ast,printer}
-- go.tools/go/types and friends
-
-and more...
-
-* Hammers are fun!
-
-# Why to write your own tools: Fun, learning, profit
-
-* impl
-
-Generate implementation stubs given an interface.
-
-	go get github.com/josharian/impl
-
-Generate
-
-	$ impl 'f *File' io.Reader
-	func (f *File) Read(p []byte) (n int, err error) {
-	}
-
-from
-
-	package io
-
-	type Reader interface {
-		Read(p []byte) (n int, err error)
-	}
-
-* impl
-
-Generate
-
-	$ impl 'f *File' io.ReadWriter
-	func (f *File) Read(p []byte) (n int, err error) {
-	}
-
-	func (f *File) Write(p []byte) (n int, err error) {
-	}
-
-from
-
-	package io
-
-	type ReadWriter interface {
-		Reader
-		Writer
-	}
-
-* impl
-
-Generate
-
-	$ impl 'c *Ctx' http.Handler
-	func (c *Ctx) ServeHTTP(http.ResponseWriter, *http.Request) {
-	}
-
-from
-
-	package http
-
-	type Handler interface {
-		ServeHTTP(ResponseWriter, *Request)
-	}
-
-* Plan
-
-*Find*import*path*and*interface*name*
-
-	http.Handler ⇒ net/http, Handler
-
-Parse interface
-
-	net/http, Handler ⇒ {{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}}
-
-Generate output
-
-	{{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}} ⇒ profit!
-
-* goimports ftw
-
-	import "golang.org/x/tools/imports"
-
-.play hammers/importpath.go /func main/,/^}/
-
-* Hello, AST
-
-    *ast.File {
-    .  Package: 1:1
-    .  Name: *ast.Ident {
-    .  .  NamePos: 1:9
-    .  .  Name: "hack"
-    .  }
-    .  Decls: []ast.Decl (len = 2) {
-    .  .  0: *ast.GenDecl {
-    .  .  .  TokPos: 1:15
-    .  .  .  Tok: import
-    .  .  .  Lparen: -
-    .  .  .  Specs: []ast.Spec (len = 1) {
-    .  .  .  .  0: *ast.ImportSpec {
-    .  .  .  .  .  Path: *ast.BasicLit {
-    .  .  .  .  .  .  ValuePos: 1:22
-    .  .  .  .  .  .  Kind: STRING
-    .  .  .  .  .  .  Value: "\"net/http\""
-    .  .  .  .  .  }
-
-[truncated]
-
-
-* Extract the import path
-
-	import (
-		"go/parser"
-		"go/token"
-	)
-
-.play hammers/extractpath.go /func main/,/^}/
-
-* Extract the interface name
-
-	import "go/ast"
-
-.play hammers/extractiface.go /func main/,/^}/
-
-A `GenDecl` can have many `Specs`
-
-	var (
-		r io.Reader
-		w io.Writer
-	)
-
-* Plan
-
-Find import path and interface name
-
-	http.Handler ⇒ net/http, Handler
-
-*Parse*interface*
-
-	net/http, Handler ⇒ {{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}}
-
-Generate output
-
-	{{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}} ⇒ profit!
-
-* Data structures
-
-Represent
-
-	Read(p []byte) (n int, err error)
-
-as
-
-	Func{
-		Name:   "Read",
-		Params: []Param{{Name: "p", Type: "[]byte"}},
-		Res: []Param{
-			{Name: "n", Type: "int"},
-			{Name: "err", Type: "error"},
-		},
-	},
-
-* Data structures
-
-.code hammers/types.go /type Func/,/^}/
-.code hammers/types.go /type Param/,/^}/
-
-* Find the code
-
-	import "go/build"
-
-.play hammers/findthecode.go /func main/,/^}/
-
-* Find the interface declaration
-
-	import "go/printer"
-
-.play hammers/findtheifacedecl.go /func main/,/^}/
-
-* Extract function names
-
-No name? It's an embedded interface. Recurse.
-
-	type ByteScanner interface {
-	    ByteReader
-	    UnreadByte() error
-	}
-
-* Extract params and results
-
-No name? Just use `""`.
-
-	type ByteWriter interface {
-	    WriteByte(c byte) error
-	}
-
-* Qualify types
-
-Types can be arbitrarily complicated.
-
-	type CrazyGopher interface {
-		CrazyGoph(int) func(chan<- [32]byte, map[string]int64) ([]rune, error)
-	}
-
-And we need to rewrite some of them.
-
-	int ⇒ int
-	*Request ⇒ *http.Request
-	io.Reader ⇒ io.Reader
-	func(io.Reader, chan map[S][]*T) ⇒ func(io.Reader, chan map[foo.S][]*foo.T))
-
-* Qualify types
-
-.play hammers/fulltype.go /func main/,/end main/
-
-* Plan
-
-Find import path and interface name
-
-	http.Handler ⇒ net/http, Handler
-
-Parse interface
-
-	net/http, Handler ⇒ {{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}}
-
-*Generate*output*
-
-	{{"ServeHTTP", {{"", "http.ResponseWriter"}, {"", "*http.Request"}}, {}}}} ⇒ profit!
-
-* Method type
-
-.code hammers/types.go /type Method/,/^}/
-.code hammers/types.go /type Func/,/^}/
-.code hammers/types.go /type Param/,/^}/
-
-* Use text/template
-
-.play hammers/codegen.go /func main/,/^}/
-
-# Don't generate an AST. It's a lot of work, and Go is its own DSL.
-
-* Ugly is ok
-
-	import "go/format"
-
-.play hammers/format.go /func main/,/^}/
-
-* Great success
-
-Full code plus tests at `github.com/josharian/impl`
-
-* Tips
-
-Use `go`get`-d` to download lots of code from `godoc.org/-/index`. (Don't forget to set a temporary `GOPATH`!)
-
-Use (and improve) `github.com/yuroyoro/goast-viewer`.
-
-You don't have to generate all the code. And generating data is even better.
-
-The `go/ast` docs are your friend.
-
-`go.tools/go/types` is powerful.
-
-`go`generate` is coming.
-
-
-* Nails!
-
-- Break up long strings
-- Enums and flags to Stringers
-- Dynamic code analysis
-- Vet checks
-- Reflect ⇒ codegen
-- Convention-based http dispatch
-- Detect "last line" copy/paste bugs
-- AST-aware diff, merge, blame; automated fork analysis
-- Machine learning models of ASTs: anomaly detection, bug-prone code detection
-- Code fingerprinting
-- Examine usage patterns
-- Compiler stress tests
-
diff --git a/content/2014/hammers/codegen.go b/content/2014/hammers/codegen.go
deleted file mode 100644
index e0180cc..0000000
--- a/content/2014/hammers/codegen.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"os"
-	"text/template"
-)
-
-func main() {
-	const stub = "func ({{.Recv}}) {{.Name}}" +
-		"({{range .Params}}{{.Name}} {{.Type}}, {{end}})" +
-		"({{range .Res}}{{.Name}} {{.Type}}, {{end}})" +
-		"{\n}\n\n"
-	tmpl := template.Must(template.New("test").Parse(stub))
-
-	m := Method{
-		Recv: "f *File",
-		Func: Func{
-			Name: "Close",
-			Res:  []Param{{Type: "error"}},
-		},
-	}
-
-	tmpl.Execute(os.Stdout, m)
-}
-
-// Method represents a method signature.
-type Method struct {
-	Recv string
-	Func
-}
-
-// Func represents a function signature.
-type Func struct {
-	Name   string
-	Params []Param
-	Res    []Param
-}
-
-// Param represents a parameter in a function or method signature.
-type Param struct {
-	Name string
-	Type string
-}
diff --git a/content/2014/hammers/extractiface.go b/content/2014/hammers/extractiface.go
deleted file mode 100644
index 9086205..0000000
--- a/content/2014/hammers/extractiface.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-)
-
-func main() {
-	src := `package hack; import "net/http"; var i http.Handler`
-	f, _ := parser.ParseFile(token.NewFileSet(), "", src, 0)
-
-	decl := f.Decls[1].(*ast.GenDecl)      // var i http.Handler
-	spec := decl.Specs[0].(*ast.ValueSpec) // i http.Handler
-	sel := spec.Type.(*ast.SelectorExpr)   // http.Handler
-	id := sel.Sel.Name                     // Handler
-	fmt.Println(id)
-}
diff --git a/content/2014/hammers/extractpath.go b/content/2014/hammers/extractpath.go
deleted file mode 100644
index d8002bc..0000000
--- a/content/2014/hammers/extractpath.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"go/parser"
-	"go/token"
-	"strconv"
-)
-
-func main() {
-	src := `package hack; import "net/http"; var i http.Handler`
-
-	fset := token.NewFileSet()
-	f, _ := parser.ParseFile(fset, "", src, 0)
-
-	raw := f.Imports[0].Path.Value
-	path, _ := strconv.Unquote(raw)
-	fmt.Println(raw, "\n", path)
-}
diff --git a/content/2014/hammers/findthecode.go b/content/2014/hammers/findthecode.go
deleted file mode 100644
index 95b12ac..0000000
--- a/content/2014/hammers/findthecode.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"go/build"
-)
-
-func main() {
-	pkg, _ := build.Import("net/http", "", 0) // HL
-	fmt.Println(pkg.Dir)
-	fmt.Println(pkg.GoFiles)
-}
diff --git a/content/2014/hammers/findtheifacedecl.go b/content/2014/hammers/findtheifacedecl.go
deleted file mode 100644
index 15cfcf6..0000000
--- a/content/2014/hammers/findtheifacedecl.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"go/ast"
-	"go/build"
-	"go/parser"
-	"go/printer"
-	"go/token"
-	"os"
-	"path/filepath"
-)
-
-func main() {
-	fset, files := parsePackage("net/http")
-	id := "Handler"
-
-	for _, f := range files {
-		for _, decl := range f.Decls {
-			decl, ok := decl.(*ast.GenDecl)
-			if !ok || decl.Tok != token.TYPE {
-				continue
-			}
-			for _, spec := range decl.Specs {
-				spec := spec.(*ast.TypeSpec)
-				if spec.Name.Name == id {
-					printer.Fprint(os.Stdout, fset, spec) // HL
-				}
-			}
-		}
-	}
-}
-
-func parsePackage(path string) (*token.FileSet, []*ast.File) {
-	pkg, err := build.Import(path, "", 0)
-	if err != nil {
-		panic(err)
-	}
-
-	fset := token.NewFileSet()
-	var files []*ast.File
-	for _, file := range pkg.GoFiles {
-		f, err := parser.ParseFile(fset, filepath.Join(pkg.Dir, file), nil, 0)
-		if err != nil {
-			continue
-		}
-		files = append(files, f)
-	}
-	return fset, files
-}
diff --git a/content/2014/hammers/format.go b/content/2014/hammers/format.go
deleted file mode 100644
index 45e5d49..0000000
--- a/content/2014/hammers/format.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"go/format"
-)
-
-func main() {
-	ugly := `func (f *File) Read(p []byte, )(n int, err error, ){}`
-	fmt.Println(ugly)
-	pretty, _ := format.Source([]byte(ugly)) // HL
-	fmt.Println(string(pretty))
-}
diff --git a/content/2014/hammers/fulltype.go b/content/2014/hammers/fulltype.go
deleted file mode 100644
index 80d4ffd..0000000
--- a/content/2014/hammers/fulltype.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-)
-
-func main() {
-	src := `
-package http
-type Handler interface {
-	ServeHTTP(ResponseWriter, *Request)
-}
-`
-	f, _ := parser.ParseFile(token.NewFileSet(), "", src, 0)
-	typ := f.Decls[0].(*ast.GenDecl).Specs[0].(*ast.TypeSpec).Type.(*ast.InterfaceType)
-	fndecl := typ.Methods.List[0].Type.(*ast.FuncType)
-	// fndecl: (ResponseWriter, *Request)
-
-	ast.Inspect(fndecl, func(n ast.Node) bool { // HL
-		if ident, ok := n.(*ast.Ident); ok {
-			fmt.Println(ident.Name)
-		}
-		return true
-	})
-}
-
-// end main // OMIT
diff --git a/content/2014/hammers/importpath.go b/content/2014/hammers/importpath.go
deleted file mode 100644
index c321ec0..0000000
--- a/content/2014/hammers/importpath.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-
-	"golang.org/x/tools/imports"
-)
-
-func main() {
-	iface := "http.Handler"
-	src := "package hack; var i " + iface // HL
-	fmt.Println(src, "\n---")
-
-	imp, _ := imports.Process("", []byte(src), nil) // HL
-	// ignoring errors throughout this presentation
-	fmt.Println(string(imp))
-}
diff --git a/content/2014/hammers/types.go b/content/2014/hammers/types.go
deleted file mode 100644
index f7aef4c..0000000
--- a/content/2014/hammers/types.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore
-
-package main
-
-// Method represents a method signature.
-type Method struct {
-	Recv string
-	Func
-}
-
-// Func represents a function signature.
-type Func struct {
-	Name   string
-	Params []Param
-	Res    []Param
-}
-
-// Param represents a parameter in a function or method signature.
-type Param struct {
-	Name string
-	Type string
-}
diff --git a/content/2014/hellogophers.slide b/content/2014/hellogophers.slide
deleted file mode 100644
index 4a6daf1..0000000
--- a/content/2014/hellogophers.slide
+++ /dev/null
@@ -1,531 +0,0 @@
-Hello, Gophers!
-Gophercon Opening Keynote
-24 Apr 2014
-
-Rob Pike
-Google, Inc.
-@rob_pike
-http://golang.org/s/plusrob
-http://golang.org
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=VoS7DsT1rdM Watch the talk on YouTube
-
-
-* Hello, gophers!
-
-.image hellogophers/gophers.jpg 500 750
-
-* Hello, gophers!
-
-.play hellogophers/hellogophers.go
-
-* History
-
-This is a historic occasion.
-
-Go has achieved a level of success worthy of a conference.
-
-* Success
-
-Many factors contribute to that success.
-
-- features
-- lack of features
-- combination of features
-- design
-- people
-- time
-
-* Case study
-
-A look back, focusing on code.
-
-* Two programs
-
-A close look at two programs.
-
-First is the first Go program _you_ ever saw. Historic for you.
-Second is the first Go program _we_ ever saw. Historic for all gophers.
-
-First up: "hello, world".
-
-* hello.b
-
-.code hellogophers/hello.b
-
-First appeared in a 1972 B tutorial by Brian W. Kernighan.
-(Not, as sometimes claimed, a few years earlier in BCPL.)
-
-* hello.c
-
-.code hellogophers/hello.c
-
-First appeared in
-_Programming_in_C:_A_Tutorial_, by Brian W. Kernighan, 1974.
-Came as a document with Unix v5.
-
-* hello.c
-
-.code hellogophers/helloKnR.c
-
-First appeared in
-_The_C_Programming_Language_, by Brian W. Kernighan and Dennis M. Ritchie, 1978.
-
-* hello.c, Draft ANSI C
-
-.code hellogophers/helloDraftAnsi.c
-
-Appeared in
-_The_C_Programming_Language_, _Second_Edition_, (Based on Draft-Proposed ANSI C)
-by Brian W. Kernighan and Dennis M. Ritchie, 1988.
-
-* hello.c, ANSI C89
-
-.code hellogophers/helloAnsi.c
-
-Appeared in
-_The_C_Programming_Language_, _Second_Edition_, round two,
-by Brian W. Kernighan and Dennis M. Ritchie, 1988.
-
-"You've gotta put a void THERE?" -Ken Thompson
-
-* A generation or two later...
-
-(Skipping all the intermediate languages.)
-
-Go discussions start in late 2007.
-
-Specification first drafted in March 2008.
-For experimentation and prototyping, compiler work already underway.
-Initially generated C output.
-Once the specification arose, compiler rewritten to generate native code.
-
-* hello.go, June 6, 2008
-
-.code hellogophers/hello_20080606.go
-
-First checked-in test.
-The `print` builtin is all we have, and `main` returns an `int`.
-Note: no parentheses on `print`.
-
-* hello.go, June 27, 2008
-
-.code hellogophers/hello_20080627.go
-
-When `main` returns, the program calls `exit(0)`.
-
-* hello.go, August 11, 2008
-
-.play hellogophers/hello_20080811.go
-
-Parentheses now required: `print` now a function not a primitive.
-
-* hello.go, October 24, 2008
-
-.code hellogophers/hello_20081024.go
-
-The "printf as we know and love it" goes in.
-(The test still uses `print` not `printf`; we've switched examples here.)
-
-* hello.go, January 15, 2009
-
-.play hellogophers/hello_20090115.go
-
-Upper case for export. "Casification."
-
-* hello.go, Dec 11, 2009
-
-.play hellogophers/hello_20091211.go
-
-No more semicolons.
-A major change that occurs _after_ the open source release (Nov 10, 2009).
-
-The current version.
-
-It took us a while to get here (32 years!).
-
-A lot of history.
-
-* Not just C
-
-We "started with C" but Go is profoundly different.
-Some of the languages that influenced and informed the design of Go:
-
-C: statement and expression syntax
-Pascal: declaration syntax
-Modula 2, Oberon 2: packages
-CSP, Occam, Newsqueak, Limbo, Alef: concurrency
-BCPL: the semicolon rule
-Smalltalk: methods
-Newsqueak: `<-`, `:=`
-APL: `iota`
-
-And others. Also some was invented whole: `defer`, constants, for instance.
-
-Plus lessons good and bad from all those plus:
-C++, C#, Java, JavaScript, LISP, Python, Scala, ...
-
-* hello.go, Go version 1
-
-Which brings us to today.
-
-.play hellogophers/hello.go
-
-Let's dig deeper, break this down.
-
-* Hello, world in 16 tokens
-
-`package`
-`main`
-`import`
-`"fmt"`
-`func`
-`main`
-`(`
-`)`
-`{`
-`fmt`
-`.`
-`Println`
-`(`
-`"Hello,`Gophers`(some`of`whom`know`日本語)!"`
-`)`
-`}`
-
-* package
-
-Major topic in early design discussions: Key to scalability.
-
-What is a package? Ideas from Modula-2 etc.
-Why are there packages?
-Hold all the information you need to build.
-No circular dependencies (imports).
-No subpackages.
-Separation of package name and package path.
-Visibility is package-level, not type-level.
-Within a package, you have the whole language, outside only what you permit.
-	
-* main
-
-One place where C  legacy shows through.
-Was originally `Main` for some forgotten reason.
-`Main` package, `main` function.
-Special because the root of the initialization tree.
-
-* import
-
-Mechanism for loading a package.
-Implemented by the compiler (as opposed to a text processor).
-Worked hard to make it efficient and linear.
-Imports a package, not a set of identifiers.
-
-As for export: It used to be a keyword.
-
-* "fmt"
-
-Package path is just a string, not a list of identifiers.
-Allows the language to avoid defining what it means—adaptability.
-From the beginning wanted a URL as an option.
-Allows for future growth.
-
-* func
-A keyword introduces functions (and types, variables, constants) for easy parsing.
-Easy parsing is important with function literals (closures).
-
-By the way, keyword was originally `function`.
-
-* Aside: Mail thread from February 6, 2008
-
-From: Ken Thompson <ken@google.com>
-To: gri, r
-
-larry and sergey came by tonight. we
-talked about go for more than an hour.
-they both said they liked it very much.
-
-p.s. one of larrys comments was "why isnt function spelled func?"
-
----
-
-From: Rob Pike <r@google.com>
-To: ken, gri
-
-fine with me.  seems compatible with 'var'.
-
-anyway we can always say, "larry said to call it 'func'"
-
-* main
-
-Where program starts... except it isn't.
-Separation of initialization from normal execution, long planned.
-Where does initialization happen?
-Feeds back to package design.
-
-* ()
-
-Look Ma, no `void`.
-No return value for `main`: handled by runtime.
-No function args (command line is in `os` package).
-No return value.
-
-Return values and syntax.
-
-* {
-
-Braces not spaces.
-And not square brackets.
-Why is the newline after the brace?
-
-* fmt
-
-All imported identifiers are _qualified_ by their import.
-_Every_ identifier is either local to package or func, or qualified by type or import.
-Profound effect on readability.
-
-Why `fmt` not `format`?
-
-* .
-
-How many uses are there in Go for a period token? (Lots.)
-The meaning of `a.B` requires using the type system.
-But it is clear to humans and very easy to read.
-
-Autopromotion of pointers (no `->` operator).
-
-* Println
-
-`Println` not `println`: capitals for export.
-Always knew it would be reflection-driven. (Safety, formatless printing.)
-Variadic functions.
-Argument type was `(...)`; became `(...interface{})` on Feb 1, 2010.
-
-* (
-
-Traditional function syntax.
-
-* "Hello, Gophers (some of whom know 日本語)!"
-
-UTF-8 input source, so strings as literals are UTF-8 automatically.
-But what is a string?
-One of the first things written in the specification, hardly changed today.
-
-.link http://blog.golang.org/strings
-
-* )
-
-No semicolon.
-Semicolons went away shortly after release.
-Much futzing around to try to cull them in early days.
-Eventually accepted the BCPL approach.
-
-* }
-
-Done.
-
-* Aside: Not discussed
-
-- types
-- constants
-- methods
-- interfaces
-- libraries
-- memory management
-- concurrency (coming up)
-
-Plus tools, ecosystem, community, ...:
-Language is central but only part of the story.
-
-* Success
-
-Factors:
-
-- building on history
-- building on experience
-- process of design
-- early ideas refined into final approach
-- concentrated effort by a small dedicated team
-
-Finally: Commitment.
-
-Go 1.0 locked down the language and libraries.
-
-* Another round
-
-Now watch similar evolution of a second program.
-
-* Problem: Prime sieve
-
-Problem specification from
-_Communicating_Sequential_Processes_, by C. A. R. Hoare, 1978
-
-"Problem: To print in ascending order all primes less than 
-10000. Use an array of processes, SIEVE, in which each 
-process inputs a prime from its predecessor and prints it. 
-The process then inputs an ascending stream of numbers 
-from its predecessor and passes them on to its successor, 
-suppressing any that are multiples of the original prime. "
-
-* Solution
-
-Defined in the 1978 CSP paper.
-(Note: not the sieve of Eratosthenes.)
-
-"This beautiful solution was contributed by David Gries."
-
-* CSP
-
-In Hoare's 1978 CSP paper
-
-.code hellogophers/sieve.csp
-
-No channels, just processes so number of primes is fixed by program.
-
-* Newsqueak
-
-_circa_ 1988.
-Language by Rob Pike, program by Tom Cargill via Doug McIlroy.
-
-Uses channels, so length of run is programmable.
-(Where did the idea of channels come from?)
-
-.code hellogophers/sieve.newsqueak 1,/BREAK/
-
-* Newsqueak (cont'd)
-
-.code hellogophers/sieve.newsqueak /BREAK/,$
-
-* sieve.go, March 5, 2008
-
-First version in a Go specification, probably the second non-trivial program written.
-`>` to send, `<` to receive. Channels are pointers. `Main` is capitalized.
-
-.code hellogophers/sieve_20080305.go 1,/BREAK/
-
-* sieve.go, March 5, 2008 (cont'd)
-
-.code hellogophers/sieve_20080305.go /BREAK/,$
-
-* sieve.go, July 22, 2008
-
-`-<` to send, `<-` to receive. Channels still pointers. Now `main` not capitalized.
-
-.code hellogophers/sieve_20080722.go 1,/BREAK/
-
-* sieve.go, July 22, 2008 (cont'd)
-
-.code hellogophers/sieve_20080722.go /BREAK/,$
-
-* sieve.go, September 17, 2008
-
-Communication operators now prefix and postfix  `<-`. Channels still pointers.
-
-.code hellogophers/sieve_20080917.go 1,/BREAK/
-
-* sieve.go, September 17, 2008 (cont'd)
-
-.code hellogophers/sieve_20080917.go /BREAK/,$
-
-* sieve.go, January 6, 2009
-
-The `make` builtin arrives. No pointers. Code wrong! (One `*` left, bad argument types.)
-
-.code hellogophers/sieve_20090106.go 1,/BREAK/
-
-* sieve.go, January 6, 2009 (cont'd)
-
-.code hellogophers/sieve_20090106.go /BREAK/,$
-
-* sieve.go, September 25, 2009
-
-First correct modern version. Also: capitalization gone. Uses `fmt`.
-
-.play hellogophers/sieve_20090925.go 1,/BREAK/
-
-* sieve.go, September 25, 2009 (cont'd)
-
-.play hellogophers/sieve_20090925.go  /BREAK/,$
-
-* sieve.go, December 10,  2009
-
-Semicolons gone. Program as it is today.
-
-.play hellogophers/sieve.go 1,/BREAK/
-
-* sieve.go, December 10,  2009 (cont'd)
-
-.play hellogophers/sieve.go /BREAK/,$
-
-"This beautiful solution was contributed by a decades-long process of design."
-
-* Aside: Not discussed
-
-- `select`
-
-The core connector for real concurrent applications. (A fact not always appreciated).
-Origins in Dijkstra's guarded commands.
-Made truly concurrent in Hoare's CSP.
-Refined through Newsqueak, Alef, Limbo, and other routes.
-
-Go's version specified on March 26, 2008.
-Simplifications, clarifications, syntactic considerations.
-
-* Stability
-
-Sieve program unchanged since late 2009—stability!
-
-Open source systems are not always dependably compatible and stable.
-
-Go is.
-
-This is a very important reason for Go's success.
-
-* Trends
-
-Graphs in usage metrics show knee in curve at Go 1.0 release.
-
-.image hellogophers/trends.png
-
-* Success
-
-The factors for Go's success?
-
-Obvious: Features and tools.
-
-- concurrency
-- garbage collection
-- efficient implementation
-- static types but dynamic feel
-- rich but limited standard library
-- tooling (and the factors that make it possible)
-- `gofmt`
-- programming in the large
-
-* Success
-
-Less obvious: process.
-
-- focus on the original goals
-- concentrated development followed by freeze
-- consensus of a small core team
-- vital contributions from a community that "gets it"
-- rich ecosystem generated as a consequence
-
-In short, an open source community that shares our mission,
-coupled to a language designed for today's world.
-
-* Fitness to purpose
-
-From _Go:_the_emerging_language_of_cloud_infrastructure_ by Donnie Berkholz, March 2014.
-[[http://golang.org/s/emerging]]
-
-.image hellogophers/emerging.png
-
-* The future
-
-This is where you come in!
-
-.image hellogophers/gophers.jpg 500 750
diff --git a/content/2014/hellogophers/emerging.png b/content/2014/hellogophers/emerging.png
deleted file mode 100644
index 8d82b97..0000000
--- a/content/2014/hellogophers/emerging.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/hellogophers/gophers.jpg b/content/2014/hellogophers/gophers.jpg
deleted file mode 100644
index ac88bfc..0000000
--- a/content/2014/hellogophers/gophers.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/hellogophers/hello.b b/content/2014/hellogophers/hello.b
deleted file mode 100644
index 05c4140..0000000
--- a/content/2014/hellogophers/hello.b
+++ /dev/null
@@ -1,7 +0,0 @@
-main( ) {
-	extrn a, b, c;
-	putchar(a); putchar(b); putchar(c); putchar('!*n');
-}
-a 'hell';
-b 'o, w';
-c 'orld';
diff --git a/content/2014/hellogophers/hello.c b/content/2014/hellogophers/hello.c
deleted file mode 100644
index 5144cb4..0000000
--- a/content/2014/hellogophers/hello.c
+++ /dev/null
@@ -1,4 +0,0 @@
-main()
-{
-	printf("hello, world");
-}
diff --git a/content/2014/hellogophers/hello.go b/content/2014/hellogophers/hello.go
deleted file mode 100644
index bc7194a..0000000
--- a/content/2014/hellogophers/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, Gophers (some of whom know 日本語)!")
-}
diff --git a/content/2014/hellogophers/helloAnsi.c b/content/2014/hellogophers/helloAnsi.c
deleted file mode 100644
index 1aed89f..0000000
--- a/content/2014/hellogophers/helloAnsi.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-main(void)
-{
-	printf("hello, world\n");
-}
diff --git a/content/2014/hellogophers/helloDraftAnsi.c b/content/2014/hellogophers/helloDraftAnsi.c
deleted file mode 100644
index 8626b30..0000000
--- a/content/2014/hellogophers/helloDraftAnsi.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <stdio.h>
-
-main()
-{
-	printf("hello, world\n");
-}
diff --git a/content/2014/hellogophers/helloKnR.c b/content/2014/hellogophers/helloKnR.c
deleted file mode 100644
index eaab7bb..0000000
--- a/content/2014/hellogophers/helloKnR.c
+++ /dev/null
@@ -1,4 +0,0 @@
-main()
-{
-	printf("hello, world\n");
-}
diff --git a/content/2014/hellogophers/hello_20080606.go b/content/2014/hellogophers/hello_20080606.go
deleted file mode 100644
index 57907c5..0000000
--- a/content/2014/hellogophers/hello_20080606.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() int {
-	print "hello, world\n";
-	return 0;
-}
diff --git a/content/2014/hellogophers/hello_20080627.go b/content/2014/hellogophers/hello_20080627.go
deleted file mode 100644
index 3dcd8cd..0000000
--- a/content/2014/hellogophers/hello_20080627.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	print "hello, world\n";
-}
diff --git a/content/2014/hellogophers/hello_20080811.go b/content/2014/hellogophers/hello_20080811.go
deleted file mode 100644
index 68219ca..0000000
--- a/content/2014/hellogophers/hello_20080811.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	print("hello, world\n");
-}
diff --git a/content/2014/hellogophers/hello_20081024.go b/content/2014/hellogophers/hello_20081024.go
deleted file mode 100644
index a2a465c..0000000
--- a/content/2014/hellogophers/hello_20081024.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.printf("hello, world\n");
-}
diff --git a/content/2014/hellogophers/hello_20090115.go b/content/2014/hellogophers/hello_20090115.go
deleted file mode 100644
index b24b288..0000000
--- a/content/2014/hellogophers/hello_20090115.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("hello, world\n");
-}
diff --git a/content/2014/hellogophers/hello_20091211.go b/content/2014/hellogophers/hello_20091211.go
deleted file mode 100644
index 270d531..0000000
--- a/content/2014/hellogophers/hello_20091211.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("hello, world\n")
-}
diff --git a/content/2014/hellogophers/hellogophers.go b/content/2014/hellogophers/hellogophers.go
deleted file mode 100644
index e333438..0000000
--- a/content/2014/hellogophers/hellogophers.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("Hello, gophers!\n")
-}
diff --git a/content/2014/hellogophers/sieve.csp b/content/2014/hellogophers/sieve.csp
deleted file mode 100644
index 0618cf6..0000000
--- a/content/2014/hellogophers/sieve.csp
+++ /dev/null
@@ -1,15 +0,0 @@
-[SIEVE(i:1..100):: 
-    p,mp:integer; 
-    SIEVE(i - 1)?p; 
-    print!p; 
-    mp := p; comment mp is a multiple of p; 
-*[m:integer; SIEVE(i - 1)?m →
-    *[m > mp → mp := mp + p]; 
-    [m = mp → skip 
-    ||m < mp → SIEVE(i + 1)!m 
-]   ] 
-||SIEVE(0)::print!2; n:integer; n := 3; 
-    *[n < 10000 → SIEVE(1)!n; n := n + 2] 
-||SIEVE(101)::*[n:integer;SIEVE(100)?n → print!n] 
-||print::*[(i:0..101) n:integer; SIEVE(i)?n → ...] 
-] 
diff --git a/content/2014/hellogophers/sieve.go b/content/2014/hellogophers/sieve.go
deleted file mode 100644
index 65e97af..0000000
--- a/content/2014/hellogophers/sieve.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// Send the sequence 2, 3, 4, … to channel 'ch'.
-func generate(ch chan<- int) {
-	for i := 2; ; i++ {
-		ch <- i  // Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'src' to channel 'dst',
-// removing those divisible by 'prime'.
-func filter(src <-chan int, dst chan<- int, prime int) {
-	for i := range src {  // Loop over values received from 'src'.
-		if i%prime != 0 {
-			dst <- i  // Send 'i' to channel 'dst'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain filter processes together.
-func sieve() {
-	ch := make(chan int)  // Create a new channel.
-	go generate(ch)       // Start generate() as a subprocess.
-	for {
-		prime := <-ch
-		fmt.Print(prime, "\n")
-		ch1 := make(chan int)
-		go filter(ch, ch1, prime)
-		ch = ch1
-	}
-}
-
-func main() {
-	sieve()
-}
diff --git a/content/2014/hellogophers/sieve.newsqueak b/content/2014/hellogophers/sieve.newsqueak
deleted file mode 100755
index 688f352..0000000
--- a/content/2014/hellogophers/sieve.newsqueak
+++ /dev/null
@@ -1,31 +0,0 @@
-counter:=prog(end: int, c: chan of int)
-{
-	i:int;
-	for(i=2; i<end; i++)
-		c<-=i;
-};
-
-filter:=prog(prime: int, listen: chan of int, send: chan of int)
-{
-	i:int;
-	for(;;)
-		if((i=<-listen)%prime)
-			send<-=i;
-};
-# BREAK OMIT
-sieve:=prog(c: chan of int)
-{
-	for(;;){
-		prime:=<-c;
-		print(prime, " ");
-		newc:=mk(chan of int);
-		begin filter(prime, c, newc);
-		c=newc;
-	}
-};
-
-count:=mk(chan of int);
-
-begin counter(10000, count);
-begin sieve(count);
-"";
diff --git a/content/2014/hellogophers/sieve_20080305.go b/content/2014/hellogophers/sieve_20080305.go
deleted file mode 100644
index 1b0b170..0000000
--- a/content/2014/hellogophers/sieve_20080305.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package Main
-
-// Send the sequence 2, 3, 4, ... to channel 'ch'.
-func Generate(ch *chan> int) {
-	for i := 2; ; i++ {
-		>ch = i;	// Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'in' to channel 'out',
-// removing those divisible by 'prime'.
-func Filter(in *chan< int, out *chan> int, prime int) {
-	for ; ; {
-		i := <in;	// Receive value of new variable 'i' from 'in'.
-		if i % prime != 0 {
-			>out = i;	// Send 'i' to channel 'out'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain Filter processes together.
-func Sieve() {
-	ch := new(chan int);  // Create a new channel.
-	go Generate(ch);      // Start Generate() as a subprocess.
-	for ; ; {
-		prime := <ch;
-		printf("%d\n", prime);
-		ch1 := new(chan int);
-		go Filter(ch, ch1, prime);
-		ch = ch1;
-	}
-}
-
-func Main() {
-	Sieve();
-}
diff --git a/content/2014/hellogophers/sieve_20080722.go b/content/2014/hellogophers/sieve_20080722.go
deleted file mode 100644
index c4e1647..0000000
--- a/content/2014/hellogophers/sieve_20080722.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// Send the sequence 2, 3, 4, ... to channel 'ch'.
-func Generate(ch *chan-< int) {
-	for i := 2; ; i++ {
-		ch -< i	// Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'in' to channel 'out',
-// removing those divisible by 'prime'.
-func Filter(in *chan<- int, out *chan-< int, prime int) {
-	for {
-		i := <-in;	// Receive value of new variable 'i' from 'in'.
-		if i % prime != 0 {
-			out -< i	// Send 'i' to channel 'out'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain Filter processes together.
-func Sieve() {
-	ch := new(chan int);  // Create a new channel.
-	go Generate(ch);      // Start Generate() as a subprocess.
-	for {
-		prime := <-ch;
-		printf("%d\n",	prime);
-		ch1 := new(chan int);
-		go Filter(ch, ch1, prime);
-		ch = ch1
-	}
-}
-
-func main() {
-	Sieve()
-}
diff --git a/content/2014/hellogophers/sieve_20080917.go b/content/2014/hellogophers/sieve_20080917.go
deleted file mode 100644
index f627acc..0000000
--- a/content/2014/hellogophers/sieve_20080917.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// Send the sequence 2, 3, 4, ... to channel 'ch'.
-func Generate(ch *chan <- int) {
-	for i := 2; ; i++ {
-		ch <- i  // Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'in' to channel 'out',
-// removing those divisible by 'prime'.
-func Filter(in *chan <- int, out *<-chan int, prime int) {
-	for {
-		i := <-in;  // Receive value of new variable 'i' from 'in'.
-		if i % prime != 0 {
-			out <- i  // Send 'i' to channel 'out'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain Filter processes together.
-func Sieve() {
-	ch := new(chan int);  // Create a new channel.
-	go Generate(ch);      // Start Generate() as a subprocess.
-	for {
-		prime := <-ch;
-		print(prime, "\n");
-		ch1 := new(chan int);
-		go Filter(ch, ch1, prime);
-		ch = ch1
-	}
-}
-
-func main() {
-	Sieve()
-}
diff --git a/content/2014/hellogophers/sieve_20090106.go b/content/2014/hellogophers/sieve_20090106.go
deleted file mode 100644
index 6b53b1b..0000000
--- a/content/2014/hellogophers/sieve_20090106.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-// Send the sequence 2, 3, 4, ... to channel 'ch'.
-func Generate(ch chan <- int) {
-	for i := 2; ; i++ {
-		ch <- i  // Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'in' to channel 'out',
-// removing those divisible by 'prime'.
-func Filter(in chan <- int, out *<-chan int, prime int) {
-	for {
-		i := <-in;  // Receive value of new variable 'i' from 'in'.
-		if i % prime != 0 {
-			out <- i  // Send 'i' to channel 'out'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain Filter processes together.
-func Sieve() {
-	ch := make(chan int);  // Create a new channel.
-	go Generate(ch);       // Start Generate() as a subprocess.
-	for {
-		prime := <-ch;
-		print(prime, "\n");
-		ch1 := make(chan int);
-		go Filter(ch, ch1, prime);
-		ch = ch1
-	}
-}
-
-func main() {
-	Sieve()
-}
diff --git a/content/2014/hellogophers/sieve_20090925.go b/content/2014/hellogophers/sieve_20090925.go
deleted file mode 100644
index 8addea6..0000000
--- a/content/2014/hellogophers/sieve_20090925.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// Send the sequence 2, 3, 4, ... to channel 'ch'.
-func generate(ch chan<- int) {
-	for i := 2; ; i++ {
-		ch <- i;	// Send 'i' to channel 'ch'.
-	}
-}
-
-// Copy the values from channel 'in' to channel 'out',
-// removing those divisible by 'prime'.
-func filter(src <-chan int, dst chan<- int, prime int) {
-	for i := range src {	// Loop over values received from 'src'.
-		if i%prime != 0 {
-			dst <- i;	// Send 'i' to channel 'dst'.
-		}
-	}
-}
-// BREAK OMIT
-// The prime sieve: Daisy-chain filter processes together.
-func sieve() {
-	ch := make(chan int);  // Create a new channel.
-	go generate(ch);       // Start generate() as a subprocess.
-	for {
-		prime := <-ch;
-		fmt.Print(prime, "\n");
-		ch1 := make(chan int);
-		go filter(ch, ch1, prime);
-		ch = ch1;
-	}
-}
-
-func main() {
-	sieve();
-}
diff --git a/content/2014/hellogophers/trends.png b/content/2014/hellogophers/trends.png
deleted file mode 100644
index 50da27c..0000000
--- a/content/2014/hellogophers/trends.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/names.slide b/content/2014/names.slide
deleted file mode 100644
index 6ba39ba..0000000
--- a/content/2014/names.slide
+++ /dev/null
@@ -1,235 +0,0 @@
-What's in a name?
-October 2014
-
-Andrew Gerrand
-Google Inc.
-adg@golang.org
-@enneff
-https://golang.org/
-
-
-* Names matter
-
-Readability is the defining quality of good code.
-
-Good names are critical to readability.
-
-This talk is about naming in Go.
-
-
-* Good names
-
-A good name is:
-
-- Consistent (easy to guess),
-- Short (easy to type),
-- Accurate (easy to understand).
-
-
-* A rule of thumb
-
-The greater the distance between a name's declaration and its uses,
-the longer the name should be.
-
-
-* Use MixedCase
-
-Names in Go should use `MixedCase`.
-
-(Don't use `names_with_underscores`.)
-
-Acronyms should be all capitals, as in `ServeHTTP` and `IDProcessor`.
-
-
-* Local variables
-
-Keep them short; long names obscure what the code _does_.
-
-Common variable/type combinations may use really short names:
-
-Prefer `i` to `index`.
-Prefer `r` to `reader`.
-Prefer `b` to `buffer`.
-
-Avoid redundant names, given their context:
-
-Prefer `count` to `runeCount` inside a function named `RuneCount`.
-Prefer `ok` to `keyInMap` in the statement
-
-	v, ok := m[k]
-
-Longer names may help in long functions, or functions with many local variables.
-(But often this just means you should refactor.)
-
-
-* Bad
-
-	func RuneCount(buffer []byte) int {
-		runeCount := 0
-		for index := 0; index < len(buffer); {
-			if buffer[index] < RuneSelf {
-				index++
-			} else {
-				_, size := DecodeRune(buffer[index:])
-				index += size
-			}
-			runeCount++
-		}
-		return runeCount
-	}
-
-
-* Good
-
-	func RuneCount(b []byte) int {
-		count := 0
-		for i := 0; i < len(b); {
-			if b[i] < RuneSelf {
-				i++
-			} else {
-				_, n := DecodeRune(b[i:])
-				i += n
-			}
-			count++
-		}
-		return count
-	}
-
-
-* Parameters
-
-Function parameters are like local variables,
-but they also serve as documentation.
-
-Where the types are descriptive, they should be short:
-
-	func AfterFunc(d Duration, f func()) *Timer
-
-	func Escape(w io.Writer, s []byte)
-
-Where the types are more ambiguous, the names may provide documentation:
-
-	func Unix(sec, nsec int64) Time
-
-	func HasPrefix(s, prefix []byte) bool
-
-
-* Return values
-
-Return values on exported functions should only be named for documentation purposes.
-
-These are good examples of named return values:
-
-	func Copy(dst Writer, src Reader) (written int64, err error)
-
-	func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
-
-
-* Receivers
-
-Receivers are a special kind of argument.
-
-By convention, they are one or two characters that reflect the receiver type,
-because they typically appear on almost every line:
-
-	func (b *Buffer) Read(p []byte) (n int, err error)
-	
-	func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request)
-
-	func (r Rectangle) Size() Point
-
-Receiver names should be consistent across a type's methods.
-(Don't use `r` in one method and `rdr` in another.)
-
-
-* Exported package-level names
-
-Exported names are qualified by their package names.
-
-Remember this when naming exported variables, constants, functions, and types.
-
-That's why we have `bytes.Buffer` and `strings.Reader`,
-not `bytes.ByteBuffer` and `strings.StringReader`.
-
-
-* Interface Types
-
-Interfaces that specify just one method are usually just that function name with 'er' appended to it.
-
-	type Reader interface {
-		Read(p []byte) (n int, err error)
-	}
-
-Sometimes the result isn't correct English, but we do it anyway:
-
-	type Execer interface {
-		Exec(query string, args []Value) (Result, error)
-	}
-
-Sometimes we use English to make it nicer:
-
-	type ByteReader interface {
-		ReadByte() (c byte, err error)
-	}
-
-When an interface includes multiple methods, choose a name that accurately describes its purpose (examples: `net.Conn`, `http.ResponseWriter`, `io.ReadWriter`).
-
-
-* Errors
-
-Error types should be of the form `FooError`:
-
-	type ExitError struct {
-		...
-	}
-
-Error values should be of the form `ErrFoo`:
-
-	var ErrFormat = errors.New("image: unknown format")
-
-
-* Packages
-
-Choose package names that lend meaning to the names they export.
-
-Steer clear of `util`, `common`, and the like.
-
-
-* Import paths
-
-The last component of a package path should be the same as the package name.
-
-	"compress/gzip" // package gzip
-
-Avoid stutter in repository and package paths:
-
-	"code.google.com/p/goauth2/oauth2" // bad; my fault
-
-For libraries, it often works to put the package code in the repo root:
-
-	"github.com/golang/oauth2" // package oauth2
-
-Also avoid upper case letters (not all file systems are case sensitive).
-
-* The standard library
-
-Many examples in this talk are from the standard library.
-
-The standard library is a great place to find good Go code.
-Look to it for inspiration.
-
-But be warned:
-
-When the standard library was written, we were still learning.
-Most of it we got right, but we made some mistakes.
-
-
-* Conclusion
-
-Use short names.
-
-Think about context.
-
-Use your judgment.
-
-
diff --git a/content/2014/organizeio.slide b/content/2014/organizeio.slide
deleted file mode 100644
index 0cff214..0000000
--- a/content/2014/organizeio.slide
+++ /dev/null
@@ -1,333 +0,0 @@
-Organizing Go code
-
-David Crawshaw
-crawshaw@golang.org
-
-
-* Packages
-
-* Go programs are made up of packages
-
-All Go source is part of a package.
-Every file begins with a package statement.
-Programs start in package main.
-
-.play organizeio/hello.go
-
-For very small programs, `main` is the only package you need to write.
-
-The hello world program _imports_ package `fmt`.
-
-The function `Println` is defined in the fmt package.
-
-* An example package: fmt
-
-	// Package fmt implements formatted I/O.
-	package fmt
-
-	// Println formats using the default formats for its
-	// operands and writes to standard output.
-	func Println(a ...interface{}) (n int, err error) {
-		...
-	}
-
-	func newPrinter() *pp {
-		...
-	}
-
-The `Println` function is _exported_. It starts with an upper case
-letter, which means other packages are allowed to call it.
-
-The `newPrinter` function is _unexported_. It starts with a lower
-case letter, so it can only be used inside the fmt package.
-
-* The shape of a package
-
-Packages collect related code.
-
-They can be big or small,
-and may be spread across multiple files.
-
-All the files in a package live in a single directory.
-
-The `net/http` package exports more than 100 names. (18 files)
-The `errors` package exports just one. (1 file)
-
-* The name of a package
-
-Keep package names short and meaningful.
-Don't use underscores, they make package names long.
-
-- `io/ioutil` not `io/util`
-- `suffixarray` not `suffix_array`
-
-Don't overgeneralize. A `util` package could be anything.
-
-The name of a package is part of its type and function names.
-On its own, type `Buffer` is ambiguous. But users see:
-
-	buf := new(bytes.Buffer)
-
-Choose package names carefully.
-
-Choose good names for users.
-
-* The testing of a package
-
-Tests are distinguished by file name. Test files end in `_test.go`.
-
-	package fmt
-
-	import "testing"
-
-	var fmtTests = []fmtTest{
-		{"%d", 12345, "12345"},
-		{"%v", 12345, "12345"},
-		{"%t", true, "true"},
-	}
-
-	func TestSprintf(t *testing.T) {
-		for _, tt := range fmtTests {
-			if s := Sprintf(tt.fmt, tt.val); s != tt.out {
-				t.Errorf("...")
-			}
-		}
-	}
-
-Test well.
-
-* Code organization
-
-* Introducing workspaces
-
-Your Go code is kept in a _workspace_.
-
-A workspace contains _many_ source repositories (git, hg).
-
-The Go tool understands the layout of a workspace.
-You don't need a `Makefile`. The file layout is everything.
-
-Change the file layout, change the build.
-
-	$GOPATH/
-		src/
-			github.com/user/repo/
-				mypkg/
-					mysrc1.go
-					mysrc2.go
-				cmd/mycmd/
-					main.go
-		bin/
-			mycmd
-
-
-* Let's make a workspace
-
-	mkdir /tmp/gows
-	GOPATH=/tmp/gows
-
-The `GOPATH` environment variable tells the Go tool where your workspace is located.
-
-	go get github.com/dsymonds/fixhub/cmd/fixhub
-
-The `go` `get` command fetches source repositories from the internet and places them in your workspace.
-
-Package paths matter to the Go tool. Using "github.com/..."
-means the tool knows how to fetch your repository.
-
-	go install github.com/dsymonds/fixhub/cmd/fixhub
-
-The go install command builds a binary and places it in `$GOPATH/bin/fixhub`.
-
-* Our workspace
-
-	$GOPATH/
-		bin/fixhub                              # installed binary
-		pkg/darwin_amd64/                       # compiled archives
-			code.google.com/p/goauth2/oauth.a
-			github.com/...
-		src/                                    # source repositories
-			code.google.com/p/goauth2/
-				.hg
-				oauth                           # used by package go-github
-				...
-			github.com/
-				golang/lint/...                 # used by package fixhub
-					.git
-				google/go-github/...            # used by package fixhub
-					.git
-				dsymonds/fixhub/
-					.git
-					client.go
-					cmd/fixhub/fixhub.go        # package main
-
-`go` `get` fetched many repositories.
-`go` `install` built a binary out of them.
-
-
-* Why prescribe file layout?
-
-Using file layout for builds means less configuration.
-In fact, it means no configuration.
-No `Makefile`, no `build.xml`.
-
-Less time configuring means more time programming.
-
-Everyone in the community uses the same layout.
-This makes it easier to share code.
-
-The Go tool helps build the Go community.
-
-* Where's your workspace?
-
-It is possible to have multiple workspaces, but most people just use one.
-
-So where do you point your `GOPATH`? A common preference:
-
-.image organizeio/home.png
-
-This puts `src`, `bin`, and `pkg` directories in your home directory.
-
-(Convenient, because `$HOME/bin` is probably already in your `PATH`.)
-
-
-* Working with workspaces
-
-Unix eschews typing:
-
-	CDPATH=$GOPATH/src/github.com:$GOPATH/src/code.google.com/p
-
-	$ cd dsymonds/fixhub
-	/tmp/gows/src/github.com/dsymonds/fixhub
-	$ cd goauth2
-	/tmp/gows/src/code.google.com/p/goauth2
-	$
-
-A shell function for your `~/.profile`:
-
-	gocd () { cd `go list -f '{{.Dir}}' $1` }
-
-This lets you move around using the Go tool's path names:
-
-	$ gocd .../lint
-	/tmp/gows/src/github.com/golang/lint
-	$
-
-
-* The Go tool's many talents
-
-	$ go help
-	Go is a tool for managing Go source code.
-
-	Usage:
-
-		go command [arguments]
-
-	The commands are:
-
-Worth exploring! Some highlights:
-
-	    build       compile packages and dependencies
-	    get         download and install packages and dependencies
-	    install     compile and install packages and dependencies
-	    test        test packages
-
-There are more useful subcommands. Check out `vet` and `fmt`.
-
-* Dependency management
-
-* In production, versions matter.
-
-`go` `get` always fetches the latest code, even if your build breaks.
-
-.image organizeio/gogetversion.png
-
-That's fine when developing. It's not fine when releasing.
-We need other tools.
-
-* Versioning
-
-My favorite technique: vendoring.
-
-For building binaries, import the packages you care about
-into a `_vendor` workspace.
-
-	GOPATH=/tmp/gows/_vendor:/tmp/gows
-
-For building libraries, import the packages you care about
-into your repository. Rename the imports to:
-
-	import "github.com/you/proj/vendor/github.com/them/lib"
-
-Long paths, but trivial to automate. Write a Go program!
-
-Another technique: [[http://gopkg.in][gopkg.in]], provides versioned package paths:
-
-	gopkg.in/user/pkg.v3 -> github.com/user/pkg (branch/tag v3, v3.N, or v.3.N.M)
-
-* Naming
-
-* Names matter
-
-Programs are full of names. Names have costs and benefits.
-
-*Costs*: *space* *and* *time*
-Names need to be in short term memory when reading code.
-You can only fit so many. Longer names take up more space.
-
-*Benefits:* *information*
-A good name is not only a referent, it conveys information.
-
-Use the shortest name that carries the right amount of information in its context.
-
-Devote time to naming.
-
-* Name style
-
-Use `camelCase`, `not_underscores`.
-Local variable names should be short, typically one or two characters.
-
-Package names are usually one lowercase word.
-
-Global variables should have longer names.
-
-Don't stutter.
-
-- `bytes.Buffer` not `bytes.ByteBuffer`
-- `zip.Reader` not `zip.ZipReader`
-- `errors.New` not `errors.NewError`
-- `r` not `bytesReader`
-- `i` not `loopIterator`
-
-* Doc comments
-
-Doc comments precede the declaration of an exported identifier:
-
-        // Join concatenates the elements of elem to create a single string.
-        // The separator string sep is placed between elements in the resulting string.
-        func Join(elem []string, sep string) string {
-
-The godoc tool extracts such comments and presents them on the web:
-
-.image organizeio/godoc.png
-
-* Writing doc comments
-
-Doc comments should be English sentences and paragraphs.
-They use no special formatting beyond indentation for preformatted text.
-
-Doc comments should begin with the noun they describe.
-
-	// Join concatenates… 		good
-	// This function… 			bad
-
-Package docs go above the package declaration:
-
-	// Package fmt…
-	package fmt
-
-Read the world's Go docs on [[godoc.org]]. E.g.
-
-[[http://godoc.org/code.google.com/p/go.tools/cmd/vet]]
-
-* Questions?
diff --git a/content/2014/organizeio/godoc.png b/content/2014/organizeio/godoc.png
deleted file mode 100644
index 1f03b6e..0000000
--- a/content/2014/organizeio/godoc.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/organizeio/gogetversion.png b/content/2014/organizeio/gogetversion.png
deleted file mode 100644
index 67a5d2a..0000000
--- a/content/2014/organizeio/gogetversion.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/organizeio/hello.go b/content/2014/organizeio/hello.go
deleted file mode 100644
index f7b60bd..0000000
--- a/content/2014/organizeio/hello.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, world!")
-}
diff --git a/content/2014/organizeio/home.png b/content/2014/organizeio/home.png
deleted file mode 100644
index 7dd06cd..0000000
--- a/content/2014/organizeio/home.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground.slide b/content/2014/playground.slide
deleted file mode 100644
index fe13fc2..0000000
--- a/content/2014/playground.slide
+++ /dev/null
@@ -1,320 +0,0 @@
-Inside the Go playground
-
-Francesc Campoy Flores
-Developer Advocate, Gopher
-@francesc
-campoy@golang.org
-http://campoy.cat
-
-* Agenda
-
-- What is the Go playground
-
-- What could go wrong
-
-- What did we do to avoid it
-
-- An animated ASCII train
-
-* The Go playground
-
-.image playground/img/play.png 500 _
-.caption [[http://play.golang.org][play.golang.org]]
-
-* De facto pastebin of the Go community
-
-.image playground/img/share.png 500 _
-.caption [[http://play.golang.org/p/bJYnajZ6Kp]]
-
-* The Go tour
-
-.image playground/img/tour.png 500 _
-.caption [[http://tour.golang.org][tour.golang.org]]
-
-* Executable examples on documentation
-
-.image playground/img/examples.png 500 _
-.caption [[http://golang.org/pkg/strings/#example_Fields][golang.org/pkg/strings]]
-
-* Executable code on blog posts
-
-.image playground/img/blog.png 500 _
-.caption [[http://blog.golang.org/slices]]
-
-* Executable slides
-
-.play playground/hello.go
-
-These slides are driven by the `present` Go tool
-
-	go get code.google.com/go.tools/cmd/present
-
-* Naive implementation
-
-* Architecture
-
-.image playground/img/arch.png 500 _
-
-* Backend
-
-Let's start with something simple
-
-- receive code
-- compile it
-- run it
-
-* What could go wrong?
-
-.image playground/img/areyousure.png 500 _
-
-###########
-## Issues #
-###########
-
-* Resource exhaustion
-
-* Exhausting memory on the stack
-
-`stack`overflow`
-
-.play playground/stack.go
-
-The runtime catches the error and panics.
-
-* Too much memory on the heap
-
-`out`of`memory`
-
-.play playground/heap.go
-
-Again the runtime catches the error and panics.
-
-* Too much CPU time
-
-.play playground/loop.go
-
-* Stealing resources by sleeping
-
-.play playground/sleep.go
-
-A sleeping program still consumes resources.
-
-Easy way of having a Denial of Service attack.
-
-* Accessing things you shouldn't
-
-* File system access
-
-User code shouldn't be able to modify the backend's file system.
-
-- Reading sensitive information
-
-- Installing backdoors
-
-- General mayhem
-
-.play playground/removeall.go /func main/,/^}/
-
-* Network access
-
-.play playground/http.go /func main/,/^}/
-
-* Use your imagination
-
-.image playground/img/cat.jpg 500 _
-
-###################
-# Countermeasures #
-###################
-
-* Countermeasures
-
-* Restricting resource usage with ulimit
-
-Default limits are not safe enough.
-
-`ulimit` could solve this.
-
-	-d    maximum size of data segment or heap (in kbytes)
-
-	-s    maximum size of stack segment (in kbytes)
-
-	-t    maximum CPU time (in seconds)
-
-	-v    maximum size of virtual memory (in kbytes)
-
-* Native Client
-
-Originally designed to execute native code in Chrome safely.
-
-NaCl defines restrictions on the binaries being executed.
-
-The code runs in a sandbox isolated from the underlying OS.
-
-- No file access
-- No network access
-
-.image playground/img/nacl.png 300 _
-
-* Isolating process execution with NaCl
-
-We use NaCl to:
-
-- limit CPU time
-
-- limit memory
-
-- isolate from the filesystem
-
-- isolate from the network
-
-Process can only write to stdout/stderr.
-
-* Limiting user time
-
-"No sleeping in the playground."
-
-Custom runtime with a fake `time` package.
-
-	func Sleep(d time.Duration) {
-		panic("No sleeping in the playground")
-	}
-
-* Restoring functionality
-
-* Faking the file system
-
-The `syscall` package is the only link between user code and the OS kernel.
-
-The playground runtime has a custom `syscall` package.
-
-File system operations operate on a fake in-memory file system.
-
-.play playground/file.go /func main/,
-
-* Faking the network
-
-All network operations also use the `syscall` package.
-
-The network stack is also faked in-memory.
-
-.play playground/net.go /func main/,/^}/
-
-* Faking the network (continued)
-
-.play playground/net.go /func dial/,/^}/
-
-##########
-## TIME ##
-##########
-
-* Sleeping in the playground
-
-Go is about concurrency.
-
-We need to demonstrate concurrency in blog posts and talks.
-
-And demonstrating concurrency without `time` is hard.
-
-* What to do if an open source project lacks a feature?
-
-.image playground/img/gopherbw.png 500 _
-
-* File a bug!
-
-.image playground/img/bug.png 500 _
-.caption [[https://code.google.com/p/go/issues/detail?id=4280][bug 4280]]
-
-* Normal behavior
-
-There's a special goroutine managing timers `T`.
-
-A goroutine `G` calls `time.Sleep`:
-
-1. `G` adds a timer to the timer heap.
-
-2. `G` puts itself to sleep.
-
-3. `T` tells the OS to wake it when the next timer expires and puts itself to sleep.
-
-4. When `T` is woken up it looks at the timer on the top of the heap, and wakes the corresponding goroutine.
-
-* Intermission: deadlocks
-
-.play playground/deadlock.go
-
-Many flavors of deadlocks.
-
-One common property: all goroutines are asleep.
-
-* New behavior
-
-A goroutine `G` calls `time.Sleep`:
-
-1. `G` adds a timer to the timer heap.
-
-2. `G` puts itself to sleep.
-
-3. The scheduler detects a deadlock, checks the timer heap for pending timers.
-
-4. The internal clock is advanced to the next timer expiration.
-
-5. The corresponding goroutines are woken up.
-
-* Sleeping fast
-
-Faking time allows precise sleep durations.
-
-.play playground/sleepfast.go
-
-* So there's no actual sleep?
-
-The playground's `write` syscall inserts a timestamp before each write.
-
-The front end translates that into a series of "events" that the browser can play back.
-
-.play playground/sleep.go /func main/,
-
-Returns directly
-
-	{
-		"Errors":"",
-		"Events":[
-			{"Message":"Good night\n","Delay":0},
-			{"Message":"Good morning\n","Delay":28800000000000}
-		]
-	}
-
-* So the bug was fixed
-
-.image playground/img/andrew.png _ 1000
-.caption [[http://play.golang.org/p/3fv0L3-z0s]]
-
-* And people were happy
-
-.image playground/img/brad.png _ 1000
-.caption [[http://play.golang.org/p/rX_3WcpUOZ]]
-
-* Very happy
-
-.image playground/img/jan.png _ 1000
-.caption [[http://play.golang.org/p/P-Dk0NH_vf]]
-
-.image playground/img/mattn.png _ 1000
-.caption [[http://play.golang.org/p/NOycgN2i6b]]
-
-* References
-
-These slides: [[http://talks.golang.org/2014/playground.slide]]
-
-More about the Go tour:
-
-- Inside the Go playground: [[http://blog.golang.org/playground]]
-
-- The Go tour: [[http://tour.golang.org]]
-
-More about Go on NaCl:
-
-- Running Go under Native Client: [[https://code.google.com/p/go-wiki/wiki/NativeClient]]
-
-- Go 1.3 Native Client Support: [[http://golang.org/s/go13nacl]]
\ No newline at end of file
diff --git a/content/2014/playground/deadlock.go b/content/2014/playground/deadlock.go
deleted file mode 100644
index 9726526..0000000
--- a/content/2014/playground/deadlock.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	c := make(chan int)
-
-	<-c
-}
diff --git a/content/2014/playground/file.go b/content/2014/playground/file.go
deleted file mode 100644
index 0444e7d..0000000
--- a/content/2014/playground/file.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io/ioutil"
-	"log"
-)
-
-func main() {
-	const filename = "/tmp/file.txt"
-
-	err := ioutil.WriteFile(filename, []byte("Hello, file system\n"), 0644)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	b, err := ioutil.ReadFile(filename)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("%s", b)
-}
diff --git a/content/2014/playground/heap.go b/content/2014/playground/heap.go
deleted file mode 100644
index c8fd303..0000000
--- a/content/2014/playground/heap.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-type list struct {
-	buf  [100000]byte
-	next *list
-}
-
-func main() {
-	var l *list
-	for {
-		l = &list{next: l}
-	}
-}
diff --git a/content/2014/playground/hello.go b/content/2014/playground/hello.go
deleted file mode 100644
index c1248a0..0000000
--- a/content/2014/playground/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, gophers!")
-}
diff --git a/content/2014/playground/http.go b/content/2014/playground/http.go
deleted file mode 100644
index 24f32b0..0000000
--- a/content/2014/playground/http.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	res, err := http.Get("http://api.openweathermap.org/data/2.5/weather?q=Portland")
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer res.Body.Close()
-
-	var w struct {
-		Weather []struct {
-			Desc string `json:"description"`
-		} `json:"weather"`
-	}
-	if err := json.NewDecoder(res.Body).Decode(&w); err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("No need to rush outside, we have %v.", w.Weather[0].Desc)
-}
diff --git a/content/2014/playground/img/andrew.png b/content/2014/playground/img/andrew.png
deleted file mode 100644
index 1731823..0000000
--- a/content/2014/playground/img/andrew.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/arch.png b/content/2014/playground/img/arch.png
deleted file mode 100644
index 9f1dfd1..0000000
--- a/content/2014/playground/img/arch.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/areyousure.png b/content/2014/playground/img/areyousure.png
deleted file mode 100644
index b0555ed..0000000
--- a/content/2014/playground/img/areyousure.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/blog.png b/content/2014/playground/img/blog.png
deleted file mode 100644
index 14a78d2..0000000
--- a/content/2014/playground/img/blog.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/brad.png b/content/2014/playground/img/brad.png
deleted file mode 100644
index 0da6995..0000000
--- a/content/2014/playground/img/brad.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/bug.png b/content/2014/playground/img/bug.png
deleted file mode 100644
index 2711556..0000000
--- a/content/2014/playground/img/bug.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/cat.jpg b/content/2014/playground/img/cat.jpg
deleted file mode 100644
index 022cc53..0000000
--- a/content/2014/playground/img/cat.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/examples.png b/content/2014/playground/img/examples.png
deleted file mode 100644
index 7766e68..0000000
--- a/content/2014/playground/img/examples.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/gopherbw.png b/content/2014/playground/img/gopherbw.png
deleted file mode 100644
index 23c425f..0000000
--- a/content/2014/playground/img/gopherbw.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/jan.png b/content/2014/playground/img/jan.png
deleted file mode 100644
index e0afdee..0000000
--- a/content/2014/playground/img/jan.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/mattn.png b/content/2014/playground/img/mattn.png
deleted file mode 100644
index 501359f..0000000
--- a/content/2014/playground/img/mattn.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/nacl.png b/content/2014/playground/img/nacl.png
deleted file mode 100644
index 46d5ca6..0000000
--- a/content/2014/playground/img/nacl.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/play.png b/content/2014/playground/img/play.png
deleted file mode 100644
index 8e7119e..0000000
--- a/content/2014/playground/img/play.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/share.png b/content/2014/playground/img/share.png
deleted file mode 100644
index 8973ce6..0000000
--- a/content/2014/playground/img/share.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/sleepbug.png b/content/2014/playground/img/sleepbug.png
deleted file mode 100644
index 9b74227..0000000
--- a/content/2014/playground/img/sleepbug.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/img/tour.png b/content/2014/playground/img/tour.png
deleted file mode 100644
index 3999bdf..0000000
--- a/content/2014/playground/img/tour.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/playground/loop.go b/content/2014/playground/loop.go
deleted file mode 100644
index 26005a9..0000000
--- a/content/2014/playground/loop.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	for {
-	}
-}
diff --git a/content/2014/playground/net.go b/content/2014/playground/net.go
deleted file mode 100644
index eebdc46..0000000
--- a/content/2014/playground/net.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net"
-	"os"
-)
-
-func main() {
-	l, err := net.Listen("tcp", "127.0.0.1:4000")
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer l.Close()
-
-	go dial()
-
-	c, err := l.Accept()
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer c.Close()
-
-	io.Copy(os.Stdout, c)
-}
-
-func dial() {
-	c, err := net.Dial("tcp", "127.0.0.1:4000")
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer c.Close()
-	c.Write([]byte("Hello, network\n"))
-}
diff --git a/content/2014/playground/removeall.go b/content/2014/playground/removeall.go
deleted file mode 100644
index def5665..0000000
--- a/content/2014/playground/removeall.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"log"
-	"os"
-)
-
-func main() {
-	err := os.RemoveAll("/foo")
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2014/playground/rm.go b/content/2014/playground/rm.go
deleted file mode 100644
index de69f3a..0000000
--- a/content/2014/playground/rm.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"log"
-	"os/exec"
-)
-
-func main() {
-	err := exec.Command("mkdir", "/tmp/foo").Run()
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	err = exec.Command("rm", "-rf", "/tmp/foo").Run()
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2014/playground/sleep.go b/content/2014/playground/sleep.go
deleted file mode 100644
index 6d6e271..0000000
--- a/content/2014/playground/sleep.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	fmt.Println("Good night")
-	time.Sleep(8 * time.Hour)
-	fmt.Println("Good morning")
-}
diff --git a/content/2014/playground/sleepfast.go b/content/2014/playground/sleepfast.go
deleted file mode 100644
index e275d1d..0000000
--- a/content/2014/playground/sleepfast.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	start := time.Now()
-	fmt.Println(start)
-
-	for i := 0; i < 10; i++ {
-		time.Sleep(time.Nanosecond)
-		fmt.Println(time.Since(start))
-	}
-}
diff --git a/content/2014/playground/stack.go b/content/2014/playground/stack.go
deleted file mode 100644
index 0f884f6..0000000
--- a/content/2014/playground/stack.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func foo(a [1000]byte) {
-	foo(a)
-}
-
-func main() {
-	foo([1000]byte{})
-}
diff --git a/content/2014/readability.slide b/content/2014/readability.slide
deleted file mode 100644
index bb6246a..0000000
--- a/content/2014/readability.slide
+++ /dev/null
@@ -1,383 +0,0 @@
-When in Go, do as Gophers do
-Go Conference 2014 autumn
-30 Nov 2014
-
-Fumitoshi Ukai
-Google Software Engineer - Chrome Infra team
-ukai@google.com
-https://plus.google.com/+FumitoshiUkai
-@fumitoshi_ukai
-
-* Go Readability Approver
-
-A team to review Go readability.
-
-- help to learn idiomatic Go though code review
-- review code of projects that are not main project of the reviewer
-
-- [[http://blogger.ukai.org/2013/12/code-readability.html][I joined the team about a year ago]] as 20% time, and reviewed ~200 CLs
-- For now, I'm reviewing at most 3 CLs per day, 12 CLs per week.
-
-.image readability/project.png
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]]
-
-* What is Readability skill?
-
-Literacy of a programming language.
-
-A skill to read or write *idiomatic* code.
-
-Each programming language has its own preferred style.
-In C++, each project chooses a preferred style.
-
-- [[http://google-styleguide.googlecode.com/svn/trunk/cppguide.html][google]] ([[http://www.chromium.org/developers/coding-style][chromium]]), [[https://www.webkit.org/coding/coding-style.html][webkit]] ([[http://www.chromium.org/blink/coding-style][blink]])
-
-Don't write Go code as you write code in C++/Java/Python.
-Write Go code as Gophers write code.
-
-* Go code should ...
-
-- be articulate, concise.
-- provide a simple API.
-- have precise comments.
-- be readable, top-down code.
-
-_"_Want_to_understand_something_in_google_servers?_Read_the_Go_implementation!_"_
-
-.caption by some Googler
-
-.image readability/pkg.png
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]]
-
-
-* Good tools
-
-[[https://golang.org/cmd/gofmt/][go fmt]] - format Go programs.
-[[https://godoc.org/golang.org/x/tools/cmd/vet][go vet]] - report suspicious code
-[[https://github.com/golang/lint][golint]] - report coding style errors.
-[[http://blog.golang.org/godoc-documenting-go-code][godoc]] - browse documenation
-
-# Go code is easy to read for tools too.
-
-* Tools are not enough
-
-# Developer doesn't read code the same as tools.
-# Programs(compiler, etc) will read code if its syntax is ok.
-# Tools are not enough, have false-positive/false-negative.
-# Needs human judgments.
-
-Readable code == easy to recognize, less burden for brain.
-Both writer and reader should have readability skills.
-Go is very simple ([[https://golang.org/ref/spec][lang spec]] is about 50 pages)
-
-.image readability/gophers5th.jpg
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]]
-
-* Readability Reviews
-
-- Any mistakes/bugs?
-- Layout?
-- Simple code flow?
-- Simple API?
-
-.image readability/gopher-ok-no.png
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]], and [[https://github.com/tenntenn/gopher-stickers/][tenntenn]]
-
-* mistakes/bugs
-
-* error check
-
-original code
-
-.code readability/err_regexp_bad.go
-
-revised
-
-.code readability/err_regexp_good.go
-
-- Check error with [[https://golang.org/pkg/regexp/#MustCompile][regexp.MustCompile]].
-- Must should be used only in [[http://golang.org/ref/spec#Package_initialization][initialization]] (package `var` or `init()`).
-
-- [[http://golang.org/ref/spec#String_literals][Raw string literal]] makes it easy to read regexp.
-
-* error check: original code
-
-.code readability/err_close_write_bad.go
-
-* error check: revised
-
-.code readability/err_close_write_good.go
-
-- Check error of Close for write.
-- No need to use defer, when it's simpler.
-
-* in-band error: original code
-
-.code readability/in-band-error-client.go
-
-.code readability/in-band-error.go
-
-* return value and error: revised
-
-.code readability/val-and-error.go
-
-[[http://golang.org/doc/effective_go.html#multiple-returns][Return error as error, not as some value]]
-
-* error design
-
-If client doesn't need to distinguish errors, e.g. ok with `err` `!=` `nil` check only.
-
-	fmt.Errorf("error in %s", val) or errors.New("error msg")
-
-If client wants to distinguish several errors by error code.
-
-	var (
-	  ErrInternal   = errors.New("foo: inetrnal error")
-	  ErrBadRequest = errors.New("foo: bad request")
-	)
-
-If you want to put detailed information in error.
-
-	type FooError struct { /* fields of error information */ }
-	func (e *FooError) Error() string { return /* error message */ }
-
-	&FooError{ /* set error data */ }
-
-Don't use `panic`.
-But when you do, use it only within the package, and [[http://golang.org/doc/effective_go.html#recover][return error with catching it by recover]].
-
-* nil error
-
-.code readability/nil_error.go
-
-[[https://golang.org/doc/faq#nil_error][FAQ: Why is my nil error value not equal to nil?]]
-
-[[http://blog.golang.org/laws-of-reflection][interface has 2 data]] (type and value). interface value is nil == both are nil.
-
-* embed interface: original code
-
-.code readability/implement-interface-bad.go
-
-- `scan.Writer` is an interface.
-- `ColumnWriter` will have methods of the `scan.Writer` interface (i.e. `ColumnWriter` implements the `scan.Writer` interface), but ...
-
-* check interface implementation: revised
-
-.code readability/implement-interface-good.go
-
-- The original author wanted to check `ColumnWriter` [[http://golang.org/doc/effective_go.html#blank_implements][implements]] the `scan.Writer` interface.
-
-* embed interface
-
-If a struct doesn't have a method of a interface explicitly, the interface is embedded in the struct, and you didn't set the interface field to a concrete value (i.e. the interface field value is nil), the method call will panic.
-
-.code readability/nil_interface_en.go
-
-It would be useful in a test when you want to implement only a subset of methods in the huge interface.
-
-* Readable layout
-
-* layout of fields in struct: original code
-
-.code readability/struct-field-bad.go
-
-* layout of fields in struct: revised
-
-.code readability/struct-field-good.go
-
-- Organize fields in groups, with blank lines between them.
-- Put [[https://golang.org/pkg/sync/#Mutex][sync.Mutex]] in top of a block of fields that the mutex protects.
-
-* Long line
-
-.code readability/long-line-fold.go
-
-* Merge into one line
-
-.code readability/long-line-nofold.go
-
-- [[https://golang.org/s/comments#Line_Length][No rigid line length limit]]
-- though, can't we make it shorter?
-
-* Choose concise names
-
-[[https://golang.org/s/comments#Variable_Names][Choose good name in the context]]
-
-- Long names are not always better than short names.
-
-Short and accurate names.
-
-- [[https://golang.org/s/comments#Package_Names][SamplingServer in sampling package is stutter]]. Name `Server`, which clients will write as `sampling.Server`.
-- Use [[https://golang.org/s/comments#Receiver_Names][one or two letters for receiver names]].
-- Use short names for parameters since type name will give some information.
-- Use descriptive names for basic types, though.
-- Use short names for local variables: prefer `i` to `index`, `r` to `reader`.
-- Short names should be fine if function is not long.
-
-* Revised one line version
-
-.code readability/long-line-short.go
-
-* top-down code
-
-* conditional branch
-
-- [[https://golang.org/s/comments#Indent_Error_Flow][Keep the normal code path at a minimal indentation.]]
-
-original code
-
-.code readability/if-else-bad.go
-
-revised
-
-.code readability/if-else-good.go
-
-* conditional branch (2): original code
-
-.code readability/resthandler.go
-
-* conditional branch (2): revised
-
-.code readability/resthandler-fix2.go
-
-- factor out function.
-
-* conditional branch (3): original code
-
-.code readability/if-switch-bad.go
-
-* conditional branch (3): revised
-
-.code readability/if-switch-good.go
-
-- use [[http://golang.org/ref/spec#Switch_statements][switch]]
-
-* Simpler code
-
-* time.Duration
-
-Use [[https://golang.org/pkg/time/#Duration][time.Duration]] ([[https://golang.org/pkg/flag/#Duration][flag.Duration]]) rather than `int` or `float` to represent time duration.
-
-original code
-
-.code readability/time_duration_bad.go
-.code readability/time_duration_bad1.go
-.code readability/time_duration_bad2.go
-
-revised
-
-.code readability/time_duration_good.go
-
-- Don't write unnecessary type conversion.
-- Since [[http://blog.golang.org/constants][const is untyped]], no need to convert 30 to `time.Duration`.
-- Don't write unnecessary comments.
-
-* sync.Mutex and sync.Cond: original code
-
-.code readability/close-cond-bad.go
-
-* chan: revised
-
-.code readability/close-cond-good.go
-
-- You could use [[http://golang.org/ref/spec#Channel_types][chan]], instead of [[https://golang.org/pkg/sync/#Mutex][sync.Mutex]] and [[https://golang.org/pkg/sync/#Cond][sync.Cond]].
-
-* reflect: original code
-
-.code readability/reflect-bad.go
-
-* without reflect: revised
-
-.code readability/reflect-good.go
-
-- Don't use [[https://golang.org/pkg/reflect/][reflect]], if you know the type at compilation time.
-
-* Test
-
-* Test code
-
-.code readability/test-pattern_en.go
-
-- [[https://golang.org/s/comments#Useful_Test_Failures][Have helpful test failure messages]]
-- Don't create yet-another assert function. Use existing programming language features.
-- Write [[https://golang.org/pkg/testing/#hdr-Examples][an example test]] rather than writing how to use API in a doc comment.
-
-.code readability/example_test.go
-
-* Comment
-
-* Comment
-
-[[https://golang.org/s/comments#Package_Comments][Write package comment.]]  Write command comment in main package.
-[[https://golang.org/s/comments#Doc_Comments][Write comments on exported names.]]
-[[https://golang.org/s/comments#Comment_Sentences][Doc comment should be a complete sentence that starts with the name being declared.]]
-
-	// Package math provides basic constants and mathematical functions.
-	package math
-
-	// A Request represents a request to run a command.
-	type Request struct { ..
-
-	// Encode writes the JSON encoding of req to w.
-	func Encode(w io.Writer, req *Request) {
-
-Browse with [[http://blog.golang.org/godoc-documenting-go-code][godoc]]
-
-	$ godoc bytes Buffer
-
-	$ godoc -http=:6060  # http://localhost:6060/pkg
-
-If you feel comments are unclear or hard to write concisely, reconsider your API design.
-
-* API design
-
-Important to choose a good package name.
-
-- e.g. package `util` is not good name, since most packages are utilities of something.
-# split it into smaller packages, or merge it in bigger package, or wrong package boundary.
-
-Make API simple.
-
-- [[http://golang.org/doc/effective_go.html#multiple-returns][Use multiple returns]]. Don't use pointers as output parameters.
-- Don't use pointer to slice, map, chan or interface.
-- [[http://golang.org/doc/effective_go.html#multiple-returns][Return error as error]]: [[https://golang.org/s/comments#Don't_Panic][don't panic]]
-- Implement common interfaces ([[https://golang.org/pkg/fmt/#Stringer][fmt.Stringer]], [[https://golang.org/pkg/io/#Reader][io.Reader]] and so on) if they match your code.
-- Use interfaces for parameters. They makes it easier to test. e.g.: If a function reads from a file, use [[https://golang.org/pkg/io/#Reader][io.Reader]] as a parameter instead of [[https://golang.org/pkg/os/#File][*os.File]].
-- Prefer synchronous API to async API: refrain from using chan across package boundary.
-- Clients can easily run synchronous API concurrently with goroutine and chan.
-
-* To write readable code
-
-* Code is communication
-
-Be articulate:
-
-- Choose good names.
-- Design simple APIs.
-- Write precise documentation.
-- Don't be too complicated.
-
-.image readability/talks.png
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]]
-
-* When you write code
-
-Keep in mind
-
-- Articulate, concise.
-- Provide simple API.
-- Have precise comment.
-- Readable, top-down code.
-
-* References
-
-- Effective Go: [[https://golang.org/doc/effective_go.html][https://golang.org/doc/effective_go.html]]
-- standard package:  [[https://golang.org/pkg/][https://golang.org/pkg/]]
-- Code Review Comments:  [[https://golang.org/s/comments][https://golang.org/s/comments]]
-
-- Go for gophers: [[http://talks.golang.org/2014/go4gophers.slide][http://talks.golang.org/2014/go4gophers.slide]]
-- What's in a name? [[http://talks.golang.org/2014/names.slide][http://talks.golang.org/2014/names.slide]]
-- Organizing Go code: [[http://talks.golang.org/2014/organizeio.slide][http://talks.golang.org/2014/organizeio.slide]]
-
-.image readability/ref.png
-.caption _Gopher_ by [[http://www.reneefrench.com][Renée French]]
diff --git a/content/2014/readability/close-cond-bad.go b/content/2014/readability/close-cond-bad.go
deleted file mode 100644
index b00b638..0000000
--- a/content/2014/readability/close-cond-bad.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-type Stream struct {
-	// some fields
-	isConnClosed     bool
-	connClosedCond   *sync.Cond
-	connClosedLocker sync.Mutex
-}
-
-func (s *Stream) Wait() error {
-	s.connClosedCond.L.Lock()
-	for !s.isConnClosed {
-		s.connClosedCond.Wait()
-	}
-	s.connClosedCond.L.Unlock()
-	// some code
-}
-func (s *Stream) Close() {
-	// some code
-	s.connClosedCond.L.Lock()
-	s.isConnClosed = true
-	s.connClosedCond.L.Unlock()
-	s.connClosedCond.Broadcast()
-}
-func (s *Stream) IsClosed() bool {
-	return s.isConnClosed
-}
diff --git a/content/2014/readability/close-cond-good.go b/content/2014/readability/close-cond-good.go
deleted file mode 100644
index 530e9b4..0000000
--- a/content/2014/readability/close-cond-good.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-type Stream struct {
-	// some fields
-	cc chan struct{} // HL
-}
-
-func (s *Stream) Wait() error {
-	<-s.cc
-	// some code
-}
-func (s *Stream) Close() {
-	// some code
-	close(s.cc)
-}
-func (s *Stream) IsClosed() bool {
-	select {
-	case <-s.cc:
-		return true
-	default:
-		return false
-	}
-}
diff --git a/content/2014/readability/err_close_write_bad.go b/content/2014/readability/err_close_write_bad.go
deleted file mode 100644
index 8de9497..0000000
--- a/content/2014/readability/err_close_write_bad.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func run() error {
-	in, err := os.Open(*input)
-	if err != nil {
-		return err
-	}
-	defer in.Close()
-
-	out, err := os.Create(*output)
-	if err != nil {
-		return err
-	}
-	defer out.Close() // HL
-	// some code
-}
diff --git a/content/2014/readability/err_close_write_good.go b/content/2014/readability/err_close_write_good.go
deleted file mode 100644
index 8a227ab..0000000
--- a/content/2014/readability/err_close_write_good.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func run() (err error) {
-	in, err := os.Open(*input)
-	if err != nil {
-		return err
-	}
-	defer in.Close()
-
-	out, err := os.Create(*output)
-	if err != nil {
-		return err
-	}
-	defer func() { // HL
-		if cerr := out.Close(); err == nil { // HL
-			err = cerr // HL
-		} // HL
-	}() // HL
-	// some code
-}
diff --git a/content/2014/readability/err_regexp_bad.go b/content/2014/readability/err_regexp_bad.go
deleted file mode 100644
index b640203..0000000
--- a/content/2014/readability/err_regexp_bad.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "regex" // OMIT
-
-var whitespaceRegex, _ = regexp.Compile("\\s+")
diff --git a/content/2014/readability/err_regexp_good.go b/content/2014/readability/err_regexp_good.go
deleted file mode 100644
index b68c5ff..0000000
--- a/content/2014/readability/err_regexp_good.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "regex" // OMIT
-
-var whitespaceRegex = regexp.MustCompile(`\s+`)
diff --git a/content/2014/readability/example_test.go b/content/2014/readability/example_test.go
deleted file mode 100644
index b6686f8..0000000
--- a/content/2014/readability/example_test.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package binary // OMIT
-
-func ExampleWrite() {
-	var buf bytes.Buffer
-	var pi float64 = math.Pi
-	err := binary.Write(&buf, binary.LittleEndian, pi)
-	if err != nil {
-		fmt.Println("binary.Write failed:", err)
-	}
-	fmt.Printf("% x", buf.Bytes())
-	// Output: 18 2d 44 54 fb 21 09 40
-}
diff --git a/content/2014/readability/gopher-ok-no.png b/content/2014/readability/gopher-ok-no.png
deleted file mode 100644
index 14f1168..0000000
--- a/content/2014/readability/gopher-ok-no.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/gophers5th.jpg b/content/2014/readability/gophers5th.jpg
deleted file mode 100644
index 9f50d8a..0000000
--- a/content/2014/readability/gophers5th.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/if-else-bad.go b/content/2014/readability/if-else-bad.go
deleted file mode 100644
index c5a2a71..0000000
--- a/content/2014/readability/if-else-bad.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func sample() { // OMIT
-	if _, ok := f.dirs[dir]; !ok { // HL
-		f.dirs[dir] = new(feedDir) // HL
-	} else {
-		f.addErr(fmt.Errorf("..."))
-		return
-	}
-	// some code
-} // OMIT
diff --git a/content/2014/readability/if-else-good.go b/content/2014/readability/if-else-good.go
deleted file mode 100644
index a033a00..0000000
--- a/content/2014/readability/if-else-good.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func sample() { // OMIT
-
-	if _, found := f.dirs[dir]; found { // HL
-		f.addErr(fmt.Errorf("..."))
-		return
-	}
-	f.dirs[dir] = new(feedDir) // HL
-	// some code
-} // OMIT
diff --git a/content/2014/readability/if-switch-bad.go b/content/2014/readability/if-switch-bad.go
deleted file mode 100644
index e0f9874..0000000
--- a/content/2014/readability/if-switch-bad.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func BrowserHeightBucket(s *session.Event) string {
-	browserSize := sizeFromSession(s)
-	if h := browserSize.GetHeight(); h > 0 { // HL
-		browserHeight := int(h)
-		if browserHeight <= 480 { // HL
-			return "small"
-		} else if browserHeight <= 640 { // HL
-			return "medium"
-		} else {
-			return "large"
-		}
-	} else {
-		return "null"
-	}
-}
diff --git a/content/2014/readability/if-switch-good.go b/content/2014/readability/if-switch-good.go
deleted file mode 100644
index cc20864..0000000
--- a/content/2014/readability/if-switch-good.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func BrowserHeightBucket(s *session.Event) string {
-	size := sizeFromSession(s)
-	h := size.GetHeight()
-	switch {
-	case h <= 0: // HL
-		return "null"
-	case h <= 480: // HL
-		return "small"
-	case h <= 640: // HL
-		return "medium"
-	default: // HL
-		return "large"
-	}
-}
diff --git a/content/2014/readability/implement-interface-bad.go b/content/2014/readability/implement-interface-bad.go
deleted file mode 100644
index c96f4c3..0000000
--- a/content/2014/readability/implement-interface-bad.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "scan" // OMIT
-
-// Column writer implements the scan.Writer interface.
-type ColumnWriter struct {
-	scan.Writer // HL
-	tmpDir      string
-	// some other fields
-}
diff --git a/content/2014/readability/implement-interface-good.go b/content/2014/readability/implement-interface-good.go
deleted file mode 100644
index 697ba95..0000000
--- a/content/2014/readability/implement-interface-good.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "scan" // OMIT
-
-// ColumnWriter is a writer to write ...
-type ColumnWriter struct {
-	tmpDir string
-	// some other fields
-}
-
-var _ scan.Writer = (*ColumnWriter)(nil) // HL
diff --git a/content/2014/readability/in-band-error-client.go b/content/2014/readability/in-band-error-client.go
deleted file mode 100644
index 0ae4590..0000000
--- a/content/2014/readability/in-band-error-client.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package client // OMIT
-
-func proc(it Iterator) (ret time.Duration) {
-	d := it.DurationAt()
-	if d == duration.Unterminated { // HL
-		ret = -1
-	} else {
-		ret = d
-	}
-	// some code
-}
diff --git a/content/2014/readability/in-band-error.go b/content/2014/readability/in-band-error.go
deleted file mode 100644
index cc8cb5e..0000000
--- a/content/2014/readability/in-band-error.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import ( // OMIT
-	"duration" // OMIT
-	"time"     // OMIT
-) // OMIT
-
-// duration.Unterminated = -1 * time.Second
-
-func (it Iterator) DurationAt() time.Duration {
-	// some code
-	switch durationUsec := m.GetDurationUsec(); durationUsec {
-	case -1:
-		return duration.Unterminated // HL
-	case -2:
-		return -2 // HL
-	default:
-		return time.Duration(durationUsec) * time.Microsecond // HL
-	}
-	return -3 // HL
-}
diff --git a/content/2014/readability/long-line-fold.go b/content/2014/readability/long-line-fold.go
deleted file mode 100644
index 324327a..0000000
--- a/content/2014/readability/long-line-fold.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore,OMIT
-
-package sampling
-
-import (
-	servicepb "foo/bar/service_proto"
-)
-
-type SamplingServer struct {
-	// some fields
-}
-
-func (server *SamplingServer) SampleMetrics( // HL
-	sampleRequest *servicepb.Request, sampleResponse *servicepb.Response, // HL
-	latency time.Duration) { // HL
-	// some code
-}
diff --git a/content/2014/readability/long-line-nofold.go b/content/2014/readability/long-line-nofold.go
deleted file mode 100644
index 0baec8b..0000000
--- a/content/2014/readability/long-line-nofold.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package sampling
-
-import (
-	servicepb "foo/bar/service_proto"
-)
-
-type SamplingServer struct {
-	// some fields
-}
-
-func (server *SamplingServer) SampleMetrics(sampleRequest *servicepb.Request, sampleResponse *servicepb.Response, latency time.Duration) { // HL
-	// some code
-}
diff --git a/content/2014/readability/long-line-short.go b/content/2014/readability/long-line-short.go
deleted file mode 100644
index 1b91da9..0000000
--- a/content/2014/readability/long-line-short.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package sampling
-
-import (
-	spb "foo/bar/service_proto"
-)
-
-type Server struct {
-	// some fields
-}
-
-func (s *Server) SampleMetrics(req *spb.Request, resp *spb.Response, latency time.Duration) { // HL
-	// some code
-}
diff --git a/content/2014/readability/nil_error.go b/content/2014/readability/nil_error.go
deleted file mode 100644
index 0ad26b7..0000000
--- a/content/2014/readability/nil_error.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main // OMIT
-
-import "log"
-
-type FooError struct{}
-
-func (e *FooError) Error() string { return "foo error" }
-
-func foo() error {
-	var ferr *FooError // ferr == nil // HL
-	return ferr
-}
-func main() {
-	err := foo()
-	if err != nil { // HL
-		log.Fatal(err)
-	}
-}
diff --git a/content/2014/readability/nil_interface_en.go b/content/2014/readability/nil_interface_en.go
deleted file mode 100644
index 8969e88..0000000
--- a/content/2014/readability/nil_interface_en.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main // OMIT
-
-import "fmt"
-
-type I interface {
-	Key() string
-	Value() string
-}
-type S struct{ I }      // S has method sets of I.
-func (s S) Key() string { return "type S" }
-
-func main() {
-	var s S
-	fmt.Println("key", s.Key())
-	fmt.Println(s.Value()) // runtime error: invalid memory address or nil pointer deference  // HL
-}
diff --git a/content/2014/readability/pkg.png b/content/2014/readability/pkg.png
deleted file mode 100644
index ac96551..0000000
--- a/content/2014/readability/pkg.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/project.png b/content/2014/readability/project.png
deleted file mode 100644
index 24603f3..0000000
--- a/content/2014/readability/project.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/ref.png b/content/2014/readability/ref.png
deleted file mode 100644
index 0508f6e..0000000
--- a/content/2014/readability/ref.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/reflect-bad.go b/content/2014/readability/reflect-bad.go
deleted file mode 100644
index adbc01a..0000000
--- a/content/2014/readability/reflect-bad.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-type Layers struct {
-	UI, Launch /* more fields */ string
-}
-
-func sample() { // OMIT
-	layers := NewLayers(s.Entries)
-	v := reflect.ValueOf(*layers) // HL
-	r := v.Type()                 // type Layers  // HL
-	for i := 0; i < r.NumField(); i++ {
-		if e := v.Field(i).String(); e != "-" {
-			eid := &pb.ExperimentId{
-				Layer:        proto.String(r.Field(i).Name()),
-				ExperimentId: &e,
-			}
-			experimentIDs = append(experimentIDs, eid)
-		}
-	}
-} // OMIT
diff --git a/content/2014/readability/reflect-good.go b/content/2014/readability/reflect-good.go
deleted file mode 100644
index 55a6d92..0000000
--- a/content/2014/readability/reflect-good.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-type LayerExperiment struct{ Layer, Experiment string } // HL
-
-func (t *Layers) Slice() []LayerExperiment { // HL
-	return []LayerExperiment{
-		{"UI", t.UI},
-		{"Launch", t.Launch},
-		/* more fields */
-	}
-}
-
-func sample() { // OMIT
-	layers := NewLayers(s.Entries).Slice() // HL
-	for _, l := range layers {
-		if l.Experiment != "-" {
-			eid := &pb.ExperimentId{
-				Layer:        proto.String(l.Layer),
-				ExperimentId: proto.String(l.Experiment),
-			}
-			experimentIDs = append(experimentIDs, eid)
-		}
-	}
-} // OMIT
diff --git a/content/2014/readability/resthandler-fix2.go b/content/2014/readability/resthandler-fix2.go
deleted file mode 100644
index 2f26b35..0000000
--- a/content/2014/readability/resthandler-fix2.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package resthandler // OMIT
-
-func finishStatus(r Result, complete bool) int {
-	if !complete {
-		return http.StatusAccepted // HL
-	}
-	if stat, ok := r.Object.(*api.Status); ok && stat.Code != 0 {
-		return stat.Code // HL
-	}
-	if r.Created {
-		return http.StatusCreated // HL
-	}
-	return http.StatusOK // HL
-}
-
-func (h *RESTHandler) finishReq(op *Operation, w http.ResponseWriter, req *http.Request) {
-	result, complete := op.StatusOrResult()
-	status := finishStatus(result, complete)     // HL
-	writeJSON(status, h.codec, result.Object, w) // HL
-}
diff --git a/content/2014/readability/resthandler.go b/content/2014/readability/resthandler.go
deleted file mode 100644
index d5c790a..0000000
--- a/content/2014/readability/resthandler.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package resthandler // OMIT
-
-func (h *RESTHandler) finishReq(op *Operation, req *http.Request, w http.ResponseWriter) {
-	result, complete := op.StatusOrResult()
-	obj := result.Object
-	if complete {
-		status := http.StatusOK // HL
-		if result.Created {
-			status = http.StatusCreated // HL
-		}
-		switch stat := obj.(type) {
-		case *api.Status:
-			if stat.Code != 0 {
-				status = stat.Code // HL
-			}
-		}
-		writeJSON(status, h.codec, obj, w) // HL
-	} else {
-		writeJSON(http.StatusAccepted, h.codec, obj, w) // HL
-	}
-}
diff --git a/content/2014/readability/struct-field-bad.go b/content/2014/readability/struct-field-bad.go
deleted file mode 100644
index c3afe11..0000000
--- a/content/2014/readability/struct-field-bad.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-type Modifier struct {
-	pmod   *profile.Modifier
-	cache  map[string]time.Time
-	client *client.Client
-	mu     sync.RWMutex // HL
-}
diff --git a/content/2014/readability/struct-field-good.go b/content/2014/readability/struct-field-good.go
deleted file mode 100644
index 9774716..0000000
--- a/content/2014/readability/struct-field-good.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-type Modifier struct {
-	client *client.Client
-
-	mu    sync.RWMutex // HL
-	pmod  *profile.Modifier
-	cache map[string]time.Time
-}
diff --git a/content/2014/readability/talks.png b/content/2014/readability/talks.png
deleted file mode 100644
index 589db47..0000000
--- a/content/2014/readability/talks.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/readability/test-pattern_en.go b/content/2014/readability/test-pattern_en.go
deleted file mode 100644
index 6312e09..0000000
--- a/content/2014/readability/test-pattern_en.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-func TestSample(t *testing.T) { // OMIT
-	// Typical test code
-	if got, want := testTargetFunc(input), expectedValue; !checkTestResult(got, want) {
-		t.Errorf("testTargetFunc(%v) = %v; want %v", input, got, want)
-	}
-} // OMIT
diff --git a/content/2014/readability/time_duration_bad.go b/content/2014/readability/time_duration_bad.go
deleted file mode 100644
index afa1d5e..0000000
--- a/content/2014/readability/time_duration_bad.go
+++ /dev/null
@@ -1,5 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-var rpcTimeoutSecs = 30 // Thirty seconds  // HL
diff --git a/content/2014/readability/time_duration_bad1.go b/content/2014/readability/time_duration_bad1.go
deleted file mode 100644
index e78f819..0000000
--- a/content/2014/readability/time_duration_bad1.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "time" // OMIT
-
-var rpcTimeout = time.Duration(30 * time.Second) // Thirty seconds  // HL
diff --git a/content/2014/readability/time_duration_bad2.go b/content/2014/readability/time_duration_bad2.go
deleted file mode 100644
index a185385..0000000
--- a/content/2014/readability/time_duration_bad2.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "time" // OMIT
-
-var rpcTimeout = time.Duration(30) * time.Second // Thirty seconds  // HL
diff --git a/content/2014/readability/time_duration_good.go b/content/2014/readability/time_duration_good.go
deleted file mode 100644
index 6af1e5d..0000000
--- a/content/2014/readability/time_duration_good.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import "time" // OMIT
-
-var rpcTimeout = 30 * time.Second // HL
diff --git a/content/2014/readability/val-and-error.go b/content/2014/readability/val-and-error.go
deleted file mode 100644
index ae6aeb7..0000000
--- a/content/2014/readability/val-and-error.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// +build ignore,OMIT
-
-package sample // OMIT
-
-import ( // OMIT
-	"errors" // OMIT
-	"time"   // OMIT
-) // OMIT
-
-var (
-	ErrDurationUnterminated = errors.new("duration: unterminated")
-	ErrNoDuration           = errors.New("duration: not found")
-	ErrNoIteration          = errors.New("duration: not interation")
-)
-
-func (it Iterator) DurationAt() (time.Duration, error) { // HL
-	// some code
-	switch durationUsec := m.GetDurationUsec(); durationUsec {
-	case -1:
-		return 0, ErrDurationUnterminated // HL
-	case -2:
-		return 0, ErrNoDuration // HL
-	default:
-		return time.Duation(durationUsec) * time.Microsecond, nil // HL
-	}
-	return 0, ErrNoIteration // HL
-}
diff --git a/content/2014/research.slide b/content/2014/research.slide
deleted file mode 100644
index 4498d7c..0000000
--- a/content/2014/research.slide
+++ /dev/null
@@ -1,323 +0,0 @@
-The Research Problems of Implementing Go
-
-Russ Cox
-Google
-
-http://golang.org/
-
-* About the Talk
-
-I gave this talk at Google's Cambridge, Massachusetts office at an event for area Ph.D. students. The purpose of the event and the talk was to give a sense of some of the research that goes on at Google. The talk presents some research questions motivated by Go. We have answered some well, but others remain open.
-
-* About Go
-
-Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
-
-Design began in late 2007.
-
-- Robert Griesemer, Rob Pike, Ken Thompson
-- Russ Cox, Ian Lance Taylor
-
-Became open source in November 2009.
-
-Developed entirely in the open; very active community.
-Language stable as of Go 1, early 2012.
-Work continues.
-
-* Motivation for Go
-
-.image ../2012/splash/datacenter.jpg
-
-* Motivation for Go
-
-Started as an answer to software problems at Google:
-
-- multicore processors
-- networked systems
-- massive computation clusters
-- scale: 10⁷ lines of code
-- scale: 10³ programmers
-- scale: 10⁶⁺ machines (design point)
-
-Deployed: parts of YouTube, dl.google.com, Blogger, Google Code, Google Fiber, ...
-
-* Go
-
-A simple but powerful and fun language.
-
-- start with C, remove complex parts
-- add interfaces, concurrency
-- also: garbage collection, closures, reflection, strings, ...
-
-For more background on design:
-
-- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more]]
-- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]
-
-* Research and Go
-
-Go is designed for building production systems at Google.
-
-- Goal: make that job easier, faster, better.
-- Non-goal: break new ground in programming language research
-
-Plenty of research questions about how to implement Go well.
-
-- Concurrency
-- Polymorphism
-- Garbage collection
-- Program translation
-
-* Concurrency
-
-* Concurrency
-
-Go provides two important concepts:
-
-A goroutine is a thread of control within the program, with its own local variables and stack. Cheap, easy to create.
-
-A channel carries typed messages between goroutines.
-
-* Concurrency
-
-.play ../2013/distsys/hello.go
-
-* Concurrency: CSP
-
-Channels adopted from Hoare's Communicating Sequential Processes.
-
-- Orthogonal to rest of language
-- Can keep familiar model for computation
-- Focus on _composition_ of regular code
-
-Go _enables_ simple, safe concurrent programming.
-It doesn't _forbid_ bad programming.
-
-Caveat: not purely memory safe; sharing is legal.
-Passing a pointer over a channel is idiomatic.
-
-Experience shows this is practical.
-
-* Concurrency
-
-Sequential network address resolution, given a work list:
-
-.play ../2013/distsys/addr1.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Parallel network address resolution, given a work list:
-
-.play ../2013/distsys/addr2.go /lookup/+1,/^}/-1
-
-* Implementing Concurrency
-
-Challenge: Make channel communication scale
-
-- start with one global channel lock
-- per-channel locks, locked in address order for multi-channel operations
-
-Research question: lock-free channels?
-
-* Polymorphism
-
-* Interfaces
-
-An interface defines a set of methods.
-
-	package io
-	
-	type Writer interface {
-		Write(data []byte) (n int, err error)
-	}
-
-* Interfaces
-
-A type implements the interface by implementing the methods.
-
-	package bytes
-	
-	type Buffer struct {
-		...
-	}
-	
-	func (b *Buffer) Write(data []byte) (n int, err error) {
-		...
-	}
-
-* Interfaces
-
-An implementation of an interface can be assigned to a variable of that interface type.
-
-	package fmt
-	
-	func Fprintf(w io.Writer, format string, args ...interface{})
-
-* Interfaces
-
-.play ../2013/distsys/writebuffer.go /^func.main/+1,/^}/-1
-
-* Interface Advantages
-
-- no dependence between interface and implementation
-- easy testing
-- avoids overdesign, rigid hierarchy of inheritance-based OO
-
-The source of all generality in the Go language.
-
-* Implementing Interfaces
-
-How do you make method dispatch efficient?
-
-	b := new(bytes.Buffer)
-	var w io.Writer
-	w = b
-	fmt.Fprintf(w, "hello, %s\n", "world")
-		... w.Write(text) // what happens here?
-
-At w.Write call, how does the runtime find the method to call?
-
-* Implementing Interfaces
-
-How do you make method dispatch efficient?
-
-	b := new(bytes.Buffer)
-	var w io.Writer
-	w = b                 // do the work here!
-	fmt.Fprintf(w, "hello, %s\n", "world")
-		... w.Write(text) // plain indirect function call
-
-Interface holds two words: "itable" and actual value (or pointer to value).
-
-Itable contains type information plus list of function pointers for methods in interface.
-
-	w.itable.fn[1](w.data, text)
-
-Conversion sites usually trivial to cache.
-
-* Interfaces for Algorithms
-
-	package sort
-	
-	type Interface interface {
-		Len() int           // return number of elements, len(x)
-		Less(i, j int) bool // report whether x[i] < x[j]
-		Swap(i, j int)      // x[i], x[j] = x[j], x[i]
-	}
-	
-	func Sort(data Interface)
-
-Requires some boilerplate for each use:
-
-	type bySubject []Thread
-	
-	func (x bySubject) Less(i, j int) bool { return x[i].Subject < x[j].Subject }
-	func (x bySubject) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
-	func (x bySubject) Len() int           { return len(x) }
-
-	sort.Sort(bySubject(threads))
-
-* Polymorphism: Can we do better?
-
-	func Sort(data []T, less func(x, y *T) bool)
-
-	sort.Sort(threads, func(x, y *Thread) bool {
-		return x.Subject < y.Subject
-	})
-	
-Research question: what's a reasonable semantics?
-Research question: what's a reasonable implementation?
-
-- C says don't bother.
-- C++ makes many copies of the same function.
-- Java boxes everything implicitly: one function, but expensive data model.
-- Java discards run-time type information.
-
-Do you want slow programmers, slow compilers and bloated binaries, or slow execution?
-
-* Garbage Collection
-
-* Garbage Collection
-
-Garbage collection simplifies APIs.
-
-- In C and C++, too much API design (and too much programming effort!) is about memory management.
-
-Fundamental to concurrency: too hard to track ownership otherwise.
-
-Fundamental to interfaces: memory management details do not bifurcate otherwise-similar APIs.
-
-Of course, adds cost, latency, complexity in run time system.
-
-* Avoiding Garbage Collection
-
-Observation: garbage collection is a service, and like any service it can be overloaded, oversubscribed.
-
-Go lets you limit allocation by controlling memory layout.
-
-	type Point struct {
-		X, Y int
-	}
-	
-	type Rectangle struct {
-		Min, Max Point
-	}
-
-* Implementing Garbage Collection
-
-Language decision: interior pointers are allowed, as are foreign pointers
-
-- Cannot reuse Java GC algorithms directly.
-- But gives _programmer_ more control over allocation.
-
-Allocator: objects are allocated in pages with other objects of the same size.
-
-Current GC: stop the world, parallel mark, start the world, background sweep.
-
-Research question: how to make collector lower latency, possibly incremental?
-
-* Program Translation
-
-* Program Translation
-
-Go programs can be parsed without context (unlike C and C++).
-Go ships with a standard program formatter.
-
-Makes automated edits indistinguishable from manual edits.
-
-	$ cat x.go
-	package main
-	
-	var b bytes.Buffer
-	
-	$ gofmt -r 'bytes.Buffer -> bytes.Writer' x.go
-	package main
-	
-	var b bytes.Writer
-	
-	$ 
-
-More advanced rewrites: "go fix" for API adjustments.
-
-* Program Translation
-
-Research Question: What about translating other programs to Go?
-
-Exploring the conversion of C programs to Go today.
-
-- Decide return type (for example, int vs bool).
-- Decide which variables are pointers vs arrays.
-- Decide which functions are really methods.
-- Decide natural package boundaries.
-
-What about other languages?
-
-* Research and Go
-
-Plenty of research questions about how to implement Go well.
-
-- Concurrency
-- Polymorphism
-- Garbage collection
-- Program translation
-
diff --git a/content/2014/research2.slide b/content/2014/research2.slide
deleted file mode 100644
index b947170..0000000
--- a/content/2014/research2.slide
+++ /dev/null
@@ -1,440 +0,0 @@
-More Research Problems of Implementing Go
-
-Dmitry Vyukov
-Google
-
-http://golang.org/
-
-* About Go
-
-Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
-
-Design began in late 2007.
-
-- Robert Griesemer, Rob Pike, Ken Thompson
-- Russ Cox, Ian Lance Taylor
-
-Became open source in November 2009.
-
-Developed entirely in the open; very active community.
-Language stable as of Go 1, early 2012.
-Work continues.
-
-* Motivation for Go
-
-.image research2/datacenter.jpg
-
-* Motivation for Go
-
-Started as an answer to software problems at Google:
-
-- multicore processors
-- networked systems
-- massive computation clusters
-- scale: 10⁷⁺ lines of code
-- scale: 10³⁺ programmers
-- scale: 10⁶⁺ machines (design point)
-
-Deployed: parts of YouTube, dl.google.com, Blogger, Google Code, Google Fiber, ...
-
-* Go
-
-A simple but powerful and fun language.
-
-- start with C, remove complex parts
-- add interfaces, concurrency
-- also: garbage collection, closures, reflection, strings, ...
-
-For more background on design:
-
-- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more]]
-- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]
-
-* Research and Go
-
-Go is designed for building production systems at Google.
-
-- Goal: make that job easier, faster, better.
-- Non-goal: break new ground in programming language research
-
-Plenty of research questions about how to implement Go well.
-
-- Concurrency
-- Scheduling
-- Garbage collection
-- Race and deadlock detection
-- Testing of the implementation
-
-
-
-
-* Concurrency
-
-.image research2/busy.jpg
-
-* Concurrency
-
-Go provides two important concepts:
-
-A goroutine is a thread of control within the program, with its own local variables and stack. Cheap, easy to create.
-
-A channel carries typed messages between goroutines.
-
-* Concurrency
-
-.play research2/hello.go
-
-* Concurrency: CSP
-
-Channels adopted from Hoare's Communicating Sequential Processes.
-
-- Orthogonal to rest of language
-- Can keep familiar model for computation
-- Focus on _composition_ of regular code
-
-Go _enables_ simple, safe concurrent programming.
-It doesn't _forbid_ bad programming.
-
-Caveat: not purely memory safe; sharing is legal.
-Passing a pointer over a channel is idiomatic.
-
-Experience shows this is practical.
-
-* Concurrency
-
-Sequential network address resolution, given a work list:
-
-.play research2/addr1.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Concurrent network address resolution, given a work list:
-
-.play research2/addr2.go /lookup/+1,/^}/-1
-
-* Concurrency
-
-Select statements: switch for communication.
-
-.play research2/select.go /select/,/^}/-1
-
-That's select that makes efficient implementation difficult.
-
-* Implementing Concurrency
-
-Challenge: Make channel communication scale
-
-- start with one global channel lock
-- per-channel locks, locked in address order for multi-channel operations
-
-Research question: lock-free channels?
-
-
-
-
-* Scheduling
-
-.image research2/gophercomplex6.jpg
-
-* Scheduling
-
-On the one hand we have arbitrary user programs:
-
-- fine-grained goroutines, coarse-grained goroutines or a mix of both
-- computational goroutines, IO-bound goroutines or a mix of both
-- arbitrary dynamic communication patterns
-- busy, idle, bursty programs
-
-No user hints!
-
-* Scheduling
-
-On the other hand we have complex hardware topology:
-
-- per-core caches
-- caches shared between cores
-- cores shared between hyper threads (HT)
-- multiple processors with non-uniform memory access (NUMA)
-
-* Scheduling
-
-Challenge: make it all magically work efficiently
-
-- start with one global lock for all scheduler state
-- distributed work-stealing scheduler with per-"processor" state
-- integrated network poller into scheduler
-- lock-free work queues
-
-* Scheduling
-
-Current scheduler:
-
- ┌─┐         ┌─┐         ┌─┐         ┌─┐                  ┌─┐
- │ │         │ │         │ │         │ │                  │ │
- ├─┤         ├─┤         ├─┤         ├─┤                  ├─┤ Global
- │ │         │G│         │ │         │ │                  │ │ state
- ├─┤         ├─┤         ├─┤         ├─┤                  ├─┤
- │G│         │G│         │G│         │ │                  │G│
- ├─┤         ├─┤         ├─┤         ├─┤                  ├─┤
- │G│         │G│         │G│         │G│                  │G│
- └┬┘         └┬┘         └┬┘         └┬┘                  └─┘
-  │           │           │           │
-  ↓           ↓           ↓           ↓
- ┌─┬──────┐  ┌─┬──────┐  ┌─┬──────┐  ┌─┬──────┐     ┌────┐┌──────┐┌───────┐
- │P│mcache│  │P│mcache│  │P│mcache│  │P│mcache│     │heap││timers││netpoll│
- └┬┴──────┘  └┬┴──────┘  └┬┴──────┘  └┬┴──────┘     └────┘└──────┘└───────┘
-  │           │           │           │
-  ↓           ↓           ↓           ↓
- ┌─┐         ┌─┐         ┌─┐         ┌─┐               ┌─┐ ┌─┐ ┌─┐
- │M│         │M│         │M│         │M│               │M│ │M│ │M│
- └─┘         └─┘         └─┘         └─┘               └─┘ └─┘ └─┘
-
-G - goroutine; P - logical processor; M - OS thread (machine)
-
-* Scheduling
-
-Want:
-
-- temporal locality to exploit caches
-- spatial locality to exploit NUMA
-- schedule mostly LIFO but ensure weak fairness
-- allocate local memory and stacks
-- scan local memory in GC
-- collocate communicating goroutines
-- distribute non-communicating goroutines
-- distribute timers and network poller
-- poll network on the same core where last read was issued
-
-
-
-
-
-* Garbage Collection
-
-* Garbage Collection
-
-Garbage collection simplifies APIs.
-
-- In C and C++, too much API design (and too much programming effort!) is about memory management.
-
-Fundamental to concurrency: too hard to track ownership otherwise.
-
-Fundamental to interfaces: memory management details do not bifurcate otherwise-similar APIs.
-
-Of course, adds cost, latency, complexity in run time system.
-
-* Garbage Collection
-
-Plenty of research about garbage collection, mostly in Java context.
-
-- Parallel stop-the-world
-- CMS: concurrent mark-and-sweep, stop-the-world compaction
-- G1: region-based incremental copying collector
-
-Java collectors usually:
-
-- are generational/incremental because allocation rate is high
-- compact memory to support generations
-- have pauses because concurrent compaction is tricky and slow
-
-* Garbage Collection
-
-But Go is very different!
-
-- User can avoid lots of allocations by embedding objects:
-
-	type Point struct {
-		X, Y int
-	}
-	type Rectangle struct {
-		Min, Max Point
-	}
-
-- Less pointers.
-- Lots of stack allocations.
-- Interior pointers are allowed:
-
-	p := &rect.Max
-
-- Hundreds of thousands of stacks (goroutines)
-- No object headers so far
-
-* Implementing Garbage Collection
-
-Current GC: stop the world, parallel mark, start the world, concurrent sweep.
-Concurrent mark is almost ready.
-
-Cannot reuse Java GC algorithms directly.
-
-Research question: what GC algorithm is the best fit for Go?
-Do we need generations? Do we need compaction? What are efficient data structures that support interior pointers?
-
-
-
-
-* Race and deadlock detection
-
-.image research2/race.png 160 600
-
-* Race detection
-
-Based on ThreadSanitizer runtime, originally mainly targeted C/C++.
-Traditional happens-before race detector based on vector clocks (devil in details!).
-Works fine for Go, except:
-
- $ go run -race lots_of_goroutines.go
- race: limit on 8192 simultaneously alive goroutines is exceeded, dying
-
-Research question: race dectector that efficiently supports hundreds of thousands of goroutines?
-
-* Deadlock detection
-
-Deadlock on mutexes due to lock order inversion:
-
- // thread 1                       // thread 2
- pthread_mutex_lock(&m1);          pthread_mutex_lock(&m2);
- pthread_mutex_lock(&m2);          pthread_mutex_lock(&m1);
- ...                               ...
- pthread_mutex_unlock(&m2);        pthread_mutex_unlock(&m1);
- pthread_mutex_unlock(&m1);        pthread_mutex_unlock(&m2);
-
-Lock order inversions are easy to detect:
-
-- build "M1 is locked under M2" relation.
-- if it becomes cyclic, there is a potential deadlock.
-- whenever a new edge is added to the graph, do DFS to find cycles.
-
-* Deadlock detection
-
-Go has channels and mutexes. Channels are semaphores. A mutex can be unlocked in
-a different goroutine, so it is essentially a binary semaphore too.
-
-Deadlock example:
-
-	// Parallel file tree walk.
-	func worker(pendingItems chan os.FileInfo)
-		for f := range pendingItems {
-			if f.IsDir() {
-				filepath.Walk(f.Name(), func(path string, info os.FileInfo, err error) error {
-					pendingItems <- info
-				})
-			} else {
-				visit(f)
-			}
-		}
-	}
-
-pendingItems channel has limited capacity. All workers can block on send to pendingItems.
-
-* Deadlock detection
-
-Another deadlock example:
-
- var (
- 	c = make(chan T, 100)
- 	mtx sync.RWMutex
-  )
- 
- // goroutine 1      // goroutine 2         // goroutine 3
- // does send        // does receive        // "resizes" the channel
- mtx.RLock()         mtx.RLock()            mtx.Lock()
- c <- v              v := <-c               tmp := make(chan T, 200)
- mtx.RUnlock()       mtx.RUnlock()          copyAll(c, tmp)
-                                            c = tmp
-                                            mtx.Unlock()
-
-RWMutex is fair for both readers and writers: when a writer arrives, new readers are not let to enter the critical section.
-Goroutine 1 blocks on chan send; then goroutine 3 blocks on mtx.Lock; then goroutine 2 blocks on mtx.RLock.
-
-* Deadlock detection
-
-Research question: how to detect deadlocks on semaphores?
-
-No known theory to date.
-
-
-
-
-* Testing of the implementation
-
-.image research2/gopherswrench.jpg 240 405
-
-* Testing of the implementation
-
-So now we have a new language with several complex implementations:
-
-- lexer
-- parser
-- transformation and optimization passes
-- code generation
-- linker
-- channel and map operations
-- garbage collector
-- ...
-
-*How*do*you*test*it?*
-
-* Testing of the implementation
-
-Csmith is a tool that generates random C programs that statically and dynamically conform to the C99 standard.
-
-.image research2/csmith.png
-
-* Testing of the implementation
-
-Gosmith is a tool that generates random Go programs that statically and dynamically conform to the Go standard.
-
-Turned out to be much simpler than C: no undefined behavior all around!
-
-- no unitialized variables
-- no concurrent mutations between sequence points (x[i++] = --i)
-- no UB during signed overflow
-- total 191 kinds of undefined behavior and 52 kinds of unspecified behavior in C
-
-* Testing of the implementation
-
-But generates uninteresting programs from execution point of view: most of them deadlock or crash on nil deref.
-
-Trophies:
-
-- 31 bugs in gc compiler
-- 18 bugs in gccgo compiler
-- 5 bugs in llgo compiler
-- 1 bug in gofmt
-- 3 bugs in the spec
-
-.image research2/emoji.png
-
-* Testing of the implementation
-
-Research question: how to generate random *interesting*concurrent* Go programs?
-
-Must:
-
-- create and wait for goroutines
-- communicate over channels
-- protect data with mutexes (reader-writer)
-- pass data ownership between goroutines (explicitly and implicitly)
-
-Must not:
-
-- deadlock
-- cause data races
-- have non-deterministic results
-
-
-
-
-
-* Research and Go
-
-Plenty of research questions about how to implement Go well.
-
-- Concurrency
-- Scheduling
-- Garbage collection
-- Race and deadlock detection
-- Testing of the implementation
-- [Polymorphism]
-- [Program translation]
-
diff --git a/content/2014/research2/addr1.go b/content/2014/research2/addr1.go
deleted file mode 100644
index e8cea40..0000000
--- a/content/2014/research2/addr1.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	for _, w := range worklist {
-		w.addrs, w.err = LookupHost(w.host)
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2014/research2/addr2.go b/content/2014/research2/addr2.go
deleted file mode 100644
index 3475997..0000000
--- a/content/2014/research2/addr2.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-func lookup() {
-	done := make(chan bool)
-
-	for _, w := range worklist {
-		go func(w *Work) {
-			w.addrs, w.err = LookupHost(w.host)
-			done <- true
-		}(w)
-	}
-
-	for range worklist {
-		<-done
-	}
-}
-
-func main() {
-	rand.Seed(time.Now().UnixNano())
-
-	t0 := time.Now()
-	lookup()
-
-	fmt.Printf("\n")
-	for _, w := range worklist {
-		if w.err != nil {
-			fmt.Printf("%s: error: %v\n", w.host, w.err)
-			continue
-		}
-		fmt.Printf("%s: %v\n", w.host, w.addrs)
-	}
-	fmt.Printf("total lookup time: %.3f seconds\n", time.Since(t0).Seconds())
-}
-
-var worklist = []*Work{
-	{host: "fast.com"},
-	{host: "slow.com"},
-	{host: "fast.missing.com"},
-	{host: "slow.missing.com"},
-}
-
-type Work struct {
-	host  string
-	addrs []string
-	err   error
-}
-
-func LookupHost(name string) (addrs []string, err error) {
-	t0 := time.Now()
-	defer func() {
-		fmt.Printf("lookup %s: %.3f seconds\n", name, time.Since(t0).Seconds())
-	}()
-	h := hosts[name]
-	if h == nil {
-		h = failure
-	}
-	return h(name)
-}
-
-type resolver func(string) ([]string, error)
-
-var hosts = map[string]resolver{
-	"fast.com":         delay(10*time.Millisecond, fixedAddrs("10.0.0.1")),
-	"slow.com":         delay(2*time.Second, fixedAddrs("10.0.0.4")),
-	"fast.missing.com": delay(10*time.Millisecond, failure),
-	"slow.missing.com": delay(2*time.Second, failure),
-}
-
-func fixedAddrs(addrs ...string) resolver {
-	return func(string) ([]string, error) {
-		return addrs, nil
-	}
-}
-
-func delay(d time.Duration, f resolver) resolver {
-	return func(name string) ([]string, error) {
-		time.Sleep(d/2 + time.Duration(rand.Int63n(int64(d/2))))
-		return f(name)
-	}
-}
-
-func failure(name string) ([]string, error) {
-	return nil, fmt.Errorf("unknown host %v", name)
-}
diff --git a/content/2014/research2/busy.jpg b/content/2014/research2/busy.jpg
deleted file mode 100644
index 35ce9f4..0000000
--- a/content/2014/research2/busy.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/csmith.png b/content/2014/research2/csmith.png
deleted file mode 100644
index 6f2e3d7..0000000
--- a/content/2014/research2/csmith.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/datacenter.jpg b/content/2014/research2/datacenter.jpg
deleted file mode 100644
index c2de0f3..0000000
--- a/content/2014/research2/datacenter.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/emoji.png b/content/2014/research2/emoji.png
deleted file mode 100644
index aae97c0..0000000
--- a/content/2014/research2/emoji.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/gophercomplex6.jpg b/content/2014/research2/gophercomplex6.jpg
deleted file mode 100644
index 7963c1b..0000000
--- a/content/2014/research2/gophercomplex6.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/gopherswrench.jpg b/content/2014/research2/gopherswrench.jpg
deleted file mode 100644
index 690fdb0..0000000
--- a/content/2014/research2/gopherswrench.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/hello.go b/content/2014/research2/hello.go
deleted file mode 100644
index 32efb51..0000000
--- a/content/2014/research2/hello.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	c := make(chan string)
-	go func() {
-		c <- "Hello"
-		c <- "World"
-	}()
-	fmt.Println(<-c, <-c)
-}
diff --git a/content/2014/research2/race.png b/content/2014/research2/race.png
deleted file mode 100644
index 8934a64..0000000
--- a/content/2014/research2/race.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/research2/select.go b/content/2014/research2/select.go
deleted file mode 100644
index ae1084b..0000000
--- a/content/2014/research2/select.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	c1 := make(chan int, 1)
-	c2 := make(chan int, 1)
-	c1 <- 42
-
-	select {
-	case v := <-c1:
-		fmt.Println("received from c1: ", v)
-	case c2 <- 1:
-		fmt.Println("sent to c2")
-	case <-time.After(time.Second):
-		fmt.Println("timed out")
-	default:
-		fmt.Println("nothing ready at the moment")
-	}
-}
diff --git a/content/2014/state-of-go.slide b/content/2014/state-of-go.slide
deleted file mode 100644
index e8f78d2..0000000
--- a/content/2014/state-of-go.slide
+++ /dev/null
@@ -1,294 +0,0 @@
-The State of Go
-Where we are in June 2014
-
-Andrew Gerrand
-
-* Yesterday
-
-
-* Initial reception
-
-Looking back on the first months.
-
-
-* Complaints
-
-The complaints started right away…
-
-.image state-of-go/msg-wrong.png _ 600
-
-.image state-of-go/msg-lacks.png _ 600
-
-
-* Familiar complaints
-
-.image state-of-go/msg-generics.png _ 600
-
-.image state-of-go/msg-type.png _ 600
-
-.image state-of-go/msg-exceptions1b.png _ 600
-
-
-* Familiar complaints
-
-.image state-of-go/indent.png 500 _
-
-The first HN thread about Go was mostly an argument about braces and indentation.
-
-
-* Historic moments
-
-The first public language change (Dec 10, 2009):
-
-.image state-of-go/msg-semi.png _ 400
-
-
-* The gopher
-
-.image state-of-go/msg-logo1.png _ 800
-
-.image state-of-go/sadgopher.png _ 250
-
-
-* The gopher
-
-.image state-of-go/msg-logo2.png _ 800
-
-
-* The gopher
-
-.image state-of-go/msg-logo3.jpg _ 700
-
-
-* A keen observation
-
-.image state-of-go/msg-exceptions2.png _ 800
-
-
-* Signs of hope
-
-.image state-of-go/msg-nogenerics.png _ 600
-
-
-* Today
-
-
-* Growth
-
-.image state-of-go/redmonk.png _ 600
-
-.image state-of-go/oloh.png
-
-
-* User groups
-
-Today there are 48 active user groups in 15 countries across 5 continents.
-
-
-* GopherCon
-
-.image state-of-go/gophercon.png
-
-Community-driven. 3 days. 700 attendees. 24 talks. 1 panel. 4 hours of lightning talks!
-
-
-* The gopher
-
-.image state-of-go/gophers.jpg
-
-* The gopher
-
-.image state-of-go/bus.jpg
-
-* The gopher
-
-.image state-of-go/tattoo.jpg
-
-
-* Go 1.3
-
-Released last Wednesday, 18 June 2014.
-
-Highlights:
-
-- Native Client support (amd64, 386)
-- DragonFly BSD, Plan 9, and Solaris support
-- Improved performance (GC, contiguous stacks, race detector, regexp)
-- Faster incremental builds (linker overhaul)
-- Precise GC of stacks
-- Static analysis in godoc
-
-
-* Tomorrow
-
-
-* Upcoming conferences
-
-.image state-of-go/dotgo.png
-
-.image state-of-go/india.png
-
-
-* Go 1.4
-
-Due December 1st, 2014.
-
-What might be in it? (Speculative list follows.)
-
-
-* New language features
-
-Nope.
-
-
-* Canonical import paths
-
-A means for a repository to specify its canonical import path.
-
-Goal: stop people from checking out repos from the wrong path.
-
-Applications:
-
-- Stable vanity import paths.
-
-	"camlistore.org" -> "camlistore.googlesource.com/camlistore"
-
-- Make GitHub's fork model less painful.
-
-(Proposal forthcoming.)
-
-
-* Internal packages
-
-Current proposal:
-
-"An import of a path containing the element “internal” is disallowed if the importing code is outside the tree rooted at the parent of the “internal” directory."
-
-- Code in `/a/b/c/internal/d/e/f` can be imported only by code in the directory tree rooted at `/a/b/c`.
-- `$GOROOT/src/pkg/internal/xxx` can be imported only by other code in the standard library (`$GOROOT/src/`).
-
-And, later:
-
-- `$GOPATH/src/mypkg/internal/foo` can be imported only by code in `$GOPATH/src/mypkg`.
-
-.link http://golang.org/s/go14internal
-
-
-* src/pkg → src
-
-Move the standard library from `$GOROOT/src/pkg` to `$GOROOT/src`.
-
-Basically makes `$GOROOT` work just like `$GOPATH`.
-
-(Not a big deal for most, but a nice clean up for the core.)
-
-.link http://golang.org/s/go14nopkg
-
-
-* File system access throttling
-
-Throttling of access to the file system at the `os` package level.
-
-Goal:
-
-- Launch a million goroutines that do file system stuff.
-- Don't launch a million operating system threads to block on the syscalls.
-
-Make it work just as nicely as it does with the network.
-
-(Proposal forthcoming.)
-
-
-* "go generate"
-
-A convenience for generating Go source code. Example uses:
-
-- yacc: generating .go files from yacc grammar (.y) files
-- protobufs: generating .pb.go files from protocol buffer definition (.proto) files
-- HTML: embedding .html files into Go source code
-- Other ideas abound…
-
-Proposed mechanism:
-
-Add generator directive in Go source files:
-
-	//go:generate yacc -o gopher.go gopher.y
-
-Use the Go tool to execute the directives:
-
-	% go generate [packagepath]
-
-(Proposal forthcoming.)
-
-
-* More tool chain work
-
-- `cmd/go` support for `gccgo`
-- `cmd/go` support for embedded data files
-- Race detector improvements
-
-The transition from C to Go continues:
-
-- Linker rewritten in Go (`cmd/link`)
-- Assembler rewritten in Go (`cmd/asm`)
-- Possibly: `cmd/gc` translated to Go
-
-
-* Better GC and malloc
-
-- The existing allocator is based on TCMalloc (designed for C/C++). It can be re-designed to better suit Go.
-- Lighter representation and colocation of GC metadata.
-- Various strategies for reducing GC pause time (concurrent sweep, etc).
-
-Rough estimate: 10-20% overall speedup, 20-50% GC pause reduction, 5-10% RSS reduction.
-
-Details:
-
-.link http://golang.org/s/go14mallocgc
-
-* Other runtime changes
-
-Concurrency improvements:
-
-- Lock-free fast path for non-blocking receive from empty channel.
-- Rewrite select to hold only one channel lock at a time.
-
-C to Go:
-
-- G-stack runtime converted to Go.
-
-
-* Package changes
-
-- Easier structuring features in `text/template`
-- Bring `reflect.Value` back to 3 words
-- Fix embedded field visibility (`reflect`)
-- Safe version of `encoding/gob`
-- Unicode 7 support
-
-
-* Ports
-
-- Native Client `arm`
-- PowerPC 64
-- ARM64
-
-
-* Go support for Android
-
-Go support for the NDK. (Like C/C++ today, but better!)
-
-Goal: enough support for writing games.
-
-Based on the work of Elias Naur and others in the community.
-
-.link http://golang.org/s/go14android
-
-
-* More
-
-.link http://golang.org/s/go14todo
-
-
-* Questions?
-
diff --git a/content/2014/state-of-go/bus.jpg b/content/2014/state-of-go/bus.jpg
deleted file mode 100644
index b8dba8c..0000000
--- a/content/2014/state-of-go/bus.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/dotgo.png b/content/2014/state-of-go/dotgo.png
deleted file mode 100644
index 1c357c8..0000000
--- a/content/2014/state-of-go/dotgo.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/gophercon.png b/content/2014/state-of-go/gophercon.png
deleted file mode 100644
index 9c29865..0000000
--- a/content/2014/state-of-go/gophercon.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/gophers.jpg b/content/2014/state-of-go/gophers.jpg
deleted file mode 100644
index dcd4457..0000000
--- a/content/2014/state-of-go/gophers.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/indent.png b/content/2014/state-of-go/indent.png
deleted file mode 100644
index a3a4d0d..0000000
--- a/content/2014/state-of-go/indent.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/india.png b/content/2014/state-of-go/india.png
deleted file mode 100644
index 7b43e4a..0000000
--- a/content/2014/state-of-go/india.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-exceptions1b.png b/content/2014/state-of-go/msg-exceptions1b.png
deleted file mode 100644
index aa33e1f..0000000
--- a/content/2014/state-of-go/msg-exceptions1b.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-exceptions2.png b/content/2014/state-of-go/msg-exceptions2.png
deleted file mode 100644
index 26f23d1..0000000
--- a/content/2014/state-of-go/msg-exceptions2.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-generics.png b/content/2014/state-of-go/msg-generics.png
deleted file mode 100644
index 4ceb514..0000000
--- a/content/2014/state-of-go/msg-generics.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-lacks.png b/content/2014/state-of-go/msg-lacks.png
deleted file mode 100644
index 0499e53..0000000
--- a/content/2014/state-of-go/msg-lacks.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-logo1.png b/content/2014/state-of-go/msg-logo1.png
deleted file mode 100644
index c6f88f1..0000000
--- a/content/2014/state-of-go/msg-logo1.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-logo2.png b/content/2014/state-of-go/msg-logo2.png
deleted file mode 100644
index af5dfdb..0000000
--- a/content/2014/state-of-go/msg-logo2.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-logo3.jpg b/content/2014/state-of-go/msg-logo3.jpg
deleted file mode 100644
index 129eb4e..0000000
--- a/content/2014/state-of-go/msg-logo3.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-nogenerics.png b/content/2014/state-of-go/msg-nogenerics.png
deleted file mode 100644
index 3e42670..0000000
--- a/content/2014/state-of-go/msg-nogenerics.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-semi.png b/content/2014/state-of-go/msg-semi.png
deleted file mode 100644
index f095348..0000000
--- a/content/2014/state-of-go/msg-semi.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-type.png b/content/2014/state-of-go/msg-type.png
deleted file mode 100644
index f9ded1d..0000000
--- a/content/2014/state-of-go/msg-type.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/msg-wrong.png b/content/2014/state-of-go/msg-wrong.png
deleted file mode 100644
index 4002adb..0000000
--- a/content/2014/state-of-go/msg-wrong.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/oloh.png b/content/2014/state-of-go/oloh.png
deleted file mode 100644
index 7ea9e66..0000000
--- a/content/2014/state-of-go/oloh.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/redmonk.png b/content/2014/state-of-go/redmonk.png
deleted file mode 100644
index e4bfec8..0000000
--- a/content/2014/state-of-go/redmonk.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/sadgopher.png b/content/2014/state-of-go/sadgopher.png
deleted file mode 100644
index b376e4e..0000000
--- a/content/2014/state-of-go/sadgopher.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-go/tattoo.jpg b/content/2014/state-of-go/tattoo.jpg
deleted file mode 100644
index 7b8d9d2..0000000
--- a/content/2014/state-of-go/tattoo.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher.slide b/content/2014/state-of-the-gopher.slide
deleted file mode 100644
index 85c9d4a..0000000
--- a/content/2014/state-of-the-gopher.slide
+++ /dev/null
@@ -1,369 +0,0 @@
-The State of the Gopher (Oct)
-10 Oct 2014
-Tags: dotgo, gopher
-
-Brad Fitzpatrick
-Gopher, Google
-@bradfitz
-bradfitz@golang.org
-
-* The State of the Gopher
-
-- where we've been
-- where we're going
-
-.image state-of-the-gopher/gopher.jpg
-
-* bradfitz
-
-- Work on Go's standard library, builders, etc
-- Started contributing to Go May 2010
-- [[http://camlistore.org]], my big, old Go project: personal data storage & indexing for life
-
-* The Past
-
-* Userbase before November 2009
-
-- 3-10 people inside Google?
-
-* November 2009
-
-- Go is [[http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html][open sourced]]:
-
-.image state-of-the-gopher/opensource.png
-
-* Website in 2009
-
-.image state-of-the-gopher/website1.png
-
-* Website in 2009
-
-.image state-of-the-gopher/website2.png
-
-* Compilers in 2009
-
-- already two: `gc` and `gccgo`
-
-* Aside: GC vs gc
-
-- `gc`: "Go compiler", based originally on Plan 9's C compiler. The main Go compiler.
-- `GC`: "Garbage Collector"
-
-* Ports in 2009
-
-- linux-386
-- linux-amd64
-- linux-arm, just starting to work
-- darwin-386
-- darwin-amd64
-- nacl-386 (first attempt)
-With gccgo, more.
-
-* Tools in 2009
-
-- gofmt
-- gofix
-- godoc
-
-* Release Highlights
-
-* weekly releases
-
-- "weekly.2009-12-09"
-- break users weekly, not daily
-- gofix appears
-
-* monthly releases
-
-- "r56" ... "r60"
-- break users monthly, not weekly
-- still painful to write and use packages (Makefiles)
-
-* Go 1.0 (2012-03-28)
-
-- the "error" type
-- delete(m, k)
-
-  // before Go 1:
-  latLong[storeID] = LatLong{}, false
-  name[userID] = "", false
-
-  // new:
-  delete(name, userID)
-
-- [[https://golang.org/doc/go1compat][stability promise]] + API check tool:
-
-  pkg net/http, const StatusOK = 200
-  pkg net/http, const StatusOK ideal-int
-  pkg net/http, type RoundTripper interface { RoundTrip }
-  pkg net/http, type Server struct, TLSConfig *tls.Config
-  pkg net/http, var DefaultServeMux *ServeMux
-  pkg time, method (*Timer) Reset(Duration) bool
-  pkg unicode/utf8, func ValidRune(int32) bool
-
-- the `go` tool (get, build, test, ...)
-
-* Go 1.1 (2013-05-03)
-
-- method values
-
-  type S struct { once sync.Once; ... }
-  func (s *S) init() { ... }
-  func (s *S) Foo() {
-      s.once.Do(s.init)
-
-- func "terminating statement"
-
-  func abs(n int) int {
-      switch {
-      case n < 0: return -n
-      default:    return n
-      }
-  }
-
-- 64-bit "int", large heaps
-- 30-40% speed improvement, stdlib++
-- more precise heap GC, usually
-
-* Aside: precise vs conservative GC
-
-Conservative GC: if it "looks like" a pointer, treat it like one.
-
-  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
-  [ ptr? ] [ byte slice (skipped in Go 1.0)                             ]
-  [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ] [ ptr? ]
-
-Terrible for 32-bit (e.g. ARM) computers: many integers look like pointers.
-
-Precise GC:
-
-  [ int ] [ ptr     ] [ string      ] [ byte slice          ]
-  [ int ] [ t f t f ] [ ptr ] [ int ] [ float64     ] [ ptr ]
-
-Requires knowing what every position in memory _actually_ is.
-
-- no false retention, only look at some memory during GC
-
-* Go 1.2 (2013-12-01)
-
-- 6 month release cycle begins
-- setting slice capacity with s[i:j:k]
-
-  s := make([]byte, 10, 20)
-  foo(s[10:12:15])
-
-  func foo(s []byte) { fmt.Println(len(s), cap(s)) }
-
-- preemption in scheduler
-- go test -cover
-
-* Go 1.3 (2014-06-18)
-
-- no language changes
-- GOOS=solaris,dragonfly,plan9,nacl
-- precise GC of the stack (mostly)
-- contiguous stacks (mostly)
-
-* Aside: Segmented vs. Contiguous stacks
-
-- C++/Java: one huge stack per thread
-- Go <= 1.2: multiple discontiguous 4K stacks, bounce between
-- Go 1.3: one little stack, grow & shrink as needed
-.image state-of-the-gopher/contig-stack.png _ 550
-
-* The present (relative to Nov 2009)
-
-* More ports
-
-- Windows
-- FreeBSD, OpenBSD, NetBSD
-- Solaris, Plan 9, DragonFly BSD
-- NaCl (again)
-
-* Better docs
-
-- [[http://blog.golang.org][Blog]] articles,
-- Community [[https://golang.org/wiki][Wiki]],
-- [[https://golang.org/wiki/Books][Books]]
-
-* Users: up and to the right
-
-- Go [[https://code.google.com/p/go-wiki/wiki/GoUserGroups][user groups]], [[http://go-meetups.appspot.com/][meetups]]
-- GitHub commits, stars, forks
-- Since 2009: `golang-nuts@` (1450 → 14134), `-dev` (37 → 2152)
-.link http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/ Go: the emerging language of cloud infrastructure
-
-.image state-of-the-gopher/oloh.png
-
-* The Cloud
-
-- Docker
-- CoreOS, etcd, fleet
-- Juju
-- NATS, gnatsd, Packer, Heka
-- dl.google.com, Vitess, Kubernetes
-- App Engine
-
-* Conferences
-
-[[http://connpass.com/series/312/][GoCon Tokyo]]
-
-* Conferences
-
-.image state-of-the-gopher/gophercon.png
-
-* Conferences
-
-.image state-of-the-gopher/dotgo.png
-
-* Conferences
-
-.image state-of-the-gopher/india.png
-
-* CoreOS
-
-.image state-of-the-gopher/bus.jpg
-
-- increasingly running [[http://build.golang.org]], each in a Docker container
-- Go powering Go development!
-
-* build.golang.org
-
-.image state-of-the-gopher/build.png 400 _
-
-* Better tools
-
-- go/parser: godoc, [[http://godoc.org]], gofmt, gofix →
-- [[http://godoc.org/code.google.com/p/go.tools/cmd/goimports][goimports]]: automatic import lines
-- go/types, gofix+types, 
-- go/ast, go/ssa, [[http://godoc.org/code.google.com/p/go.tools/cmd/oracle][oracle]],
-- [[http://godoc.org/code.google.com/p/go.tools/cmd/eg][eg]], example-based refactoring
-- [[http://godoc.org/code.google.com/p/go.tools/cmd/gorename][gorename]], safe global renaming tool
-
-Tooling begets better tooling!
-
-- goimports + go/types + go/parser == [[https://twitter.com/sqs/status/520203018957250560][goreturns]] (lazy "return err")
-
-* The Future
-
-* Go 1.4
-
-* Go 1.4 (2014-12-01?)
-
-- fully precise GC of the stack + heap
-- segmented stacks & conservative GC deleted
-- stack copier & shrinker requires precise stack types too
-
-- `runtime` conversion from C to Go: maps, channels, interfaces, type checks, println, defer, panic, etc.
-
-- Garbage collector and scheduler are still in C
-
-* Go 1.4
-
-- [[http://golang.org/s/go14android][GOOS=android]] (Elias Naur, David Crawshaw)
-- GOOS=nacl GOARCH=arm
-- [[http://golang.org/s/go14internal]["internal" packages]]
-- [[http://golang.org/s/go1.4-generate]["go generate"]]
-- [[https://docs.google.com/a/golang.org/document/d/1QXzI9I1pOfZPujQzxhyRy6EeHYTQitKKjHfpq0zpxZs][syscall package frozen, go.sys]]
-- "go tool pprof" converted from Perl (!) to Go
-- minor stdlib additions, improvements
-
-* Go 1.5
-
-* Go 1.5 (2014-06-01?)
-
-- Concurrent GC is main theme
-- Roadmap: [[http://golang.org/s/go14gc]] (GC in 1.4, 1.5, 1.6+)
-
-* Go 1.5: ports
-
-- GOOS=ios revival? (Minux, David Crawshaw)
-- GOARCH=ppc64 (minux)
-- GOARCH=arm64 (aram, dfc)
-
-* Go 1.5: removing more C
-
-Didn't make Go 1.4:
-
-- `cmd/link`: linker rewrite in Go
-- `cmd/asm`: assembler rewrite in Go
-- "gc" compiler in Go
-
-* "gc" Compiler in Go
-
-- lots of C
-- C → Go translator == kinda ugly Go
-- refactor that Go with tools: `eg`, `gorename`, etc
-- add packages, tests
-- unify all `8g`, `5g`, `6g`, `9g`
-- SSA form, new optimizations
-
-See rsc's GopherCon [[http://talks.golang.org/2014/c2go.slide#1][slides]], [[http://gophercon.sourcegraph.com/post/83820197495/russ-cox-porting-the-go-compiler-from-c-to-go][notes]], [[https://www.youtube.com/watch?v=QIE5nV5fDwA][video]].
-
-* Go 1.5 Tracing
-
-- Dmitry's GOTRACE + Chrome trace viewer
-
-.image state-of-the-gopher/trace.png
-
-* Go 1.6
-
-- More GC work
-- Ongoing compiler-in-Go cleanup & optimizations
-- PNaCl?
-- [[https://docs.google.com/a/google.com/document/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub][NUMA-aware scheduler]]?
-- unknown surprises
-Who knows.
-Find out next year at dotGo Paris 2015!
-
-* Go 2.0
-
-- maybe one day
-
-* Outside of the core
-
-* libraries & tools
-
-- HTTP/2, to be merged into `net/http`
-- go.tools: `goimports`, `eg`, `gorename`, `oracle`, ...
-- go.text: Unicode collation, normalization, ...
-- go.mobile: Android, iOS, gaming, 3D graphics, event handling
-- go.crypto
-- go.net
-- go.tools
-- go.syscall
-
-* gccgo
-
-- keeping up with spec
-- better in some ways (codegen, OS, arch)
-- worse in others (precise GC, escape analysis)
-- work underway to improve
-
-All checking & improving each other:
-
-- gc, gccgo, go/types, language spec, unit tests
-
-* Notable other compilers
-
-- [[https://github.com/go-llvm/llgo][llgo]], Go → LLVM → PNaCL, etc
-- [[https://github.com/tardisgo/tardisgo][TARDIS Go]], Go → Haxe → JS, anything
-- [[https://github.com/gopherjs/gopherjs][GopherJS]], Go → JS
-
-And all three written in Go, use `go/parser`, `go/types`, etc.
-We can't wait to join them.
-
-* In summary
-
-* The growth is exciting
-
-- things are getting cleaner,
-- things are getting faster,
-- things are getting more impressive,
-- everything is growing on top of everything else,
-- hard to keep up with golang-dev@, golang-nuts@, bugs, wiki, new github projects, code reviews,
-
-* You all are awesome 
-
-- keep being awesome
-- keep making awesome things
diff --git a/content/2014/state-of-the-gopher/build.png b/content/2014/state-of-the-gopher/build.png
deleted file mode 100644
index 0cd68ea..0000000
--- a/content/2014/state-of-the-gopher/build.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/bus.jpg b/content/2014/state-of-the-gopher/bus.jpg
deleted file mode 100644
index b8dba8c..0000000
--- a/content/2014/state-of-the-gopher/bus.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/contig-stack.png b/content/2014/state-of-the-gopher/contig-stack.png
deleted file mode 100644
index 04559a4..0000000
--- a/content/2014/state-of-the-gopher/contig-stack.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/dotgo.png b/content/2014/state-of-the-gopher/dotgo.png
deleted file mode 100644
index 1c357c8..0000000
--- a/content/2014/state-of-the-gopher/dotgo.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/gopher.jpg b/content/2014/state-of-the-gopher/gopher.jpg
deleted file mode 100644
index a27d109..0000000
--- a/content/2014/state-of-the-gopher/gopher.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/gophercon.png b/content/2014/state-of-the-gopher/gophercon.png
deleted file mode 100644
index 9c29865..0000000
--- a/content/2014/state-of-the-gopher/gophercon.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/india.png b/content/2014/state-of-the-gopher/india.png
deleted file mode 100644
index 7b43e4a..0000000
--- a/content/2014/state-of-the-gopher/india.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/oloh.png b/content/2014/state-of-the-gopher/oloh.png
deleted file mode 100644
index 7ea9e66..0000000
--- a/content/2014/state-of-the-gopher/oloh.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/opensource.png b/content/2014/state-of-the-gopher/opensource.png
deleted file mode 100644
index dfaa92e..0000000
--- a/content/2014/state-of-the-gopher/opensource.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/trace.png b/content/2014/state-of-the-gopher/trace.png
deleted file mode 100644
index 7b71532..0000000
--- a/content/2014/state-of-the-gopher/trace.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/website1.png b/content/2014/state-of-the-gopher/website1.png
deleted file mode 100644
index 0c4e62f..0000000
--- a/content/2014/state-of-the-gopher/website1.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/state-of-the-gopher/website2.png b/content/2014/state-of-the-gopher/website2.png
deleted file mode 100644
index 7fea6aa..0000000
--- a/content/2014/state-of-the-gopher/website2.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/static-analysis.slide b/content/2014/static-analysis.slide
deleted file mode 100644
index 8a4f69b..0000000
--- a/content/2014/static-analysis.slide
+++ /dev/null
@@ -1,286 +0,0 @@
-Static analysis tools
-for Go code comprehension and refactoring
-
-golang nyc meetup
-13 Nov 2014
-
-Alan Donovan
-Google, New York
-adonovan@google.com
-
-* Video
-
-This talk was presented at the GothamGo Kickoff Meetup in New York City, November 2014.
-
-.link http://vimeo.com/114736889 Watch the talk on Vimeo
-
-* Introduction
-
-Programmers say "writing code", but most of that time is spent _reading_
-
-Actually: reading code, and making logical deductions
-
-Machines are good at reading and logic
-
-*Machines* *should* *be* *helping* *us* *read* *code.*
-
-And write it!  Refactoring can be tedious and error-prone.
-
-
-* Outline
-
-- Code comprehension tools: `oracle`, `godoc`
-- Analysis technology
-- Refactoring tools:  `gorename`, `eg`
-
-
-* Demo: the Go oracle
-
-Supports interactive, editor-integrated queries:
-- where is this thing defined?
-- what are the methods of this type?
-- what are the free variables of this selection?
-- what might this expression point to?
-- what dynamic types might this interface or `reflect.Value` contain?
-
-
-* Demo: godoc analysis features
-
-.link http://golang.org/lib/godoc/analysis/help.html godoc -analysis=type,pointer
-
-Package view
-- method set and _implements_ relation for every type
-- internal call graph of every package
-
-Source code view
-- kind, type, definition of every identifier
-- method set and _implements_ relation for every type
-- peers of every channel send/receive
-- callers of every function
-- callees of every call site (even dynamic)
-
-
-* How it works
-
-
-
-* Libraries and tools
-
-.image static-analysis/tools.svg
-
-Mostly in `golang.org/x/tools` repo
-
-
-* go/types: the Go type checker
-
-Computes mappings from:
-- identifiers to definitions
-- constant expressions to values
-- expressions to types
-
-Many subtle corners:
-- method set computation
-- recursive interfaces
-- shifts
-
-Making it correct, fast, and clean was a substantial project
-
-.link http://godoc.org/golang.org/x/tools/go/types golang.org/x/tools/go/types
-
-Author: Robert Griesemer
-
-
-
-* go/ssa: intermediate representation (IR)
-
-Typed abstract syntax trees (ASTs) are too varied and subtle to analyze directly
-
-Programs are lowered into Static Single-Assignment form (SSA):
-- simplifies dataflow analyses since _reaching_ _definitions_ are implicit
-- invented 1991, now mainstream (gcc, llvm)
-
-All Go programs can be expressed using only ~30 basic instructions
-
-Simple, explicit, high-level, high source fidelity
-
-.link http://godoc.org/golang.org/x/tools/go/ssa golang.org/x/tools/go/ssa
-
-The llgo project is using go/ssa as a front-end for LLVM
-
-
-
-* Demo: ssadump
-
-# Simple fibonacci function
-# % ssadump -build=F  fib.go		basic
-# % ssadump -build=FD fib.go		debug info
-# % ssadump -test -run unicode 		toy interpreter
-
-
-
-* go/pointer: pointer analysis
-
-Pointers complicate reasoning about program behaviour
-- functions may be called dynamically
-- a variable may be updated and accessed via different names ("aliases")
-- runtime types are values too: `interface`, `reflect.Type`
-
-We use *pointer* *analysis* to answer the question:
-which variables might this pointer point to?
-
-.link http://godoc.org/golang.org/x/tools/go/pointer golang.org/x/tools/go/pointer
-
-# comment on go's appropriateness for this analysis:
-# (closed program---no dlopen, classloading, no generics, typesafe)
-
-
-* Pointer analysis
-
-Let `pts(p)` be the _points-to_ _set_ of pointer p
-Its elements are abstract variables: globals, locals, unnamed (`new(T)`)
-
-Overview:
-
-- analyze each SSA statement in the whole program
-
-- generate appropriate constraints on the points-to set of each variable
-
-	Statement      Constraint
-	 y = &x         pts(y) ⊇ {x}
-	 y = x          pts(y) ⊇ pts(x)		         	"inclusion-based"
-	*y = x          ∀o ∈ pts(y). pts(o) ⊇ pts(x)
-	 y = *x         ∀o ∈ pts(x). pts(y) ⊇ pts(o)
-	 y = &x->f      \
-	 y = x.(T)       } not shown
-	 reflection     /
-
-- solve the constraint system
-
-
-* Pointer analysis: constraint generation
-
-All Go operations can be expressed in these constraints
-Function, map, slice and channel ops all simplify to struct ops
-
-Treatment of `unsafe.Pointer` conversion is unsound
-But we don't care!  This isn't a compiler
-
-The constraint system is:
-- *field-sensitive*: struct fields x.f and x.g have distinct solutions
-- *flow-insensitive*: the order of statements is ignored
-- *context-insensitive*: each function is analyzed only once
-- *whole-program*: Go source is required for all dependencies
-- *inclusion-based*: i.e. Andersen's analysis
-
-Optimization: don't make constraints for "uninteresting" types
-such as types not related to a one-shot Oracle query
-
-* Pointer analysis: pre-solver optimizations
-
-Constraint system for 124KLoC program (oracle) has:
-
-254,000 variables
-184,000 equations
-
-Solving phase is in O(|v|³), so pre-solver optimisation is crucial
-
-We can bring this down to:
-
-88,000 variables
-65,000 equations
-
-* Pointer Equivalence by Hash-Value Numbering (Hardekopf & Lin '07)
-
-        p = &x                  a = &x                         if ... {
-        q = p                   b = a                            p, q = &x, &y
-        r = q                   c = b                          } else {
-        s = r                   if ... { a = c }                 p, q = &y, &x
-                                                               }
-
-.image static-analysis/hvn.svg
-
-Hash-Value Numbering
-
-* Pointer analysis: solving
-
-It's transitive closure of a graph, essentially
-
-Lots of optimizations, for example:
-
-_sparse_bit_vectors_, a very compact representation for points-to sets
-
-.link http://godoc.org/golang.org/x/tools/container/ints golang.org/x/tools/container/ints
-
-Solver log is >1GB.  Debugging is fun.
-
-
-#* Sparse bit vector
-#`golang.org/x/tools/container/ints`
-#
-#.image sparsebitvector.svg
-#
-#Very compact representation of sparse `set<int>`
-#Doubly-linked list of (offset int, data [256]bit) blocks.
-
-
-* Call graph
-
-The *call* *graph* can be read directly from the solution
-
-The `golang.org/x/tools/cmd/callgraph` tool prints raw call graphs
-
-Demo (time permitting)
-
-
-* Refactoring tools
-
-* gorename: precise, type-safe identifier renaming
-
-A refactoring tool, usable from...
-
-- the command line
-
-	% gorename -from bytes.Buffer.Len -to Size
-	Renamed 105 occurrences in 42 files in 33 packages.
-
-- many editors ([[https://code.google.com/p/go/source/browse/refactor/rename/rename.el?repo=tools&r=511801758bb9a0b83f9bf931342889fbedbc9b48][Emacs]], [[http://quick.as/dgof2p7][Vim]], [[https://github.com/smartystreets/sublime-gorename][Sublime]], [[https://github.com/davidrjenni/agorn][Acme]])
-
-All renamings are reversible
-
-Sound: either a conflict is reported, or the refactoring preserves behaviour*
-
-*except reflection
-
-.link http://godoc.org/golang.org/x/tools/cmd/gorename golang.org/x/tools/cmd/gorename
-
-* Demo: gorename
-
-
-* Example-based refactoring with eg
-
-A Go port of the Java _Refaster_ tool
-
-A template specifies the pattern and replacement as Go expressions:
-
-	package P
-
-	import ( "errors"; "fmt" )
-
-	func before(s string) error { return fmt.Errorf("%s", s) }
-	func after(s string)  error { return errors.New(s) }
-
-Parameters are _wildcards_
-
-	% eg -t template.go <package> ...
-
-.link http://godoc.org/golang.org/x/tools/cmd/eg golang.org/x/tools/cmd/eg
-
-* Demo: eg
-
-* Conclusion
-
-From the outset, Go has been renowned for its tools: `go`, `gofmt`
-
-We have many building blocks for sophisticated source analysis tools
-
-What should we build next?
diff --git a/content/2014/static-analysis/demo.go b/content/2014/static-analysis/demo.go
deleted file mode 100644
index fff9e7a..0000000
--- a/content/2014/static-analysis/demo.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Leaf int
-
-func (l Leaf) Sum() int       { return int(l) }
-func (l Leaf) String() string { return fmt.Sprintf("%d", l) }
-
-type Branch struct{ left, rhs Tree }
-
-func (b *Branch) Sum() int       { return b.left.Sum() + b.rhs.Sum() }
-func (b *Branch) String() string { return fmt.Sprintf("(%s, %s)", b.left, b.rhs) }
-
-type Tree interface {
-	Sum() int
-}
-
-func main() {
-	var tree Tree = Leaf(42)
-	fmt.Println(tree.Sum())
-
-	if unknown {
-		tree = &Branch{tree, Leaf(123)}
-	}
-	fmt.Println(tree.Sum())
-	fmt.Println(tree)
-}
-
-var unknown bool
-
-//
-
-func _() {
-	type Answer struct{ right bool }
-	var x struct {
-		Answer
-		Branch
-	}
-	fmt.Println(x.right)
-}
diff --git a/content/2014/static-analysis/demoscript b/content/2014/static-analysis/demoscript
deleted file mode 100644
index 4a8374f..0000000
--- a/content/2014/static-analysis/demoscript
+++ /dev/null
@@ -1,77 +0,0 @@
-Demos
-
--------------------------------
-oracle
-
-Type info:
-
-describe fmt
-describe tree local var
-describe Branch type
-
-implements on Branch, Leaf, Tree
-
-pointsto on 'tree' var x 2
-
-callees of tree.Sum x 2
-
-callers of Leaf.Sum, Branch.Sum
-
-callers of String
-
-free vars on fmtBytes in print.go
-
--------------------------------
-godoc  (server running at localhost:9999)
-
-Package view
-
-- Internal call graph
-http://localhost:9999/pkg/encoding/json/#MarshalIndent
-
-- Implements / MethodSet
-http://localhost:9999/pkg/net/http/#File
-
-Source view
-
-- Identifier kind, type, definition
-
-- Callers/callees:
-http://localhost:9999/src/pkg/strings/strings_test.go#L402
-http://localhost:9999/src/pkg/testing/example.go
-
-- Channels:
-http://localhost:9999/src/pkg/net/http/transport.go#L870
-
-- Type info
-http://localhost:9999/src/pkg/io/io.go#106
-http://localhost:9999/src/pkg/encoding/json/encode.go?s=8300:8311#L240
-
-- Import
-
--------------------------------
-ssadump:
-
-# Basic
-cd ~/got9/src/demo
-cat hello.go
-ssadump -build=FGI hello.go 
-
-# Debug info
-cat fib.go
-ssadump -build=FGI fib.go
-ssadump -build=FGID fib.go
-
-# Test, interp
-ssadump -test -run unicode -- -test.v
-
--------------------------------
-gorename: in demo.go
-
-Leaf to Tip
-lhs to left
-rhs to right: conflict!
-
-
-
-
diff --git a/content/2014/static-analysis/egtest/test.go b/content/2014/static-analysis/egtest/test.go
deleted file mode 100644
index 07edb3a..0000000
--- a/content/2014/static-analysis/egtest/test.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package egtest
-
-import (
-	"fmt"
-	"log"
-	"strings"
-)
-
-func f() {
-	fmt.Printf("%s\n", strings.ToLower("HELLO"))
-}
-
-func g() {
-	var fmt log.Logger
-	fmt.Printf("%s\n", strings.ToLower("HELLO"))
-}
diff --git a/content/2014/static-analysis/fib.go b/content/2014/static-analysis/fib.go
deleted file mode 100644
index e0c9462..0000000
--- a/content/2014/static-analysis/fib.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func fib(x int) int {
-	if x < 2 {
-		return x
-	}
-	return fib(x-1) + fib(x-2)
-}
-
-func main() {
-	fmt.Println(fib(7))
-}
diff --git a/content/2014/static-analysis/hello.go b/content/2014/static-analysis/hello.go
deleted file mode 100644
index e4f48ab..0000000
--- a/content/2014/static-analysis/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, 世界")
-}
diff --git a/content/2014/static-analysis/hvn.svg b/content/2014/static-analysis/hvn.svg
deleted file mode 100644
index fd6cff9..0000000
--- a/content/2014/static-analysis/hvn.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 752.0 320.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l752.0 0l0 320.0l-752.0 0l0 -320.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l752.0 0l0 320.0l-752.0 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m20.653543 34.842518l0 0c0 -11.837156 9.595913 -21.43307 21.43307 -21.43307l0 0c5.6844025 0 11.13599 2.2581205 15.155468 6.2776012c4.0194817 4.0194798 6.277603 9.4710655 6.277603 15.155468l0 0c0 11.837158 -9.595913 21.433071 -21.433071 21.433071l0 0c-11.837156 0 -21.43307 -9.595913 -21.43307 -21.433071z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m20.653543 34.842518l0 0c0 -11.837156 9.595913 -21.43307 21.43307 -21.43307l0 0c5.6844025 0 11.13599 2.2581205 15.155468 6.2776012c4.0194817 4.0194798 6.277603 9.4710655 6.277603 15.155468l0 0c0 11.837158 -9.595913 21.433071 -21.433071 21.433071l0 0c-11.837156 0 -21.43307 -9.595913 -21.43307 -21.433071z" fill-rule="nonzero"></path><path fill="#000000" d="m38.148754 45.543766l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m20.653543 91.00787l0 0c0 -11.837158 9.595913 -21.433067 21.43307 -21.433067l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.2775955c4.0194817 4.0194855 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.433067 -21.433071 21.433067l0 0c-11.837156 0 -21.43307 -9.595909 -21.43307 -21.433067z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m20.653543 91.00787l0 0c0 -11.837158 9.595913 -21.433067 21.43307 -21.433067l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.2775955c4.0194817 4.0194855 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.433067 -21.433071 21.433067l0 0c-11.837156 0 -21.43307 -9.595909 -21.43307 -21.433067z" fill-rule="nonzero"></path><path fill="#000000" d="m44.430004 101.70912l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m20.653543 147.17323l0 0c0 -11.837158 9.595913 -21.433075 21.43307 -21.433075l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.277603c4.0194817 4.01947 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.43306 -21.433071 21.43306l0 0c-11.837156 0 -21.43307 -9.5959015 -21.43307 -21.43306z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m20.653543 147.17323l0 0c0 -11.837158 9.595913 -21.433075 21.43307 -21.433075l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.277603c4.0194817 4.01947 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.43306 -21.433071 21.43306l0 0c-11.837156 0 -21.43307 -9.5959015 -21.43307 -21.43306z" fill-rule="nonzero"></path><path fill="#000000" d="m40.21465 154.09323l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m20.653543 203.33858l0 0c0 -11.837158 9.595913 -21.43306 21.43307 -21.43306l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.277588c4.0194817 4.0194855 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.433075 -21.433071 21.433075l0 0c-11.837156 0 -21.43307 -9.595917 -21.43307 -21.433075z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m20.653543 203.33858l0 0c0 -11.837158 9.595913 -21.43306 21.43307 -21.43306l0 0c5.6844025 0 11.13599 2.2581177 15.155468 6.277588c4.0194817 4.0194855 6.277603 9.471069 6.277603 15.155472l0 0c0 11.837158 -9.595913 21.433075 -21.433071 21.433075l0 0c-11.837156 0 -21.43307 -9.595917 -21.43307 -21.433075z" fill-rule="nonzero"></path><path fill="#000000" d="m38.000675 207.32108l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m42.086613 56.27559l0 13.291336" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m42.086613 56.27559l0 9.86425" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m42.086613 66.13984l-1.1245804 -1.1245804l1.1245804 3.0897675l1.1245842 -3.0897675z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m42.086613 112.27559l0 13.291336" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m42.086613 112.27559l0 9.864258" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m42.086613 122.13984l-1.1245804 -1.1245804l1.1245804 3.0897675l1.1245842 -3.0897675z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m42.086613 168.27559l0 13.291336" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m42.086613 168.27559l0 9.864258" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m42.086613 178.13985l-1.1245804 -1.124588l1.1245804 3.0897675l1.1245842 -3.0897675z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m50.874016 -7.6771655l55.527557 0l0 49.889763l-55.527557 0z" fill-rule="nonzero"></path><path fill="#000000" d="m60.405266 13.570958q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.0468755q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625005q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.87499905 0.46875 2.859374q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.64062405 -0.59375 -0.99999905q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671874l3.59375 -5.124999l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.218749l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.82812405l-2.59375 3.890624l-2.015625 0zm15.0 -5.671874l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 0.99999905q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.031249 0.578125 -1.640624q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.1718755q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.7343755 0.125 2.4062505q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m14.322731 285.0l0 0c0 -15.333527 12.430267 -27.763794 27.763779 -27.763794l0 0c7.363415 0 14.42524 2.9251099 19.631958 8.131836c5.2067184 5.206726 8.131821 12.268555 8.131821 19.631958l0 0c0 15.333527 -12.4302635 27.763794 -27.763779 27.763794l0 0c-15.333511 0 -27.763779 -12.430267 -27.763779 -27.763794z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m14.322731 285.0l0 0c0 -15.333527 12.430267 -27.763794 27.763779 -27.763794l0 0c7.363415 0 14.42524 2.9251099 19.631958 8.131836c5.2067184 5.206726 8.131821 12.268555 8.131821 19.631958l0 0c0 15.333527 -12.4302635 27.763794 -27.763779 27.763794l0 0c-15.333511 0 -27.763779 -12.430267 -27.763779 -27.763794z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m14.328073 261.46594l74.04725 0l0 55.527557l-74.04725 0z" fill-rule="nonzero"></path><path fill="#000000" d="m24.578072 292.16718l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.141342 8.65625l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm9.219467 4.953125l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.556427 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m50.874016 227.13722l55.527557 0l0 49.889755l-55.527557 0z" fill-rule="nonzero"></path><path fill="#000000" d="m60.405266 248.38535q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.046875q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.875 0.46875 2.859375q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.640625 -0.59375 -1.0q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671875l3.59375 -5.125l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.21875l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.828125l-2.59375 3.890625l-2.015625 0zm15.0 -5.671875l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 1.0q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.03125 0.578125 -1.640625q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.171875q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.734375 0.125 2.40625q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m219.53543 34.841206l0 0c0 -11.837156 9.595917 -21.43307 21.433075 -21.43307l0 0c5.6844025 0 11.135986 2.2581205 15.155457 6.2776012c4.0195007 4.0194798 6.2776184 9.4710655 6.2776184 15.155468l0 0c0 11.837158 -9.595917 21.433071 -21.433075 21.433071l0 0c-11.837158 0 -21.433075 -9.595913 -21.433075 -21.433071z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m219.53543 34.841206l0 0c0 -11.837156 9.595917 -21.43307 21.433075 -21.43307l0 0c5.6844025 0 11.135986 2.2581205 15.155457 6.2776012c4.0195007 4.0194798 6.2776184 9.4710655 6.2776184 15.155468l0 0c0 11.837158 -9.595917 21.433071 -21.433075 21.433071l0 0c-11.837158 0 -21.433075 -9.595913 -21.433075 -21.433071z" fill-rule="nonzero"></path><path fill="#000000" d="m243.46814 40.542454q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m182.94751 114.19816l0 0c0 -11.837151 9.5959015 -21.433067 21.43306 -21.433067l0 0c5.6844177 0 11.136002 2.2581177 15.155472 6.277603c4.0194855 4.019478 6.277603 9.471062 6.277603 15.155464l0 0c0 11.837158 -9.595917 21.433067 -21.433075 21.433067l0 0c-11.837158 0 -21.43306 -9.595909 -21.43306 -21.433067z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m182.94751 114.19816l0 0c0 -11.837151 9.5959015 -21.433067 21.43306 -21.433067l0 0c5.6844177 0 11.136002 2.2581177 15.155472 6.277603c4.0194855 4.019478 6.277603 9.471062 6.277603 15.155464l0 0c0 11.837158 -9.595917 21.433067 -21.433075 21.433067l0 0c-11.837158 0 -21.43306 -9.595909 -21.43306 -21.433067z" fill-rule="nonzero"></path><path fill="#000000" d="m201.9896 121.11816l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m272.95276 114.19816l0 0c0 -11.837151 9.595917 -21.433067 21.433075 -21.433067l0 0c5.684387 0 11.135986 2.2581177 15.155457 6.277603c4.01947 4.019478 6.2776184 9.471062 6.2776184 15.155464l0 0c0 11.837158 -9.595917 21.433067 -21.433075 21.433067l0 0c-11.837158 0 -21.433075 -9.595909 -21.433075 -21.433067z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m272.95276 114.19816l0 0c0 -11.837151 9.595917 -21.433067 21.433075 -21.433067l0 0c5.684387 0 11.135986 2.2581177 15.155457 6.277603c4.01947 4.019478 6.2776184 9.471062 6.2776184 15.155464l0 0c0 11.837158 -9.595917 21.433067 -21.433075 21.433067l0 0c-11.837158 0 -21.433075 -9.595909 -21.433075 -21.433067z" fill-rule="nonzero"></path><path fill="#000000" d="m297.40927 117.50878l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m225.81303 49.996677l-21.417328 42.77165" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m225.81303 49.996677l-19.882874 39.70728" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m205.93016 89.70396l-0.5020447 -1.5090866l-0.3778534 3.2662811l2.388977 -2.2592392z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m225.81364 114.19816l47.149612 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m225.81364 114.198166l43.72252 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m269.53616 114.198166l-1.1245728 1.1245804l3.0897522 -1.1245804l-3.0897522 -1.124588z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m294.38583 92.76509l-38.26773 -42.771652" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m294.38583 92.76509l-35.982605 -40.217594" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m258.40323 52.547493l1.5879517 0.08825302l-2.8983154 -1.5528183l1.2221069 3.052517z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m249.7559 -7.678478l55.527573 0l0 49.889763l-55.527573 0z" fill-rule="nonzero"></path><path fill="#000000" d="m259.28717 13.569646q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.0468755q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625005q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.87499905 0.46875 2.859374q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.64062405 -0.59375 -0.99999905q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671874l3.59375 -5.124999l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.218749l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.82812405l-2.59375 3.890624l-2.015625 0zm15.0 -5.671874l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 0.99999905q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.031249 0.578125 -1.640624q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.1718755q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.7343755 0.125 2.4062505q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m225.81355 285.0l0 0c0 -15.333527 12.430267 -27.763794 27.763779 -27.763794l0 0c7.3634033 0 14.425232 2.9251099 19.631958 8.131836c5.206726 5.206726 8.131805 12.268555 8.131805 19.631958l0 0c0 15.333527 -12.430267 27.763794 -27.763763 27.763794l0 0c-15.333511 0 -27.763779 -12.430267 -27.763779 -27.763794z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m225.81355 285.0l0 0c0 -15.333527 12.430267 -27.763794 27.763779 -27.763794l0 0c7.3634033 0 14.425232 2.9251099 19.631958 8.131836c5.206726 5.206726 8.131805 12.268555 8.131805 19.631958l0 0c0 15.333527 -12.430267 27.763794 -27.763763 27.763794l0 0c-15.333511 0 -27.763779 -12.430267 -27.763779 -27.763794z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m229.3328 261.46594l74.04724 0l0 55.527557l-74.04724 0z" fill-rule="nonzero"></path><path fill="#000000" d="m246.0203 287.16718q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm5.625717 4.9375l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.7187653 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.2500153 1.375 -3.0000153 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.79689026 -0.953125 0.79689026 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.76564026 -0.921875 -1.8437653 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281967 1.390625l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m262.36484 227.13722l55.527557 0l0 49.889755l-55.527557 0z" fill-rule="nonzero"></path><path fill="#000000" d="m271.8961 248.38535q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.046875q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.875 0.46875 2.859375q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.640625 -0.59375 -1.0q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671875l3.59375 -5.125l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.21875l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.828125l-2.59375 3.890625l-2.015625 0zm15.0 -5.671875l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 1.0q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.03125 0.578125 -1.640625q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.171875q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.734375 0.125 2.40625q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m-3.0 233.0l798.9921 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="1.0,3.0" d="m-3.0 233.0l798.9921 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m-56.0 -352.0l26.740158 26.740143" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="1.0,3.0" d="m-56.0 -352.0l26.740158 26.740143" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m439.8504 114.720474l0 0c0 -11.837158 9.595917 -21.433075 21.433075 -21.433075l0 0c5.684387 0 11.135986 2.2581253 15.155457 6.277603c4.01947 4.019478 6.277588 9.471062 6.277588 15.155472l0 0c0 11.837158 -9.595886 21.43306 -21.433044 21.43306l0 0c-11.837158 0 -21.433075 -9.5959015 -21.433075 -21.43306z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m439.8504 114.720474l0 0c0 -11.837158 9.595917 -21.433075 21.433075 -21.433075l0 0c5.684387 0 11.135986 2.2581253 15.155457 6.277603c4.01947 4.019478 6.277588 9.471062 6.277588 15.155472l0 0c0 11.837158 -9.595886 21.43306 -21.433044 21.43306l0 0c-11.837158 0 -21.433075 -9.5959015 -21.433075 -21.43306z" fill-rule="nonzero"></path><path fill="#000000" d="m462.65924 125.421715l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m439.8504 34.841206l0 0c0 -11.837156 9.595917 -21.43307 21.433075 -21.43307l0 0c5.684387 0 11.135986 2.2581205 15.155457 6.2776012c4.01947 4.0194798 6.277588 9.4710655 6.277588 15.155468l0 0c0 11.837158 -9.595886 21.433071 -21.433044 21.433071l0 0c-11.837158 0 -21.433075 -9.595913 -21.433075 -21.433071z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m439.8504 34.841206l0 0c0 -11.837156 9.595917 -21.43307 21.433075 -21.43307l0 0c5.684387 0 11.135986 2.2581205 15.155457 6.2776012c4.01947 4.0194798 6.277588 9.4710655 6.277588 15.155468l0 0c0 11.837158 -9.595886 21.433071 -21.433044 21.433071l0 0c-11.837158 0 -21.433075 -9.595913 -21.433075 -21.433071z" fill-rule="nonzero"></path><path fill="#000000" d="m457.3456 45.542454l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m480.6063 -7.6771655l74.04727 0l0 49.889763l-74.04727 0z" fill-rule="nonzero"></path><path fill="#000000" d="m490.13754 13.570958q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.0468755q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625005q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.87499905 0.46875 2.859374q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.64062405 -0.59375 -0.99999905q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671874l3.59375 -5.124999l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.218749l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.82812405l-2.59375 3.890624l-2.015625 0zm10.875 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm4.667694 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.874999l1.796875 0l2.046875 5.71875q0.40625 1.078124 0.71875 2.281249q0.28125 -1.15625 0.6875 -2.249999l2.09375 -5.75l1.671875 0l-3.75 10.031249q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm13.96875 -9.468749l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 0.99999905q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.031249 0.578125 -1.640624q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.1718755q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.7343755 0.125 2.4062505q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m482.71652 70.097115l74.04727 0l0 49.889763l-74.04727 0z" fill-rule="nonzero"></path><path fill="#000000" d="m492.24777 91.34524q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.046875q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.875 0.46875 2.859375q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.640625 -0.59375 -1.0q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671875l3.59375 -5.125l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.21875l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.828125l-2.59375 3.890625l-2.015625 0zm10.875 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm4.667694 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm13.96875 -9.46875l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 1.0q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.03125 0.578125 -1.640625q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.171875q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.734375 0.125 2.40625q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m470.71652 226.93701l74.04727 0l0 49.88977l-74.04727 0z" fill-rule="nonzero"></path><path fill="#000000" d="m480.24777 248.18513q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.046875q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.875 0.46875 2.859375q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.89060974q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.2031097q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.640625 -0.59375 -1.0q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm5.840271 5.671875l3.59375 -5.125l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.21875l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.828125l-2.59375 3.890625l-2.015625 0zm10.875 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65623474 -1.171875 0.99998474l-0.46875 -0.71873474q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm4.667694 3.7968597l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.18748474 0.5625 -0.51560974q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.2343597q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm13.96875 -9.468735l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 1.0q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.79685974 -0.3125 1.2656097q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34373474 0.3125 -1.5624847q0 -2.3125 0.09375 -2.9375q0.140625 -1.03125 0.578125 -1.640625q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.171875q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.734375 0.125 2.40625q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m445.33804 264.11685l74.04727 0l0 55.527557l-74.04727 0z" fill-rule="nonzero"></path><path fill="#000000" d="m455.58804 294.8181l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.141357 8.65625l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m437.30435 289.23096l0 0c0 -15.333496 12.430267 -27.763763 27.763763 -27.763763l0 0c7.3634033 0 14.425232 2.9251099 19.631958 8.131836c5.206726 5.2066956 8.131836 12.268524 8.131836 19.631927l0 0c0 15.333527 -12.430267 27.763794 -27.763794 27.763794l0 0c-15.333496 0 -27.763763 -12.430267 -27.763763 -27.763794z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m437.30435 289.23096l0 0c0 -15.333496 12.430267 -27.763763 27.763763 -27.763763l0 0c7.3634033 0 14.425232 2.9251099 19.631958 8.131836c5.206726 5.2066956 8.131836 12.268524 8.131836 19.631927l0 0c0 15.333527 -12.430267 27.763794 -27.763794 27.763794l0 0c-15.333496 0 -27.763763 -12.430267 -27.763763 -27.763794z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m624.0 191.0l317.10236 0l0 37.007874l-317.10236 0z" fill-rule="nonzero"></path><path fill="#000000" d="m635.7969 217.92l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.594482 1.828125l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.516357 5.875l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.1520386 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.266296 4.921875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.9783325 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m624.7559 235.99213l317.10236 0l0 37.007874l-317.10236 0z" fill-rule="nonzero"></path><path fill="#000000" d="m641.4434 261.69336q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.0156097 -0.46875 -1.4374847q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.4687347l-1.640625 -0.23435974q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.5312347l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.4851074 4.9375l0 -8.54686l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.54686l-1.65625 0zm8.433289 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.6562347l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.7499847q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277039 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.4843597 1.265625 -3.8593597q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.7968597q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.2343597 -0.625 -1.8593597q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.0468597zm9.094482 5.875l0 -9.85936l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.89060974 -0.28125 1.9531097l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/static-analysis/template.go b/content/2014/static-analysis/template.go
deleted file mode 100644
index 7c16792..0000000
--- a/content/2014/static-analysis/template.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// +build ignore,OMIT
-
-package P
-
-import "fmt"
-
-func before(s string) { fmt.Printf("%s\n", s) }
-func after(s string)  { fmt.Println(s) }
diff --git a/content/2014/static-analysis/tools.svg b/content/2014/static-analysis/tools.svg
deleted file mode 100644
index 82fb374..0000000
--- a/content/2014/static-analysis/tools.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 871.0 380.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l871.0 0l0 380.0l-871.0 0l0 -380.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l871.3622 0l0 380.9685l-871.3622 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m286.063 255.37534l271.30707 0l0 114.77164l-271.30707 0z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m761.2782 249.90572l0 0c0 -5.7635803 4.6723022 -10.435898 10.435913 -10.435898l84.76599 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.611511 3.0566406 7.3792877l0 41.742355c0 5.763611 -4.6723022 10.435913 -10.435913 10.435913l-84.76599 0c-5.763611 0 -10.435913 -4.6723022 -10.435913 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m761.2782 249.90572l0 0c0 -5.7635803 4.6723022 -10.435898 10.435913 -10.435898l84.76599 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.611511 3.0566406 7.3792877l0 41.742355c0 5.763611 -4.6723022 10.435913 -10.435913 10.435913l-84.76599 0c-5.763611 0 -10.435913 -4.6723022 -10.435913 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m791.7208 278.5094l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672607 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.688171 4.921875l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7770996 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm19.197021 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m22.585302 179.2023l0 0c0 -5.7635803 4.6723137 -10.435898 10.435904 -10.435898l447.6321 0c2.7677612 0 5.42218 1.0994873 7.379303 3.05661c1.9570923 1.9571075 3.05661 4.6115265 3.05661 7.3792877l0 41.74237c0 5.7635956 -4.672333 10.435898 -10.435913 10.435898l-447.6321 0c-5.76359 0 -10.435904 -4.6723022 -10.435904 -10.435898z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m22.585302 179.2023l0 0c0 -5.7635803 4.6723137 -10.435898 10.435904 -10.435898l447.6321 0c2.7677612 0 5.42218 1.0994873 7.379303 3.05661c1.9570923 1.9571075 3.05661 4.6115265 3.05661 7.3792877l0 41.74237c0 5.7635956 -4.672333 10.435898 -10.435913 10.435898l-447.6321 0c-5.76359 0 -10.435904 -4.6723022 -10.435904 -10.435898z" fill-rule="nonzero"></path><path fill="#000000" d="m196.51726 191.61848l1.6875 -0.140625q0.125 1.015625 0.5625 1.671875q0.4375 0.65625 1.359375 1.0625q0.9375 0.40625 2.09375 0.40625q1.03125 0 1.8125 -0.3125q0.796875 -0.3125 1.1875 -0.84375q0.390625 -0.53125 0.390625 -1.15625q0 -0.640625 -0.375 -1.109375q-0.375 -0.484375 -1.234375 -0.8125q-0.546875 -0.21875 -2.421875 -0.65625q-1.875 -0.453125 -2.625 -0.859375q-0.96875 -0.515625 -1.453125 -1.265625q-0.46875 -0.75 -0.46875 -1.6875q0 -1.03125 0.578125 -1.921875q0.59375 -0.90625 1.703125 -1.359375q1.125 -0.46875 2.5 -0.46875q1.515625 0 2.671875 0.484375q1.15625 0.484375 1.765625 1.4375q0.625 0.9375 0.671875 2.140625l-1.71875 0.125q-0.140625 -1.28125 -0.953125 -1.9375q-0.796875 -0.671875 -2.359375 -0.671875q-1.625 0 -2.375 0.609375q-0.75 0.59375 -0.75 1.4375q0 0.734375 0.53125 1.203125q0.515625 0.46875 2.703125 0.96875q2.203125 0.5 3.015625 0.875q1.1875 0.546875 1.75 1.390625q0.578125 0.828125 0.578125 1.921875q0 1.09375 -0.625 2.0625q-0.625 0.953125 -1.796875 1.484375q-1.15625 0.53125 -2.609375 0.53125q-1.84375 0 -3.09375 -0.53125q-1.25 -0.546875 -1.96875 -1.625q-0.703125 -1.078125 -0.734375 -2.453125zm12.443573 0l1.6875 -0.140625q0.125 1.015625 0.5625 1.671875q0.4375 0.65625 1.359375 1.0625q0.9375 0.40625 2.09375 0.40625q1.03125 0 1.8125 -0.3125q0.796875 -0.3125 1.1875 -0.84375q0.390625 -0.53125 0.390625 -1.15625q0 -0.640625 -0.375 -1.109375q-0.375 -0.484375 -1.234375 -0.8125q-0.546875 -0.21875 -2.421875 -0.65625q-1.875 -0.453125 -2.625 -0.859375q-0.96875 -0.515625 -1.453125 -1.265625q-0.46875 -0.75 -0.46875 -1.6875q0 -1.03125 0.578125 -1.921875q0.59375 -0.90625 1.703125 -1.359375q1.125 -0.46875 2.5 -0.46875q1.515625 0 2.671875 0.484375q1.15625 0.484375 1.765625 1.4375q0.625 0.9375 0.671875 2.140625l-1.71875 0.125q-0.140625 -1.28125 -0.953125 -1.9375q-0.796875 -0.671875 -2.359375 -0.671875q-1.625 0 -2.375 0.609375q-0.75 0.59375 -0.75 1.4375q0 0.734375 0.53125 1.203125q0.515625 0.46875 2.703125 0.96875q2.203125 0.5 3.015625 0.875q1.1875 0.546875 1.75 1.390625q0.578125 0.828125 0.578125 1.921875q0 1.09375 -0.625 2.0625q-0.625 0.953125 -1.796875 1.484375q-1.15625 0.53125 -2.609375 0.53125q-1.84375 0 -3.09375 -0.53125q-1.25 -0.546875 -1.96875 -1.625q-0.703125 -1.078125 -0.734375 -2.453125zm11.552948 4.375l5.234375 -13.59375l1.9375 0l5.5625 13.59375l-2.046875 0l-1.59375 -4.125l-5.6875 0l-1.484375 4.125l-1.921875 0zm3.921875 -5.578125l4.609375 0l-1.40625 -3.78125q-0.65625 -1.703125 -0.96875 -2.8125q-0.265625 1.3125 -0.734375 2.59375l-1.5 4.0zm15.501877 5.578125l0 -13.59375l1.8125 0l0 13.59375l-1.8125 0zm4.917679 0l0 -13.59375l6.03125 0q1.8125 0 2.75 0.359375q0.953125 0.359375 1.515625 1.296875q0.5625 0.921875 0.5625 2.046875q0 1.453125 -0.9375 2.453125q-0.921875 0.984375 -2.890625 1.25q0.71875 0.34375 1.09375 0.671875q0.78125 0.734375 1.484375 1.8125l2.3749847 3.703125l-2.2656097 0l-1.796875 -2.828125q-0.796875 -1.21875 -1.3125 -1.875q-0.5 -0.65625 -0.90625 -0.90625q-0.40625 -0.265625 -0.8125 -0.359375q-0.3125 -0.078125 -1.015625 -0.078125l-2.078125 0l0 6.046875l-1.796875 0zm1.796875 -7.59375l3.859375 0q1.234375 0 1.921875 -0.25q0.703125 -0.265625 1.0625 -0.828125q0.375 -0.5625 0.375 -1.21875q0 -0.96875 -0.703125 -1.578125q-0.703125 -0.625 -2.21875 -0.625l-4.296875 0l0 4.5zm18.156235 7.59375l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.297607 5.0l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm3.9382324 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.097931 0l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.566681 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016357 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" d="m230.30704 218.80598l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672592 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm8.031967 5.15625l3.9375 -14.0625l1.34375 0l-3.9375 14.0625l-1.34375 0zm5.761429 -3.171875l1.6562347 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.2812347 -2.359375zm9.32811 0l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.4375 1.71875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.7812805 0.296875 1.1562805 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.32815552 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m22.593176 249.90572l0 0c0 -5.7635803 4.6723137 -10.435898 10.435904 -10.435898l711.2857 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.611511 3.0566406 7.3792877l0 41.742355c0 5.763611 -4.6723022 10.435913 -10.435913 10.435913l-711.2857 0c-5.76359 0 -10.435904 -4.6723022 -10.435904 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m22.593176 249.90572l0 0c0 -5.7635803 4.6723137 -10.435898 10.435904 -10.435898l711.2857 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.611511 3.0566406 7.3792877l0 41.742355c0 5.763611 -4.6723022 10.435913 -10.435913 10.435913l-711.2857 0c-5.76359 0 -10.435904 -4.6723022 -10.435904 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m337.60226 266.6969l0 -12.0l-4.46875 0l0 -1.59375l10.765625 0l0 1.59375l-4.5 0l0 12.0l-1.796875 0zm7.645996 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm9.40625 -0.015625l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.610077 1.703125l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm20.730896 2.265625l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.890625 3.609375l0 -13.59375l1.671875 0l0 4.875q1.171875 -1.359375 2.953125 -1.359375q1.09375 0 1.890625 0.4375q0.8125 0.421875 1.15625 1.1875q0.359375 0.765625 0.359375 2.203125l0 6.25l-1.671875 0l0 -6.25q0 -1.25 -0.546875 -1.8125q-0.546875 -0.578125 -1.53125 -0.578125q-0.75 0 -1.40625 0.390625q-0.640625 0.375 -0.921875 1.046875q-0.28125 0.65625 -0.28125 1.8125l0 5.390625l-1.671875 0zm17.125702 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm15.547607 2.265625l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" d="m354.36215 289.5094l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672607 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm8.031952 5.15625l3.9375 -14.0625l1.34375 0l-3.9375 14.0625l-1.34375 0zm10.089569 -1.734375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.4489136 5.296875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm9.40625 -0.015625l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.610107 1.703125l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm8.438202 2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m23.889763 320.60913l0 0c0 -5.7635803 4.6723137 -10.435913 10.435905 -10.435913l822.1518 0c2.7677612 0 5.42218 1.0995178 7.3792725 3.05661c1.9571533 1.9571228 3.0566406 4.6115417 3.0566406 7.379303l0 41.74237c0 5.7635803 -4.6723022 10.435913 -10.435913 10.435913l-822.1518 0c-5.763592 0 -10.435905 -4.672333 -10.435905 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m23.889763 320.60913l0 0c0 -5.7635803 4.6723137 -10.435913 10.435905 -10.435913l822.1518 0c2.7677612 0 5.42218 1.0995178 7.3792725 3.05661c1.9571533 1.9571228 3.0566406 4.6115417 3.0566406 7.379303l0 41.74237c0 5.7635803 -4.6723022 10.435913 -10.435913 10.435913l-822.1518 0c-5.763592 0 -10.435905 -4.672333 -10.435905 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m419.3961 337.4003l0 -13.59375l5.125 0q1.359375 0 2.078125 0.125q1.0 0.171875 1.671875 0.640625q0.671875 0.46875 1.078125 1.3125q0.421875 0.84375 0.421875 1.84375q0 1.734375 -1.109375 2.9375q-1.09375 1.203125 -3.984375 1.203125l-3.484375 0l0 5.53125l-1.796875 0zm1.796875 -7.140625l3.515625 0q1.75 0 2.46875 -0.640625q0.734375 -0.65625 0.734375 -1.828125q0 -0.859375 -0.4375 -1.46875q-0.421875 -0.609375 -1.125 -0.796875q-0.453125 -0.125 -1.671875 -0.125l-3.484375 0l0 4.859375zm16.865448 5.921875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0632324 4.9375l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.5563965 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.75 -0.234375l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" d="m324.4924 360.2128l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672577 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm8.031982 5.15625l3.9375 -14.0625l1.34375 0l-3.9375 14.0625l-1.34375 0zm5.7145386 -5.90625q0.71875 -0.03125 1.15625 -0.390625q0.453125 -0.359375 0.59375 -1.0q0.15625 -0.640625 0.15625 -2.1875q0.015625 -1.5625 0.0625 -2.046875q0.09375 -0.78125 0.3125 -1.25q0.234375 -0.484375 0.5625 -0.765625q0.34375 -0.28125 0.859375 -0.421875q0.34375 -0.09375 1.140625 -0.09375l0.53125 0l0 1.453125l-0.296875 0q-0.96875 0 -1.28125 0.34375q-0.3125 0.34375 -0.3125 1.5625q0 2.421875 -0.09375 3.0625q-0.171875 1.0 -0.578125 1.546875q-0.40625 0.53125 -1.265625 0.9375q1.015625 0.4375 1.46875 1.3125q0.46875 0.875 0.46875 2.859375q0 1.8125 0.03125 2.15625q0.078125 0.640625 0.375 0.890625q0.3125 0.25 1.1875 0.25l0.296875 0l0 1.453125l-0.53125 0q-0.90625 0 -1.3125 -0.15625q-0.59375 -0.203125 -0.984375 -0.6875q-0.390625 -0.46875 -0.515625 -1.203125q-0.109375 -0.734375 -0.125 -2.40625q0 -1.671875 -0.15625 -2.3125q-0.140625 -0.640625 -0.59375 -1.0q-0.4375 -0.375 -1.15625 -0.40625l0 -1.5zm6.949646 9.453125l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm15.297607 3.65625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0632324 4.9375l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.5563965 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.75 -0.234375l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.665802 0l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm11.183319 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm3.406952 2.0l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm13.65625 1.4375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm1.9645691 1.5l0 -1.90625l1.90625 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46875 -0.71875q0.53125 -0.21875 0.78125 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.953125 0zm4.0739136 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.4375 -0.671875l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.328125 2.390625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm10.375702 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm17.125702 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.665802 0l0 -1.90625l1.9062195 0l0 1.90625q0 1.046875 -0.375 1.6875q-0.375 0.65625 -1.171875 1.0l-0.46871948 -0.71875q0.5312195 -0.21875 0.7812195 -0.671875q0.25 -0.453125 0.28125 -1.296875l-0.9530945 0zm8.402069 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm0.9020386 -3.421875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.297607 4.921875l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.938171 -5.671875l0 1.5q-0.71875 0.03125 -1.171875 0.40625q-0.453125 0.359375 -0.609375 1.0q-0.140625 0.625 -0.15625 2.1875q0 1.546875 -0.046875 2.03125q-0.078125 0.796875 -0.3125 1.265625q-0.21875 0.46875 -0.5625 0.75q-0.328125 0.28125 -0.84375 0.421875q-0.359375 0.109375 -1.15625 0.109375l-0.515625 0l0 -1.453125l0.28125 0q0.96875 0 1.28125 -0.359375q0.3125 -0.34375 0.3125 -1.5625q0 -2.3125 0.09375 -2.9375q0.140625 -1.03125 0.578125 -1.640625q0.453125 -0.625 1.28125 -0.96875q-1.078125 -0.5 -1.515625 -1.34375q-0.4375 -0.84375 -0.4375 -2.828125q0 -1.8125 -0.046875 -2.171875q-0.0625 -0.625 -0.359375 -0.859375q-0.296875 -0.25 -1.1875 -0.25l-0.28125 0l0 -1.453125l0.515625 0q0.90625 0 1.3125 0.140625q0.59375 0.203125 0.984375 0.6875q0.390625 0.484375 0.5 1.21875q0.125 0.734375 0.125 2.40625q0.015625 1.671875 0.15625 2.3125q0.15625 0.625 0.609375 1.0q0.453125 0.359375 1.171875 0.390625z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m22.585302 106.80336l0 0c0 -5.7635956 4.6723137 -10.435905 10.435904 -10.435905l293.20694 0c2.7677612 0 5.42218 1.0994949 7.379303 3.0566025c1.9570923 1.9571152 3.0565796 4.6115265 3.0565796 7.379303l0 41.742355c0 5.7635956 -4.6723022 10.435913 -10.435883 10.435913l-293.20694 0l0 0c-5.76359 0 -10.435904 -4.6723175 -10.435904 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m22.585302 106.80336l0 0c0 -5.7635956 4.6723137 -10.435905 10.435904 -10.435905l293.20694 0c2.7677612 0 5.42218 1.0994949 7.379303 3.0566025c1.9570923 1.9571152 3.0565796 4.6115265 3.0565796 7.379303l0 41.742355c0 5.7635956 -4.6723022 10.435913 -10.435883 10.435913l-293.20694 0l0 0c-5.76359 0 -10.435904 -4.6723175 -10.435904 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m87.2565 123.594536l0 -13.59375l5.125 0q1.359375 0 2.078125 0.125q1.0 0.171875 1.671875 0.640625q0.671875 0.46875 1.078125 1.3125q0.421875 0.84375 0.421875 1.84375q0 1.734375 -1.109375 2.9375q-1.09375 1.203125 -3.984375 1.203125l-3.484375 0l0 5.53125l-1.796875 0zm1.796875 -7.140625l3.515625 0q1.75 0 2.46875 -0.640625q0.734375 -0.65625 0.734375 -1.828125q0 -0.859375 -0.4375 -1.46875q-0.421875 -0.609375 -1.125 -0.796875q-0.453125 -0.125 -1.671875 -0.125l-3.484375 0l0 4.859375zm9.802948 2.21875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.297592 -6.765625l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129196 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277054 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094467 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm14.599106 4.0q-1.375 -1.75 -2.328125 -4.078125q-0.953125 -2.34375 -0.953125 -4.84375q0 -2.21875 0.703125 -4.234375q0.84375 -2.34375 2.578125 -4.671875l1.203125 0q-1.125 1.921875 -1.484375 2.75q-0.5625 1.28125 -0.890625 2.671875q-0.40625 1.734375 -0.40625 3.484375q0 4.46875 2.78125 8.921875l-1.203125 0zm9.462677 -5.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.047592 4.9375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.566696 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm3.4069672 2.0l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm11.09375 6.9375l-1.1875 0q2.765625 -4.453125 2.765625 -8.921875q0 -1.734375 -0.390625 -3.453125q-0.328125 -1.390625 -0.890625 -2.671875q-0.359375 -0.84375 -1.484375 -2.78125l1.1875 0q1.75 2.328125 2.578125 4.671875q0.71875 2.015625 0.71875 4.234375q0 2.5 -0.96875 4.84375q-0.953125 2.328125 -2.328125 4.078125zm16.73973 -5.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813217 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.047592 4.9375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.097946 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm8.734375 -6.734375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.1562347 0 1.7031097 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.7031097 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.1718597 0 2.0468597 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.4999847 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.7656097 0.46875 2.4687347 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.0781097 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm10.01561 -8.75l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm3.4573364 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" d="m139.0886 146.40704l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672592 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.0937653 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625153 0 -3.3437653 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.0781403 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.2500153 0 -2.0781403 0.9375q-0.828125 0.9375 -0.828125 2.828125zm8.031967 5.15625l3.9375 -14.0625l1.34375 0l-3.9375 14.0625l-1.34375 0zm6.433319 3.546875l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm8.235077 -0.046875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.297607 -6.765625l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129181 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031982 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277039 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m379.15222 108.49889l0 0c0 -5.763588 4.672333 -10.435898 10.435913 -10.435898l91.065186 0c2.7677917 0 5.4222107 1.0994873 7.379303 3.0566025c1.9571228 1.9571075 3.05661 4.6115265 3.05661 7.3792953l0 41.742363c0 5.7635956 -4.6723022 10.435913 -10.435913 10.435913l-91.065186 0c-5.7635803 0 -10.435913 -4.6723175 -10.435913 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m379.15222 108.49889l0 0c0 -5.763588 4.672333 -10.435898 10.435913 -10.435898l91.065186 0c2.7677917 0 5.4222107 1.0994873 7.379303 3.0566025c1.9571228 1.9571075 3.05661 4.6115265 3.05661 7.3792953l0 41.742363c0 5.7635956 -4.6723022 10.435913 -10.435913 10.435913l-91.065186 0c-5.7635803 0 -10.435913 -4.6723175 -10.435913 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m421.81894 136.29008l0 -13.593758l1.671875 0l0 13.593758l-1.671875 0zm4.1448364 0l0 -13.593758l1.671875 0l0 13.593758l-1.671875 0zm3.879181 0.8125l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.2031326 1.484375 -1.8437576q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515633q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.9218826 -1.921875 -0.9218826q-1.109375 0 -1.890625 0.9062576q-0.78125 0.890625 -0.78125 2.671875zm8.672607 0.1875q0 -2.734375 1.53125 -4.0625076q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.3281326 1.296875 3.6718826q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375076 -2.0625 -0.9375076q-1.25 0 -2.078125 0.9375076q-0.828125 0.9375 -0.828125 2.828125z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m642.81366 179.2023l0 0c0 -5.7635803 4.6723022 -10.435898 10.435913 -10.435898l91.065186 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.6115265 3.0566406 7.3792877l0 41.74237c0 5.7635956 -4.6723022 10.435913 -10.435913 10.435913l-91.065186 0c-5.763611 0 -10.435913 -4.6723175 -10.435913 -10.435913z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m642.81366 179.2023l0 0c0 -5.7635803 4.6723022 -10.435898 10.435913 -10.435898l91.065186 0c2.7677612 0 5.42218 1.0994873 7.3792725 3.05661c1.9571533 1.9571075 3.0566406 4.6115265 3.0566406 7.3792877l0 41.74237c0 5.7635956 -4.6723022 10.435913 -10.435913 10.435913l-91.065186 0c-5.763611 0 -10.435913 -4.6723175 -10.435913 -10.435913z" fill-rule="nonzero"></path><path fill="#000000" d="m657.7314 207.80598l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672607 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.266357 4.921875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.9782715 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813171 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.85931396 0.3125 -1.843689 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.031189 -0.25 2.984314 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.906189 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.249939 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734314 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96868896 0 1.718689 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm22.290833 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m502.37796 178.58812l0 0c0 -5.4243774 4.397339 -9.821716 9.821686 -9.821716l39.285706 0l0 0c2.6049194 0 5.1030884 1.03479 6.9450073 2.876709c1.841919 1.8419342 2.876709 4.3401337 2.876709 6.9450073l0 42.970734c0 5.4243927 -4.397339 9.821732 -9.821716 9.821732l-39.285706 0l0 0c-5.424347 0 -9.821686 -4.397339 -9.821686 -9.821732z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m502.37796 178.58812l0 0c0 -5.4243774 4.397339 -9.821716 9.821686 -9.821716l39.285706 0l0 0c2.6049194 0 5.1030884 1.03479 6.9450073 2.876709c1.841919 1.8419342 2.876709 4.3401337 2.876709 6.9450073l0 42.970734c0 5.4243927 -4.397339 9.821732 -9.821716 9.821732l-39.285706 0l0 0c-5.424347 0 -9.821686 -4.397339 -9.821686 -9.821732z" fill-rule="nonzero"></path><path fill="#000000" d="m523.3833 206.99348l-3.75 -9.859375l1.765625 0l2.125 5.90625q0.34375 0.953125 0.625 1.984375q0.21875 -0.78125 0.625 -1.875l2.1875 -6.015625l1.71875 0l-3.734375 9.859375l-1.5625 0zm13.34375 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm12.766357 4.375l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m22.585302 34.404408l0 0c0 -5.76359 4.6723137 -10.435904 10.435904 -10.435904l63.66363 0c2.7677689 0 5.422188 1.099493 7.3792953 3.0566063c1.9571152 1.9571114 3.05661 4.6115246 3.05661 7.3792973l0 41.742367c0 5.763588 -4.6723175 10.435905 -10.435905 10.435905l-63.66363 0c-5.76359 0 -10.435904 -4.6723175 -10.435904 -10.435905z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m22.585302 34.404408l0 0c0 -5.76359 4.6723137 -10.435904 10.435904 -10.435904l63.66363 0c2.7677689 0 5.422188 1.099493 7.3792953 3.0566063c1.9571152 1.9571114 3.05661 4.6115246 3.05661 7.3792973l0 41.742367c0 5.763588 -4.6723175 10.435905 -10.435905 10.435905l-63.66363 0c-5.76359 0 -10.435904 -4.6723175 -10.435904 -10.435905z" fill-rule="nonzero"></path><path fill="#000000" d="m40.071632 57.273712q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.266342 4.921875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516342 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.926071 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.2500076 1.34375 1.2500076 3.796875q0 0.140625 -0.015625 0.4375l-7.3437576 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m116.25197 33.34929l0 0c0 -5.76359 4.67231 -10.435904 10.435905 -10.435904l84.76598 0c2.7677765 0 5.42218 1.0994949 7.379303 3.0566063c1.9571075 1.9571114 3.0565948 4.6115246 3.0565948 7.3792973l0 41.742363c0 5.7635956 -4.6723022 10.435905 -10.435898 10.435905l-84.76598 0c-5.7635956 0 -10.435905 -4.67231 -10.435905 -10.435905z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m116.25197 33.34929l0 0c0 -5.76359 4.67231 -10.435904 10.435905 -10.435904l84.76598 0c2.7677765 0 5.42218 1.0994949 7.379303 3.0566063c1.9571075 1.9571114 3.0565948 4.6115246 3.0565948 7.3792973l0 41.742363c0 5.7635956 -4.6723022 10.435905 -10.435898 10.435905l-84.76598 0c-5.7635956 0 -10.435905 -4.67231 -10.435905 -10.435905z" fill-rule="nonzero"></path><path fill="#000000" d="m144.60849 50.952972l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875zm8.672592 0.1875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm15.672592 4.921875l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm8.641342 0q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm15.719467 1.3125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375z" fill-rule="nonzero"></path><path fill="#000000" d="m132.87332 68.06235l0 -1.6875l5.125 0l0 1.6875l-5.125 0zm13.290802 2.859375q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813217 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.047592 4.9375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.097946 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm8.734375 -6.734375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm10.015625 -8.75l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm3.4573212 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m379.15222 41.07631l0 0c0 -5.4011917 4.37854 -9.779722 9.779724 -9.779722l92.37756 0c2.59375 0 5.0812683 1.0303631 6.9153137 2.8644161c1.8340454 1.834053 2.8644104 4.3215637 2.8644104 6.915306l0 39.11772c0 5.4011917 -4.37854 9.779724 -9.779724 9.779724l-92.37756 0c-5.401184 0 -9.779724 -4.3785324 -9.779724 -9.779724z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m379.15222 41.07631l0 0c0 -5.4011917 4.37854 -9.779722 9.779724 -9.779722l92.37756 0c2.59375 0 5.0812683 1.0303631 6.9153137 2.8644161c1.8340454 1.834053 2.8644104 4.3215637 2.8644104 6.915306l0 39.11772c0 5.4011917 -4.37854 9.779724 -9.779724 9.779724l-92.37756 0c-5.401184 0 -9.779724 -4.3785324 -9.779724 -9.779724z" fill-rule="nonzero"></path><path fill="#000000" d="m419.94208 67.55517l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm9.672577 4.921875l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.105194 -2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.4375 1.71875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078827 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m231.021 34.404408l0 0c0 -5.76359 4.6723175 -10.435904 10.435898 -10.435904l84.765976 0c2.7677917 0 5.4222107 1.099493 7.379303 3.0566063c1.9571228 1.9571114 3.05661 4.6115246 3.05661 7.3792973l0 41.742367c0 5.763588 -4.6723022 10.435905 -10.435913 10.435905l-84.765976 0c-5.7635803 0 -10.435898 -4.6723175 -10.435898 -10.435905z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m231.021 34.404408l0 0c0 -5.76359 4.6723175 -10.435904 10.435898 -10.435904l84.765976 0c2.7677917 0 5.4222107 1.099493 7.379303 3.0566063c1.9571228 1.9571114 3.05661 4.6115246 3.05661 7.3792973l0 41.742367c0 5.763588 -4.6723022 10.435905 -10.435913 10.435905l-84.765976 0c-5.7635803 0 -10.435898 -4.6723175 -10.435898 -10.435905z" fill-rule="nonzero"></path><path fill="#000000" d="m261.4524 47.586212l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281952 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031982 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277039 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm8.000732 5.875l3.59375 -5.125l-3.328125 -4.734375l2.09375 0l1.515625 2.3125q0.421875 0.65625 0.671875 1.109375q0.421875 -0.609375 0.765625 -1.09375l1.65625 -2.328125l1.984375 0l-3.390625 4.640625l3.65625 5.21875l-2.046875 0l-2.03125 -3.0625l-0.53125 -0.828125l-2.59375 3.890625l-2.015625 0zm14.09375 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#000000" d="m247.23538 76.97684l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm8.828827 4.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.629211 0l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm3.922577 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm17.087677 0l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm8.860107 -6.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129181 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm10.078857 0.8125l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875z" fill-rule="nonzero"></path><path fill="#fff2cc" d="m572.5958 178.58812l0 0c0 -5.4243774 4.397339 -9.821716 9.821716 -9.821716l39.285645 0l0 0c2.6049194 0 5.1030884 1.03479 6.9450073 2.876709c1.84198 1.8419342 2.87677 4.3401337 2.87677 6.9450073l0 42.970734c0 5.4243927 -4.397339 9.821732 -9.821777 9.821732l-39.285645 0l0 0c-5.4243774 0 -9.821716 -4.397339 -9.821716 -9.821732z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="butt" d="m572.5958 178.58812l0 0c0 -5.4243774 4.397339 -9.821716 9.821716 -9.821716l39.285645 0l0 0c2.6049194 0 5.1030884 1.03479 6.9450073 2.876709c1.84198 1.8419342 2.87677 4.3401337 2.87677 6.9450073l0 42.970734c0 5.4243927 -4.397339 9.821732 -9.821777 9.821732l-39.285645 0l0 0c-5.4243774 0 -9.821716 -4.397339 -9.821716 -9.821732z" fill-rule="nonzero"></path><path fill="#000000" d="m599.68463 203.82161l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm8.813232 6.6875l1.609375 0.25q0.109375 0.75 0.578125 1.09375q0.609375 0.453125 1.6875 0.453125q1.171875 0 1.796875 -0.46875q0.625 -0.453125 0.859375 -1.28125q0.125 -0.515625 0.109375 -2.15625q-1.09375 1.296875 -2.71875 1.296875q-2.03125 0 -3.15625 -1.46875q-1.109375 -1.46875 -1.109375 -3.515625q0 -1.40625 0.515625 -2.59375q0.515625 -1.203125 1.484375 -1.84375q0.96875 -0.65625 2.265625 -0.65625q1.75 0 2.875 1.40625l0 -1.1875l1.546875 0l0 8.515625q0 2.3125 -0.46875 3.265625q-0.46875 0.96875 -1.484375 1.515625q-1.015625 0.5625 -2.5 0.5625q-1.765625 0 -2.859375 -0.796875q-1.078125 -0.796875 -1.03125 -2.390625zm1.375 -5.921875q0 1.953125 0.765625 2.84375q0.78125 0.890625 1.9375 0.890625q1.140625 0 1.921875 -0.890625q0.78125 -0.890625 0.78125 -2.78125q0 -1.8125 -0.8125 -2.71875q-0.796875 -0.921875 -1.921875 -0.921875q-1.109375 0 -1.890625 0.90625q-0.78125 0.890625 -0.78125 2.671875z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2014/taste.slide b/content/2014/taste.slide
deleted file mode 100644
index dbdf2b8..0000000
--- a/content/2014/taste.slide
+++ /dev/null
@@ -1,480 +0,0 @@
-A Taste of Go
-August 14, 2014
-
-Robert Griesemer
-Google
-gri@golang.org
-
-
-* The Go programming language
-
-- Modern
-# OO support but not type-oriented
-# strong support for concurrency
-- Compact, concise, general-purpose
-- Imperative, statically type-checked, dynamically type-safe
-- Garbage-collected
-- Compiles to native code, statically linked
-- Fast compilation, efficient execution
-
-Designed by programmers for programmers!
-
-
-* Hello, World!
-
-.play taste/hello.go
-
-# Unicode
-# Programs are organized in packages
-# A package is a set of package files
-# A package file expresses its dependencies on other packages via import declarations
-# The remainder of a package file is a list of (constant, variable, type, and function) declarations
-
-
-* Hello, World! Internet-style
-
-.play taste/hellohttp.go
-
-
-* Program elements
-
-* Constants
-
-- Maintained precisely:
-	const e = 2.71828182845904523536028747135266249775724709369995957496696763
-	const third = 1.0/3
-- Typed or without type:
-	const M64 int64 = 1<<20
-        const M = 1<<20
-- Evaluated at compile-time:
-	const big = 1<<100 / 1e30  // valid constant expression
-
-Compiler complains if a constant doesn't fit where it is _used_.
-
-
-* Variables
-
-- Statically typed:
-	var x int
-	var s, t string
-- Implicitly or explicitly initialized:
-	var x int
-	var s, t string = "foo", "bar"  // multiple assignment
-
-	var x = 42                      // int
-	var s, b = "foo", true          // string, bool
-- Short variable declaration (inside functions only):
-	x := 42
-	s, b := "foo", true
-- Can safely take address of _any_ variable!
-	return &x
-# compiler will do the right thing
-
-
-* Types
-
-- Predeclared types, the usual suspects:
-	uint8 (byte), uint16, uint32, uint32, uint64,
-	int8, int16, int32, int32 (rune), int64,
-	float32, float64,
-	complex64, complex128,
-	uint, int, uintptr,
-	bool, string,
-	error  // not so usual
-
-- Composite types:
-	array, struct, pointer, function,
-	slice, map, channel
-
-- Abstract type:
-	interface
-
-
-* Type declarations
-
-- Composition from left-to-right (Pascal style):
-	[10]byte  // array of 10 bytes
-
-	struct {
-		name        string
-		left, right *Node
-		action      func(*Node)
-	}
-
-	func(a, b, c int)
-	func(http.ResponseWriter, *http.Request) error
-
-- A type declaration defines a _new_ type:
-	type Weekday int
-
-	type Point struct {
-		x, y int
-	}
-
-
-* Slices
-
-	[]T  // slice of T
-
-- Descriptor for an underlying array segment
-- May grow and shrink
-- Has length and capacity
-- Assigning a slice copies the descriptor, not the underlying array
-
-Common slice operations:
-
-	len(s)
-	s[i]
-	s[i:j]
-	append(s, x)  // append element x to slice s and return new slice
-
-- Slices play the role of dynamically sized arrays
-- Widely used in Go code
-
-
-* Maps
-
-	map[K]V  // map K -> V
-
-- Map is a language-supplied hash table
-- Maps values of key type K to values of type V
-- Assigning a map copies the map reference, not the map contents
-
-Common map operations:
-
-	make(map[K]V)
-	len(m)
-	m[k]
-	delete(m, k)
-
-- Map iteration order is not specified:
-
-	for key, value := range m {
-		// order of key sequence different each time
-	}
-
-* Statements
-
-- Curly braces (C style)
-- Multiple assignments and some other new constructs
-- Many cleanups: mandatory braces, no parentheses for conditionals, implicit break in switches, no semicolons, etc.
-	a, b = b, a                 // swap
-	f, err = os.Open(filename)
-
-	if x < y {
-		return x
-	} else {
-		return y
-	}
-
-	switch day {
-	case Mon:
-		...
-		// break is implicit
-	case Tue, Wed:
-		...
-	}
-
-
-* A few words on syntax
-
-_Syntax_doesn't_matter_unless_you_are_a_programmer._
--- Rob Pike
-
-Corollary:
-
-_Compactness_of_syntax_doesn't_matter_unless_you_are_reading_programs._
-
-Compact is not the same as terse. Readability is crucial.
-
-
-* An example: IndexOfAny in Java
-
-	public static int IndexOfAny(String str, char[] chars) {
-		if (isEmpty(str) || ArrayUtils.isEmpty(chars)) {
-			return -1;
-		}
-		for (int i = 0; i < str.length(); i++) {
-			char ch = str.charAt(i);
-			for (int j = 0; j < chars.length; j++) {
-				if (chars[j] == ch) {
-					return i;
-				}
-			}
-		}
-		return -1;
-	}
-
-299 chars (100%), 101 tokens (100%)
-
-
-* IndexOfAny in Go
-
-.code taste/examples.go /IndexOfAny START/,/IndexOfAny END/
-
-217 chars (73%), 62 tokens (61%)
-
-Almost 30% less text and a surprising 40% fewer tokens to read!
-
-_Less_clutter_means_reduced_cognitive_load._
-
-# minimum improvement
-# typical Go programs tend to require much less than 70% of the code size of equivalent programs in other languages
-
-
-* Functions
-
-- Regular functions
-	func Sin(x float64) float64
-	func AddScale(x, y int, f float64) int
-
-- Multiple return values
-	func Write(data []byte) (written int, err error)
-
-- Variadic parameter lists without magic
-	func Printf(format string, args ...interface{})
-
-- Functions are first-class values
-	var delta int
-	return func(x int) int { return x + delta }
-
-
-* Function values: An example
-
-	// walkStdLib calls f with the filename of each .go
-	// file in the std library until f return false.
-	func walkStdLib(f func(filename string) bool)
-
-Calling walkStdLib with a closure:
-
-.code taste/walk.go /example START/,/example END/
-
-More directly:
-
-.play taste/walk.go /main START/,/main END/
-
-
-* Methods
-
-Methods are functions with a _receiver_ parameter:
-
-.code taste/point.go /String START/,/String END/
-
-The receiver binds the method to its _base_type_ (Point):
-
-.code taste/point.go /Point START/,/Point END/
-
-Methods are invoked via the usual dot notation:
-
-.play taste/point.go /main START/,/main END/
-
-
-* Methods can be defined for any user-defined type!
-
-For the Weekday type:
-
-.code taste/weekday.go /type START/,/type END/
-
-Define String method on Weekday:
-
-.code taste/weekday.go /String START/,/String END/
-
-.play taste/weekday.go /main START/,/main END/
-
-Method calls via non-interface types are statically dispatched.
-
-* Interface types
-
-- Abstract
-- Define (possibly empty) set of method signatures
-- Values of _any_type_ that implement all methods of an interface can be assigned to a variable of that interface.
-
-Examples:
-
-	interface{}  // empty interface
-
-	interface {
-		String() string
-	}
-
-	interface {
-		Len() int
-		Swap(i, j int)
-		Less(i, j int) bool
-	}
-
-
-* Using interfaces
-
-.code taste/stringer.go /Stringer START/,/Stringer END/
-
-Both Weekday and Point define a String method, so values of both can be assigned to
-a variable of Stringer type:
-
-.play taste/stringer.go /main START/,/main END/
-
-Method calls via interface types are dynamically dispatched ("virtual function call").
-
-
-* A larger example
-
-
-* Top 10 identifiers in std library
-
-.code taste/idents.go
-
-	$ cat $(find $GOROOT -name '*.go') | ./idents | sort | uniq -c | sort -nr | sed 10q
-
-
-* A variation: Histogram of Go statements
-
-A histogram is a map from statement name ("if", "for", etc.) to use count:
-
-.code taste/histo0.go /histogram START/,/histogram END/
-
-Algorithm:
-
-- Use walkStdLib to traverse all files of the std library
-- For each file, parse and create abstract syntax tree
-- Traverse syntax tree and add each statement to histogram
-- Print the result
-
-.code taste/histo0.go /main START/,/main END/
-
-
-* Processing a Go source file
-
-.code taste/histo0.go /add START/,/add END/
-
-
-* Printing the histogram
-
-.play taste/histo0.go /print START/,/print END/
-
-Note: Histogram (map) iteration order is not specified.
-
-* Sorting
-
-sort.Sort operates on any type that implements the sort.Interface:
-
-	interface {
-		Len() int
-		Swap(i, j int)
-		Less(i, j int) bool
-	}
-
-For instance, to sort a slice of strings lexically, define:
-
-.code taste/sort.go /lexical START/,/lexical END/
-
-And sort:
-
-	sort.Sort(lexical(s))  // where s is a []string slice
-
-
-* Sorting histogram entries
-
-.code taste/histo.go /byCount START/,/byCount END/
-
-
-* Improved histogram printing
-
-.play taste/histo.go /print START/,/print END/
-
-
-* Concurrency
-
-* Goroutines
-
-- The _go_ statement launches a function call as a goroutine
-	go f()
-	go f(x, y, ...)
-
-- A goroutine runs concurrently (but not necessarily in parallel)
-- A goroutine has its own stack
-
-
-* A simple example
-
-.code taste/concurrency1.go /f START/,/f END/
-
-Function f is launched as 3 different goroutines, all running concurrently:
-
-.play taste/concurrency1.go /main START/,/main END/
-
-
-* Communication via channels
-
-A channel type specifies a channel value type (and possibly a communication direction):
-
-	chan int
-	chan<- string  // send-only channel
-	<-chan T       // receive-only channel
-
-A channel is a variable of channel type:
-
-	var ch chan int
-	ch := make(chan int)  // declare and initialize with newly made channel
-
-A channel permits _sending_ and _receiving_ values:
-
-	ch <- 1   // send value 1 on channel ch
-	x = <-ch  // receive a value from channel ch (and assign to x)
-
-Channel operations synchronize the communicating goroutines.
-
-* Communicating goroutines
-
-Each goroutine sends its results via channel ch:
-
-.code taste/concurrency2.go /f START/,/f END/
-
-The main goroutine receives (and prints) all results from the same channel:
-
-.play taste/concurrency2.go /main START/,/main END/
-
-
-* Putting it all together
-
-
-* Analyze files concurrently, map-reduce style
-
-Mapper:
-
-.code taste/histop.go /mapper START/,/mapper END/
-
-Reducer:
-
-.code taste/histop.go /reducer START/,/reducer END/
-
-.code taste/histop.go /merge START/,/merge END/
-
-
-* From sequential program...
-
-.play taste/histo.go /main START/,/main END/
-
-
-* ... to concurrent program
-
-.play taste/histop.go /main START/,/main END/
-
-
-* There's a lot more!
-
-- Extensive standard library
-
-.link http://golang.org/pkg/
-
-- Powerful tools
-
-.link http://play.golang.org/p/Au02fFpYdf
-# playground, gofmt
-
-- Multi-platform support
-
-.link http://build.golang.org/
-
-- Great documentation
-
-.link http://tour.golang.org/#1
diff --git a/content/2014/taste/concurrency1.go b/content/2014/taste/concurrency1.go
deleted file mode 100644
index f0c456f..0000000
--- a/content/2014/taste/concurrency1.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// f START OMIT
-func f(msg string, delay time.Duration) {
-	for {
-		fmt.Println(msg)
-		time.Sleep(delay)
-	}
-}
-
-// f END OMIT
-
-// main START OMIT
-func main() {
-	go f("A--", 300*time.Millisecond)
-	go f("-B-", 500*time.Millisecond)
-	go f("--C", 1100*time.Millisecond)
-	time.Sleep(20 * time.Second)
-}
-
-// main END OMIT
diff --git a/content/2014/taste/concurrency2.go b/content/2014/taste/concurrency2.go
deleted file mode 100644
index cc496c1..0000000
--- a/content/2014/taste/concurrency2.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// f START OMIT
-func f(msg string, delay time.Duration, ch chan string) {
-	for {
-		ch <- msg
-		time.Sleep(delay)
-	}
-}
-
-// f END OMIT
-
-// main START OMIT
-func main() {
-	ch := make(chan string)
-	go f("A--", 300*time.Millisecond, ch)
-	go f("-B-", 500*time.Millisecond, ch)
-	go f("--C", 1100*time.Millisecond, ch)
-
-	for i := 0; i < 100; i++ {
-		fmt.Println(i, <-ch)
-	}
-}
-
-// main END OMIT
diff --git a/content/2014/taste/examples.go b/content/2014/taste/examples.go
deleted file mode 100644
index e353e4c..0000000
--- a/content/2014/taste/examples.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package examples
-
-// IndexOfAny START OMIT
-func IndexOfAny(str string, chars []rune) int {
-	if len(str) == 0 || len(chars) == 0 {
-		return -1
-	}
-	for i, ch := range str {
-		for _, match := range chars {
-			if ch == match {
-				return i
-			}
-		}
-	}
-	return -1
-}
-
-// IndexOfAny END OMIT
diff --git a/content/2014/taste/hello.go b/content/2014/taste/hello.go
deleted file mode 100644
index c84b1d7..0000000
--- a/content/2014/taste/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, 世界!")
-}
diff --git a/content/2014/taste/hellohttp.go b/content/2014/taste/hellohttp.go
deleted file mode 100644
index eba1bfd..0000000
--- a/content/2014/taste/hellohttp.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func HelloServer(w http.ResponseWriter, req *http.Request) {
-	log.Println(req.URL)
-	fmt.Fprintf(w, "Hello, 世界!\nURL = %s\n", req.URL)
-}
-
-func main() {
-	fmt.Println("please connect to localhost:7777/hello")
-	http.HandleFunc("/hello", HelloServer)
-	log.Fatal(http.ListenAndServe(":7777", nil))
-}
diff --git a/content/2014/taste/histo.go b/content/2014/taste/histo.go
deleted file mode 100644
index acf6a4c..0000000
--- a/content/2014/taste/histo.go
+++ /dev/null
@@ -1,113 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-	"io/ioutil"
-	"path/filepath"
-	"runtime"
-	"sort"
-	"strings"
-	"time"
-)
-
-func walk(dir string, f func(string) bool) bool {
-	fis, err := ioutil.ReadDir(dir)
-	if err != nil {
-		panic(err)
-	}
-	// parse all *.go files in directory;
-	// traverse subdirectories, but don't walk into testdata
-	for _, fi := range fis {
-		path := filepath.Join(dir, fi.Name())
-		if fi.IsDir() {
-			if fi.Name() != "testdata" {
-				if !walk(path, f) {
-					return false
-				}
-			}
-		} else if strings.HasSuffix(fi.Name(), ".go") && !strings.HasPrefix(fi.Name(), ".") {
-			if !f(path) {
-				return false
-			}
-		}
-	}
-	return true
-}
-
-func walkStdLib(f func(filename string) bool) {
-	walk(filepath.Join(runtime.GOROOT(), "src"), f)
-}
-
-type histogram map[string]int
-
-func (h histogram) add(filename string) {
-	f, err := parser.ParseFile(token.NewFileSet(), filename, nil, 0)
-	if err != nil {
-		panic(err)
-	}
-
-	ast.Inspect(f, func(n ast.Node) bool {
-		if n, ok := n.(ast.Stmt); ok {
-			h[fmt.Sprintf("%T", n)]++
-		}
-		return true
-	})
-}
-
-// print START OMIT
-func (h histogram) print() {
-	var list []entry
-	var total int
-	for key, count := range h {
-		list = append(list, entry{key, count})
-		total += count
-	}
-	sort.Sort(byCount(list))
-
-	percent := 100 / float64(total)
-	for i, e := range list {
-		fmt.Printf("%4d.  %5.2f%%  %5d  %s\n", i, float64(e.count)*percent, e.count, e.key)
-	}
-}
-
-// print END OMIT
-
-// byCount START OMIT
-type entry struct {
-	key   string
-	count int
-}
-
-type byCount []entry
-
-func (s byCount) Len() int      { return len(s) }
-func (s byCount) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s byCount) Less(i, j int) bool {
-	x, y := s[i], s[j]
-	if x.count != y.count {
-		return x.count > y.count // want larger count first
-	}
-	return x.key < y.key
-}
-
-// byCount END OMIT
-
-// main START OMIT
-func main() {
-	start := time.Now()
-	h := make(histogram)
-	walkStdLib(func(filename string) bool {
-		h.add(filename)
-		return true
-	})
-
-	h.print()
-	fmt.Println(time.Since(start))
-}
-
-// main END OMIT
diff --git a/content/2014/taste/histo0.go b/content/2014/taste/histo0.go
deleted file mode 100644
index 2c321ed..0000000
--- a/content/2014/taste/histo0.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-	"io/ioutil"
-	"path/filepath"
-	"runtime"
-	"strings"
-)
-
-func walk(dir string, f func(string) bool) bool {
-	fis, err := ioutil.ReadDir(dir)
-	if err != nil {
-		panic(err)
-	}
-	// parse all *.go files in directory;
-	// traverse subdirectories, but don't walk into testdata
-	for _, fi := range fis {
-		path := filepath.Join(dir, fi.Name())
-		if fi.IsDir() {
-			if fi.Name() != "testdata" {
-				if !walk(path, f) {
-					return false
-				}
-			}
-		} else if strings.HasSuffix(fi.Name(), ".go") && !strings.HasPrefix(fi.Name(), ".") {
-			if !f(path) {
-				return false
-			}
-		}
-	}
-	return true
-}
-
-func walkStdLib(f func(filename string) bool) {
-	walk(filepath.Join(runtime.GOROOT(), "src"), f)
-}
-
-// histogram START OMIT
-type histogram map[string]int
-
-// histogram END OMIT
-
-// add START OMIT
-func (h histogram) add(filename string) {
-	f, err := parser.ParseFile(token.NewFileSet(), filename, nil, 0)
-	if err != nil {
-		panic(err)
-	}
-
-	ast.Inspect(f, func(n ast.Node) bool {
-		if n, ok := n.(ast.Stmt); ok { // type test: is n an ast.Stmt?
-			h[fmt.Sprintf("%T", n)]++
-		}
-		return true
-	})
-}
-
-// add END OMIT
-
-// print START OMIT
-func (h histogram) print() {
-	// determine total number of statements
-	total := 0
-	for _, count := range h {
-		total += count
-	}
-
-	// print map entries
-	i := 0
-	percent := 100 / float64(total)
-	for key, count := range h {
-		fmt.Printf("%4d.  %5.2f%%  %5d  %s\n", i, float64(count)*percent, count, key)
-		i++
-	}
-}
-
-// print END OMIT
-
-// main START OMIT
-func main() {
-	// body START OMIT
-	h := make(histogram)
-	walkStdLib(func(filename string) bool {
-		h.add(filename) // does all the hard work
-		return true
-	})
-	// body END OMIT
-	h.print()
-}
-
-// main END OMIT
diff --git a/content/2014/taste/histop.go b/content/2014/taste/histop.go
deleted file mode 100644
index 6f59e1e..0000000
--- a/content/2014/taste/histop.go
+++ /dev/null
@@ -1,138 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"go/ast"
-	"go/parser"
-	"go/token"
-	"io/ioutil"
-	"path/filepath"
-	"runtime"
-	"sort"
-	"strings"
-	"time"
-)
-
-func walk(dir string, f func(string) bool) bool {
-	fis, err := ioutil.ReadDir(dir)
-	if err != nil {
-		panic(err)
-	}
-	// parse all *.go files in directory;
-	// traverse subdirectories, but don't walk into testdata
-	for _, fi := range fis {
-		path := filepath.Join(dir, fi.Name())
-		if fi.IsDir() {
-			if fi.Name() != "testdata" {
-				if !walk(path, f) {
-					return false
-				}
-			}
-		} else if strings.HasSuffix(fi.Name(), ".go") && !strings.HasPrefix(fi.Name(), ".") {
-			if !f(path) {
-				return false
-			}
-		}
-	}
-	return true
-}
-
-func walkStdLib(f func(filename string) bool) {
-	walk(filepath.Join(runtime.GOROOT(), "src"), f)
-}
-
-type histogram map[string]int
-
-func (h histogram) add(filename string) {
-	f, err := parser.ParseFile(token.NewFileSet(), filename, nil, 0)
-	if err != nil {
-		panic(err)
-	}
-
-	ast.Inspect(f, func(n ast.Node) bool {
-		if n, ok := n.(ast.Stmt); ok {
-			h[fmt.Sprintf("%T", n)]++
-		}
-		return true
-	})
-}
-
-// merge START OMIT
-func (h histogram) merge(h1 histogram) {
-	for key, count := range h1 {
-		h[key] = h[key] + count
-	}
-}
-
-// merge END OMIT
-
-type entry struct {
-	key   string
-	count int
-}
-
-func (h histogram) print() {
-	var list []entry
-	var total int
-	for key, count := range h {
-		list = append(list, entry{key, count})
-		total += count
-	}
-	sort.Sort(byCount(list))
-
-	percent := 100 / float64(total)
-	for i, e := range list {
-		fmt.Printf("%4d.  %5.2f%%  %5d  %s\n", i, float64(e.count)*percent, e.count, e.key)
-	}
-}
-
-type byCount []entry
-
-func (s byCount) Len() int      { return len(s) }
-func (s byCount) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s byCount) Less(i, j int) bool {
-	x, y := s[i], s[j]
-	if x.count != y.count {
-		return x.count > y.count // want larger count first
-	}
-	return x.key < y.key
-}
-
-func init() {
-	n := runtime.NumCPU()
-	//fmt.Println(n, "cores")
-	runtime.GOMAXPROCS(n)
-}
-
-// main START OMIT
-func main() {
-	start := time.Now()
-	ch := make(chan histogram)
-	count := 0 // goroutine count
-	walkStdLib(func(filename string) bool {
-		count++
-		// mapper START OMIT
-		go func() {
-			h := make(histogram)
-			h.add(filename)
-			ch <- h
-		}()
-		// mapper END OMIT
-		return true
-	})
-
-	// reducer START OMIT
-	h := make(histogram)
-	for count > 0 {
-		h.merge(<-ch)
-		count--
-	}
-	// reducer END OMIT
-
-	h.print()
-	fmt.Println(time.Since(start))
-}
-
-// main END OMIT
diff --git a/content/2014/taste/idents.go b/content/2014/taste/idents.go
deleted file mode 100644
index 767b6d5..0000000
--- a/content/2014/taste/idents.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main // idents.go
-
-import (
-	"fmt"
-	"os"
-	"text/scanner"
-)
-
-func main() {
-	var s scanner.Scanner
-	s.Init(os.Stdin)
-	for {
-		switch s.Scan() {
-		case scanner.EOF:
-			return // all done
-		case scanner.Ident:
-			fmt.Println(s.TokenText())
-		}
-	}
-}
diff --git a/content/2014/taste/point.go b/content/2014/taste/point.go
deleted file mode 100644
index 248730d..0000000
--- a/content/2014/taste/point.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// Point START OMIT
-type Point struct {
-	x, y int
-}
-
-// Point END OMIT
-
-// String START OMIT
-func (p Point) String() string {
-	return fmt.Sprintf("(%d, %d)", p.x, p.y)
-}
-
-// String END OMIT
-
-// main START OMIT
-func main() {
-	p := Point{2, 3}
-	fmt.Println(p.String())
-	fmt.Println(Point{3, 5}.String())
-}
-
-// main END OMIT
diff --git a/content/2014/taste/sort.go b/content/2014/taste/sort.go
deleted file mode 100644
index 19daa8e..0000000
--- a/content/2014/taste/sort.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-type Weekday int
-
-const (
-	Mon Weekday = iota
-	Tue
-	Wed
-	Thu
-	Fri
-	Sat
-	Sun
-)
-
-var names = [...]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
-
-func (d Weekday) String() string { // ...
-	return names[d]
-}
-
-// lexical START OMIT
-type lexical []string
-
-func (a lexical) Len() int           { return len(a) }
-func (a lexical) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
-func (a lexical) Less(i, j int) bool { return a[i] < a[j] }
-
-// lexical END OMIT
-
-func main() {
-	var list []string
-	for d := Mon; d <= Sun; d++ {
-		list = append(list, d.String())
-	}
-
-	sort.Sort(lexical(list))
-
-	for i, x := range list {
-		fmt.Println(i, x)
-	}
-}
diff --git a/content/2014/taste/stringer.go b/content/2014/taste/stringer.go
deleted file mode 100644
index 40a8670..0000000
--- a/content/2014/taste/stringer.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Point struct {
-	x, y int
-}
-
-func (p Point) String() string {
-	return fmt.Sprintf("(%d, %d)", p.x, p.y)
-}
-
-type Weekday int
-
-const (
-	Mon Weekday = iota
-	Tue
-	Wed
-	Thu
-	Fri
-	Sat
-	Sun
-)
-
-var names = [...]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
-
-func (d Weekday) String() string { // ...
-	return names[d]
-}
-
-// Stringer START OMIT
-type Stringer interface {
-	String() string
-}
-
-// Stringer END OMIT
-
-// main START OMIT
-func main() {
-	var x Stringer
-	x = Point{2, 3}
-	fmt.Println("A", x.String())
-
-	x = Tue
-	fmt.Println("B", x.String())
-
-	fmt.Println("C", Point{2, 3}) // fmt.Println knows about Stringer!
-	fmt.Println("D", Tue)
-}
-
-// main END OMIT
diff --git a/content/2014/taste/walk.go b/content/2014/taste/walk.go
deleted file mode 100644
index 2998af1..0000000
--- a/content/2014/taste/walk.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io/ioutil"
-	"path/filepath"
-	"runtime"
-	"strings"
-)
-
-func walk(dir string, f func(string) bool) bool {
-	fis, err := ioutil.ReadDir(dir)
-	if err != nil {
-		panic(err)
-	}
-	// parse all *.go files in directory;
-	// traverse subdirectories, but don't walk into testdata
-	for _, fi := range fis {
-		path := filepath.Join(dir, fi.Name())
-		if fi.IsDir() {
-			if fi.Name() != "testdata" {
-				if !walk(path, f) {
-					return false
-				}
-			}
-		} else if strings.HasSuffix(fi.Name(), ".go") && !strings.HasPrefix(fi.Name(), ".") {
-			if !f(path) {
-				return false
-			}
-		}
-	}
-	return true
-}
-
-func walkStdLib(f func(filename string) bool) {
-	walk(filepath.Join(runtime.GOROOT(), "src"), f)
-}
-
-func _() {
-	// example START OMIT
-	n := 0
-	println := func(s string) bool {
-		fmt.Println(n, s)
-		n++
-		return n < 10
-	}
-	walkStdLib(println)
-	// example END OMIT
-}
-
-func main() {
-	// main START OMIT
-	n := 0
-	walkStdLib(func(s string) bool {
-		fmt.Println(n, s)
-		n++
-		return n < 10
-	})
-	// main END OMIT
-}
diff --git a/content/2014/taste/weekday.go b/content/2014/taste/weekday.go
deleted file mode 100644
index d2c3984..0000000
--- a/content/2014/taste/weekday.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// type START OMIT
-type Weekday int
-
-// type END OMIT
-
-const (
-	Mon Weekday = iota
-	Tue
-	Wed
-	Thu
-	Fri
-	Sat
-	Sun
-)
-
-var names = [...]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
-
-// String START OMIT
-func (d Weekday) String() string { // ...
-	// String END OMIT
-	return names[d]
-}
-
-// main START OMIT
-func main() {
-	fmt.Println(Mon.String())
-	fmt.Println()
-
-	for d := Mon; d <= Sun; d++ {
-		fmt.Println(d.String())
-	}
-}
-
-// main END OMIT
diff --git a/content/2014/testing.slide b/content/2014/testing.slide
deleted file mode 100644
index 1f290cf..0000000
--- a/content/2014/testing.slide
+++ /dev/null
@@ -1,259 +0,0 @@
-Testing Techniques
-Google I/O 2014
-
-Andrew Gerrand
-adg@golang.org
-
-* Video
-
-This talk was presented at golang-syd in July 2014.
-
-.link http://www.youtube.com/watch?v=ndmB0bj7eyw Watch the talk on YouTube
-
-
-* The basics
-
-* Testing Go code
-
-Go has a built-in testing framework.
-
-It is provided by the `testing` package and the `go` `test` command.
-
-Here is a complete test file that tests the `strings.Index` function:
-
-.code testing/test1/string_test.go
-
-
-* Table-driven tests
-
-Go's struct literal syntax makes it easy to write table-driven tests:
-
-.code testing/test2/string_test.go /func TestIndex/,/^}/
-
-
-* T
-
-The `*testing.T` argument is used for error reporting:
-
-	t.Errorf("got bar = %v, want %v", got, want)
-	t.Fatalf("Frobnicate(%v) returned error: %v", arg, err)
-	t.Logf("iteration %v", i)
-
-And enabling parallel tests:
-
-	t.Parallel()
-
-And controlling whether a test runs at all:
-
-	if runtime.GOARCH == "arm" {
-		t.Skip("this doesn't work on ARM")
-	}
-
-
-* Running tests
-
-The `go` `test` command runs tests for the specified package.
-(It defaults to the package in the current directory.)
-
-	$ go test
-	PASS
-
-	$ go test -v
-	=== RUN TestIndex
-	--- PASS: TestIndex (0.00 seconds)
-	PASS
-
-To run the tests for all my projects:
-
-	$ go test github.com/nf/...
-
-Or for the standard library:
-
-	$ go test std
-
-
-* Test coverage
-
-The `go` tool can report test coverage statistics.
-
-	$ go test -cover
-	PASS
-	coverage: 96.4% of statements
-	ok  	strings	0.692s
-
-The `go` tool can generate coverage profiles that may be intepreted by the `cover` tool.
-
-	$ go test -coverprofile=cover.out
-	$ go tool cover -func=cover.out
-	strings/reader.go:    Len             66.7%
-	strings/strings.go:   TrimSuffix     100.0%
-	... many lines omitted ...
-	strings/strings.go:   Replace        100.0%
-	strings/strings.go:   EqualFold      100.0%
-	total:                (statements)    96.4%
-
-* Coverage visualization
-
-	$ go tool cover -html=cover.out
-
-.image testing/cover.png
-
-
-* Advanced techniques
-
-* An example program
-
-*outyet* is a web server that announces whether or not a particular Go version has been tagged.
-
-	go get github.com/golang/example/outyet
-
-.image testing/go1.1.png
-
-
-* Testing HTTP clients and servers
-
-The `net/http/httptest` package provides helpers for testing code that makes or serves HTTP requests.
-
-
-* httptest.Server
-
-An `httptest.Server` listens on a system-chosen port on the local loopback interface, for use in end-to-end HTTP tests.
-
-	type Server struct {
-		URL      string // base URL of form http://ipaddr:port with no trailing slash
-		Listener net.Listener
-
-		// TLS is the optional TLS configuration, populated with a new config
-		// after TLS is started. If set on an unstarted server before StartTLS
-		// is called, existing fields are copied into the new config.
-		TLS *tls.Config
-
-		// Config may be changed after calling NewUnstartedServer and
-		// before Start or StartTLS.
-		Config *http.Server
-	}
-
-	func NewServer(handler http.Handler) *Server
-
-	func (*Server) Close() error
-
-* httptest.Server in action
-
-This code sets up a temporary HTTP server that serves a simple "Hello" response.
-
-.play testing/httpserver.go /START/,/STOP/
-
-
-* httptest.ResponseRecorder
-
-`httptest.ResponseRecorder` is an implementation of `http.ResponseWriter` that records its mutations for later inspection in tests.
-
-	type ResponseRecorder struct {
-		Code      int           // the HTTP response code from WriteHeader
-		HeaderMap http.Header   // the HTTP response headers
-		Body      *bytes.Buffer // if non-nil, the bytes.Buffer to append written data to
-		Flushed   bool
-	}
-
-* httptest.ResponseRecorder in action
-
-By passing a `ResponseRecorder` into an HTTP handler we can inspect the generated response.
-
-.play testing/httprecorder.go /START/,/STOP/
-
-
-* Race Detection
-
-A data race occurs when two goroutines access the same variable concurrently and at least one of the accesses is a write.
-
-To help diagnose such bugs, Go includes a built-in data race detector.
-
-Pass the `-race` flag to the go tool to enable the race detector:
-
-	$ go test -race mypkg    // to test the package
-	$ go run -race mysrc.go  // to run the source file
-	$ go build -race mycmd   // to build the command
-	$ go install -race mypkg // to install the package
-
-
-* Testing with concurrency
-
-When testing concurrent code, there's a temptation to use sleep;
-it's easy and works most of the time.
-
-But "most of the time" isn't always and flaky tests result.
-
-We can use Go's concurrency primitives to make flaky sleep-driven tests reliable.
-
-
-* Finding errors with static analysis: vet
-
-The `vet` tool checks code for common programmer mistakes:
-
-- bad printf formats,
-- bad build tags,
-- bad range loop variable use in closures,
-- useless assignments,
-- unreachable code,
-- bad use of mutexes,
-- and more.
-
-Usage:
-
-	go vet [package]
-
-
-* Testing from the inside
-
-Most tests are compiled as part of the package under test.
-
-This means they can access unexported details, as we have already seen.
-
-
-* Testing from the outside
-
-Occasionally you want to run your tests from outside the package under test.
-
-(Test files as `package` `foo_test` instead of `package` `foo`.)
-
-This can break dependency cycles. For example:
-
-- The `testing` package uses `fmt`.
-- The `fmt` tests must import `testing`.
-- So the `fmt` tests are in package `fmt_test` and can import both `testing` and `fmt`.
-
-
-* Mocks and fakes
-
-Go eschews mocks and fakes in favor of writing code that takes broad interfaces.
-
-For example, if you're writing a file format parser, don't write a function like this:
-
-	func Parse(f *os.File) error
-
-instead, write functions that take the interface you need:
-
-	func Parse(r io.Reader) error
-
-(An `*os.File` implements `io.Reader`, as does `bytes.Buffer` or `strings.Reader`.)
-
-
-* Subprocess tests
-
-Sometimes you need to test the behavior of a process, not just a function.
-
-.code testing/subprocess/subprocess.go /func Crasher/,/^}/
-
-To test this code, we invoke the test binary itself as a subprocess:
-
-.code testing/subprocess/subprocess_test.go /func TestCrasher/,/^}/
-
-
-* More information
-
-.link http://golang.org/pkg/testing/
-
-.link http://golang.org/cmd/go/
-
-.link http://golang.org
-
diff --git a/content/2014/testing/cover.png b/content/2014/testing/cover.png
deleted file mode 100644
index 57d5d67..0000000
--- a/content/2014/testing/cover.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/testing/go1.1.png b/content/2014/testing/go1.1.png
deleted file mode 100644
index beb3325..0000000
--- a/content/2014/testing/go1.1.png
+++ /dev/null
Binary files differ
diff --git a/content/2014/testing/httprecorder.go b/content/2014/testing/httprecorder.go
deleted file mode 100644
index 10dbd27..0000000
--- a/content/2014/testing/httprecorder.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-	"net/http/httptest"
-)
-
-func main() {
-	// START OMIT
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		http.Error(w, "something failed", http.StatusInternalServerError)
-	}
-
-	req, err := http.NewRequest("GET", "http://example.com/foo", nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	w := httptest.NewRecorder()
-	handler(w, req)
-
-	fmt.Printf("%d - %s", w.Code, w.Body.String())
-	// STOP OMIT
-}
diff --git a/content/2014/testing/httpserver.go b/content/2014/testing/httpserver.go
deleted file mode 100644
index a15aca3..0000000
--- a/content/2014/testing/httpserver.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"net/http/httptest"
-)
-
-func main() {
-	// START OMIT
-	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		fmt.Fprintln(w, "Hello, client")
-	}))
-	defer ts.Close()
-
-	res, err := http.Get(ts.URL)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	greeting, err := ioutil.ReadAll(res.Body)
-	res.Body.Close()
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	fmt.Printf("%s", greeting)
-	// STOP OMIT
-}
diff --git a/content/2014/testing/subprocess/subprocess.go b/content/2014/testing/subprocess/subprocess.go
deleted file mode 100644
index 8fb8fc0..0000000
--- a/content/2014/testing/subprocess/subprocess.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package subprocess
-
-import (
-	"fmt"
-	"os"
-)
-
-func Crasher() {
-	fmt.Println("Going down in flames!")
-	os.Exit(1)
-}
diff --git a/content/2014/testing/subprocess/subprocess_test.go b/content/2014/testing/subprocess/subprocess_test.go
deleted file mode 100644
index 27b05d0..0000000
--- a/content/2014/testing/subprocess/subprocess_test.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package subprocess
-
-import (
-	"os"
-	"os/exec"
-	"testing"
-)
-
-func TestCrasher(t *testing.T) {
-	if os.Getenv("BE_CRASHER") == "1" {
-		Crasher()
-		return
-	}
-	cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
-	cmd.Env = append(os.Environ(), "BE_CRASHER=1")
-	err := cmd.Run()
-	if e, ok := err.(*exec.ExitError); ok && !e.Success() {
-		return
-	}
-	t.Fatalf("process ran with err %v, want exit status 1", err)
-}
diff --git a/content/2014/testing/test1/string_test.go b/content/2014/testing/test1/string_test.go
deleted file mode 100644
index 6061882..0000000
--- a/content/2014/testing/test1/string_test.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package strings_test
-
-import (
-	"strings"
-	"testing"
-)
-
-func TestIndex(t *testing.T) {
-	const s, sep, want = "chicken", "ken", 4
-	got := strings.Index(s, sep)
-	if got != want {
-		t.Errorf("Index(%q,%q) = %v; want %v", s, sep, got, want)
-	}
-}
diff --git a/content/2014/testing/test2/string_test.go b/content/2014/testing/test2/string_test.go
deleted file mode 100644
index 886597a..0000000
--- a/content/2014/testing/test2/string_test.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package strings_test
-
-import (
-	"fmt"
-	"strings"
-	"testing"
-)
-
-func TestIndex(t *testing.T) {
-	var tests = []struct {
-		s   string
-		sep string
-		out int
-	}{
-		{"", "", 0},
-		{"", "a", -1},
-		{"fo", "foo", -1},
-		{"foo", "foo", 0},
-		{"oofofoofooo", "f", 2},
-		// etc
-	}
-	for _, test := range tests {
-		actual := strings.Index(test.s, test.sep)
-		if actual != test.out {
-			t.Errorf("Index(%q,%q) = %v; want %v", test.s, test.sep, actual, test.out)
-		}
-	}
-}
-
-func BenchmarkIndex(b *testing.B) {
-	const s = "some_text=some☺value"
-	for i := 0; i < b.N; i++ {
-		strings.Index(s, "v")
-	}
-}
-
-func ExampleIndex() {
-	fmt.Println(strings.Index("chicken", "ken"))
-	fmt.Println(strings.Index("chicken", "dmr"))
-	// Output:
-	// 4
-	// -1
-}
diff --git a/content/2015/dynamic-tools.slide b/content/2015/dynamic-tools.slide
deleted file mode 100644
index 8d39afd..0000000
--- a/content/2015/dynamic-tools.slide
+++ /dev/null
@@ -1,355 +0,0 @@
-Go Dynamic Tools
-Gophercon 2015, July 9, 2015
-
-Dmitry Vyukov
-Google
-dvyukov@
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=a9xrxRsIbSU Watch the talk on YouTube
-
-
-* About me
-
-Did a bunch of work on Go:
-
-- Scalable goroutine scheduler
-- Integrated network poller
-- Parallel GC, concurrent sweeping
-- Memory allocator speed/space improvements
-- Sync primitives
-- Race detector
-- Blocking profile
-- 800+ commits, filed 500+ bugs
-
-But actually on dynamic testing tools team:
-
-- Thread/Address/MemorySanitizer
-
-* Agenda
-
-- Data race detector
-- Go-fuzz, randomized testing system
-- Execution tracer
-
-* Data race detector
-
-.image dynamic-tools/philosoraptor.png
-
-
-* What is a data race?
-
-A data race occurs when two goroutines access the same variable concurrently and at least one of the accesses is a write.
-
-*All*bets*are*off*!*
-
-Any data race can destroy the memory/type-safety of a Go program.
-
-* There are no "benign" data races
-
-	// goroutine 1       // goroutine 2
-	m[k1] = v1           m[k2] = v2
-
-Bad!
-
-	// goroutine 1       // goroutine 2
-	stat++               stat++
-
-Also bad!
-
-Compilers assume race-free programs and do aggressive optimizations
-based on that assumption (e.g. assume "ownership" over written-to variables).
-
-Races are non-deterministic and hard to debug.
-
-* Usage
-
-	$ go test -race mypkg    // to test the package
-	$ go run -race mysrc.go  // to run the source file
-	$ go build -race mycmd   // to build the command
-	$ go install -race mypkg // to install the package
-
-That's it!
-
-* Example
-
-	package main
-
-	func main() {
-		m := make(map[int]int)
-		go func() {
-			m[1] = 1
-		}()
-		m[2] = 2
-	}
-
-* Example report
-
- WARNING: DATA RACE
- Write by goroutine 5:
-   runtime.mapassign1()
-       runtime/hashmap.go:411 +0x0
-   main.main.func1()
-       race.go:6 +0x60
-
- Previous write by main goroutine:
-   runtime.mapassign1()
-       runtime/hashmap.go:411 +0x0
-   main.main()
-       race.go:8 +0xb6
-
- Goroutine 5 (running) created at:
-   main.main()
-       race.go:7 +0x76
-
-* Achievements
-
-- 70+ bugs in std lib
-- 350+??? bugs in Google internal code base
-- ??? bugs found in the wild
-
-* Instrumentation
-
-Compiler instrumentation pass enabled by -race.
-
-	func foo(p *int) {
-		*p = 1
-	}
-
-Becomes:
-
-	func foo(p *int) {
-		runtime.funcenter(caller_pc)
-		runtime.racewrite(p)
-		*p = 1
-		runtime.funcexit()
-	}
-
-* Run-time module
-
-Handles:
-
-- memory accesses (to catch racy accesses)
-- synchronization (to not produce false reports)
-- function calls (to collect stack traces)
-- goroutine creation/exit (to keep track of live goroutines)
-
-Algorithm is based on dynamic modelling of happens-before relation:
-
-- no false positives
-- false negatives are possible
-
-* Usage tips
-
-Dynamic tools are only as good as your tests are.
-
-- write good *concurrent* tests
-- have continuous build with race detector
-- run integration tests
-- run race-enabled canaries in production
-
-* Go-fuzz
-
-.image dynamic-tools/go-fuzz.png
-
-* Randomized testing
-
-A different approach to testing that finds [lots of] bugs that other testing approaches do not. Intended mostly for programs that parse complex inputs.
-
-Generate random blob -> feed into program -> see if it crashes -> profit!
-
-- cheap to use
-- does not have any bias
-
-Completely random blobs won't uncover lots of bugs.
-
-How can we generate diverse but meaningful inputs that will trigger
-nil derefs, off-by-ones, etc?
-
-* Coverage-guided fuzzing
-
-Genetic algorithms to the rescue!
-
-	Instrument program for code coverage
-	Collect initial corpus of inputs
-	for {
-		Randomly mutate an input from the corpus
-		Execute and collect coverage
-		If the input gives new coverage, add it to corpus
-	}
-
-* Example
-
-The following code wants "ABCD" input:
-
-	if input[0] == 'A' {
-		if input[1] == 'B' {
-			if input[2] == 'C' {
-				if input[3] == 'D' {
-					panic("input must not be ABCD")
-				}
-			}
-		}
-	}
-
-Corpus progression:
-
-	""
-	"", "A"
-	"", "A", "AB"
-	"", "A", "AB", "ABC"
-	"", "A", "AB", "ABC", "ABCD"
-
-* Game over
-
-CRC32 checksum verification in `image/png/reader.go`
-
-	func (d *decoder) verifyChecksum() error {
-		if binary.BigEndian.Uint32(d.tmp[:4]) != d.crc.Sum32() {
-			return FormatError("invalid checksum")
-		}
-		return nil
-	}
-
-Probability that random mutations will alter input in an interesting way and
-guess CRC32 at the same time is basically ZERO.
-
-* Sonar
-
-Don't need to guess, program knows it!
-
-	+ v1 := binary.BigEndian.Uint32(d.tmp[:4])
-	+ v2 := d.crc.Sum32()
-	+ __go_fuzz.Sonar(v1, v2)
-	if v1 != v2 {
-		return FormatError("invalid checksum")
-	}
-
-Then, find v1 in the input and replace it with v2. Done!
-
-* Game over 2
-
-Mutations and sonar do low-level changes ("bit-flipping"):
-
-Original:
-
-	`<item name="foo"><prop name="price">100</prop></item>`
-
-Mutated:
-
-	`<item name="foo"><prop name="price">100</prop><<item>`
-
-Also want high-level changes!
-
-* Versifier
-
-Versifier reverse-engineers [text] protocol and learns its _structure_.
-
-	abc          -> alphanum token
-	123, 1e-2    -> number
-	"..."        -> quoted
-	[...]        -> parenthesized
-	...,...,...  -> list
-	...\n...\n   -> lines
-
-Then, applies _structural_ mutations to inputs.
-
-* Versifier example
-
-Original:
-
-	`<item name="foo"><prop name="price">100</prop></item>`
-
-Versified (all valid xml):
-
-	<item	name="rb54ana"><item  name="foo"><prop name="price"></prop><prop/></item></item>
-	<item name=""><prop name="price">=</prop><prop/> </item>
-	<item name=""><prop F="">-026023767521520230564132665e0333302100</prop><prop/></item>
-	<item SN="foo_P"><prop name="_G_nx">510</prop><prop name="vC">-9e-07036514</prop></item>
-	<item name="foo"><prop name="c8">prop name="p"</prop>/}<prop name="price">01e-6</prop></item>
-	<item name="foo"><item name="foo"><prop JY="">100</prop></item>8<prop/></item>
-
-* Algorithm
-
-.image dynamic-tools/algo.png
-
-* Achievements
-
-- 115 bugs in std lib (66 fixed)
-- 43 bugs in golang.org/x/... (24 fixed)
-- 134 elsewhere
-
-* Achievements
-
-	fmt.Sprintf("%.[]")
-	panic: runtime error: index out of range
-
-	regexp.MustCompile("((0(0){0}))").ReplaceAllString("00000", "00$00")
-	panic: runtime error: slice bounds out of range
-
-	ioutil.ReadAll(flate.NewReader(strings.NewReader("4LJNIMK\a\x00\x00\xff..\xff.....\xff")))
-	runs forever
-
-	var x = 1/"."[0]
-	crashes compiler
-
-	archive/tar: hang
-	archive/zip: cap out of range
-	encoding/gob: stack overflow
-	encoding/asn1: index out of range
-	image/jpeg: Decode hangs
-	image/png: nil deref
-	math/big: incorrect string->Float conversion
-	crypto/x509: division by zero
-	...
-
-* Usage
-
-- go get github.com/dvyukov/go-fuzz/...
-- write test:
-
-	func Fuzz(data []byte) int {
-		gob.NewDecoder(bytes.NewReader(data))
-		return 0
-	}
-
-- build
-
-	$ go-fuzz-build github.com/dvyukov/go-fuzz/examples/gob
-
-- collect corpus
-- run
-
-	$ go-fuzz -bin=gob-fuzz.zip -workdir=examples/gob
-
-* Execution tracer
-
-.image dynamic-tools/tracer.png
-
-* Execution tracer
-
-Gives insight into dynamic execution of a program.
-
-Captures with nanosecond precision:
-
-- goroutine creation/start/end
-- goroutine blocking/unblocking
-- network blocking
-- system calls
-- GC events
-
-* Execution tracer
-
-.image dynamic-tools/trace.png 450 _
-
-* Recap
-
-- race detector: always use for testing (-race)
-- go-fuzz: parsing of complex inputs (github.com/dvyukov/go-fuzz)
-- execution tracer: deep dive into execution (-trace)
-
-
diff --git a/content/2015/dynamic-tools/algo.png b/content/2015/dynamic-tools/algo.png
deleted file mode 100644
index 09a1460..0000000
--- a/content/2015/dynamic-tools/algo.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/dynamic-tools/go-fuzz.png b/content/2015/dynamic-tools/go-fuzz.png
deleted file mode 100644
index c010e0f..0000000
--- a/content/2015/dynamic-tools/go-fuzz.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/dynamic-tools/philosoraptor.png b/content/2015/dynamic-tools/philosoraptor.png
deleted file mode 100644
index 2847d41..0000000
--- a/content/2015/dynamic-tools/philosoraptor.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/dynamic-tools/trace.png b/content/2015/dynamic-tools/trace.png
deleted file mode 100644
index fd89e70..0000000
--- a/content/2015/dynamic-tools/trace.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/dynamic-tools/tracer.png b/content/2015/dynamic-tools/tracer.png
deleted file mode 100644
index edb82dc..0000000
--- a/content/2015/dynamic-tools/tracer.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers.slide b/content/2015/go-for-java-programmers.slide
deleted file mode 100644
index c5841f3..0000000
--- a/content/2015/go-for-java-programmers.slide
+++ /dev/null
@@ -1,454 +0,0 @@
-Go for Java Programmers
-
-Sameer Ajmani
-Tech Lead Manager, Go team
-Google
-@Sajma
-sameer@golang.org
-
-* Video
-
-This talk was presented at [[http://javasig.com][NYJavaSIG]] on April 23, 2015.
-
-.link https://www.youtube.com/watch?v=_c_tQ6_3cCg Watch the talk on YouTube
-
-* Outline
-
-1. What is Go, and who uses it?
-2. Comparing Go and Java
-3. Examples
-4. Concurrency
-5. Tools
-
-# The next several slides are from rsc's 2013/distsys and 2015/mit talks.
-
-* What is Go?
-
-"Go is an open source programming language that makes it easy to build simple, reliable, and efficient software."
-
-.link http://golang.org
-
-* History
-
-Design began in late 2007.
-
-- Robert Griesemer, Rob Pike, and Ken Thompson.
-- Ian Lance Taylor and Russ Cox.
-
-Open source since 2009 with a very active community.
-
-Language stable as of Go 1, early 2012.
-
-* Why Go?
-
-Go is an answer to problems of scale at Google.
-
-.image ../2012/splash/datacenter.jpg 500 _
-
-* System Scale
-
-- designed to scale to 10⁶⁺ machines
-- everyday jobs run on 1000s of machines
-- jobs coordinate, interact with others in the system
-- lots going on at once
-
-Solution: great support for concurrency
-
-.image ../2012/waza/gophercomplex6.jpg
-
-* A Second Problem: Engineering Scale
-
-In 2011:
-
-- 5000+ developers across 40+ offices
-- 20+ changes per minute
-- 50% of code base changes every month
-- 50 million test cases executed per day
-- single code tree
-
-Solution: design the language for large code bases
-
-* Who uses Go at Google?
-
-Lots of projects. Thousands of Go programmers. Millions of lines of Go code.
-
-Public examples:
-
-- SPDY proxy for Chrome on mobile devices
-
-.image go-for-java-programmers/spdy.png 400 _
-
-* Who uses Go at Google?
-
-Lots of projects. Thousands of Go programmers. Millions of lines of Go code.
-
-Public examples:
-
-- SPDY proxy for Chrome on mobile devices
-- Download server for Chrome, ChromeOS, Android SDK, Earth, etc.
-- YouTube Vitess MySQL balancer
-
-The target is networked servers, but it's a great general-purpose language.
-
-* Who uses Go besides Google?
-
-.link http://golang.org/wiki/GoUsers
-
-Apcera, Bitbucket, bitly, Canonical, CloudFlare, Core OS, Digital Ocean, Docker, Dropbox, Facebook, Getty Images, GitHub, Heroku, Iron.io, Kubernetes, Medium, MongoDB services, Mozilla services, New York Times, pool.ntp.org, Secret, SmugMug, SoundCloud, Stripe, Square, Thomson Reuters, Tumblr, ...
-
-.image ../2014/state-of-go/bus.jpg 300 _
-
-* Comparing Go and Java
-
-* Go and Java have much in common
-
-- C family (imperative, braces)
-- Statically typed
-- Garbage collected
-- Memory safe (nil references, runtime bounds checks)
-- Variables are always initialized (zero/nil/false)
-- Methods
-- Interfaces
-- Type assertions (`instanceof`)
-- Reflection
-
-* Go differs from Java in several ways
-
-- Programs compile to machine code.  There's no VM.
-- Statically linked binaries
-- Control over memory layout
-- Function values and lexical closures
-- Built-in strings (UTF-8)
-- Built-in generic maps and arrays/slices
-- Built-in concurrency
-
-* Go intentionally leaves out many features
-
-- No classes
-- No constructors
-- No inheritance
-- No `final`
-- No exceptions
-- No annotations
-- No user-defined generics
-
-* Why does Go leave out those features?
-
-Clarity is critical.
-
-When reading code, it should be clear what the program will do.
-
-When writing code, it should be clear how to make the program do what you want.
-
-Sometimes this means writing out a loop instead of invoking an obscure function.
-
-(Don't DRY out.)
-
-For more background on design:
-
-- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more (Pike, 2012)]]
-- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering (Pike, 2012)]]
-
-* Examples
-
-* Go looks familiar to Java programmers
-
-Main.java
-
-.code go-for-java-programmers/hello/Main.java
-
-hello.go
-
-.play go-for-java-programmers/hello/hello.go
-
-* Hello, web server
-
-.play go-for-java-programmers/hello/server.go
-
-Types follow names in declarations.
-Exported names are Capitalized.  Unexported names are not.
-
-* Example: Google Search frontend
-
-.image go-for-java-programmers/frontend-screenshot.png _ 1000
-
-.play go-for-java-programmers/frontend.go /func main/,/func handleSearch/
-
-* Validate the query
-
-.code go-for-java-programmers/frontend.go /func handleSearch/,/ENDQUERY/
-
-`FormValue` is a method on the type `*http.Request`:
-
-  package http
-  type Request struct {...}
-  func (r *Request) FormValue(key string) string {...}
-
-`query`:=`req.FormValue("q")` initializes a new variable `query` with
-the type of the expression on the right hand side, `string`.
-
-* Fetch the search results
-
-.code go-for-java-programmers/frontend.go /Run the Google search/,/ENDSEARCH/
-
-`Search` returns two values, a slice of results and an error.
-
-  func Search(query string) ([]Result, error) {...}
-
-The results are valid only if the error is nil.
-
-  type error interface {
-      Error() string // a useful human-readable error message
-  }
-
-Errors may contain additional information, accessed via type assertions.
-
-* Render the search results
-
-.code go-for-java-programmers/frontend.go /Render the/,/ENDRENDER/
-
-`resultsTemplate.Execute` generates HTML and writes it to an `io.Writer`:
-
-  type Writer interface {
-          Write(p []byte) (n int, err error)
-  }
-
-`http.ResponseWriter` implements the `io.Writer` interface.
-
-* HTML templates operate on Go values
-
-.play go-for-java-programmers/frontend.go /A Result contains/,/\)\)/
-
-* Issue the query to the Google Search API
-
-.code go-for-java-programmers/frontend.go /func Search/,/resp.Body.Close/
-
-The `defer` statement arranges for `resp.Body.Close` to run when `Search` returns.
-
-* Parse the JSON response into a Go struct
-
-.link https://developers.google.com/web-search/docs/#fonje
-
-.code go-for-java-programmers/frontend.go /var jsonResponse/,/^}/
-
-* That's it for the frontend
-
-All the packages are from the standard library:
-
-  import (
-  	"encoding/json"
-  	"fmt"
-  	"html/template"
-  	"log"
-  	"net/http"
-  	"net/url"
-  	"time"
-  )
-
-Go servers scale well: each request runs in its own _goroutine_.
-
-Let's talk about concurrency.
-
-* Communicating Sequential Processes (Hoare, 1978)
-
-Concurrent programs are structured as independent processes that
-execute sequentially and communicate by passing messages.
-
-Sequential execution is easy to understand.  Async callbacks are not.
-
-"Don't communicate by sharing memory, share memory by communicating."
-
-*Go*primitives:* goroutines, channels, and the `select` statement.
-
-* Goroutines
-
-Goroutines are like lightweight threads.
-
-They start with tiny stacks and resize as needed.
-
-Go programs can have hundreds of thousands of them.
-
-Start a goroutine using the `go` statement:
-
-  go f(args)
-
-The Go runtime schedules goroutines onto OS threads.
-
-Blocked goroutines don't use a thread.
-
-* Channels
-
-Channels provide communication between goroutines.
-
-  c := make(chan string)
-
-  // goroutine 1
-  c <- "hello!"
-
-  // goroutine 2
-  s := <-c
-  fmt.Println(s) // "hello!"
-
-* Select
-
-A `select` statement blocks until communication can proceed.
-
-  select {
-  case n := <-in:
-    fmt.Println("received", n)
-  case out <- v:
-    fmt.Println("sent", v)
-  }
-
-Only the selected case runs.
-
-* Example: Google Search (backend)
-
-Q: What does Google search do?
-
-A: Given a query, return a page of search results (and some ads).
-
-Q: How do we get the search results?
-
-A: Send the query to Web search, Image search, YouTube, Maps, News, etc., then mix the results.
-
-How do we implement this?
-
-* Google Search: A fake framework
-
-We can simulate a Search function with a random timeout up to 100ms.
-
-.code go-for-java-programmers/google-serial.go /START2/,/STOP2/
-
-* Google Search: Test the framework
-
-.play go-for-java-programmers/google-serial.go /func.main/,/}/
-
-* Google Search (serial)
-
-The Google function takes a query and returns a slice of Results (which are just strings).
-
-Google invokes Web, Image, and Video searches serially, appending them to the results slice.
-
-.play go-for-java-programmers/google-serial.go /START1/,/STOP1/
-
-* Google Search (parallel)
-
-Run the Web, Image, and Video searches concurrently, and wait for all results.
-
-The `func` literals are closures over `query` and `c`.
-
-.play go-for-java-programmers/google-parallel.go /Google/,/^}/
-
-* Google Search (timeout)
-
-Don't wait for slow servers.
-
-No locks.  No condition variables.  No callbacks.
-
-.play go-for-java-programmers/google-timeout.go /START/,/STOP/
-
-* Avoid timeout
-
-Q: How do we avoid discarding results from slow servers?
-
-A: Replicate the servers.  Send requests to multiple replicas, and use the first response.
-
-.code go-for-java-programmers/first.go /START1/,/STOP1/
-
-* Using the First function
-
-.play go-for-java-programmers/first.go /START2/,/STOP2/
-
-* Google Search (replicated)
-
-Reduce tail latency using replicated search servers.
-
-.play go-for-java-programmers/google-first.go /START/,/STOP/
-
-* And still…
-
-No locks.  No condition variables.  No callbacks.
-
-* Summary
-
-In just a few simple transformations we used Go's concurrency primitives to convert a
-
-- slow
-- sequential
-- failure-sensitive
-
-program into one that is
-
-- fast
-- concurrent
-- replicated
-- robust.
-
-* Tools
-
-* Go has great tools
-
-- gofmt and goimports
-- the go tool
-- godoc
-- IDE and editor support
-
-The language is designed for tooling.
-
-* gofmt and goimports
-
-Gofmt formats code automatically.  No options.
-
-Goimports updates import statements based on your workspace.
-
-Most people run these tools on save.
-
-.link http://play.golang.org/p/GPqra77cBK
-
-* The go tool
-
-The go tool builds Go programs from source in a conventional directory layout.
-No Makefiles or other configs.
-
-Fetch the `present` tool and its dependencies, build it, and install it:
-
-  % go get golang.org/x/tools/cmd/present
-
-Run it:
-
-  % present
-
-* godoc
-
-Generated documentation for the world's open-source Go code:
-
-.link http://godoc.org
-
-* IDE and editor support
-
-Eclipse, IntelliJ, emacs, vim, many others.
-
-- `gofmt`
-- `goimports`
-- `godoc` lookups
-- code completion
-- code navigation
-
-There's no "Go IDE".
-
-Go tools meet you where you are.
-
-* Where to Go next
-
-Take the Go Tour online.
-
-.link http://tour.golang.org
-
-Lots more material.
-
-.link http://golang.org/wiki/Learn
-
-Great community.
-
-.link http://golang.org/project
diff --git a/content/2015/go-for-java-programmers/builtin.go b/content/2015/go-for-java-programmers/builtin.go
deleted file mode 100644
index 989ad9c..0000000
--- a/content/2015/go-for-java-programmers/builtin.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-func main() {
-	hellos := map[string]string{ // HLbuiltin
-		"English":  "Hello",   // HLstrings
-		"Mandarin": "您好",      // HLstrings
-		"Hindi":    "नमस्कार", // HLstrings
-	}
-	fmt.Println(hellos)               // HLfmt
-	var langs []string                // HLbuiltin
-	for lang, hello := range hellos { // HLbuiltin
-		fmt.Println(lang, ":", hello, "world!") // HLfmt
-		langs = append(langs, lang)             // HLbuiltin
-	}
-	sort.Strings(langs)                           // HLstrings
-	fmt.Printf("len(%v) = %d", langs, len(langs)) // HLfmt
-}
diff --git a/content/2015/go-for-java-programmers/channel.go b/content/2015/go-for-java-programmers/channel.go
deleted file mode 100644
index a1ee2e7..0000000
--- a/content/2015/go-for-java-programmers/channel.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball) // HL
-	go player("ping", table)
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for i := 0; ; i++ {
-		ball := <-table // HL
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball // HL
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/closure.go b/content/2015/go-for-java-programmers/closure.go
deleted file mode 100644
index a0daa9c..0000000
--- a/content/2015/go-for-java-programmers/closure.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func div(n, d int) (q, r int, err error) {
-	if d == 0 {
-		err = fmt.Errorf("%d/%d: divide by zero", n, d)
-		return
-	}
-	return n / d, n % d, nil
-}
-
-func main() {
-	var failures int
-
-	f := func(n, d int) { // HL
-		if q, r, err := div(n, d); err != nil {
-			fmt.Println(err)
-			failures++ // HL
-		} else {
-			fmt.Printf("%d/%d = %d leaving %d\n", n, d, q, r)
-		}
-	}
-
-	f(4, 3)
-	f(3, 0)
-	fmt.Println("failures:", failures)
-}
diff --git a/content/2015/go-for-java-programmers/error.go b/content/2015/go-for-java-programmers/error.go
deleted file mode 100644
index 5f68e5e..0000000
--- a/content/2015/go-for-java-programmers/error.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"errors"
-	"fmt"
-)
-
-// div divides n by d and returns the quotient and remainder.
-// It returns an error if d is zero.
-func div(n, d int) (q, r int, err error) { // HL
-	if d == 0 {
-		err = errors.New("divide by zero") // HL
-		return
-	}
-	return n / d, n % d, nil // HL
-}
-
-func main() {
-	fmt.Println(div(4, 3))
-	fmt.Println(div(3, 0))
-}
diff --git a/content/2015/go-for-java-programmers/first.go b/content/2015/go-for-java-programmers/first.go
deleted file mode 100644
index 8cca2ba..0000000
--- a/content/2015/go-for-java-programmers/first.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-// START1 OMIT
-func First(query string, replicas ...Search) Result {
-	c := make(chan Result, len(replicas))
-	searchReplica := func(i int) { c <- replicas[i](query) }
-	for i := range replicas {
-		go searchReplica(i)
-	}
-	return <-c
-}
-
-// STOP1 OMIT
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-// START2 OMIT
-func main() {
-	start := time.Now()
-	result := First("golang", // HL
-		fakeSearch("replica 1"), // HL
-		fakeSearch("replica 2")) // HL
-	elapsed := time.Since(start)
-	fmt.Println(result)
-	fmt.Println(elapsed)
-}
-
-// STOP2 OMIT
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-	}
-}
diff --git a/content/2015/go-for-java-programmers/frontend-screenshot.png b/content/2015/go-for-java-programmers/frontend-screenshot.png
deleted file mode 100644
index fa5259d..0000000
--- a/content/2015/go-for-java-programmers/frontend-screenshot.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/frontend.go b/content/2015/go-for-java-programmers/frontend.go
deleted file mode 100644
index 1653445..0000000
--- a/content/2015/go-for-java-programmers/frontend.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// +build ignore,OMIT
-
-// The server program issues Google search requests. It serves on port 8080.
-//
-// The /search endpoint accepts these query params:
-//   q=the Google search query
-//
-// For example, http://localhost:8080/search?q=golang serves the first
-// few Google search results for "golang".
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"html/template"
-	"log"
-	"net/http"
-	"net/url"
-	"time"
-)
-
-func main() {
-	http.HandleFunc("/search", handleSearch) // HL
-	fmt.Println("serving on http://localhost:8080/search")
-	log.Fatal(http.ListenAndServe("localhost:8080", nil))
-}
-
-// handleSearch handles URLs like "/search?q=golang" by running a
-// Google search for "golang" and writing the results as HTML to w.
-func handleSearch(w http.ResponseWriter, req *http.Request) {
-	log.Println("serving", req.URL)
-
-	// Check the search query.
-	query := req.FormValue("q") // HL
-	if query == "" {
-		http.Error(w, `missing "q" URL parameter`, http.StatusBadRequest)
-		return
-	}
-	// ENDQUERY OMIT
-
-	// Run the Google search.
-	start := time.Now()
-	results, err := Search(query) // HL
-	elapsed := time.Since(start)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	// ENDSEARCH OMIT
-
-	// Render the results.
-	type templateData struct {
-		Results []Result
-		Elapsed time.Duration
-	}
-	if err := resultsTemplate.Execute(w, templateData{ // HL
-		Results: results,
-		Elapsed: elapsed,
-	}); err != nil {
-		log.Print(err)
-		return
-	}
-	// ENDRENDER OMIT
-}
-
-// A Result contains the title and URL of a search result.
-type Result struct { // HL
-	Title, URL string // HL
-} // HL
-
-var resultsTemplate = template.Must(template.New("results").Parse(`
-<html>
-<head/>
-<body>
-  <ol>
-  {{range .Results}}
-    <li>{{.Title}} - <a href="{{.URL}}">{{.URL}}</a></li>
-  {{end}}
-  </ol>
-  <p>{{len .Results}} results in {{.Elapsed}}</p>
-</body>
-</html>
-`))
-
-// Search sends query to Google search and returns the results.
-func Search(query string) ([]Result, error) {
-	// Prepare the Google Search API request.
-	u, err := url.Parse("https://ajax.googleapis.com/ajax/services/search/web?v=1.0")
-	if err != nil {
-		return nil, err
-	}
-	q := u.Query()
-	q.Set("q", query) // HL
-	u.RawQuery = q.Encode()
-
-	// Issue the HTTP request and handle the response.
-	resp, err := http.Get(u.String()) // HL
-	if err != nil {
-		return nil, err
-	}
-	defer resp.Body.Close() // HL
-
-	// Parse the JSON search result.
-	// https://developers.google.com/web-search/docs/#fonje
-	var jsonResponse struct {
-		ResponseData struct {
-			Results []struct {
-				TitleNoFormatting, URL string
-			}
-		}
-	}
-	if err := json.NewDecoder(resp.Body).Decode(&jsonResponse); err != nil { // HL
-		return nil, err
-	}
-
-	// Extract the Results from jsonResponse and return them.
-	var results []Result
-	for _, r := range jsonResponse.ResponseData.Results { // HL
-		results = append(results, Result{Title: r.TitleNoFormatting, URL: r.URL})
-	}
-	return results, nil
-}
diff --git a/content/2015/go-for-java-programmers/func.go b/content/2015/go-for-java-programmers/func.go
deleted file mode 100644
index 4001d40..0000000
--- a/content/2015/go-for-java-programmers/func.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// div divides n by d and returns the quotient and remainder.
-func div(n, d int) (q, r int) { // HL
-	return n / d, n % d
-}
-
-func main() {
-	quot, rem := div(4, 3)
-	fmt.Println(quot, rem)
-}
diff --git a/content/2015/go-for-java-programmers/gofmt-after.go b/content/2015/go-for-java-programmers/gofmt-after.go
deleted file mode 100644
index 85a07d0..0000000
--- a/content/2015/go-for-java-programmers/gofmt-after.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	for i := 0; i < 3; i++ {
-		fmt.Println("Hello, world")
-	}
-}
diff --git a/content/2015/go-for-java-programmers/goimports-after.go b/content/2015/go-for-java-programmers/goimports-after.go
deleted file mode 100644
index aa8c9f7..0000000
--- a/content/2015/go-for-java-programmers/goimports-after.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"golang.org/x/tools/present"
-)
-
-func main() {
-	fmt.Println(present.Image{})
-}
diff --git a/content/2015/go-for-java-programmers/goimports-before.go b/content/2015/go-for-java-programmers/goimports-before.go
deleted file mode 100644
index 6744f32..0000000
--- a/content/2015/go-for-java-programmers/goimports-before.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	fmt.Println(present.Image{})
-}
diff --git a/content/2015/go-for-java-programmers/google-first.go b/content/2015/go-for-java-programmers/google-first.go
deleted file mode 100644
index 7fd3b96..0000000
--- a/content/2015/go-for-java-programmers/google-first.go
+++ /dev/null
@@ -1,71 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web1   = fakeSearch("web1")
-	Web2   = fakeSearch("web2")
-	Image1 = fakeSearch("image1")
-	Image2 = fakeSearch("image2")
-	Video1 = fakeSearch("video1")
-	Video2 = fakeSearch("video2")
-)
-
-func Google(query string) (results []Result) {
-	// START OMIT
-	c := make(chan Result, 3)
-	go func() { c <- First(query, Web1, Web2) }()     // HL
-	go func() { c <- First(query, Image1, Image2) }() // HL
-	go func() { c <- First(query, Video1, Video2) }() // HL
-	timeout := time.After(80 * time.Millisecond)
-	for i := 0; i < 3; i++ {
-		select {
-		case result := <-c:
-			results = append(results, result)
-		case <-timeout:
-			fmt.Println("timed out")
-			return
-		}
-	}
-	return
-	// STOP OMIT
-}
-
-func First(query string, replicas ...Search) Result {
-	c := make(chan Result, len(replicas))
-	searchReplica := func(i int) {
-		c <- replicas[i](query)
-	}
-	for i := range replicas {
-		go searchReplica(i)
-	}
-	return <-c
-}
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-	}
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2015/go-for-java-programmers/google-parallel.go b/content/2015/go-for-java-programmers/google-parallel.go
deleted file mode 100644
index 8de0bc5..0000000
--- a/content/2015/go-for-java-programmers/google-parallel.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web   = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-func Google(query string) (results []Result) {
-	c := make(chan Result)
-	go func() { c <- Web(query) }()
-	go func() { c <- Image(query) }()
-	go func() { c <- Video(query) }()
-
-	for i := 0; i < 3; i++ {
-		result := <-c
-		results = append(results, result)
-	}
-	return
-}
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-	}
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2015/go-for-java-programmers/google-serial.go b/content/2015/go-for-java-programmers/google-serial.go
deleted file mode 100644
index 1573ddd..0000000
--- a/content/2015/go-for-java-programmers/google-serial.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-
-// START1 OMIT
-func Google(query string) (results []Result) {
-	results = append(results, Web(query))
-	results = append(results, Image(query))
-	results = append(results, Video(query))
-	return
-}
-
-// STOP1 OMIT
-
-// START2 OMIT
-var (
-	Web   = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-type Search func(query string) Result // HL
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-	}
-}
-
-// STOP2 OMIT
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results := Google("golang") // HL
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2015/go-for-java-programmers/google-timeout.go b/content/2015/go-for-java-programmers/google-timeout.go
deleted file mode 100644
index 1a2c3c7..0000000
--- a/content/2015/go-for-java-programmers/google-timeout.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-type Result string
-type Search func(query string) Result
-
-var (
-	Web   = fakeSearch("web")
-	Image = fakeSearch("image")
-	Video = fakeSearch("video")
-)
-
-func Google(query string) (results []Result) {
-	// START OMIT
-	c := make(chan Result, 3)
-	go func() { c <- Web(query) }()
-	go func() { c <- Image(query) }()
-	go func() { c <- Video(query) }()
-
-	timeout := time.After(80 * time.Millisecond)
-	for i := 0; i < 3; i++ {
-		select { // HL
-		case result := <-c: // HL
-			results = append(results, result)
-		case <-timeout: // HL
-			fmt.Println("timed out")
-			return
-		}
-	}
-	return
-	// STOP OMIT
-}
-
-func fakeSearch(kind string) Search {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
-		return Result(fmt.Sprintf("%s result for %q\n", kind, query))
-	}
-}
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results := Google("golang")
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed)
-}
diff --git a/content/2015/go-for-java-programmers/google1.jpg b/content/2015/go-for-java-programmers/google1.jpg
deleted file mode 100644
index e52e5f0..0000000
--- a/content/2015/go-for-java-programmers/google1.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/google14.jpg b/content/2015/go-for-java-programmers/google14.jpg
deleted file mode 100644
index f83bb9b..0000000
--- a/content/2015/go-for-java-programmers/google14.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/google17.jpg b/content/2015/go-for-java-programmers/google17.jpg
deleted file mode 100644
index 909b579..0000000
--- a/content/2015/go-for-java-programmers/google17.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/google20.jpg b/content/2015/go-for-java-programmers/google20.jpg
deleted file mode 100644
index 1ba9213..0000000
--- a/content/2015/go-for-java-programmers/google20.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/goroutine.go b/content/2015/go-for-java-programmers/goroutine.go
deleted file mode 100644
index 747ea47..0000000
--- a/content/2015/go-for-java-programmers/goroutine.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	go player("ping", new(Ball)) // HL
-	time.Sleep(1 * time.Second)
-}
-
-func player(name string, ball *Ball) {
-	for i := 0; ; i++ {
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/hello/Main.class b/content/2015/go-for-java-programmers/hello/Main.class
deleted file mode 100644
index cccf827..0000000
--- a/content/2015/go-for-java-programmers/hello/Main.class
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/hello/Main.java b/content/2015/go-for-java-programmers/hello/Main.java
deleted file mode 100644
index 73a4d22..0000000
--- a/content/2015/go-for-java-programmers/hello/Main.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class Main {
-    public static void main(String[] args) {
-        System.out.println("Hello, world!");
-    }
-}
diff --git a/content/2015/go-for-java-programmers/hello/hello.go b/content/2015/go-for-java-programmers/hello/hello.go
deleted file mode 100644
index c84b1d7..0000000
--- a/content/2015/go-for-java-programmers/hello/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, 世界!")
-}
diff --git a/content/2015/go-for-java-programmers/hello/server.go b/content/2015/go-for-java-programmers/hello/server.go
deleted file mode 100644
index 69bfac1..0000000
--- a/content/2015/go-for-java-programmers/hello/server.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	http.HandleFunc("/hello", handleHello) // HL
-	fmt.Println("serving on http://localhost:7777/hello")
-	log.Fatal(http.ListenAndServe("localhost:7777", nil))
-}
-
-func handleHello(w http.ResponseWriter, req *http.Request) {
-	log.Println("serving", req.URL)
-	fmt.Fprintln(w, "Hello, 世界!") // HL
-}
diff --git a/content/2015/go-for-java-programmers/interface.go b/content/2015/go-for-java-programmers/interface.go
deleted file mode 100644
index ca1021a..0000000
--- a/content/2015/go-for-java-programmers/interface.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-)
-
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-func (r Rectangle) String() string {
-	var buf bytes.Buffer
-	for h := 0; h < r.Max.Y-r.Min.Y; h++ {
-		for w := 0; w < r.Max.X-r.Min.X; w++ {
-			buf.WriteString("#")
-		}
-		buf.WriteString("\n")
-	}
-	return buf.String()
-}
-
-func main() {
-	fmt.Println(Rectangle{Max: Point{20, 5}})
-}
-
-// EOF OMIT
diff --git a/content/2015/go-for-java-programmers/method.go b/content/2015/go-for-java-programmers/method.go
deleted file mode 100644
index 15077fa..0000000
--- a/content/2015/go-for-java-programmers/method.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-)
-
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-func (r Rectangle) String() string { // HL
-	var buf bytes.Buffer
-	for h := 0; h < r.Max.Y-r.Min.Y; h++ {
-		for w := 0; w < r.Max.X-r.Min.X; w++ {
-			buf.WriteString("#")
-		}
-		buf.WriteString("\n")
-	}
-	return buf.String()
-}
-
-func main() {
-	r := Rectangle{Max: Point{20, 5}}
-	s := r.String() // HL
-	fmt.Println(s)
-}
-
-// EOF OMIT
diff --git a/content/2015/go-for-java-programmers/panic.go b/content/2015/go-for-java-programmers/panic.go
deleted file mode 100644
index d2c935f..0000000
--- a/content/2015/go-for-java-programmers/panic.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// div divides n by d and returns the quotient and remainder.
-func div(n, d int) (q, r int) {
-	return n / d, n % d
-}
-
-func main() {
-	quot, rem := div(4, 0) // HL
-	fmt.Println(quot, rem)
-}
diff --git a/content/2015/go-for-java-programmers/pingpipe.go b/content/2015/go-for-java-programmers/pingpipe.go
deleted file mode 100644
index e22b851..0000000
--- a/content/2015/go-for-java-programmers/pingpipe.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	in, out := make(chan *Ball), make(chan *Ball) // HL
-	go player("ping", in, out)
-	go player("pong", in, out)
-
-	go func() {
-		for i := 0; i < 8; i++ {
-			in <- new(Ball) // feed the pipeline // HL
-		}
-	}()
-	for i := 0; i < 8; i++ {
-		<-out // drain the pipeline // HL
-	}
-}
-
-func player(name string, in <-chan *Ball, out chan<- *Ball) { // HL
-	for i := 0; ; i++ {
-		ball := <-in // HL
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		out <- ball // HL
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/pingpong.go b/content/2015/go-for-java-programmers/pingpong.go
deleted file mode 100644
index 2d7664a..0000000
--- a/content/2015/go-for-java-programmers/pingpong.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table) // HL
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for i := 0; ; i++ {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/pingselect.go b/content/2015/go-for-java-programmers/pingselect.go
deleted file mode 100644
index 03dcb1e..0000000
--- a/content/2015/go-for-java-programmers/pingselect.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	in, out := make(chan *Ball), make(chan *Ball)
-	go player("ping", in, out)
-	go player("pong", in, out)
-
-	for i := 0; i < 8; {
-		select { // HL
-		case in <- new(Ball): // feed the pipeline // HL
-		case <-out: // drain the pipeline // HL
-			i++ // HL
-		} // HL
-	}
-}
-
-func player(name string, in <-chan *Ball, out chan<- *Ball) {
-	for i := 0; ; i++ {
-		ball := <-in
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		out <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/player.go b/content/2015/go-for-java-programmers/player.go
deleted file mode 100644
index 96df122..0000000
--- a/content/2015/go-for-java-programmers/player.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	player("ping", new(Ball))
-}
-
-func player(name string, ball *Ball) {
-	for i := 0; ; i++ {
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2015/go-for-java-programmers/pointer.go b/content/2015/go-for-java-programmers/pointer.go
deleted file mode 100644
index eb52944..0000000
--- a/content/2015/go-for-java-programmers/pointer.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START TYPES OMIT
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-// END TYPES OMIT
-
-func main() {
-	var r0 Rectangle
-
-	r1 := r0 // struct copy
-
-	r1.Min.X, r1.Min.Y = -1, -1
-	r1.Max = Point{X: 2}
-
-	fmt.Printf("r0 is %+v\n", r0)
-	fmt.Printf("r1 is %v\n", r1)
-
-	y := &r1.Max.Y // y is a *int // HL
-	*y = 5         // HL
-	fmt.Println(y, "points to", *y)
-
-	min := &r1.Min // min is a *Point // HL
-	min.X = 7      // HL
-	fmt.Printf("r1 is %v\n", r1)
-}
diff --git a/content/2015/go-for-java-programmers/safe.go b/content/2015/go-for-java-programmers/safe.go
deleted file mode 100644
index 234b4d2..0000000
--- a/content/2015/go-for-java-programmers/safe.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func newInt(v int) *int {
-	var n = v
-	return &n // HL
-}
-
-func inc(p *int) {
-	*p++ // try removing * // HL
-}
-
-func main() {
-	p := newInt(3)
-	inc(p)
-	fmt.Println(p, "points to", *p)
-}
diff --git a/content/2015/go-for-java-programmers/spdy.png b/content/2015/go-for-java-programmers/spdy.png
deleted file mode 100644
index bbc0650..0000000
--- a/content/2015/go-for-java-programmers/spdy.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/go-for-java-programmers/struct.go b/content/2015/go-for-java-programmers/struct.go
deleted file mode 100644
index 34fa0fa..0000000
--- a/content/2015/go-for-java-programmers/struct.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START SLICES OMIT
-var arr [8]Rectangle
-
-var (
-	rects  = arr[2:4]
-	rects2 = []Rectangle{rects[0], rects[1]}
-)
-
-// START TYPES OMIT
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-// END TYPES OMIT
-
-func main() {
-	var r0 Rectangle
-
-	r1 := r0 // struct copy
-
-	r1.Min.X, r1.Min.Y = -1, -1
-	r1.Max = Point{X: 2}
-
-	fmt.Printf("r0 is %+v\n", r0)
-	fmt.Printf("r1 is %v\n", r1)
-}
diff --git a/content/2015/go-gc.pdf b/content/2015/go-gc.pdf
deleted file mode 100644
index c753d86..0000000
--- a/content/2015/go-gc.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp.slide b/content/2015/go4cpp.slide
deleted file mode 100644
index 1af3d84..0000000
--- a/content/2015/go4cpp.slide
+++ /dev/null
@@ -1,712 +0,0 @@
-Go for C++ developers
-
-Francesc Campoy
-Developer, Advocate, and Gopher at Google
-@francesc
-campoy@golang.org
-
-#go4cpp
-
-* Go for C++ developers
-
-Agenda:
-
-- let's talk about Go
-
-- how do I do X in Go?
-
-- concurrency, because it's awesome
-
-- Q & A: but feel free to interrupt anytime
-
-- We might not go through all the slides
-
-* About me
-
-*2011*  Joined Google as a Software Engineer
-
-- writing mostly in C++ and Python
-- used to think _smart_code_ was better than boring code
-
-*2012* Joined the Go team as a Developer Programs Engineer
-
-*2014*to*today* Developer Advocate for the Google Cloud Platform
-
-* Let's talk about Go
-
-* Go is
-
-Go is
-
-- open source
-
-- statically typed
-
-- object oriented (if you ask me)
-
-- compiled
-
-- memory safe
-
-- type safe
-
-* Why Go?
-
-Go was created for:
-
-- scalability
-
-- concurrency
-
-- simplicity
-
-* Who uses Go?
-
-Google:
-
-- YouTube
-- dl.google.com
-
-Others:
-
-- Docker
-- SoundCloud
-- Canonical
-- CloudFlare
-- Mozilla
-- ...
-
-[[http://golang.org/wiki/GoUsers][golang.org/wiki/GoUsers]]
-
-* Who uses Go?
-
-.image go4cpp/trends.png _ 800
-
-.caption Google Trends for [[http://www.google.com/trends/explore#q=golang][golang]]
-
-* Some Go features
-
-* Go types
-
-- primitive types
-
-	int, uint, int8, uint8, ...
-	bool, string
-	float32, float64
-	complex64, complex128
-
-- structs
-
-	struct {
-		Name string
-		Age  int
-	}
-
-- slices and arrays
-
-	[]int, [3]string, []struct{ Name string }
-
-- maps
-
-	map[string]int
-
-* Kinds of types (continued)
-
-- pointers
-
-	*int, *Person
-
-- functions
-
-	func(int, int) int
-
-- channels
-
-	chan bool
-
-- interfaces
-
-	interface {
-		Start()
-		Stop()
-	}
-
-* Type declarations
-
-	type [name] [specification]
-
-`Person` is a `struct` type.
-
-	type Person struct {
-		name string
-		age  int
-	}
-
-`Celsius` is a `float64` type.
-
-	type Celsius float64
-
-* Function declarations
-
-	func [name] ([params]) [return value]
-	func [name] ([params]) ([return values])
-
-A sum function:
-
-	func sum(a int, b int) int {
-		return a + b
-	}
-
-A function with multiple return values:
-
-	func divMod(a, b int) (int, int) {
-		return a / b, a % b
-	}
-
-Made clearer by naming the return values:
-
-	func divMod(den, div int) (quo, rem int) {
-		return den / div, den % div
-	}
-
-* Method declarations
-
-	func ([receiver]) [name] ([params]) ([return values])
-
-A method on a struct:
-
-	func (p Person) IsMinor() bool {
-		return p.age < 18
-	}
-
-But also a method on a `float64`:
-
-	func (c Celsius) Freezing() bool {
-		return c <= 0
-	}
-
-_Constraint:_ Methods can be defined *only* on types declared in the same package.
-
-	// This won't compile
-	func (s string) Length() int { return len(s) }
-
-* Declaring variables
-
-Normal declaration:
-
-    var text string = "hello"
-
-You can omit types:
-
-    var text = "hello"
-
-And inside of functions:
-
-    text := "hello"
-
-Other types
-
-    a := 0                             // int
-    b := true                          // boolean
-    f := 1.0                           // float64
-    p := Person{"Francesc", "Campoy"}  // Person
-
-* No implicit numeric conversion
-
-Given types:
-
-    type Celsius float64
-
-    type Fahrenheit float64
-
-And the variables:
-
-    var freezing Fahrenheit = 32
-    var boiling Celsius = 100
-
-This code won't compile:
-
-    sauna := (freezing + boiling) / 2
-
-There's no implicit numeric conversion in Go.
-
-* Pointers and memory allocation
-
-* Pointers
-
-Go has pointers:
-
-    var p *int
-    p = new(int)
-
-But no pointer arithmetics:
-
-    var p *int = &a[0]
-    var q = p+2            // invalid
-
-There's `new` but there's no `delete`.
-
-Memory is garbaged collected after it's no longer accessible.
-
-* Memory allocation
-
-The compiler decides where to allocate based on escape analysis.
-
-Using `new` doesn't imply using the heap:
-
-`stack.go`:
-
-    func get() int {
-        n := new(int)
-        return *n
-    }
-
-And not all values in the heap are created with `new`:
-
-`heap.go`:
-
-    func get() *int {
-        n := 4
-        return &n
-    }
-
-* Choosing what allocation you want
-
-You can *not* decide where a value is allocated.
-
-But you can see what kind of allocation is used:
-
-    $ go tool 6g -m stack.go
-
-    stack.go:3: can inline get
-    stack.go:4: get new(int) does not escape
-
-Compare to:
-
-    $ go tool 6g -m heap.go
-
-    heap.go:3: can inline get
-    heap.go:4: moved to heap: n
-    heap.go:5: &n escapes to heap
-
-* RAII
-
-_Resource_Acquisition_Is_Initialization_
-
-Provides:
-
-- encapsulation of acquisition and disposition of resources
-
-- exception safe
-
-An example:
-
-    void write_to_file (const std::string & message) {
-        // mutex to protect file access
-        static std::mutex mutex;
-     
-        // lock mutex before accessing file
-        // at the end of the scope unlock mutex
-        std::lock_guard<std::mutex> lock(mutex);
-
-        // mutual exclusion access section
-        ...
-    }
-
-* RAII in Go: defer
-
-The `defer` statement:
-
-- schedules a function call at the end of the current function
-
-- stacks all deferred calls - last in first out
-
-    var m sync.Mutex
-
-    func writeToFile(msg string) error {
-        m.Lock()
-        defer m.Unlock()
-
-        // mutual exclusion access section
-    }
-
-* Garbage collection
-
-Go is a garbage collected language
-
-But it's easy to limit heap allocations
-
-- many values are allocated on the stack
-
-- object pools: [[sync.Pool][http://golang.org/pkg/sync/#Pool]]
-
-- contiguous area of memory
-
-.play go4cpp/sizes.go /type/,
-
-* More about garbage collection
-
-Trusted in production.
-
-Brad Fitzpatrick's talk on migrating dl.google.com from C++ to Go:
-
-- [[https://talks.golang.org/2013/oscon-dl.slide#1][dl.google.com: Powered by Go]]
-
-Current state and road plan:
-
-- [[http://golang.org/s/go14gc][golang.org/s/go14gc]]
-
-* Inheritance vs Composition
-
-* Inheritance vs Composition
-
-- Inheritance breaks encapsulation
-
-- Composition causes boilerplate to proxy all methods
-
-Example:
-
-    type Engine struct{}
-
-    func (e Engine) Start() { ... }
-    func (e Engine) Stop()  { ... }
-
-We want `Car` to be able to `Start` and `Stop` too.
-
-More detail in my talk [[http://talks.golang.org/2014/go4java.slide#32][Go for Javaneros]]
-
-* Struct embedding
-
-Composition + Proxy of selectors
-
-.play go4cpp/embedding.go /type/,
-
-* Struct embedding and the diamond problem
-
-What if two embedded fields have the same type?
-
-.play go4cpp/diamond.go /type/,
-
-* Struct embedding
-
-It looks like inheritance but _it_is_not_inheritance_.
-
-It is composition.
-
-Used to share implementations between different types.
-
-What if want to share behavior instead?
-
-* Interfaces
-
-* Interfaces
-
-An interface is a set of methods.
-
-In Java (C++ doesn't have interfaces)
-
-    interface Switch {
-        void open();
-        void close();
-    }
-
-In Go:
-
-	type OpenCloser interface {
-		Open()
-		Close()
-	}
-
-* It's all about satisfaction
-
-Java interfaces are satisfied *explicitly*.
-
-C++ abstract classes need to be extended *explicitly*
-
-Go interfaces are satisfied *implicitly*.
-
-.image //upload.wikimedia.org/wikipedia/commons/thumb/2/29/Rolling_Stones_09.jpg/512px-Rolling_Stones_09.jpg _ 512
-
-.caption Picture by Gorupdebesanez [[http://creativecommons.org/licenses/by-sa/3.0][CC-BY-SA-3.0]], via [[http://commons.wikimedia.org/wiki/File%3ARolling_Stones_09.jpg][Wikimedia Commons]]
-
-* Go: implicit satisfaction
-
-_If_a_type_defines_all_the_methods_of_an_interface,_the_type_satisfies_that_interface._
-
-Benefits:
-
-- fewer dependencies
-- no type hierarchy
-- organic composition
-
-* Structural subtyping
-
-Better than duck typing. Verified at compile time.
-
-.image go4cpp/duck.jpg 500 500
-
-* FuncDraw: an example on interfaces
-
-.image go4cpp/funcdraw.png 500 700
-
-* FuncDraw: package parser
-
-Package `parse` provides a parser of strings into functions.
-
-	func Parse(text string) (*Func, error) { ... }
-
-`Func` is a struct type, with an `Eval` method.
-
-	type Func struct { ... }
-
-	func (p *Func) Eval(x float64) float64 { ... }
-
-* FuncDraw: package draw
-
-Package draw generates images given a function.
-
-	func Draw(f *parser.Func) image.Image {
-		for x := start; x < end; x += inc {
-			y := f.Eval(x)
-			...
-		}
-	}
-
-`draw` depends on `parser`, which makes testing hard.
-
-* Breaking dependencies
-
-Let's use an interface instead
-
-	type Evaluable interface {
-		Eval(float64) float64
-	}
-
-	func Draw(f Evaluable) image.Image image.Image {
-		for x := start; x < end; x += inc {
-			y := f.Eval(x)
-			...
-		}
-	}
-
-* Advanced interfaces and composition
-
-* Struct embedding of interfaces
-
-Embedding an interface:
-
-- more types can be used
-- limits what is added to the embedding type
-
-Given:
-
-    type Person struct {
-        First string
-        Last  string
-        Age   int
-    }
-
-`Employee` exposes the `Age` of `Person`
-
-    type Employee struct {
-        Person
-    }
-
-    e := Employee{Person{"John", "Doe", 49}}
-
-* Choosing what to proxy
-
-But we could hide it by choosing an interface:
-
-    type Employee struct {
-        Namer
-    }
-
-    type Namer interface {
-        Name() string
-    }
-
-And we need to make `Person` satisfy `Namer`
-
-    func (e Person) Name() string { return e.First + e.Last }
-
-And the rest of the code still works:
-
-    e := Employee{Person{"John", "Doe", 49}}
-
-* Easy mocking of interfaces
-
-Given this function:
-
-.code go4cpp/mock.go /func/,/^}/
-
-How would you test it?
-
-* Easy mocking of interfaces
-
-`net.Conn` is an interface defined in the `net` package of the standard library.
-
-    type Conn interface {
-        Read(b []byte) (n int, err error)
-        Write(b []byte) (n int, err error)
-        Close() error
-        LocalAddr() Addr
-        RemoteAddr() Addr
-        SetDeadline(t time.Time) error
-        SetReadDeadline(t time.Time) error
-        SetWriteDeadline(t time.Time) error
-    }
-
-We need a fake `net.Conn`!
-
-* One solution
-
-We could define a new type that satisfies `net.Conn`
-
-    type fakeConn struct {}
-
-    func (c fakeConn) Read(b []byte) (n int, err error) {...}
-    func (c fakeConn) Write(b []byte) (n int, err error) {...}
-    func (c fakeConn) Close() error {...}
-    ...
-
-But, is there a better way?
-
-* The better way
-
-.code go4cpp/mock.go /type fakeConn/,/end_fake/
-
-And our test can look like:
-
-.play go4cpp/mock.go /func main/,
-
-* Concurrency
-
-* Concurrency
-
-It is part of the language, not a library.
-
-Based on three concepts:
-
-- goroutines: lightweight threads
-- channels: typed pipes used to communicate and synchronize between goroutines
-- select: control structure to coordinate concurrent operations
-
-.image go4cpp/funnelin.jpg 300 700
-
-* Sleep and talk
-
-.code go4cpp/conc1.go /sleepAndTalk/,/^}/
-
-We want a message per second.
-
-.play go4cpp/conc1.go /func main/,/^}/
-
-What if we started all the `sleepAndTalk` concurrently?
-
-Just add `go`!
-
-* Concurrent sleep and talk
-
-.play go4cpp/conc2.go /func main/,/^}/
-
-That was fast ...
-
-When the `main` goroutine ends, the program ends.
-
-* Concurrent sleep and talk with more sleeping
-
-.play go4cpp/conc3.go /func main/,/^}/
-
-But synchronizing with `Sleep` is a bad idea.
-
-* Communicating through channels
-
-`sleepAndTalk` sends the string into the channel instead of printing it.
-
-.code go4cpp/chan.go /sleepAndTalk/,/^}/
-
-We create the channel and pass it to `sleepAndTalk`, then wait for the values to be sent.
-
-.play go4cpp/chan.go /func main/,/^}/
-
-* Aside: a web server
-
-A production ready web server.
-
-.play go4cpp/webserver.go
-
-* Let's count on the web
-
-Why is this wrong?
-
-.play go4cpp/badcounter.go /nextID/,
-
-* Let's count on the web correctly
-
-We receive the next id from a channel.
-
-.code go4cpp/goodcounter.go /nextID/,/^}/
-
-We need to send ids into the channel.
-
-.code go4cpp/goodcounter.go /counter/,/^}/
-
-* Let's count on the web correctly
-
-And we need to do both at the same time.
-
-.play go4cpp/goodcounter.go /func main/,/^}/
-
-* Let's fight!
-
-`select` allows us to choose among multiple channel operations.
-
-.play go4cpp/battle.go /battle/,/^}/
-
-Go - [[http://localhost:8080/fight?usr=go]]
-C++ - [[http://localhost:8080/fight?usr=cpp]]
-
-* Chain of gophers
-
-.image go4cpp/chain.jpg
-
-Ok, I'm just bragging here
-
-* Chain of gophers
-
-.play go4cpp/goroutines.go /func f/,
-
-* Concurrency is very powerful
-
-And there's lots to learn!
-
-- [[http://talks.golang.org/2012/concurrency.slide#1][Go Concurrency Patterns]], by Rob Pike
-- [[http://talks.golang.org/2013/advconc.slide#1][Advanced Concurrency Patterns]], by Sameer Ajmani
-- [[http://talks.golang.org/2012/waza.slide#1][Concurrency is not Parellelism]], by Rob Pike
-
-.image go4cpp/busy.jpg
-
-* In conclusion
-
-- Go is simple, consistent, readable, and fun.
-
-- All types are equal: methods on any type.
-
-- Implicit satisfaction of interfaces makes code easier to reuse.
-
-- Use composition instead of inheritance.
-
-- Struct embedding is a powerful tool.
-
-- Concurrency is awesome, and you should check it out.
-
-* What to do next?
-
-Learn Go on your browser with [[http://tour.golang.org][tour.golang.org]]
-
-Find more about Go on [[http://golang.org][golang.org]]
-
-Join the community at [[https://groups.google.com/forum/#!forum/Golang-nuts][golang-nuts]]
-
-Link to the slides [[http://talks.golang.org/2015/go4cpp.slide]]
diff --git a/content/2015/go4cpp/badcounter.go b/content/2015/go4cpp/badcounter.go
deleted file mode 100644
index 986d0a7..0000000
--- a/content/2015/go4cpp/badcounter.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-var nextID int
-
-func handler(w http.ResponseWriter, q *http.Request) {
-	fmt.Fprintf(w, "<h1>You got %v<h1>", nextID)
-	nextID++
-}
-
-func main() {
-	http.HandleFunc("/", handler)
-	log.Fatal(http.ListenAndServe("localhost:8080", nil))
-}
diff --git a/content/2015/go4cpp/battle.go b/content/2015/go4cpp/battle.go
deleted file mode 100644
index fde600c..0000000
--- a/content/2015/go4cpp/battle.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-var battle = make(chan string)
-
-func handler(w http.ResponseWriter, q *http.Request) {
-	select {
-	case battle <- q.FormValue("usr"):
-		fmt.Fprintf(w, "You won!")
-	case won := <-battle:
-		fmt.Fprintf(w, "You lost, %v is better than you", won)
-	}
-}
-
-func main() {
-	http.HandleFunc("/fight", handler)
-	http.ListenAndServe("localhost:8080", nil)
-}
diff --git a/content/2015/go4cpp/busy.jpg b/content/2015/go4cpp/busy.jpg
deleted file mode 100644
index 35ce9f4..0000000
--- a/content/2015/go4cpp/busy.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/chain.jpg b/content/2015/go4cpp/chain.jpg
deleted file mode 100644
index 87f8571..0000000
--- a/content/2015/go4cpp/chain.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/chan.go b/content/2015/go4cpp/chan.go
deleted file mode 100644
index 424fa73..0000000
--- a/content/2015/go4cpp/chan.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(secs time.Duration, msg string, c chan string) {
-	time.Sleep(secs * time.Second)
-	c <- msg
-}
-
-func main() {
-	c := make(chan string)
-
-	go sleepAndTalk(0, "Hello", c)
-	go sleepAndTalk(1, "Gophers!", c)
-	go sleepAndTalk(2, "What's", c)
-	go sleepAndTalk(3, "up?", c)
-
-	for i := 0; i < 4; i++ {
-		fmt.Printf("%v ", <-c)
-	}
-}
diff --git a/content/2015/go4cpp/conc.jpg b/content/2015/go4cpp/conc.jpg
deleted file mode 100644
index 5813956..0000000
--- a/content/2015/go4cpp/conc.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/conc1.go b/content/2015/go4cpp/conc1.go
deleted file mode 100644
index b1a599d..0000000
--- a/content/2015/go4cpp/conc1.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	sleepAndTalk(0*time.Second, "Hello")
-	sleepAndTalk(1*time.Second, "Gophers!")
-	sleepAndTalk(2*time.Second, "What's")
-	sleepAndTalk(3*time.Second, "up?")
-}
diff --git a/content/2015/go4cpp/conc2.go b/content/2015/go4cpp/conc2.go
deleted file mode 100644
index 129854e..0000000
--- a/content/2015/go4cpp/conc2.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	go sleepAndTalk(0*time.Second, "Hello")
-	go sleepAndTalk(1*time.Second, "Gophers!")
-	go sleepAndTalk(2*time.Second, "What's")
-	go sleepAndTalk(3*time.Second, "up?")
-}
diff --git a/content/2015/go4cpp/conc3.go b/content/2015/go4cpp/conc3.go
deleted file mode 100644
index 1fe09cf..0000000
--- a/content/2015/go4cpp/conc3.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func sleepAndTalk(t time.Duration, msg string) {
-	time.Sleep(t)
-	fmt.Printf("%v ", msg)
-}
-
-func main() {
-	go sleepAndTalk(0*time.Second, "Hello")
-	go sleepAndTalk(1*time.Second, "Gophers!")
-	go sleepAndTalk(2*time.Second, "What's")
-	go sleepAndTalk(3*time.Second, "up?")
-	time.Sleep(4 * time.Second)
-}
diff --git a/content/2015/go4cpp/defer.go b/content/2015/go4cpp/defer.go
deleted file mode 100644
index 48b89af..0000000
--- a/content/2015/go4cpp/defer.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"net"
-	"net/http"
-	"os"
-)
-
-func dumpURL(u, path string) error {
-	net.Dial()
-	res, err := http.Get(u)
-	if err != nil {
-		return fmt.Errorf("get %v: %v", u, err)
-	}
-	defer res.Body.Close()
-
-	f, err := os.Create(path)
-	if err != nil {
-		return fmt.Errorf("create %v: %v", path, err)
-	}
-	defer f.Close()
-
-	_, err := io.Copy(f, res.Body)
-}
diff --git a/content/2015/go4cpp/diamond.go b/content/2015/go4cpp/diamond.go
deleted file mode 100644
index 96855fe..0000000
--- a/content/2015/go4cpp/diamond.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Engine struct{}
-
-func (e Engine) Start() { fmt.Println("Engine started") }
-func (e Engine) Stop()  { fmt.Println("Engine stopped") }
-
-type Radio struct{}
-
-func (r Radio) Start() { fmt.Println("Radio started") }
-func (r Radio) Stop()  { fmt.Println("Radio stopped") }
-
-type Car struct {
-	Engine
-	Radio
-}
-
-func main() {
-	var c Car
-	c.Radio.Start()  // HL
-	c.Engine.Start() // HL
-}
diff --git a/content/2015/go4cpp/duck.jpg b/content/2015/go4cpp/duck.jpg
deleted file mode 100644
index 344b31e..0000000
--- a/content/2015/go4cpp/duck.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/embedding.go b/content/2015/go4cpp/embedding.go
deleted file mode 100644
index efb9569..0000000
--- a/content/2015/go4cpp/embedding.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-type Engine struct{}
-
-func (e Engine) Start() {
-	fmt.Println("Engine started")
-}
-
-func (e Engine) Stop() {
-	fmt.Println("Engine stopped")
-}
-
-type Car struct {
-	Engine // Notice the lack of name // HL
-}
-
-func main() {
-	var c Car
-
-	c.Start()
-	c.Stop()
-}
diff --git a/content/2015/go4cpp/funcdraw.png b/content/2015/go4cpp/funcdraw.png
deleted file mode 100644
index 374ea2e..0000000
--- a/content/2015/go4cpp/funcdraw.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/funnelin.jpg b/content/2015/go4cpp/funnelin.jpg
deleted file mode 100644
index 2bf6873..0000000
--- a/content/2015/go4cpp/funnelin.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/goodcounter.go b/content/2015/go4cpp/goodcounter.go
deleted file mode 100644
index d2819ad..0000000
--- a/content/2015/go4cpp/goodcounter.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-var nextID = make(chan int)
-
-func handler(w http.ResponseWriter, q *http.Request) {
-	fmt.Fprintf(w, "<h1>You got %v<h1>", <-nextID)
-}
-
-func counter() {
-	for i := 0; ; i++ {
-		nextID <- i
-	}
-}
-
-func main() {
-	http.HandleFunc("/", handler)
-	go counter()
-	log.Fatal(http.ListenAndServe("localhost:8080", nil))
-}
diff --git a/content/2015/go4cpp/goroutines.go b/content/2015/go4cpp/goroutines.go
deleted file mode 100644
index cdcdb85..0000000
--- a/content/2015/go4cpp/goroutines.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func f(left, right chan int) {
-	left <- 1 + <-right
-}
-
-func main() {
-	start := time.Now()
-	const n = 1000
-	leftmost := make(chan int)
-
-	right := leftmost
-	left := leftmost
-	for i := 0; i < n; i++ {
-		right = make(chan int)
-		go f(left, right)
-		left = right
-	}
-
-	go func(c chan int) { c <- 0 }(right)
-
-	fmt.Println(<-leftmost, time.Since(start))
-}
diff --git a/content/2015/go4cpp/mock.go b/content/2015/go4cpp/mock.go
deleted file mode 100644
index 8182226..0000000
--- a/content/2015/go4cpp/mock.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"io"
-	"log"
-	"net"
-	"strings"
-)
-
-func CheckPassword(c net.Conn) error {
-	// read a password from the connection
-	buf := make([]byte, 256)
-	n, err := c.Read(buf)
-	if err != nil {
-		return fmt.Errorf("read: %v", err)
-	}
-
-	// check it's correct
-	got := string(buf[:n])
-	if got != "password" {
-		return fmt.Errorf("wrong password")
-	}
-	return nil
-}
-
-type fakeConn struct {
-	net.Conn
-	r io.Reader
-}
-
-func (c fakeConn) Read(b []byte) (int, error) {
-	return c.r.Read(b)
-}
-
-// end_fake OMIT
-
-func main() {
-	c := fakeConn{
-		r: strings.NewReader("foo"),
-	}
-	err := CheckPassword(c)
-	if err == nil {
-		log.Println("expected error using wrong password")
-	} else {
-		log.Println("OK")
-	}
-}
diff --git a/content/2015/go4cpp/sizes.go b/content/2015/go4cpp/sizes.go
deleted file mode 100644
index b253921..0000000
--- a/content/2015/go4cpp/sizes.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"unsafe"
-)
-
-type Date struct {
-	Day   int
-	Month int
-	Year  int
-}
-
-func main() {
-	fmt.Printf("size of %T: %v\n", 0, unsafe.Sizeof(0))
-	fmt.Printf("size of %T: %v\n", Date{}, unsafe.Sizeof(Date{}))
-	fmt.Printf("size of %T: %v\n", [100]Date{}, unsafe.Sizeof([100]Date{}))
-}
diff --git a/content/2015/go4cpp/trends.png b/content/2015/go4cpp/trends.png
deleted file mode 100644
index 2abc0f0..0000000
--- a/content/2015/go4cpp/trends.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/go4cpp/webserver.go b/content/2015/go4cpp/webserver.go
deleted file mode 100644
index 8d5463c..0000000
--- a/content/2015/go4cpp/webserver.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func handler(w http.ResponseWriter, r *http.Request) { // HL
-	fmt.Fprintln(w, "hello")
-}
-
-func main() {
-	http.HandleFunc("/", handler) // HL
-	err := http.ListenAndServe("localhost:1234", nil)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2015/gofmt-cn.slide b/content/2015/gofmt-cn.slide
deleted file mode 100644
index e5eb064..0000000
--- a/content/2015/gofmt-cn.slide
+++ /dev/null
@@ -1,643 +0,0 @@
-## The Cultural Evolution of gofmt
-gofmt 的文化演变
-The Cultural Evolution of gofmt
-
-Robert Griesemer
-Google, Inc.
-gri@golang.org
-
-
-* gofmt
-
-## Go source code formatter
-- Go源代码格式化工具
-
-## Defines _de_facto_ Go formatting
-- 定义了“标准“格式
-
-## All submitted Go code must be formatted with `gofmt` in `golang.org` repos.
-- golang.org代码库中所有提交的Go代码都必须通过gofmt格式化过
-
-## Functionality available outside gofmt via `go/format` library.
-- 除了gofmt之外,相同功能可以通过go/format库获得
-
-## No knobs!
-- 不需要设置!
-
-## Original motivation
-* 初衷
-
-## Code reviews are software engineering best practice.
-- 代码审查是软件工程的最佳实践
-
-## Code reviews are informed by style guides, prescribe formatting.
-- 代码审查是基于代码规范和正规格式的
-# Google C++ style guide: ~65 pages (~15p on formatting)
-# Google C++的规范:~65页(~15页是关于格式)
-# Go spec: ~50 pages
-# Go的细则:50页
-
-## *Much*too*much*time*lost*on*reviewing*formatting*rather*than*code.*
-- *太多时间浪费在审查格式上而不是代码本身了*
-# Example: Formatting review time 10 min/day, 600 engineers => 100 manhours/day!
-# 例子:格式审查需要10分钟/天,600工程师=>100人时/天
-
-## Yet it's the perfect job for a machine.
-- 但是这工作对机器来说是最好不过了的
-
-## Day 1 decision to write a pretty printer for Go.
-- 第一个决定就是要写一个好的格式美化器
-# informed by experience with Java and C++ code reviews at Google
-# 基于在Google的Java和C++的代码审查经验
-
-## History
-* 历史
-
-## Pretty printers and code beautifiers existed since the early days of computing.
-- 格式美化器和代码美化工具在计算机发展的早期就已出现
-
-## Essential to produce readable Lisp code:
-- 对于产生可读的Lisp代码很重要的:
-
-	GRINDEF  (Bill Gosper, 1967)           第一个计算行长度
-
-## Many others:
-- 其他:
-
-	SOAP     (R. Scowen et al, 1969)       简化了晦涩的算法程序
-	NEATER2  (Ken Conrow, R. Smith, 1970)  PL/1格式器,作为(早期的)纠错工具
-	cb       (Unix Version 7, 1979)        C程序美化器
-	indent   (4.2 BSD, 1983)               缩进和格化化C代码
-	等等
-
-## More recently:
-- 最近的:
-
-	ClangFormat                            C/C++/Objective-C 格式器
-	Uncrustify                             C, C++, C#, ObjectiveC, D, Java, Pawn and VALA的美化器
-	等等
-
-
-## Reality check
-* 事实上
-
-## In 2007, nobody seemed to like source code formatters.
-- 在2007年,没人喜欢代码格式器
-
-## Exception: IDE-imposed formatting.
-- 例外:IDE强制的格式化
-
-## But: Many programmers don't use IDEs…
-- 但是:很多程序员不用IDE...
-
-## Problem: If automatic formatting feels too destructive, it is not used.
-- 问题:如果是格式化太具有毁坏性,那么就没有人会用
-
-## Missing insight: "good enough" uniform formatting style is better than having lots of different formats.
-- 被忽视的观点:“刚刚好“的,统一化的格式是好过于各种不同的格式的。
-
-## Value of style guide: Uniformity, not perfection.
-- 规范的价值在于:整齐划一,而不是完美
-
-
-## The problem with pretty printers
-* 好的格式美化器的问题
-
-## The more people think about their own formatting style, the more they get attached to it.
-- 当越多人思考他们自己的格式风格的时候,他们就变得更加固执于此了
-# religion
-# 宗教
-
-## Wrong conclusion: Automatic formatters must permit a lot of formatting options!
-- 错误的结论:自动格式器必须要有很多选项!
-
-## But: Formatters with too many options defeat the purpose.
-- 但是有很多选项的格式器其实违背他们的目的
-# e.g., indent
-# 比如说indent
-
-## Also: Very hard to do a good job.
-- 此外,支持很多选项是难的
-# combinatorial explosion of styles to test
-# 太多组合需要测试
-
-## Respecting user intent is key.
-- 尊重用户的想法是最关键的
-
-## Dealing with comments is hard.
-- 处理注释是很难的
-
-## Language may add extra complexity (e.g., C macros)
-- 语言本身也会增加很多额外的复杂度(比如,C的宏)
-
-
-## Formatting Go
-* 格式化Go
-
-## Keep it as simple as possible
-* 尽量保证其简单
-
-## Small language makes task much simpler.
-- 小的语言能让事情变得简单
-
-## Don't fret over line length control.
-- 不要为行长度烦恼
-
-## Instead, respect user: Consider line breaks in original source.
-- 相反的,尊重用户:考虑原有代码中的断行
-
-## Don't support any options.
-- 不要支持任何选项
-
-## Make it easy to use.
-- 使其使用傻瓜化
-
-## *One*formatting*style*to*rule*them*all!*
-*一个格化标准搞定所有!*
-
-
-## Basic structure of gofmt
-* gofmt的基本结构
-
-## Parsing of source code
-- 源代码的处理
-
-## Basic formatting
-- 基本的格式化
-
-## Enhancement: Handling of comments
-- 附加:注释的处理
-
-## Make it nice: Alignment of code and comments
-- 完善:代码和注释的对齐
-
-## But: No fancy general layout algorithms.
-- 但是,没有牛X的通用布局算法
-
-## Instead: Node-specific fine tuning.
-- 相反的:基于节点的精细优化
-
-
-## Parsing source code
-* 处理源代码
-
-## Use `go/scanner`, `go/parser`, and friends.
-- 使用`go/scanner`, `go/parser`及其相关的库
-
-## Result is an abstract syntax tree (`go/ast`) for each `.go` file.
-- 给每一个go文件生成一个抽象语法树
-# misnomer: AST is actually a concrete syntax tree
-# 用词不当:抽象语法树其实是一个具体语法树
-
-## Each syntactic construct has a corresponding AST node.
-- 每一个语法结构都有相应的AST节点
-
-	// Syntax of an if statement.
-	IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
-
-	// An IfStmt node represents an if statement.
-	IfStmt struct {
-		If   token.Pos // position of "if" keyword
-		Init Stmt      // initialization statement; or nil
-		Cond Expr      // condition
-		Body *BlockStmt
-		Else Stmt // else branch; or nil
-	}
-
-## AST nodes have (selected) position information.
-- AST节点有(选择性的)位置信息。
-
-
-## Basic formatting
-* 基本的格式化
-
-## Traverse AST and print nodes.
-- 遍历AST然后打印每个节点
-
-	case *ast.IfStmt:
-		p.print(token.IF)
-		p.controlClause(false, s.Init, s.Cond, nil)
-		p.block(s.Body, 1)
-		if s.Else != nil {
-			p.print(blank, token.ELSE, blank)
-			switch s.Else.(type) {
-			case *ast.BlockStmt, *ast.IfStmt:
-				p.stmt(s.Else, nextIsRBrace)
-			default:
-				p.print(token.LBRACE, indent, formfeed)
-				p.stmt(s.Else, true)
-				p.print(unindent, formfeed, token.RBRACE)
-			}
-		}
-
-## Printer (`p.print`) accepts a sequence of tokens, including position and white space information.
-- 打印器(`p.print`)接收包括位置和空格符等的一系列记号
-
-
-## Fine tuning
-* 细致的调节
-
-## Precedence-dependent spacing between operands.
-- 基于优先级安排操作数之间的空格.
-
-# implemented by rsc in gofmt
-
-## Improves readability of expressions.
-- 提高表达式的可读性.
-
-	x = a + b
-	x = a + b*c
-	if a+b <= d {
-	if a+b*c <= d {
-
-## Use position information to guide line break decisions.
-- 使用位置信息决定何时换行.
-
-## Various other heuristics.
-- 其他一些策略.
-
-
-## Handling of comments
-* 注释的处理
-
-## Comments can appear between any two tokens of a program.
-- 注释可以出现在程序的任何两个词汇之间.
-
-## In general, not obviously clear to which AST node a comment belongs.
-- 通常情况下,不能很明显的知道注释属于哪个 AST 节点.
-
-# In retrospect, a heuristic might have been better than the list of comments
-# we have now. See Lessons learned.
-
-## Comments often come in groups:
-- 注释经常是成组出现:
-
-	// A CommentGroup represents a sequence of comments
-	// with no other tokens and no empty lines between.
-	//
-	type CommentGroup struct {
-		List []*Comment // len(List) > 0
-	}
-
-## Grouped comments treated as a single larger comment.
-- 成组的注释被处理为一个大的注释.
-
-
-## Representation of comments in the AST
-* 注释在 AST 上的表达
-
-## Sequential list of comment groups attached to the ast.File node.
-- 注释组的连续列表被连接到 AST 的文件节点.
-
-# In retrospect this was not a good decision. It's general but puts burden on AST clients.
-
-## Additionally, comments that are identified as _doc_strings_ are attached to declaration nodes.
-- 另外,一些被标示为  _doc_strings_ 的注释被连接到声明节点.
-
-.image ./gofmt/comments.jpg 425 600
-
-
-## Formatting with comments
-* 格式化注释
-
-## Basic idea: Merge "token stream" with "comment stream" based on position information.
-- 基本的办法:基于位置信息合并词汇流和注释流.
-
-.image ./gofmt/merge.jpg 425 700
-
-
-## Devil is in the details
-* 魔鬼就在细节中
-
-# It's an entire hell of devils, really.
-
-## Estimate current position in "source code space".
-- 在源代码中估计当前的位置.
-
-## Compare current position with comment position to decide what's next.
-- 比较当前的位置和注释的位置去决定下一个是什么.
-
-## Token stream also contains "white space" tokens - comments must be properly interspersed!
-- 词汇也包含了空格词汇 - 注释必须被合理的分布!
-
-## Maintain buffer of unprinted white space, flush before next token, intersperse comments.
-- 维持一个未被打印的空格缓冲区,在下一个词汇之前输出,然后分布注释.
-
-## Various heuristics to get white space correct.
-- 多种策略得以正确地处理空格.
-
-## Lots of trial and error.
-- 很多次的尝试和错误.
-
-
-## Formatting individual comments
-* 格式化单独的注释
-
-## Distinguish between line and general comments.
-- 区分代码行和注释.
-
-## Try to properly indent multi-line general comments:
-- 努力对多行注释进行合理的缩进.
-
-	func f() {              func() {
-	 /*                             /*
-	  * foo                          * foo
-	  * bar         ==>              * bar
-	  * bal                          * bal
-	 */                              */
-	        if ...                   if  ...
-	}                       }
-
-## Doesn't always work well.
-- 但并不总是能够处理正确.
-
-## Want both: comments indented, and comment contents left alone. No good solution.
-- 想达到两个效果:注释能够缩进,注释的内容不进行处理。还没有好的解决办法.
-
-
-## Alignment
-* 对齐
-
-## Carefully chosen alignment can make code easier to read:
-- 仔细选择的对齐可以让代码更容易阅读.
-
-        var (                                 var (
-                x, y int = 2, 3 // foo                x, y int     = 2, 3 // foo
-                z float32 // bar         ==>          z    float32        // bar
-                s string // bal                       s    string         // bal
-        )                                     )
-
-## Painful to maintain manually (regular tabs don't do the job).
-- 很难进行手工维护  (制表符并不能够做到).
-
-## Perfect job for a formatter.
-- 但是却非常适合使用格式化工具.
-
-
-## Elastic tabstops
-* 灵活的制表符宽度
-
-## Regular tabs (`\t`) advance writing position to fixed tab stops.
-通常的制表符把当前的写位置移动到下一个固定的位置.
-
-## Basic idea: Make tab stops _elastic_.
-基本的办法:让制表符宽度更加灵活.
-
-## A tab is used to indicate the _end_ of a text _cell_.
-- 制表符可以标示一个文本单元的结束位置.
-
-## A _column_block_ is a run of uninterrupted vertically adjacent cells.
-- 一个列块是一个连续的相邻的单元.
-
-## A column block is as wide as the widest piece of text in the cells.
-- 一个列块的宽度可以到达多个单元里最宽文本的宽度.
-
-## Proposed by Nick Gravgaard, 2006
-被 Nick Gravgaard 提出于2006
-
-.link http://nickgravgaard.com/elastic-tabstops/
-
-## Implemented by `text/tabwriter` package.
-实现在 `text/tabwriter` 包中.
-
-
-## Elastic tabstops illustrated
-* 灵活制表符宽度的展示
-
-.image ./gofmt/tabstops.jpg 500 700
-
-
-## Putting it all together (1)
-* 综合在一起 (1)
-
-## Parser generates AST.
-- 分析器生成 AST.
-
-## Printer prints AST recursively, uses tabs (`\t`) to indicate elastic tab spots.
-- 打印工具递归地打印AST,使用制表符去灵活的标示制表符的位置.
-
-## The resulting token, position, and whitespace stream is merged with the "stream" of comments.
-- 产生的词汇,位置和空格流会和注释流进行合并.
-
-## Tokens are expanded into strings; all text flows through a tabwriter.
-- 词汇会扩展为字符串,所有的文本流将会被制表符写入器处理.
-
-## Tabwriter replaces tabs with appropriate amount of blanks.
-- 制表符写入器会将制表符替换为合适数量的空格.
-
-## Works well for fixed-width fonts.
-对于固定宽度的字体,处理的很好.
-
-## Proportional fonts could be handled by an editor supporting elastic tab stops.
-比例大小的字体也可以被编辑器支持,如果这个编辑器可以支持灵活的制表符宽度.
-
-# go/printer can produce output containing elastic tab stops
-
-
-## Putting it all together (2)
-* 综合在一起 (2)
-
-.image ./gofmt/bigpic.jpg 550 800
-
-
-## The big picture
-* 从宏观上看
-
-.image ./gofmt/biggerpic.jpg 400 800
-
-
-## gofmt applications
-* gofmt 的应用
-
-## gofmt as source code transformer
-* gofmt 作为源代码变换工具
-
-## Go rewriter (Russ Cox), `gofmt`-r`
-- 改写 Go 的代码 (Russ Cox), `gofmt`-r`
-
-	gofmt -w -r 'a[i:len(x)] -> a[i:]' *.go
-
-## Go simplifier, `gofmt`-s`
-- 简化 Go 的代码, `gofmt`-s`
-
-## API updater (Russ Cox), `go`fix`
-- 更新 API (Russ Cox), `go`fix`
-
-## Language changes (removal of semicolons, others)
-- 改变语言 (去掉分号,其它)
-
-## goimport
-- goimport (Brad Fitzpatrick)
-
-
-## Reactions
-* 大家的反应
-
-## The Go project mandates that all submitted code is gofmt-ed.
-- Go 项目要求所有提交的源代码都用 gofmt 的格式。
-
-## First, complaints: `gofmt` doesn't do _my_ style!
-- 一开始,大家都抱怨:`gofmt` 不知道怎样格式成我的风格!
-
-## Eventually, acquiescence: The Go Team really means it!
-- 慢慢地,大家不作声了:Go 项目组一定要用 gofmt!
-
-## Finally, insight: gofmt's style is _nobody's_ favorite, yet `gofmt` is everybody's favorite.
-- 最后,大家看清了:gofmt 不是任何人的风格,但所有人都喜欢 gofmt 的风格。
-
-## Now, praise: `gofmt` is one of the many reasons why people like Go.
-- 现在,大家都赞扬: `gofmt` 是大家喜欢 Go 的一个原因。
-
-## Formatting has become a non-issue.
-现在,格式已经不是一个问题。
-
-
-## Others are starting to take note
-* 其它语言也在向我们学习
-
-## Formatter for Google's BUILD files (Russ Cox).
-- Google 的 BUILD 文件现在也有格式器  (Russ Cox).
-
-## Java formatter
-- Java 格式器
-
-## Clang formatter
-- Clang 格式器
-
-- Dartfmt
-.link https://www.dartlang.org/tools/dartfmt/
-
-## etc.
-- 等等
-
-## Automatic source code formatting is becoming a requirement for any kind of language.
-现在,任何语言都被要求带有自动的源代码格式器。
-
-
-## Conclusions
-* 总结
-
-## Evolution in programming culture
-* 编程文化的演变
-
-## `gofmt` is significant selling point for Go
-- `gomft` 是 Go 语言的一个重要的卖点
-
-## Insight is spreading that uniform "good enough" formatting is hugely beneficial.
-- 大家渐渐达成共识:一致的“足够好“的格式很有好处
-
-# no need for detailed formatting style guides
-# 无需详细的格式风格手册
-
-# no time wasted on formatting
-# 无需在格式上浪费时间
-
-# improved readability
-# 代码的可读性提高了
-
-# smaller diffs when changing code
-# 改代码时代码的变动变小了
-
-## Source code manipulation at AST-level enables a new category of tools.
-- 这种在 AST-级别上的源代码操作带动了一系列的新的工具。
-
-# simple to complex automatic source code transformations
-# 各种各样的,从简单到复杂的,自动的源代码变换
-
-# various auto-completion mechanisms (e.g. goimport)
-# 各种自动完成的机制 (例如 goimport)
-
-# enables syntax evolution
-# 使得语法可以慢慢进化
-
-## Others are taking note: Programming culture is slowly evolving.
-- 其它语言也在向我们学习:编程的文化在慢慢演变。
-
-
-## Lessons learned: Application
-* 至今的收获:应用程序
-
-## Basic source code formatting is great initial goal.
-- 一开始,基本的源代码格式化是一个很好的目标。
-
-## True power lies in source code transformation tools.
-- 但是,真正的用处在于源代码的变换工具。
-
-## Avoid formatting options.
-- 不要给大家有选择格式的机会。
-
-## Keep it simple.
-- 越简单越好。
-
-## Want:
-我们想要:
-
-## Go parser: source code => syntax tree
-- Go 分析器:源代码 => 语法树
-
-## Make it easy to manipulate syntax tree in any way possible.
-- 尽可能让语法树的操作变得容易。
-
-## Go printer: syntax tree => source code
-- Go 打印器:语法树 => 源代码
-
-
-## Lessons learned: Implementation
-* 至今的收获:实现过程
-
-## Lots of trial and error in initial version.
-- 最初的版本有很多的尝试和失败。
-
-## Single biggest mistake: comments not attached to AST nodes.
-- 最大的错误:注释没有连到 AST-节点上.
-
-## => Current design makes it extremely hard to manipulate AST
-## and maintain comments in right places.
-=> 现在的设计使得操作 AST 和保持注释在正确的地方十分困难。
-
-## Cludge: ast.CommentMap
-- 很混乱:ast.CommentMap
-
-## Want:
-我们想要:
-
-## Easy to manipulate syntax tree with comments attached.
-- 容易操作语法树,连带注释。
-
-
-## Going forward
-* 将来的计划
-
-## Design of new syntax tree in the works (still experimental).
-- 正在设计新的语法树(仍在试验阶段)
-
-## Syntax tree simpler and easier to manipulate (e.g., declaration nodes)
-- 语法树操作起来更加简单和容易(例如:声明结点)
-
-## Faster and easier to use parser and printer.
-- 更快和更容易地使用分析器和打印器。
-
-## Make it robust and fast. Don't do anything else.
-- 让工具用起来可靠并且快。其它一概不理。
-
-# no semantic analyses in parser
-# 分析器不作语义分析。
-
-# no options in printer
-# 打印器里没有任何选择。
-
-
-# ----------------------------------------------------------------------------------
-#
-#	Implementation size
-#
-#	go/token           849 lines    lexical tokes, source positions
-#	go/scanner         884 lines    tokenization
-#	go/parser         2689 lines    parsing
-#	go/ast            2966 lines    abstract syntax tree, tree traversal
-#	go/printer        2948 lines    actual AST printer
-#	go/format          115 lines    helper library to make printer easy to use
-#	internal/format    161 lines
-#	cmd/gofmt          801 lines    gofmt tool
-#	----------------------------
-#	                 11413 lines
diff --git a/content/2015/gofmt-en.slide b/content/2015/gofmt-en.slide
deleted file mode 100644
index 3efd228..0000000
--- a/content/2015/gofmt-en.slide
+++ /dev/null
@@ -1,461 +0,0 @@
-The Cultural Evolution of gofmt
-gofmt 的文化演变
-
-Robert Griesemer
-Google, Inc.
-gri@golang.org
-
-
-* gofmt
-
-- Go source code formatter
-
-- Defines _de_facto_ Go formatting
-
-- All submitted Go code must be formatted with `gofmt` in `golang.org` repos.
-
-- Functionality available outside gofmt via `go/format` library.
-
-- No knobs!
-
-
-* Original motivation
-
-- Code reviews are software engineering best practice.
-
-- Code reviews are informed by style guides, prescribe formatting.
-# Google C++ style guide: ~65 pages (~15p on formatting)
-# Go spec: ~50 pages
-
-- *Much*too*much*time*lost*on*reviewing*formatting*rather*than*code.*
-# Example: Formatting review time 10 min/day, 600 engineers => 100 manhours/day!
-
-- Yet it's the perfect job for a machine.
-
-- Day 1 decision to write a pretty printer for Go.
-# informed by experience with Java and C++ code reviews at Google
-
-
-* History
-
-- Pretty printers and code beautifiers existed since the early days of computing.
-
-- Essential to produce readable Lisp code:
-	GRINDEF  (Bill Gosper, 1967)           first to measure line length
-
-- Many others:
-	SOAP     (R. Scowen et al, 1969)       Simplifies Obscure Algol Programs
-	NEATER2  (Ken Conrow, R. Smith, 1970)  PL/1 reformatter, use as (early) error detection tool
-	cb       (Unix Version 7, 1979)        C program beautifier
-	indent   (4.2 BSD, 1983)               indent and format C source code
-	etc.
-
-- More recently:
-	ClangFormat                            C/C++/Objective-C formatter
-	Uncrustify                             beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA
-	etc.
-
-
-* Reality check
-
-- In 2007, nobody seemed to like source code formatters.
-
-- Exception: IDE-imposed formatting.
-
-- But: Many programmers don't use IDEs...
-
-- Problem: If automatic formatting feels too destructive, it is not used.
-
-- Missing insight: "good enough" uniform formatting style is better than having lots of different formats.
-
-- Value of style guide: Uniformity, not perfection.
-
-
-* The problem with pretty printers
-
-- The more people think about their own formatting style, the more they get attached to it.
-# religion
-
-- Wrong conclusion: Automatic formatters must permit a lot of formatting options!
-
-- But: Formatters with too many options defeat the purpose.
-# e.g., indent
-
-- Also: Very hard to do a good job.
-# combinatorial explosion of styles to test
-
-- Respecting user intent is key.
-
-- Dealing with comments is hard.
-
-- Language may add extra complexity (e.g., C macros)
-
-
-* Formatting Go
-
-* Keep it as simple as possible
-
-- Small language makes task much simpler.
-
-- Don't fret over line length control.
-
-- Instead, respect user: Consider line breaks in original source.
-
-- Don't support any options.
-
-- Make it easy to use.
-
-*One*formatting*style*to*rule*them*all!*
-
-
-* Basic structure of gofmt
-
-- Parsing of source code
-
-- Basic formatting
-
-- Enhancement: Handling of comments
-
-- Make it nice: Alignment of code and comments
-
-- But: No fancy general layout algorithms.
-
-- Instead: Node-specific fine tuning.
-
-
-* Parsing source code
-
-- Use `go/scanner`, `go/parser`, and friends.
-
-- Result is an abstract syntax tree (`go/ast`) for each `.go` file.
-# misnomer: AST is actually a concrete syntax tree
-
-- Each syntactic construct has a corresponding AST node.
-
-	// Syntax of an if statement.
-	IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
-
-	// An IfStmt node represents an if statement.
-	IfStmt struct {
-		If   token.Pos // position of "if" keyword
-		Init Stmt      // initialization statement; or nil
-		Cond Expr      // condition
-		Body *BlockStmt
-		Else Stmt // else branch; or nil
-	}
-
-- AST nodes have (selected) position information.
-
-
-* Basic formatting
-
-- Traverse AST and print nodes.
-
-	case *ast.IfStmt:
-		p.print(token.IF)
-		p.controlClause(false, s.Init, s.Cond, nil)
-		p.block(s.Body, 1)
-		if s.Else != nil {
-			p.print(blank, token.ELSE, blank)
-			switch s.Else.(type) {
-			case *ast.BlockStmt, *ast.IfStmt:
-				p.stmt(s.Else, nextIsRBrace)
-			default:
-				p.print(token.LBRACE, indent, formfeed)
-				p.stmt(s.Else, true)
-				p.print(unindent, formfeed, token.RBRACE)
-			}
-		}
-
-- Printer (`p.print`) accepts a sequence of tokens, including position and white space information.
-
-
-* Fine tuning
-
-- Precedence-dependent spacing between operands.
-# implemented by rsc in gofmt
-
-- Improves readability of expressions.
-
-	x = a + b
-	x = a + b*c
-	if a+b <= d {
-	if a+b*c <= d {
-
-- Use position information to guide line break decisions.
-
-- Various other heuristics.
-
-
-* Handling of comments
-
-- Comments can appear between any two tokens of a program.
-
-- In general, not obviously clear to which AST node a comment belongs.
-# In retrospect, a heuristic might have been better than the list of comments
-# we have now. See Lessons learned.
-
-- Comments often come in groups:
-
-	// A CommentGroup represents a sequence of comments
-	// with no other tokens and no empty lines between.
-	//
-	type CommentGroup struct {
-		List []*Comment // len(List) > 0
-	}
-
-- Grouped comments treated as a single larger comment.
-
-
-* Representation of comments in the AST
-
-- Sequential list of comment groups attached to the ast.File node.
-# In retrospect this was not a good decision. It's general but puts burden on AST clients.
-
-- Additionally, comments that are identified as _doc_strings_ are attached to declaration nodes.
-
-.image ./gofmt/comments.jpg 425 600
-
-
-* Formatting with comments
-
-- Basic idea: Merge "token stream" with "comment stream" based on position information.
-
-.image ./gofmt/merge.jpg 425 700
-
-
-* Devil is in the details
-# It's an entire hell of devils, really.
-
-- Estimate current position in "source code space".
-
-- Compare current position with comment position to decide what's next.
-
-- Token stream also contains "white space" tokens - comments must be properly interspersed!
-
-- Maintain buffer of unprinted white space, flush before next token, intersperse comments.
-
-- Various heuristics to get white space correct.
-
-- Lots of trial and error.
-
-
-* Formatting individual comments
-
-- Distinguish between line and general comments.
-
-- Try to properly indent multi-line general comments:
-
-	func f() {              func() {
-	 /*                             /*
-	  * foo                          * foo
-	  * bar         ==>              * bar
-	  * bal                          * bal
-	 */                              */
-	        if ...                   if  ...
-	}                       }
-
-- Doesn't always work well.
-
-- Want both: comments indented, and comment contents left alone. No good solution.
-
-
-* Alignment
-
-- Carefully chosen alignment can make code easier to read:
-
-        var (                                 var (
-                x, y int = 2, 3 // foo                x, y int     = 2, 3 // foo
-                z float32 // bar         ==>          z    float32        // bar
-                s string // bal                       s    string         // bal
-        )                                     )
-
-- Painful to maintain manually (regular tabs don't do the job).
-
-- Perfect job for a formatter.
-
-
-* Elastic tabstops
-
-Regular tabs (`\t`) advance writing position to fixed tab stops.
-
-Basic idea: Make tab stops _elastic_.
-
-- A tab is used to indicate the _end_ of a text _cell_.
-
-- A _column_block_ is a run of uninterrupted vertically adjacent cells.
-
-- A column block is as wide as the widest piece of text in the cells.
-
-Proposed by Nick Gravgaard, 2006
-
-.link http://nickgravgaard.com/elastic-tabstops/
-
-Implemented by `text/tabwriter` package.
-
-
-* Elastic tabstops illustrated
-
-.image ./gofmt/tabstops.jpg 500 700
-
-
-* Putting it all together (1)
-
-- Parser generates AST.
-
-- Printer prints AST recursively, uses tabs (`\t`) to indicate elastic tab spots.
-
-- The resulting token, position, and whitespace stream is merged with the "stream" of comments.
-
-- Tokens are expanded into strings; all text flows through a tabwriter.
-
-- Tabwriter replaces tabs with appropriate amount of blanks.
-
-Works well for fixed-width fonts.
-
-Proportional fonts could be handled by an editor supporting elastic tab stops.
-# go/printer can produce output containing elastic tab stops
-
-
-* Putting it all together (2)
-
-.image ./gofmt/bigpic.jpg 550 800
-
-
-* The big picture
-
-.image ./gofmt/biggerpic.jpg 400 800
-
-
-* gofmt applications
-
-* gofmt as source code transformer
-
-- Go rewriter (Russ Cox), `gofmt`-r`
-
-	gofmt -w -r 'a[i:len(x)] -> a[i:]' *.go
-
-- Go simplifier, `gofmt`-s`
-
-- API updater (Russ Cox), `go`fix`
-
-- Language changes (removal of semicolons, others)
-
-- goimport (Brad Fitzpatrick)
-
-
-* Reactions
-
-- The Go project mandates that all submitted code is gofmt-ed.
-
-- First, complaints: `gofmt` doesn't do _my_ style!
-
-- Eventually, acquiescence: The Go Team really means it!
-
-- Finally, insight: gofmt's style is _nobody's_ favorite, yet
-`gofmt` is everybody's favorite.
-
-- Now, praise: `gofmt` is one of the many reasons why people like Go.
-
-Formatting has become a non-issue.
-
-
-* Others are starting to take note
-
-- Formatter for Google's BUILD files (Russ Cox).
-
-- Java formatter
-
-- Clang formatter
-
-- Dartfmt
-.link https://www.dartlang.org/tools/dartfmt/
-
-- etc.
-
-Automatic source code formatting is becoming a requirement
-for any kind of language.
-
-
-* Conclusions
-
-* Evolution in programming culture
-
-- `gofmt` is significant selling point for Go
-
-- Insight is spreading that uniform "good enough" formatting is hugely beneficial.
-# no need for detailed formatting style guides
-# no time wasted on formatting
-# improved readability
-# smaller diffs when changing code
-
-- Source code manipulation at AST-level enables a new category of tools.
-# simple to complex automatic source code transformations
-# various auto-completion mechanisms (e.g. goimport)
-# enables syntax evolution
-
-- Others are taking note: Programming culture is slowly evolving.
-
-
-* Lessons learned: Application
-
-- Basic source code formatting is great initial goal.
-
-- True power lies in source code transformation tools.
-
-- Avoid formatting options.
-
-- Keep it simple.
-
-Want:
-
-- Go parser: source code => syntax tree
-
-- Make it easy to manipulate syntax tree in any way possible.
-
-- Go printer: syntax tree => source code
-
-
-* Lessons learned: Implementation
-
-- Lots of trial and error in initial version.
-
-- Single biggest mistake: comments not attached to AST nodes.
-
-=> Current design makes it extremely hard to manipulate AST
-and maintain comments in right places.
-
-- Cludge: ast.CommentMap
-
-Want:
-
-- Easy to manipulate syntax tree with comments attached.
-
-
-* Going forward
-
-- Design of new syntax tree in the works (still experimental).
-
-- Syntax tree simpler and easier to manipulate (e.g., declaration nodes)
-
-- Faster and easier to use parser and printer.
-
-- Make it robust and fast. Don't do anything else.
-# no semantic analyses in parser
-# no options in printer
-
-
-# ----------------------------------------------------------------------------------
-#
-#	Implementation size
-#
-#	go/token           849 lines    lexical tokes, source positions
-#	go/scanner         884 lines    tokenization
-#	go/parser         2689 lines    parsing
-#	go/ast            2966 lines    abstract syntax tree, tree traversal
-#	go/printer        2948 lines    actual AST printer
-#	go/format          115 lines    helper library to make printer easy to use
-#	internal/format    161 lines
-#	cmd/gofmt          801 lines    gofmt tool
-#	----------------------------
-#	                 11413 lines
diff --git a/content/2015/gofmt/biggerpic.jpg b/content/2015/gofmt/biggerpic.jpg
deleted file mode 100644
index 7051022..0000000
--- a/content/2015/gofmt/biggerpic.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gofmt/bigpic.jpg b/content/2015/gofmt/bigpic.jpg
deleted file mode 100644
index 584f4c0..0000000
--- a/content/2015/gofmt/bigpic.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gofmt/comments.jpg b/content/2015/gofmt/comments.jpg
deleted file mode 100644
index b8c48de..0000000
--- a/content/2015/gofmt/comments.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gofmt/merge.jpg b/content/2015/gofmt/merge.jpg
deleted file mode 100644
index 128e833..0000000
--- a/content/2015/gofmt/merge.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gofmt/tabstops.jpg b/content/2015/gofmt/tabstops.jpg
deleted file mode 100644
index e751664..0000000
--- a/content/2015/gofmt/tabstops.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gogo.slide b/content/2015/gogo.slide
deleted file mode 100644
index 5fea198..0000000
--- a/content/2015/gogo.slide
+++ /dev/null
@@ -1,306 +0,0 @@
-Go in Go
-Gopherfest
-26 May 2015
-
-Rob Pike
-Google
-r@golang.org
-http://golang.org/
-
-* Go in Go
-
-As of the 1.5 release of Go, the entire system is now written in Go.
-(And a little assembler.)
-
-C is gone.
-
-Side note: `gccgo` is still going strong.
-This talk is about the original compiler, `gc`.
-
-* Why was it in C?
-
-Bootstrapping.
-
-(Also Go was not intended primarily as a compiler implementation language.)
-
-* Why move the compiler to Go?
-
-Not for validation; we have more pragmatic motives:
-
-- Go is easier to write (correctly) than C.
-- Go is easier to debug than C (even absent a debugger).
-- Go is the only language you'd need to know; encourages contributions.
-- Go has better modularity, tooling, testing, profiling, ...
-- Go makes parallel execution trivial.
-
-Already seeing benefits, and it's early yet.
-
-Design document: [[http://golang.org/s/go13compiler]]
-
-* Why move the runtime to Go?
-
-We had our own C compiler just to compile the runtime.
-We needed a compiler with the same ABI as Go, such as segmented stacks.
-
-Switching it to Go means we can get rid of the C compiler.
-That's more important than converting the compiler to Go.
-
-(All the reasons for moving the compiler apply to the runtime as well.)
-
-Now only one language in the runtime; easier integration, stack management, etc.
-
-
-As always, simplicity is the overriding consideration.
-
-* History
-
-Why do we have our own tool chain at all?
-Our own ABI?
-Our own file formats?
-
-History, familiarity, and ease of moving forward. And speed.
-
-Many of Go's big changes would be much harder with GCC or LLVM.
-
-.link https://news.ycombinator.com/item?id=8817990
-
-* Big changes
-
-All made easier by owning the tools and/or moving to Go:
-
-- linker rearchitecture
-- new garbage collector
-- stack maps
-- contiguous stacks
-- write barriers
-
-The last three are all but impossible in C:
-
-- C is not type safe; don't always know what's a pointer
-- aliasing of stack slots caused by optimization
-
-(`Gccgo` will have segmented stacks and imprecise (stack) collection for a while yet.)
-
-* Goroutine stacks
-
-- Until 1.2: Stacks were segmented.
-- 1.3: Stacks were contiguous unless executing C code (runtime).
-- 1.4: Stacks made contiguous by restricting C to system stack.
-- 1.5: Stacks made contiguous by eliminating C.
-
-These were each huge steps, made quickly (led by `khr@`).
-
-* Converting the runtime
-
-Mostly done by hand with machine assistance.
-
-Challenge to implement the runtime in a safe language.
-Some use of `unsafe` to deal with pointers as raw bits in the GC, for instance.
-But less than you might think.
-
-The translator (next sections) helped for some of the translation.
-
-* Converting the compiler
-
-Why translate it, not write it from scratch? Correctness, testing.
-
-Steps:
-
-- Write a custom translator from C to Go.
-- Run the translator, iterate until success.
-- Measure success by bit-identical output.
-- Clean up the code by hand and by machine.
-- Turn it from C-in-Go to idiomatic Go (still happening).
-
-* Translator
-
-First output was C line-by-line translated to (bad!) Go.
-Tool to do this written by `rsc@` (talked about at GopherCon 2014).
-Custom written for this job, not a general C-to-Go translator.
-
-Steps:
-
-- Parse C code using new simple C parser (`yacc`)
-- Remove or rewrite C-isms such as `*p++` as an expression
-- Walk the C parse tree, print the C code in Go syntax
-- Compile the output
-- Run, compare generated code
-- Repeat
-
-The `Yacc` grammar was translated by sam-powered hands.
-
-* Translator configuration
-
-Aided by hand-written rewrite rules, such as:
-
-- this field is a bool
-- this function returns a bool
-
-Also diff-like rewrites for things such as using the standard library:
-
-	diff {
-	-	g.Rpo = obj.Calloc(g.Num*sizeof(g.Rpo[0]), 1).([]*Flow)
-	-	idom = obj.Calloc(g.Num*sizeof(idom[0]), 1).([]int32)
-	-	if g.Rpo == nil || idom == nil {
-	-		Fatal("out of memory")
-	-	}
-	+	g.Rpo = make([]*Flow, g.Num)
-	+	idom = make([]int32, g.Num)
-	}
-
-* Another example
-
-This one due to semantic difference between the languages.
-
-	diff {
-	-	if nreg == 64 {
-	-		mask = ^0 // can't rely on C to shift by 64
-	-	} else {
-	-		mask = (1 << uint(nreg)) - 1
-	-	}
-	+	mask = (1 << uint(nreg)) - 1
-	}
-
-* Grind
-
-Once in Go, new tool `grind` deployed (by `rsc@`):
-
-- parses Go, type checks
-- records a list of edits to perform: "insert this text at this position"
-- at end, applies edits to source (hard to edit AST).
-
-Changes guided by profiling and other analysis:
-
-- removes dead code
-- removes gotos
-- removes unused labels, needless indirections, etc.
-- moves `var` declarations nearer to first use
-
-.link http://rsc.io/grind
-
-* Performance problems
-
-Output from translator was poor Go, and ran about 10X slower.
-Most of that slowdown has been recovered.
-
-Problems with C to Go:
-
-- C patterns can be poor Go; e.g.: complex `for` loops
-- C stack variables never escape; Go compiler isn't as sure
-- interfaces such as `fmt.Stringer` vs. C's `varargs`
-- no `unions` in Go, so use `structs` instead: bloat
-- variable declarations in wrong place
-
-C compiler didn't free much memory, but Go has a GC.
-Adds CPU and memory overhead.
-
-* Performance fixes
-
-Profile! (Never done before!)
-
-- move `vars` closer to first use
-- split `vars` into multiple
-- replace code in the compiler with code in the library: e.g. `math/big`
-- use interface or other tricks to combine `struct` fields
-- better escape analysis (`drchase@`).
-- hand tuning code and data layout
-
-Use tools like `grind`, `gofmt` `-r` and `eg` for much of this.
-
-Removing interface argument from a debugging print library got 15% overall!
-
-More remains to be done.
-
-* Technical benefits
-
-Other benefits of the conversion:
-
-Garbage collection means no more worry about introducing a dangling pointer.
-
-Chance to clean up the back ends.
-
-Unified `386` and `amd64` architectures throughout the tool chain.
-
-New architectures are easier to add.
-
-Unified the tools: now one compiler, one assembler, one linker.
-
-* Compiler
-
-`GOOS=YYY` `GOARCH=XXX` `go` `tool` `compile`
-
-One compiler; no more `6g`, `8g` etc.
-
-About 50K lines of portable code.
-Even the registerizer is portable now; architectures well characterized.
-Non-portable: Peepholing, details like registers bound to instructions.
-Typically around 10% of the portable LOC.
-
-* Assembler
-
-`GOOS=YYY` `GOARCH=XXX` `go` `tool` `asm`
-
-New assembler, all in Go, written from scratch by `r@`.
-Clean, idiomatic Go code.
-
-Less than 4000 lines, <10% machine-dependent.
-
-Almost completely compatible with previous `yacc` and C assemblers.
-
-How is this possible?
-
-- shared syntax originating in the Plan 9 assemblers
-- unified back-end logic (old `liblink`, now `internal/obj`)
-
-* Linker
-
-`GOOS=YYY` `GOARCH=XXX` `go` `tool` `link`
-
-Mostly hand- and machine- translated from C code.
-
-New library, `internal/obj`, part of original linker, captures details about machines, writes object files.
-
-27000 lines summed across 4 architectures, mostly tables (plus some ugliness).
-
-- `arm`: 4000
-- `arm64`: 6000
-- `ppc64`: 5000
-- `x86`: 7500 (`386` and `amd64`)
-
-Example benefit: one print routine to print any instruction for any architecture.
-
-* Bootstrap
-
-With no C compiler, bootstrapping requires a Go compiler.
-
-Therefore need to build or download a working Go installation to build 1.5 from source.
-
-We use Go 1.4+ as the base to build the 1.5+ tool chain. (Newer is OK too.)
-
-Details: [[http://golang.org/s/go15bootstrap]]
-
-* Future
-
-Much work still to do, but 1.5 is mostly set.
-
-Future work:
-
-Better escape analysis.
-New compiler back end using SSA (much easier in Go than C).
-Will allow much more optimization.
-
-Generate machine descriptions from PDFs (or maybe XML).
-Will have a purely machine-generated instruction definition:
-"Read in PDF, write out an assembler configuration".
-Already deployed for the disassemblers.
-
-* Conclusions
-
-Getting rid of C was a huge advance for the project.
-Code is cleaner, testable, profilable, easier to work on.
-
-New unified tool chain reduces code size, increases maintainability.
-
-Flexible tool chain, portability still paramount.
-
-
diff --git a/content/2015/gophercon-go-on-mobile.slide b/content/2015/gophercon-go-on-mobile.slide
deleted file mode 100644
index 5afb1a6..0000000
--- a/content/2015/gophercon-go-on-mobile.slide
+++ /dev/null
@@ -1,348 +0,0 @@
-Go on Mobile
-
-GopherCon 2015
-
-Hana Kim
-Google
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=sQ6-HyPxHKg Watch the talk on YouTube
-
-
-* Caution
-
-.image gophercon-go-on-mobile/caution.png 300 _
-
-The Go Mobile project is experimental. Use this at your own risk.
-
-While we are working hard to improve it, neither Google nor the Go
-team can provide end-user support.
-
-* Background
-
-Mobile support was frequently requested
-
-Some users built their own Go binaries for Android with cgo + external linking through NDK tool chains
-
-Some Android Apps used Go even before Go 1.4
-
-- Camlistore android app (out-of-process model)
-- Goandroid+Mandala (in-process model)
-- ...
-
-* golang.org/x/mobile
-
-Goal: Bring Go to Mobile Platforms
-
-Why?
-
-- Use Go to program a complete system (server/client)
-- Write a single cross-platform Go library
-- Bring a simple language and development tooling to mobile
-
-* Two ways of using Go
-
-Native Apps
-
-- Write the whole app in Go
-- Use Go packages for graphics, event handling, audio, etc.
-
-SDK Apps
-
-- Write Android UI in Java, iOS UI in Objective-C/Swift
-- Write common functionality in Go as a library
-
-* Native Apps
-
-* Challenge #1: Cross-platform APIs
-
-Work for Android, iOS, and Desktop environments
-
-Provide a rich set of APIs
-
-Follow idiomatic Go style
-
-* Demo: Hello, Gopher!
-
-.image gophercon-go-on-mobile/gophercloud.png 400 _
-
-This program uses the packages from golang.org/x/mobile repo
-There is no Java or Objective-C or C in my code
-
-* What's available?
-
-golang.org/x/mobile/...
-
-- [[https://golang.org/x/mobile/app][app: App control]]
-- [[https://golang.org/x/mobile/asset][asset: Asset management]]
-- [[https://golang.org/x/mobile/gl][gl: OpenGL ES 2]]
-- [[https://golang.org/x/mobile/event][event: Events]]
-- [[https://golang.org/x/mobile/geom][geom: Screen geometry]]
-
-golang.org/x/mobile/exp/...
-
-- [[https://golang.org/x/mobile/exp/audio][audio: Audio]]
-- [[https://golang.org/x/mobile/exp/font][font: System font]]
-- [[https://golang.org/x/mobile/exp/sprite][sprite: 2-D rendering]]
-- [[https://golang.org/x/mobile/exp/sensor][sensor: Sensors]]
-
-* Challenge #2: Build systems
-
-Dealing with
-
-- Toolchain installation
-
-- Cross compilation for `GOOS/GOARCH` combos
-
-- Android/iOS-specific build details
-
-That is not fun!
-
-* The gomobile tool
-
-  $ go get golang.org/x/mobile/cmd/gomobile
-
-Simplifies toolchain installation and app deployment
-
-To install the Android/iOS compiler tool chain:
-
-	$ gomobile init
-
-To build an Android APK and an iOS app
-
-	$ gomobile -target=android build
-	$ gomobile -target=ios     build
-
-(Demo)
-
-* SDK Apps
-
-* Go as a library
-
-Go 1.5 can build Go programs as a library that can be used by non-Go programs
-
-- Shared library for dynamic linking (`-buildmode=c-shared`)
-- Archive file for static linking (`-buildmode=c-archive`)
-
-Functions marked with `//export` cgo annotations are callable.
-
-.link https://golang.org/s/execmodes
-
-* Working with Foreign Languages
-
-.image gophercon-go-on-mobile/gobind.png 300 _
-
-Manually mapping data structures and functions between languages is tedious and error-prone!
-
-
-* The gobind tool
-
-	$ go get golang.org/x/mobile/cmd/gobind
-
-Automates language binding through code generation
-
-Defines the language binding from exported Go APIs; no explicit annotation
-
-Currently supports a [[https://golang.org/x/mobile/cmd/gobind][subset of Go types]]
-
-
-* Binding Functions, Basic Types & Errors
-
-Go API
-
-	package mypkg
-
-	func Hello() (string, error) { return "Gopher", nil }
-
-Generated Java API
-
-	public abstract class Mypkg {
-	    public static String Hello() throws Exception { ... }
-	}
-
-Generated Objective-C API
-
-	FOUNDATION_EXPORT BOOL GoMypkgHello(NSString** ret0_, NSError** error);
-
-* Binding Structs
-
-	package mypkg
-
-	type Counter struct {
-		Value int64
-	}
-
-	func (c *Counter) Inc() {
-		c.Value++
-	}
-
-	func NewCounter() *Counter {
-		return &Counter{}
-	}
-
-* Generated Java API
-
-	public abstract class Mypkg {
-		public static final class Counter {
-			public void Inc() { ... }
-			public long GetValue() { ... }
-			public void SetValue(long value) { ... }
-		}
-
-		public static Counter NewCounter() { ... }
-	}
-
-Use it from Java
-
-	Counter counter = NewCounter();
-	counter.SetValue(12345);
-	counter.Inc();
-	
-
-* Generated Objective-C API
-  	
-	@interface GoMypkgCounter : NSObject { }
-	@property(strong, readonly) GoSeqRef *ref;
-	- (int64_t)Value;
-	- (void)setValue:(int64_t)v;
-	- (void)Inc;
-	@end
-	
-	FOUNDATION_EXPORT GoMypkgCounter* GoMypkgNewCounter();
-
-Use it from Objective-C
-
-	GoMypkgCounter* counter = GoMypkgNewCounter();
-	[counter setValue:12345];
-	[counter Inc];
-
-* How to build it?
-
-.image gophercon-go-on-mobile/memegobind.jpg 500 _
-
-
-* The gomobile bind command
-
-Simplifies the build process. For example, for Android,
-
-- Generates language bindings for Go packages
-
-- Compiles Go code to a shared library
-
-- Compiles the generated target language code
-
-- Bundles everything into a `.aar` file (modern way to distribute android libraries)
-
-(DEMO)
-
-iOS support is a work in progress.
-
-* Android Studio Integration
-
-Android Studio 1.2+ supports `.aar` import.
-
-.image gophercon-go-on-mobile/androidstudio2.png 250 _
-
-To update the .aar,
-
-- Build script to invoke `gomobile` `bind`, or
-- Gradle plugin to invoke `gomobile` `bind` and publish the output
-
-
-* The Story of Ivy
-
-The [[robpike.io/ivy][Ivy]] is a command line tool developed by Rob Pike
-
-It's a useful desktop calculator that handles big int, rational and floating-point numbers, vectors, matrices, ...
-
-.image gophercon-go-on-mobile/ivyscreenshot2.png 300 _
-
-It is in fact an interpreter for an [[https://en.wikipedia.org/wiki/APL_(programming_language)][APL]]-like language
-
-* Ivy on Mobile?
-
-~5k lines of Go code (not including tests, docs)
-
-Dependency on `math`, `math/big`, `math/rand`, `unicode`, ...
-
-.image gophercon-go-on-mobile/canihas.jpg 300 _
-
-Rewriting in Java or Objective-C is a non-starter
-
-* Ivy apps
-
-.image gophercon-go-on-mobile/ivymobile.png 300 _
-.caption Ivy logo by [[https://www.reneefrench.com][Renée French]]
-.link https://play.google.com/store/apps/details?id=org.golang.ivy Google Play Store
-.link https://itunes.apple.com/us/app/ivy-big-number-calculator/id1012116478 Apple App Store
-
-* Gomobile bind
-
-Write it once as a library in Go
-
-Enjoy great language features and packages available in Go
-
-* Where are we now?
-
-* Go 1.4: Hello Android!
-
-Released in December 2014
-
-Can build Android apps (`arm`)
-
-Android builder
- 
-The `gobind` tool for Java and Go language binding
-
-Packages for cross-device apps: basic app control, OpenGL ES 2, touch
-
-.link https://golang.org/s/go14android
-.link https://golang.org/s/gobind
-
-* Go 1.5: Hello iOS!
-
-Planned release early August 2015
-
-Experimental support for iOS (`arm,arm64`)
-
-iOS builder
-
-* Go 1.5: Go programs as libraries
-
-Can call Go functions from foreign language in a clean way
-
-.link https://golang.org/s/execmodes
-
-* Go 1.5: Better tools & more packages
-
-`golang.org/x/mobile` repo getting better
-
-- The `gomobile` tool for mobile app/library build
-
-- Extended `gobind` tool: Objective-C binding
-
-- `golang.org/x/mobile/exp`: experimenting with audio, sensor, sprite, ...
-
-* Go 1.6+
-
-- Improvement in GL/UI packages
-
-- More APIs available to "pure Go" apps
-
-- Testing, profiling, debugging
-
-- Support for more platforms (e.g. android/x86, iOS simulator)
-
-- Richer type support in `gobind`
-
-- IDE integration
-
-* Contributions from Go community
-
-.image gophercon-go-on-mobile/contributors.png 480 _
-.caption git log | word_cloud
-
diff --git a/content/2015/gophercon-go-on-mobile/README b/content/2015/gophercon-go-on-mobile/README
deleted file mode 100644
index ff64cf0..0000000
--- a/content/2015/gophercon-go-on-mobile/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Demo source code and set up instruction is in
-https://github.com/hyangah/slides/tree/master/2015-gophercon-mobile
diff --git a/content/2015/gophercon-go-on-mobile/androidstudio2.png b/content/2015/gophercon-go-on-mobile/androidstudio2.png
deleted file mode 100644
index add1106..0000000
--- a/content/2015/gophercon-go-on-mobile/androidstudio2.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/canihas.jpg b/content/2015/gophercon-go-on-mobile/canihas.jpg
deleted file mode 100644
index 1d94c61..0000000
--- a/content/2015/gophercon-go-on-mobile/canihas.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/caution.png b/content/2015/gophercon-go-on-mobile/caution.png
deleted file mode 100644
index cdb9faa..0000000
--- a/content/2015/gophercon-go-on-mobile/caution.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/contributors.png b/content/2015/gophercon-go-on-mobile/contributors.png
deleted file mode 100644
index 0da8a6c..0000000
--- a/content/2015/gophercon-go-on-mobile/contributors.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/gobind.png b/content/2015/gophercon-go-on-mobile/gobind.png
deleted file mode 100644
index 905b5ea..0000000
--- a/content/2015/gophercon-go-on-mobile/gobind.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/gophercloud.png b/content/2015/gophercon-go-on-mobile/gophercloud.png
deleted file mode 100644
index 2bb5d25..0000000
--- a/content/2015/gophercon-go-on-mobile/gophercloud.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/ivyabout.png b/content/2015/gophercon-go-on-mobile/ivyabout.png
deleted file mode 100644
index 3b515f7..0000000
--- a/content/2015/gophercon-go-on-mobile/ivyabout.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/ivymobile.png b/content/2015/gophercon-go-on-mobile/ivymobile.png
deleted file mode 100644
index 3ea7d21..0000000
--- a/content/2015/gophercon-go-on-mobile/ivymobile.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/ivyscreenshot2.png b/content/2015/gophercon-go-on-mobile/ivyscreenshot2.png
deleted file mode 100644
index c0701b7..0000000
--- a/content/2015/gophercon-go-on-mobile/ivyscreenshot2.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-go-on-mobile/memegobind.jpg b/content/2015/gophercon-go-on-mobile/memegobind.jpg
deleted file mode 100644
index 16b5a75..0000000
--- a/content/2015/gophercon-go-on-mobile/memegobind.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/gophercon-goevolution.slide b/content/2015/gophercon-goevolution.slide
deleted file mode 100644
index 97e25f0..0000000
--- a/content/2015/gophercon-goevolution.slide
+++ /dev/null
@@ -1,403 +0,0 @@
-The Evolution of Go
-GopherCon 2015 Keynote - July 9, 2015
-
-Robert Griesemer
-Google, Inc.
-gri@golang.org
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=0ReKdcpNyQg Watch the talk on YouTube
-
-
-* 
-
-.image gophercon-goevolution/GopherEvolution.svg
-
-
-* Personal background
-
-- Personal interest in programming languages.
-
-- After grad school, programming in industry felt like a huge step backwards.
-
-- Over the years, spent a lot of time thinking about programming languages.
-
-- Good language design is *hard*.
-
-- After 15 years of using C++, only two ways forward: *sell*out*or*bail*out*!
-
-- Lucky to be on board with Rob and Ken.
-
-
-* Starting points
-
-- Clear goal in mind: We needed a better language for what we do at Google.
-
-- Personal motivation: Wanted a clean, small, compiled language with modern features.
-
-- Clear about what was wrong: Complexity, missing concurrency support, lack of scalability, insane build times.
-
-- Good ideas about how to address issues.
-
-- Unpolished thoughts about the rest.
-
-- Three experienced people's insights on how not to do it.
-
-- Lure: Designing a new language is easy.
-
-What could possibly go wrong?
-
-
-* Guiding principles
-
-- Simplicity, safety, and readability are paramount.
-
-- Striving for orthogonality in design.
-
-- Minimal: One way to write a piece of code.
-
-- It's about *expressing*algorithms*, not the type system.
-
-- Collective unconscious history of programming languages.
-
-Things of interest should be easy; even if that means not everything is possible.
-
-
-* Literature on good language design is sparse
-
-.image gophercon-goevolution/HoaresPLHints.JPG 400 600
-
-- "Hints on Programming Language Design" (C.A.R. Hoare, 1973)
-- "Everything you always wanted to know about programming languages but were afraid to ask" (C.A.R. Hoare, 1978)
-
-
-* First design notes
-
-	Date: Sun, 23 Sep 2007 23:33:41 -0700
-	From: "Robert Griesemer" <gri@google.com>
-	To: "Rob 'Commander' Pike" <r@google.com>, ken@google.com
-	Subject: prog lang discussion
-	...
-	*** General:
-	Starting point: C, fix some obvious flaws, remove crud, add a few missing features
-	  - no includes, instead: import
-	  - no macros (do we need something instead?)
-	  - ideally only one file instead of a .h and .c file, module interface
-	should be extracted automatically
-	  - statements: like in C, though should fix 'switch' statement
-	  - expressions: like in C, though with caveats (do we need ',' expressions?)
-	  - essentially strongly typed, but probably w/ support for runtime types
-	  - want arrays with bounds checking on always (except perhaps in 'unsafe mode'-see section on GC)
-	  - mechanism to hook up GC (I think that most code can live w/ GC, but for a true systems
-	    programming language there should be mode w/ full control over memory allocation)
-	  - support for interfaces (differentiate between concrete, or implementation types, and abstract,
-	    or interface types)
-	  - support for nested and anonymous functions/closures (don't pay if not used)
-	  - a simple compiler should be able to generate decent code
-	  - the various language mechanisms should result in predictable code
-	...
-
-
-* Looking back
-
-Many Day One ideas made it into Go:
-
-- Syntax: Leading keyword notation (const, var, type, etc), many cleanups.
-- Expressions: 5 binary precedence levels maximum.
-- Explicitly sized basic types, rune type, no implicit conversions.
-
-- Packages and imports.
-- Methods with explicit receiver parameter.
-- Interfaces.
-- Understanding that we would somehow add concurrency support based on Rob's previous work.
-
-Many concepts were missing, and even more ideas didn't make it.
-
-However, we were off to a good start. This was not at all obvious at the time!
-
-
-* Most ideas come from previous ideas.
-(Alan Kay)
-
-Or, as some critics would say: There's nothing new in Go!
-
-
-They are missing the point:
-
-The task of the programming language designer *"*is*consolidation*not*innovation*"*.
-(Hoare, 1973).
-
-
-* The Algol family
-
-
-* Algol60
-
-
-(John Backus, John McCarthy, Alan Perlis, et al, 1958-1960)
-
-=> Block structure, nested and recursive functions and procedures, type declarations and static typing, "for" statement, "return" statement, semicolon separated statements, "begin"-"end" blocks, "call by name", etc.
-
-"Here is a language [Algol60] so far ahead of its time, that it was not only an improvement on its predecessors, but also on nearly all its successors." (C.A.R. Hoare)
-
-Coincidentally, a few years before:
-- Backus Naur Normal Form (John Backus, Peter Naur, 1958)
-
-
-* Algol successors
-
-- *Pascal* (N. Wirth, ETH Zürich, 1968-1970)
-=> BEGIN/END for blocks, semicolons as separators, left-to-right declarations,
-principled structured data types, notion of predeclared ("standard") functions, designed for teaching.
-
-- *C* (Dennis Ritchie, Bell Labs, 1969-1973)
-=> Curly braces for blocks, semicolons as terminators, declarations mimic use,
-duality between arrays and pointers, static typing but weak enforcement, designed to write Unix kernel.
-
-
-* Pascal successors
-
-- *Modula*, *Modula-2* (N. Wirth, 1978, 1980)
-=> Modules separate compilation and encapsulation, coroutines and monitors, support for low-level programming.
-
-- *Oberon* (N. Wirth, 1986)
-=> Simplified modules, dynamic type extension and type tests, streamlined syntax.
-
-Philosophy: "Make it as simple as possible, but not simpler." (A. Einstein)
-
-- *Object*Oberon* (J. Templ, H.P. Moessenboeck, 1989)
-=> Experimental Oberon dialect with classes and methods.
-
-- *Oberon-2* (J. Templ, H.P Moessenboeck, N. Wirth, 1991)
-=> Oberon with methods on records (== structs), replaces Object Oberon.
-
-
-* Tree node lookup in Oberon-2
-
-
-	MODULE Trees;
-
-	IMPORT Texts, Oberon;
-
-	TYPE
-		Tree* = POINTER TO Node;  (* star denotes export, not pointer! *)
-		Node* = RECORD
-			name-: POINTER TO ARRAY OF CHAR;  (* minus denotes read-only export *)
-			left, right: Tree
-		END;
-
-	PROCEDURE (t: Tree) Lookup* (name: ARRAY OF CHAR): Tree;
-		VAR p: Tree;
-	BEGIN p := t;
-		WHILE (p # NIL) & (name # p.name^) DO
-			IF name < p.name^ THEN p := p.left ELSE p := p.right END
-		END;
-		RETURN p
-	END Lookup;
-
-	...
-
-
-* Analogous code in Go
-
-
-	package trees
-
-	import ( "fmt"; "runtime" )
-
-	type (
-		Tree *Node
-		Node struct {
-			name        string
-			left, right Tree
-		}
-	)
-
-	func (t *Node) Lookup(name string) Tree {
-		var p Tree
-		p = t
-		for p != nil && name != p.name {
-			if name < p.name { p = p.left } else { p = p.right }
-		}
-		return p
-	}
-
-	...
-
-
-* Observations
-
-- Syntax details are different but structure is the same.
-=> C tokens, Oberon structure.
-
-- Same concepts (packages, imports, types, functions/methods, etc).
-=> Go concepts further distilled (e.g.; just one loop construct).
-
-Go's heritage is at least as much Oberon as it is C!
-(packages, imports, strict memory safety, garbage collection, dynamic type checks, etc.)
-
-
-* Object orientation and generics
-
-Around 1990: OO and type-system "craze" taking its toll on programming languages.
-- C++, Java, others
-- complex OO type systems
-- complex generic type systems
-
-Proliferation of dynamically typed interpreted languages:
-- Erlang, Perl, Python, Lua, Javascript, Ruby, etc.
-
-1990s, 2000s: Backlash.
-- Complex OO code is modern analog to unstructured "spaghetti code" of 1970.
-- Realization that large programs in dynamically typed languages become unmaintainable.
-- Cluttered notation: “Public Static Void” (Rob Pike, OSCON 2010).
-
-
-* Object orientation in Go: Interfaces
-
-Inspiration: Smalltalk (Alan Kay, Dan Ingalls, Adele Goldberg, 1972-1980)
-- Everything is an object.
-- Any message can be sent to any object.
-
-Want: Similar power in (mostly) statically typed language without the type-system fuss.
-- Notion of interfaces for static typing.
-- Usually objects carry type information => restricts object types to "classes".
-
-*Crucial*insight*: Can attach methods to any type if interfaces carry type info rather than objects.
-
-Methods and interfaces are the only additional mechanisms needed for object-oriented programming.
-
-
-* Concurrency
-
-- Good concurrency support was considered essential from day one.
-
-- Rob Pike’s work on NewSqueak turned out to fit really well into Go.
-
-Origins:
-
-- “Newsqueak: A Language for Communicating with Mice”, Rob Pike, 1994.
-
-- “Communicating Sequential Processes”, CACM, C.A.R. Hoare, 1978.
-
-
-* Generics
-
-- Single biggest language feature (what exactly is it?) absent in Go.
-
-- Often missed by newcomers to Go.
-
-- Type-system mechanism; unclear if essential language feature.
-
-- Incredibly complex in both semantics and implementation.
-
-- Significant trade-offs: Larger binary, slower binary, or larger source code.
-
-- Not-orthogonal: Affects many other language features as well as how library is written.
-
-- For now: Hold off and keep thinking about it.
-
-
-* Putting it all together
-
-Luxury to spend two years to hammer out basics (thanks, Google!).
-
-Crucial: *Added*one*feature*at*a*time.*
-
-Initially: Team of three very different people.
-- Intensive discussions, emotional.
-- Humbling experience.
-
-Having multiple people illuminating each new feature from different angles
-made language much stronger.
-
-Later:
-- Russ Cox's razor cutting through the crud, making it work well.
-- Ian Lance Taylor providing a 2nd implementation (validation of design).
-- go/types (now in 1.5!) provides a 3rd frontend (validation of compilers and spec).
-
-Having 3 frontends proved tremendously useful.
-
-
-* Evolving Go
-
-Original design went through many (syntactic and semantic) transitions:
-
-- Parallel library development ensured we didn't design "into the blue".
-
-- gofmt (for language changes) and gofix (for API changes) for existing code.
-
-Features that came in much later:
-
-- Optional semicolons, optional types for composite literals, optional bounds in slice expressions, recover, etc.
-
-- Semantic clarifications (maps, channel ops, etc.).
-
-- Small backward-compatible adjustments still happening at very low rate.
-
-
-* The future of Go
-
-
-* What makes a programming language successful?
-
-- Clear target
-
-- Solid implementation: *language*, *libraries*, and *tools*!
-
-- Market readiness
-
-- Technological breakthrough
-
-- Language features without competitors
-
-- Rarely: Marketing
-
-
-* How about Go?
-
-- Clear target behind design
-- Multi-paradigm (imperative, functional, object-oriented)
-- Syntactically light-weight
-- Language features without competition: goroutines, interfaces, defer
-- Tools without competition: fast compiler, gofmt, go build
-- Strong standard libraries
-- Solid implementation
-- Excellent documentation, online tools (playground, tour)
-- But: No corporate marketing to speak of
-
-
-* Will Go become mainstream?
-
-- Need to cross the chasm from early adopters to early mainstream. Are we there yet?
-- Go community must remain unified behind this goal.
-- Don't make too many mistakes going forward.
-
-It takes about 10 years for a programming language to become "established".
-
-
-* Pitfalls
-
-The language is frozen, but these are a form of "language design":
-
-- +build tags and other specialized comments
-- special interpretation of import paths and canonical import path comments
-- internal packages
-- vendoring descriptions
-
-These mechanisms are not part of the language spec and thus may diverge
-over time or have different semantics on different platforms.
-
-Need to be watchful of this development.
-
-
-* Closing thoughts
-
-- In 1960, language experts from America and Europe teamed up to create Algol 60.
-- In 1970, the Algol tree split into the C and the Pascal branch.
-- ~40 years later, the two branches join again in Go.
-- Let's see if Go can enjoy an equally long run as its predecessors!
diff --git a/content/2015/gophercon-goevolution/GopherEvolution.svg b/content/2015/gophercon-goevolution/GopherEvolution.svg
deleted file mode 100644
index d100de4..0000000
--- a/content/2015/gophercon-goevolution/GopherEvolution.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 960.0 720.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l960.0 0l0 720.0l-960.0 0l0 -720.0z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l960.0 0l0 720.0l-960.0 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m56.69972 134.55632l777.2405 0l0 450.8872l-777.2405 0z" fill-rule="nonzero"></path><g transform="matrix(0.8772465474015747 0.0 0.0 0.8772125049868765 56.6997169057218 134.55631763233598)"><clipPath id="p.1"><path d="m0 2.842171E-14l886.0 0l0 514.0l-886.0 0z" clip-rule="nonzero"></path></clipPath><image clip-path="url(#p.1)" fill="#000" width="886.0" height="514.0" x="0.0" y="0.0" preserveAspectRatio="none" xlink:href="data:image/png;base64,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ifA12c8lRhUVsmYWFpVG2DV/n/HRE3XCXGyxxTIHUqwpUafW2Ok97bDDDnXpilsU7XziiSey57T6uoV/unDaOMXu4V5MxQwbJUng6lrsuOOOFbXBnRCx00PnyvTTT58OVfc1z52Q4g8IOwBokGFVlBblvZqWfmnGQqtnk9Xi2ezLUGxrIa1UHBWk66Hv7bCv1tK86Oe+g9lWW21V0ea8HT3msVoUbxAKNYBQo4GyqEo7tqH34k7fS9ypRiU0ikhpaq6w846OO++8M5l66qmzKFe7Gtt9XX+2D5x33nmZI6EeqZheqOjrSSedlKZ+++dcZ511snu412pJY85Kc05NmDAhmWKKKbIofqfUiPs9TK/7lltuydZUu50ngLADgDYw6H263fjx4zNRZ41S2jXtsux1xGZLmUhV1EnvMfawOh9rRFA0ny9mFJhhKgHx5z//OWfQdVLzFC92Tj/99GTQoEFZN9QyMd3OXeWs9lEtw61DoU87RtQ11+C2/WafffaJNk3p1GZM4f5w9913VzRP6ev9HxtKbddv6623zq6fpX8ecMAB0TTMXnBgxJwIdi3WX3/9rF68HUaz9DfN96abbsqdLYg7QNgB9LhRFXpuzUhQF0fViBXVHnRixM53qLNDXXUKm222WXLQQQclF154YXL11VenkRwZSbPPPnv2byXQYgLPR4J8dMhSoVTLZak/sevdDodwWeRWaLDywQcfnHq4rSV4WYplu4n9WFqo3ocij2rWYYYRNSrNX2smqD/++OO0Lb83tmO1m504x07vSbMs33777fQaDDQVO9YURGmsdv1sn9Kedfnll2dismzf74W1ZlGtG264oVDQddLMVL0HRR5ja4r9CxB2AD2CrzcIuwGaqFO6nYwDGQZFjVLavcbNCy7vwdZjqaWWSkaPHp089NBDyffff194rSZPnpyceeaZydprr51MOeWU6f9VpMeEmz3CyIJ+JlGstvqayeWve7uvDftqQkfF+aoNshQve6/2fotSc9tR3IURVb2ncePG5SIaDPhtzv7jo036Xg0+ysRcp0bszMGjlEh/X/U3Yl8kVp555pm0blT7jok6pZW/9tprFXV9vehIsFRMrbctt9yyIlpXrZNuu60rfb6qsZNjqpfnEwLCDqDnidUdeANh0qRJaWe1ouHj7dgkxQsMS3/0NXQy4HWQL7300qkHW93j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J7kayNi92Kv7khdnV111Va5mwgsv3zJbQ2qVihO7htVm2G288cbRVM92E3Z6jZobpwYkZtiFKfGh0Pjuu2/TFDrNnZMzYb311kvmmWeenNCzej0/U7RaZ9BahErRSBZ5yFUj5Pelblm7QuJHKWE6I1s5LqMREWPfQKXWiJ0Z3X/+858zUedr9x577LE+ddvsJmHno2n6uZxMuh/DSK/uS9laqq97+umnc5kJteynPiq44447tlzYhevryiuvzDk6i9Loy5ygdi0k7jTovSwlM7THtA7V7M9eA6mYCLuONqBiKUu+05DdKAr/zz333Ll0y1i73FrSd3px5lxZtybbXOzQG2jEztfc7LPPPhWRoWauM1tX8s5bHZNvR9ztUbuYt9DqC2655ZboZ9OLh0osvUZsv/32qaFTdECb4FEKjr+WoREVPpelJb366qupyDZjqp0iKzEBu8UWW2QGXeiQswYJPlUuRH+nmhbV36qeR12LJUIUCbT0zVhUr6wZQdG1in1W+r2KZvlmGd0i7Oy9yJk2ePDg7Bp2co1deJ9tsskm2Tgju4eqiQtzDmuObTjmQPPYVEdrQqUXInZFNXb68zbbbFNxRnqHoEYZ+ahptesURgWF1Tm2KhUzlsGy0korJd98803FrEt/b8XWWui8szUpe2OttdaKziX1toe/trfffnsuEgoIu47bWPwG4w0pPxdENRBKDTBBJ2NUN0nsRiFiV5thb38ORz/Uq3mKxOFiiy2Weqw0+PPOO+/MeU1bFa1THZO935ih2As1dvYzq4E85phjss8mNri5V4WdXQultKlJiPadIrFgravV3cyvt2rd4kwAqr7DCurbTdj56L0ZH1ozsYhJUVTS16AUGSxKQXrggQeSY489Nk3fXm655ZIZZpghfW4Te9773Z8aO3sf+j3ao2RE2XnTLevX1tT555/fNnMQ67l/hRG2slb73iA3R8Qaa6yR1T+ZQb/ppptWREm63bEVm8NmqagLLrhg1JFl10vRNlFL2mr49+EcO6vja1UqpheVcoJYDac/C6s1U4k91EBLKMXXouZl3YF9imvMOQgIu7bdQGoxAHxKj1rSq8uceW+9EGE0Qf9TWawznL+utba+Lmsl7n/3mmuumXqsYh7CRm1YRevKNunDDjssfc8ywosiWd38+YftlnUtFI0KU3J6sXlAbB6mOProo7Om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"></image></g><path fill="#000000" d="m883.0406 379.51184c-0.99468994 -1.0623474 -3.5489502 -4.3891296 -5.9681396 -6.3742065c-2.4191284 -1.9850464 -5.6708984 -4.026245 -8.546875 -5.536133c-2.8759155 -1.5099182 -4.945801 -2.7402344 -8.70874 -3.5232544c-3.7628784 -0.78302 -9.783081 -1.2026978 -13.868713 -1.1748352c-4.0856323 0.027832031 -7.285095 0.30740356 -10.64502 1.341919c-3.3598633 1.0345154 -6.880432 2.8799133 -9.514343 4.8651733c-2.6339722 1.9852905 -4.5422363 4.5299377 -6.2894287 7.046509c-1.7471313 2.516571 -3.2529907 5.0890503 -4.1937256 8.0529175c-0.94073486 2.9638977 -1.3701172 6.3472595 -1.4506226 9.730377c-0.08050537 3.3831177 0.5107422 7.1572266 0.9675293 10.56842c0.45672607 3.4111938 1.2893677 6.5434875 1.7730713 9.898773c0.48376465 3.3552551 0.9949341 6.9894714 1.1293945 10.23291c0.13446045 3.2434692 0.13446045 6.1799316 -0.32250977 9.227814c-0.4569702 3.0478516 -1.3978882 6.179474 -2.4193726 9.059387c-1.0214233 2.8798828 -2.6343384 5.3960266 -3.7093506 8.220032c-1.0750122 2.8239746 -2.0686646 5.8718567 -2.7406616 8.723907c-0.67193604 2.8520508 -0.35028076 6.9344177 -1.2911987 8.388428c-0.940979 1.4539795 -3.118164 0.055908203 -4.35437 0.33547974c-1.2362671 0.27957153 -2.7138672 0.3633423 -3.0631714 1.341919c-0.34924316 0.9786072 -0.32250977 3.075714 0.9675293 4.529724c1.289978 1.4539795 5.213501 2.3207397 6.772461 4.194214c1.55896 1.8734436 1.5598145 4.8096924 2.5812988 7.0464783c1.0214233 2.236786 1.8004761 4.277313 3.5474854 6.3742065c1.7469482 2.0968933 4.8916626 4.7809753 6.934387 6.207123c2.0426636 1.426117 2.4456787 1.6784973 5.3218384 2.349701c2.8761597 0.6711731 7.6343994 1.4259033 11.934998 1.6774292c4.300659 0.25149536 9.837097 -0.05657959 13.868774 -0.168396c4.0316772 -0.111846924 7.25708 0.028717041 10.321228 -0.502594c3.064148 -0.5312805 5.6445923 -1.5666809 8.063782 -2.6851807c2.4191284 -1.1184998 4.4890137 -2.2644043 6.451233 -4.025818c1.9621582 -1.7614136 3.7091675 -4.2499084 5.3218384 -6.5426025c1.6127319 -2.292694 3.1986694 -4.725067 4.354431 -7.213562c1.1557007 -2.4885254 1.8004761 -4.8373413 2.579956 -7.7174683c0.77948 -2.880127 1.6131592 -5.6486206 2.0968628 -9.563263c0.48376465 -3.9146423 0.7251587 -10.541443 0.80566406 -13.924591c0.08050537 -3.3831177 -0.10748291 -4.6406555 -0.32250977 -6.3742065c-0.21502686 -1.733551 -0.77948 -0.7555847 -0.9675293 -4.02713c-0.18798828 -3.271515 -0.5100708 -12.554352 -0.1605835 -15.60199c0.3494873 -3.047638 1.854248 -1.6774292 2.2575073 -2.6838684c0.40319824 -1.0064697 -0.18762207 -2.4880676 0.16186523 -3.3548584c0.3494873 -0.86676025 1.4244995 -1.0349426 1.9349976 -1.8458252c0.51049805 -0.81085205 0.6981201 -2.040741 1.1281128 -3.0193481c0.42999268 -0.9786072 1.3981323 -1.957428 1.4519043 -2.8522644c0.053710938 -0.89486694 -0.9411621 -2.097351 -1.1293945 -2.5168152" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m883.0406 379.51184c-0.99468994 -1.0623474 -3.5489502 -4.3891296 -5.9681396 -6.3742065c-2.4191284 -1.9850464 -5.6708984 -4.026245 -8.546875 -5.536133c-2.8759155 -1.5099182 -4.945801 -2.7402344 -8.70874 -3.5232544c-3.7628784 -0.78302 -9.783081 -1.2026978 -13.868713 -1.1748352c-4.0856323 0.027832031 -7.285095 0.30740356 -10.64502 1.341919c-3.3598633 1.0345154 -6.880432 2.8799133 -9.514343 4.8651733c-2.6339722 1.9852905 -4.5422363 4.5299377 -6.2894287 7.046509c-1.7471313 2.516571 -3.2529907 5.0890503 -4.1937256 8.0529175c-0.94073486 2.9638977 -1.3701172 6.3472595 -1.4506226 9.730377c-0.08050537 3.3831177 0.5107422 7.1572266 0.9675293 10.56842c0.45672607 3.4111938 1.2893677 6.5434875 1.7730713 9.898773c0.48376465 3.3552551 0.9949341 6.9894714 1.1293945 10.23291c0.13446045 3.2434692 0.13446045 6.1799316 -0.32250977 9.227814c-0.4569702 3.0478516 -1.3978882 6.179474 -2.4193726 9.059387c-1.0214233 2.8798828 -2.6343384 5.3960266 -3.7093506 8.220032c-1.0750122 2.8239746 -2.0686646 5.8718567 -2.7406616 8.723907c-0.67193604 2.8520508 -0.35028076 6.9344177 -1.2911987 8.388428c-0.940979 1.4539795 -3.118164 0.055908203 -4.35437 0.33547974c-1.2362671 0.27957153 -2.7138672 0.3633423 -3.0631714 1.341919c-0.34924316 0.9786072 -0.32250977 3.075714 0.9675293 4.529724c1.289978 1.4539795 5.213501 2.3207397 6.772461 4.194214c1.55896 1.8734436 1.5598145 4.8096924 2.5812988 7.0464783c1.0214233 2.236786 1.8004761 4.277313 3.5474854 6.3742065c1.7469482 2.0968933 4.8916626 4.7809753 6.934387 6.207123c2.0426636 1.426117 2.4456787 1.6784973 5.3218384 2.349701c2.8761597 0.6711731 7.6343994 1.4259033 11.934998 1.6774292c4.300659 0.25149536 9.837097 -0.05657959 13.868774 -0.168396c4.0316772 -0.111846924 7.25708 0.028717041 10.321228 -0.502594c3.064148 -0.5312805 5.6445923 -1.5666809 8.063782 -2.6851807c2.4191284 -1.1184998 4.4890137 -2.2644043 6.451233 -4.025818c1.9621582 -1.7614136 3.7091675 -4.2499084 5.3218384 -6.5426025c1.6127319 -2.292694 3.1986694 -4.725067 4.354431 -7.213562c1.1557007 -2.4885254 1.8004761 -4.8373413 2.579956 -7.7174683c0.77948 -2.880127 1.6131592 -5.6486206 2.0968628 -9.563263c0.48376465 -3.9146423 0.7251587 -10.541443 0.80566406 -13.924591c0.08050537 -3.3831177 -0.10748291 -4.6406555 -0.32250977 -6.3742065c-0.21502686 -1.733551 -0.77948 -0.7555847 -0.9675293 -4.02713c-0.18798828 -3.271515 -0.5100708 -12.554352 -0.1605835 -15.60199c0.3494873 -3.047638 1.854248 -1.6774292 2.2575073 -2.6838684c0.40319824 -1.0064697 -0.18762207 -2.4880676 0.16186523 -3.3548584c0.3494873 -0.86676025 1.4244995 -1.0349426 1.9349976 -1.8458252c0.51049805 -0.81085205 0.6981201 -2.040741 1.1281128 -3.0193481c0.42999268 -0.9786072 1.3981323 -1.957428 1.4519043 -2.8522644c0.053710938 -0.89486694 -0.9411621 -2.097351 -1.1293945 -2.5168152" fill-rule="nonzero"></path><path fill="#000000" d="m854.00854 371.88174c-0.4840088 -1.5658264 -1.0216675 -1.9291687 -1.7744141 -2.3483887c-0.75268555 -0.4192505 -1.9356079 -0.7262573 -2.7418823 -0.16711426c-0.8062134 0.55914307 -1.6118774 1.8164673 -2.095581 3.5219421c-0.48376465 1.7055054 -0.96813965 4.9215393 -0.80688477 6.7109985c0.16125488 1.7894897 1.0216675 2.879486 1.774353 4.025818c0.7527466 1.1463623 1.9086304 2.3488464 2.7418823 2.8522644c0.83325195 0.5034485 1.5587769 0.6437988 2.2575073 0.168396c0.69873047 -0.4753723 1.6392822 -1.7344055 1.9349976 -3.0206604c0.29571533 -1.2862244 0.054382324 -2.739563 -0.16064453 -4.6967773c-0.21496582 -1.9572144 -0.64538574 -5.4806824 -1.1293335 -7.0464783z" fill-rule="nonzero"></path><path stroke="#ffffff" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m854.00854 371.88174c-0.4840088 -1.5658264 -1.0216675 -1.9291687 -1.7744141 -2.3483887c-0.75268555 -0.4192505 -1.9356079 -0.7262573 -2.7418823 -0.16711426c-0.8062134 0.55914307 -1.6118774 1.8164673 -2.095581 3.5219421c-0.48376465 1.7055054 -0.96813965 4.9215393 -0.80688477 6.7109985c0.16125488 1.7894897 1.0216675 2.879486 1.774353 4.025818c0.7527466 1.1463623 1.9086304 2.3488464 2.7418823 2.8522644c0.83325195 0.5034485 1.5587769 0.6437988 2.2575073 0.168396c0.69873047 -0.4753723 1.6392822 -1.7344055 1.9349976 -3.0206604c0.29571533 -1.2862244 0.054382324 -2.739563 -0.16064453 -4.6967773c-0.21496582 -1.9572144 -0.64538574 -5.4806824 -1.1293335 -7.0464783z" fill-rule="nonzero"></path><path fill="#000000" d="m867.86487 444.09943c-0.8305664 -0.0552063 -1.2858887 -0.8558655 -1.928833 -0.3312683c-0.64294434 0.52459717 -1.7144775 2.3744507 -1.928772 3.4788513c-0.21435547 1.1044006 0.34814453 2.3744507 0.6428833 3.147583c0.2947998 0.77316284 0.911499 0.8010864 1.1257935 1.4913025c0.21429443 0.6902466 -0.05419922 1.9046326 0.16009521 2.6500854c0.21429443 0.74542236 0.56311035 1.2979431 1.1257935 1.8225403c0.5626831 0.52459717 1.5804443 1.1594238 2.2502441 1.3250427c0.66986084 0.1656189 1.1524658 0.08291626 1.7687378 -0.3312683c0.61621094 -0.41418457 1.2053833 -1.6844177 1.928772 -2.1538086c0.7233887 -0.46939087 1.9294434 -0.1656189 2.411621 -0.6625061c0.48223877 -0.4968872 0.8835449 -0.96585083 0.48156738 -2.3188171c-0.4019165 -1.3529663 -2.062622 -4.445984 -2.8931885 -5.79895c-0.8305664 -1.3529358 -1.232727 -1.932312 -2.090149 -2.3187866c-0.8574829 -0.3864746 -2.223999 0.0552063 -3.0545654 0z" fill-rule="nonzero"></path><path stroke="#ffffff" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m867.86487 444.09943c-0.8305664 -0.0552063 -1.2858887 -0.8558655 -1.928833 -0.3312683c-0.64294434 0.52459717 -1.7144775 2.3744507 -1.928772 3.4788513c-0.21435547 1.1044006 0.34814453 2.3744507 0.6428833 3.147583c0.2947998 0.77316284 0.911499 0.8010864 1.1257935 1.4913025c0.21429443 0.6902466 -0.05419922 1.9046326 0.16009521 2.6500854c0.21429443 0.74542236 0.56311035 1.2979431 1.1257935 1.8225403c0.5626831 0.52459717 1.5804443 1.1594238 2.2502441 1.3250427c0.66986084 0.1656189 1.1524658 0.08291626 1.7687378 -0.3312683c0.61621094 -0.41418457 1.2053833 -1.6844177 1.928772 -2.1538086c0.7233887 -0.46939087 1.9294434 -0.1656189 2.411621 -0.6625061c0.48223877 -0.4968872 0.8835449 -0.96585083 0.48156738 -2.3188171c-0.4019165 -1.3529663 -2.062622 -4.445984 -2.8931885 -5.79895c-0.8305664 -1.3529358 -1.232727 -1.932312 -2.090149 -2.3187866c-0.8574829 -0.3864746 -2.223999 0.0552063 -3.0545654 0z" fill-rule="nonzero"></path><path fill="#000000" d="m873.20215 495.60547c-1.451416 -0.13967896 -4.274048 0.5595703 -6.128723 1.510315c-1.8546753 0.95077515 -5.2143555 3.1877747 -4.9993896 4.194214c0.21502686 1.0064697 4.085205 1.7886047 6.2893677 1.8445129c2.2041626 0.055908203 5.6992188 -0.64224243 6.935669 -1.5090332c1.2364502 -0.86676025 0.83258057 -2.684967 0.48309326 -3.6916199c-0.3494873 -1.0066833 -1.12854 -2.2087097 -2.580017 -2.3483887z" fill-rule="nonzero"></path><path stroke="#ffffff" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m873.20215 495.60547c-1.451416 -0.13967896 -4.274048 0.5595703 -6.128723 1.510315c-1.8546753 0.95077515 -5.2143555 3.1877747 -4.9993896 4.194214c0.21502686 1.0064697 4.085205 1.7886047 6.2893677 1.8445129c2.2041626 0.055908203 5.6992188 -0.64224243 6.935669 -1.5090332c1.2364502 -0.86676025 0.83258057 -2.684967 0.48309326 -3.6916199c-0.3494873 -1.0066833 -1.12854 -2.2087097 -2.580017 -2.3483887z" fill-rule="nonzero"></path><path fill="#000000" d="m873.8244 382.13785l0 0c7.630371 -4.5419617 17.321777 -1.8488464 21.646362 6.0152283l0 0c2.0767212 3.7764893 2.612793 8.264709 1.4902954 12.477356c-1.1225586 4.2126465 -3.8117676 7.804657 -7.476013 9.985779l0 0c-7.630371 4.5419617 -17.321777 1.8488464 -21.646362 -6.0152283l0 0c-4.324585 -7.8640747 -1.6447144 -17.921173 5.985718 -22.463135z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m873.8244 382.13785l0 0c7.630371 -4.5419617 17.321777 -1.8488464 21.646362 6.0152283l0 0c2.0767212 3.7764893 2.612793 8.264709 1.4902954 12.477356c-1.1225586 4.2126465 -3.8117676 7.804657 -7.476013 9.985779l0 0c-7.630371 4.5419617 -17.321777 1.8488464 -21.646362 -6.0152283l0 0c-4.324585 -7.8640747 -1.6447144 -17.921173 5.985718 -22.463135z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2015/gophercon-goevolution/HoaresPLHints.JPG b/content/2015/gophercon-goevolution/HoaresPLHints.JPG
deleted file mode 100644
index 9324b87..0000000
--- a/content/2015/gophercon-goevolution/HoaresPLHints.JPG
+++ /dev/null
Binary files differ
diff --git a/content/2015/gotham-grpc.slide b/content/2015/gotham-grpc.slide
deleted file mode 100644
index 7415de0..0000000
--- a/content/2015/gotham-grpc.slide
+++ /dev/null
@@ -1,241 +0,0 @@
-gRPC Go
-GothamGo 2015
-
-Sameer Ajmani
-Tech Lead Manager, Go team, Google
-@Sajma
-sameer@golang.org
-
-* Video
-
-This talk was presented at GothamGo in New York City, October 2015.
-
-.link https://www.youtube.com/watch?v=vTIyz2QfExc&index=7&list=PLeGxIOPLk9ELh9tsPZMzau6CzMjfMzp9- Watch the talk on YouTube
-
-* RPC isn't just Remote Procedure Call
-
-In Go, an RPC *starts*a*goroutine* running on the server and provides _message_passing_ between the client and server goroutines.
-
-*Unary*RPC*: the client sends a _request_ to the server, then the server sends a _response_.
-
-*Streaming*RPC:* the client and server may each send one or more messages.
-
-An RPC ends when:
-
-- both sides are done sending messages
-- either side disconnects
-- the RPC is canceled or times out
-
-This talk will show how we connect RPCs and streams with goroutines and channels.
-
-* Unary RPC: one request, one response
-
-Example: a mobile Maps app requests a route from point A to point B.
-
-On the client side, an RPC blocks until it's done or canceled.
-
-A client uses multiple goroutines to run many RPCs simultaneously.
-
-Each RPC is an exchange between a client goroutine and a server goroutine.
-
-* Streaming RPC provides bidirectional message-passing
-
-A client starts a stream with a server.
-
-Messages sent on a stream are delivered FIFO.
-
-Many streams can run simultaneously between the same client and server.
-
-The transport provides buffering and flow control.
-
-Examples:
-
-- bidirectional stream: chat session
-- server → client stream: stock ticker
-- client → server stream: sensor aggregation
-
-* gRPC is a new RPC system from Google
-
-.link http://grpc.io
-
-Provides RPC and streaming RPC
-
-Ten languages: *C*, *Java*, *Go*, C++, Node.js, Python, Ruby, Objective-C, PHP, and C#
-IDL: *Proto3*
-Transport: *HTTP2*
-
-[[http://golang.org/x/net/context][golang.org/x/net/context]] for deadlines, cancelation, and request-scoped values
-[[http://golang.org/x/net/trace][golang.org/x/net/trace]] for real-time request traces and connection logging
-
-* gRPC users
-
-150+ imports of [[https://godoc.org/google.golang.org/grpc?importers][google.golang.org/grpc]] on [[http://godoc.org][godoc.org]]
-
-- [[https://github.com/apcera/kurma][Apcera/Kurma]]: container OS
-- [[http://bazil.org][Bazil]]: distributed file system
-- [[http://coreos.com/etcd/][CoreOS/Etcd]]: distributed consistent key-value store
-- [[https://godoc.org/google.golang.org/cloud/bigtable][Google Cloud Bigtable]]: sparse table storage
-- [[https://github.com/monetas/bmd][Monetas/Bitmessage]]: transaction platform
-- [[http://www.pachyderm.io/][Pachyderm]]: containerized data analytics
-- [[http://vitess.io/][YouTube/Vitess]]: storage platform for scaling MySQL
-
-* Demos and Code: Google search
-
-* Protocol definition
-
-.code gotham-grpc/search-only/search-only.proto
-
-* Generated code
-
-.code gotham-grpc/search/README.md /protoc/
-.code gotham-grpc/search-only/search-only.pb.go /type GoogleClient/,/^}/
-.code gotham-grpc/search-only/search-only.pb.go /type GoogleServer/,/^}/
-.code gotham-grpc/search-only/search-only.pb.go /type Request/,/^}/
-.code gotham-grpc/search-only/search-only.pb.go /type Result/,/^}/
-
-* System diagram
-
-.image gotham-grpc/system.svg _ 1000
-
-* Frontend runs Search on both backends and returns first result
-
-.image gotham-grpc/search.svg _ 1000
-
-* Demo client --mode=search
-
-- Frontend request traces
-- Backend request traces
-- Connection event logs
-
-* Client code
-
-.image gotham-grpc/client.svg _ 1000
-
-* Client code (main)
-
-  import pb "golang.org/x/talks/content/2015/gotham-grpc/search"
-
-.code gotham-grpc/client/client.go /func main/,/^}/
-
-* Client code (search)
-
-.code gotham-grpc/client/client.go /func search/,/^}/
-
-RPCs block but can be canceled using a Context.
-
-gRPC propagates cancelation from client to server.
-
-* Backend code
-
-.image gotham-grpc/backend.svg _ 1000
-
-* Backend code (main)
-
-.code gotham-grpc/backend/backend.go /net.Listen/,/g.Serve/
-
-`new(server)` must implement the `GoogleServer` interface:
-
-.code gotham-grpc/search/search.pb.go /type GoogleServer/,/^}/
-
-Each call to `Search` or `Watch` runs in its own goroutine.
-
-* Backend code (search)
-
-`ctx.Done` is closed when the RPC is canceled, times out, or returns:
-
-.code gotham-grpc/backend/backend.go /[)] Search/,/^}/
-
-If tracing is enabled, log the sleep duration:
-
-.code gotham-grpc/backend/backend.go /func logSleep/,/^}/
-
-* Frontend code
-
-.image gotham-grpc/frontend.svg _ 1000
-
-* Frontend code (search)
-
-`Search` returns as soon as it gets the first result.
-gRPC cancels the remaining `backend.Search` RPCs by via `ctx`:
-
-.code gotham-grpc/frontend/frontend.go /[)] Search/,/^}/
-
-.code gotham-grpc/frontend/frontend.go /type result/,/^}/
-
-* Streaming RPC
-
-* Add Watch to the Google service
-
-.code gotham-grpc/search/search.proto
-
-* Generated code
-
-.code gotham-grpc/search/search.pb.go /type GoogleClient/,/^}/
-.code gotham-grpc/search/search.pb.go /type GoogleServer/,/^}/
-.code gotham-grpc/search/search.pb.go /type Google_WatchClient/,/^}/
-.code gotham-grpc/search/search.pb.go /type Google_WatchServer/,/^}/
-
-* Frontend runs Watch on both backends and merges results
-
-.image gotham-grpc/watch.svg _ 1000
-
-* Demo client --mode=watch
-
-- Active stream traces
-- Cancelation
-
-* Client code
-
-.image gotham-grpc/client.svg _ 1000
-
-* Client code (watch)
-
-.code gotham-grpc/client/client.go /func watch/,/^}/
-
-* Backend code
-
-.image gotham-grpc/backend.svg _ 1000
-
-* Backend code (watch)
-
-.code gotham-grpc/backend/backend.go /[)] Watch/,/^}/
-
-* Frontend code
-
-.image gotham-grpc/frontend.svg _ 1000
-
-* Frontend code (watch)
-
-.code gotham-grpc/frontend/frontend.go /[)] Watch/,/return nil/
-
-* Frontend code (watchBackend)
-
-`Watch` returns on first error; this closes `ctx.Done` and signals `watchBackend` to exit.
-
-.code gotham-grpc/frontend/frontend.go /func watch/,/^}/
-
-* gRPC extends the Go programming model over the network
-
-Go gRPC works smoothly with goroutines, channels, and cancelation.
-
-It is an excellent fit for building parallel, distributed, and streaming systems.
-
-.image gotham-grpc/watch.svg _ 1000
-
-* References
-
-- [[http://grpc.io][grpc.io]] - gRPC reference and tutorials
-- [[https://github.com/golang/protobuf][github.com/golang/protobuf]] - Protocol buffers
-- [[http://golang.org/x/net/http2][golang.org/x/net/http2]] - HTTP2
-- [[http://golang.org/x/net/trace][golang.org/x/net/trace]] - Request traces and event logs
-- [[http://golang.org/x/net/context][golang.org/x/net/context]] - Cancelation and request-scoped data
-- [[http://blog.golang.org/pipelines][blog.golang.org/pipelines]] - Streaming data pipelines
-
-*Thanks*to* Qi Zhao, David Symonds, Brad Fitzpatrick, and the rest.
-
-*Questions?*
-
-Sameer Ajmani
-Tech Lead Manager, Go team, Google
-[[twitter.com/Sajma][@Sajma]]
-[[mailto:sameer@golang.org][sameer@golang.org]]
diff --git a/content/2015/gotham-grpc/backend.svg b/content/2015/gotham-grpc/backend.svg
deleted file mode 100644
index c8186e6..0000000
--- a/content/2015/gotham-grpc/backend.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 705.1417322834645 253.71391076115486" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l705.1417 0l0 253.71391l-705.1417 0l0 -253.71391z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l705.1417 0l0 253.71391l-705.1417 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m45.290924 120.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281967 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm21.978302 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.418396 4.921875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129196 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm17.125732 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" d="m81.58316 142.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879196 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m307.77377 134.87276l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7614136 0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281982 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277069 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110077 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="8.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path fill="#000000" d="m562.096 64.32157l0 -13.593746l2.609375 0l0 4.890625q1.203125 -1.375 2.859375 -1.375q1.796875 0 2.96875 1.3125q1.1875 1.296875 1.1875 3.734375q0 2.53125 -1.203125 3.890625q-1.203125 1.3593712 -2.921875 1.3593712q-0.84375 0 -1.671875 -0.421875q-0.8125 -0.4218712 -1.40625 -1.2499962l0 1.4531212l-2.421875 0zm2.59375 -5.140621q0 1.53125 0.484375 2.265625q0.671875 1.03125 1.796875 1.03125q0.859375 0 1.46875 -0.734375q0.609375 -0.734375 0.609375 -2.328125q0 -1.6875 -0.609375 -2.421875q-0.609375 -0.75 -1.578125 -0.75q-0.9375 0 -1.5625 0.734375q-0.609375 0.71875 -0.609375 2.203125zm10.864746 -1.703125l-2.359375 -0.4375q0.390625 -1.421875 1.359375 -2.109375q0.984375 -0.6875 2.90625 -0.6875q1.734375 0 2.59375 0.421875q0.859375 0.40625 1.203125 1.046875q0.34375 0.625 0.34375 2.328125l-0.03125 3.046875q0 1.296875 0.125 1.921875q0.125 0.609375 0.46875 1.3124962l-2.578125 0q-0.09375 -0.265625 -0.25 -0.7656212q-0.0625 -0.234375 -0.09375 -0.3125q-0.65625 0.65625 -1.421875 0.9843712q-0.765625 0.3125 -1.625 0.3125q-1.515625 0 -2.40625 -0.8124962q-0.875 -0.828125 -0.875 -2.09375q0 -0.84375 0.390625 -1.484375q0.40625 -0.65625 1.125 -1.0q0.71875 -0.359375 2.078125 -0.625q1.828125 -0.328125 2.53125 -0.625l0 -0.265625q0 -0.75 -0.375 -1.0625q-0.359375 -0.328125 -1.390625 -0.328125q-0.703125 0 -1.09375 0.28125q-0.390625 0.265625 -0.625 0.953125zm3.484375 2.109375q-0.5 0.171875 -1.59375 0.40625q-1.078125 0.234375 -1.40625 0.453125q-0.515625 0.359375 -0.515625 0.921875q0 0.546875 0.40625 0.953125q0.40625 0.390625 1.046875 0.390625q0.703125 0 1.34375 -0.46875q0.46875 -0.359375 0.625 -0.859375q0.09375 -0.34375 0.09375 -1.28125l0 -0.515625zm13.531982 -2.203125l-2.5625 0.46875q-0.140625 -0.78125 -0.59375 -1.171875q-0.453125 -0.390625 -1.1875 -0.390625q-0.984375 0 -1.5625 0.671875q-0.578125 0.671875 -0.578125 2.25q0 1.765625 0.578125 2.484375q0.59375 0.71875 1.59375 0.71875q0.75 0 1.21875 -0.421875q0.46875 -0.421875 0.671875 -1.453125l2.546875 0.4375q-0.390625 1.765625 -1.53125 2.671875q-1.125 0.8906212 -3.03125 0.8906212q-2.15625 0 -3.453125 -1.3593712q-1.28125 -1.359375 -1.28125 -3.78125q0 -2.4375 1.296875 -3.796875q1.296875 -1.359375 3.484375 -1.359375q1.796875 0 2.859375 0.78125q1.0625 0.765625 1.53125 2.359375zm1.6881714 6.937496l0 -13.593746l2.609375 0l0 7.203125l3.0625 -3.46875l3.203125 0l-3.375 3.609375l3.609375 6.249996l-2.796875 0l-2.484375 -4.421871l-1.21875 1.265625l0 3.1562462l-2.609375 0zm16.172607 -3.1406212l2.609375 0.4375q-0.5 1.4375 -1.59375 2.1875q-1.078125 0.7343712 -2.703125 0.7343712q-2.5625 0 -3.796875 -1.6718712q-0.96875 -1.34375 -0.96875 -3.40625q0 -2.4375 1.265625 -3.828125q1.28125 -1.390625 3.25 -1.390625q2.1875 0 3.453125 1.453125q1.28125 1.453125 1.234375 4.453125l-6.53125 0q0.015625 1.15625 0.625 1.8125q0.609375 0.640625 1.5 0.640625q0.609375 0 1.03125 -0.328125q0.421875 -0.34375 0.625 -1.09375zm0.15625 -2.625q-0.03125 -1.140625 -0.59375 -1.71875q-0.546875 -0.59375 -1.34375 -0.59375q-0.859375 0 -1.40625 0.625q-0.5625 0.609375 -0.546875 1.6875l3.890625 0zm13.485107 5.765621l-2.609375 0l0 -5.031246q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.468746l-2.609375 0l0 -9.859371l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.124996zm11.474121 0l-2.421875 0l0 -1.4531212q-0.609375 0.84375 -1.4375 1.2656212q-0.8125 0.40625 -1.640625 0.40625q-1.703125 0 -2.921875 -1.3593712q-1.203125 -1.375 -1.203125 -3.828125q0 -2.5 1.171875 -3.796875q1.1875 -1.3125 2.984375 -1.3125q1.65625 0 2.859375 1.375l0 -4.890625l2.609375 0l0 13.593746zm-6.96875 -5.140621q0 1.578125 0.4375 2.28125q0.640625 1.015625 1.765625 1.015625q0.90625 0 1.53125 -0.765625q0.625 -0.765625 0.625 -2.28125q0 -1.703125 -0.609375 -2.4375q-0.609375 -0.75 -1.5625 -0.75q-0.9375 0 -1.5625 0.734375q-0.625 0.734375 -0.625 2.203125zm14.56366 1.75l-1.25 0l0 -2.03125l1.671875 0l0.546875 -2.75l-2.21875 0l0 -2.046875l2.640625 0l0.734375 -3.609375l2.078125 0l-0.734375 3.609375l2.046875 0l0.71875 -3.609375l2.15625 0l-0.75 3.609375l1.28125 0l0 2.046875l-1.703125 0l-0.546875 2.75l2.25 0l0 2.03125l-2.671875 0l-0.734375 3.6249962l-2.0625 0l0.703125 -3.6249962l-2.046875 0l-0.734375 3.6249962l-2.09375 0l0.71875 -3.6249962zm3.0625 -4.78125l-0.546875 2.75l2.0625 0l0.53125 -2.75l-2.046875 0zm11.110046 -5.484375q1.96875 0 3.078125 1.40625q1.328125 1.671875 1.328125 5.546875q0 3.859375 -1.328125 5.546875q-1.109375 1.3906212 -3.078125 1.3906212q-1.984375 0 -3.203125 -1.5312462q-1.21875 -1.53125 -1.21875 -5.4375q0 -3.84375 1.34375 -5.53125q1.09375 -1.390625 3.078125 -1.390625zm0 2.15625q-0.484375 0 -0.859375 0.3125q-0.359375 0.296875 -0.5625 1.078125q-0.265625 1.015625 -0.265625 3.40625q0 2.390625 0.234375 3.28125q0.25 0.890625 0.609375 1.1875q0.359375 0.296875 0.84375 0.296875q0.46875 0 0.828125 -0.296875q0.375 -0.296875 0.59375 -1.078125q0.265625 -1.0 0.265625 -3.390625q0 -2.390625 -0.25 -3.28125q-0.234375 -0.90625 -0.609375 -1.203125q-0.359375 -0.3125 -0.828125 -0.3125z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="8.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m562.096 205.42393l0 -13.59375l2.609375 0l0 4.890625q1.203125 -1.375 2.859375 -1.375q1.796875 0 2.96875 1.3125q1.1875 1.296875 1.1875 3.734375q0 2.53125 -1.203125 3.890625q-1.203125 1.359375 -2.921875 1.359375q-0.84375 0 -1.671875 -0.421875q-0.8125 -0.421875 -1.40625 -1.25l0 1.453125l-2.421875 0zm2.59375 -5.140625q0 1.53125 0.484375 2.265625q0.671875 1.03125 1.796875 1.03125q0.859375 0 1.46875 -0.734375q0.609375 -0.734375 0.609375 -2.328125q0 -1.6875 -0.609375 -2.421875q-0.609375 -0.75 -1.578125 -0.75q-0.9375 0 -1.5625 0.734375q-0.609375 0.71875 -0.609375 2.203125zm10.864746 -1.703125l-2.359375 -0.4375q0.390625 -1.421875 1.359375 -2.109375q0.984375 -0.6875 2.90625 -0.6875q1.734375 0 2.59375 0.421875q0.859375 0.40625 1.203125 1.046875q0.34375 0.625 0.34375 2.328125l-0.03125 3.046875q0 1.296875 0.125 1.921875q0.125 0.609375 0.46875 1.3125l-2.578125 0q-0.09375 -0.265625 -0.25 -0.765625q-0.0625 -0.234375 -0.09375 -0.3125q-0.65625 0.65625 -1.421875 0.984375q-0.765625 0.3125 -1.625 0.3125q-1.515625 0 -2.40625 -0.8125q-0.875 -0.828125 -0.875 -2.09375q0 -0.84375 0.390625 -1.484375q0.40625 -0.65625 1.125 -1.0q0.71875 -0.359375 2.078125 -0.625q1.828125 -0.328125 2.53125 -0.625l0 -0.265625q0 -0.75 -0.375 -1.0625q-0.359375 -0.328125 -1.390625 -0.328125q-0.703125 0 -1.09375 0.28125q-0.390625 0.265625 -0.625 0.953125zm3.484375 2.109375q-0.5 0.171875 -1.59375 0.40625q-1.078125 0.234375 -1.40625 0.453125q-0.515625 0.359375 -0.515625 0.921875q0 0.546875 0.40625 0.953125q0.40625 0.390625 1.046875 0.390625q0.703125 0 1.34375 -0.46875q0.46875 -0.359375 0.625 -0.859375q0.09375 -0.34375 0.09375 -1.28125l0 -0.515625zm13.531982 -2.203125l-2.5625 0.46875q-0.140625 -0.78125 -0.59375 -1.171875q-0.453125 -0.390625 -1.1875 -0.390625q-0.984375 0 -1.5625 0.671875q-0.578125 0.671875 -0.578125 2.25q0 1.765625 0.578125 2.484375q0.59375 0.71875 1.59375 0.71875q0.75 0 1.21875 -0.421875q0.46875 -0.421875 0.671875 -1.453125l2.546875 0.4375q-0.390625 1.765625 -1.53125 2.671875q-1.125 0.890625 -3.03125 0.890625q-2.15625 0 -3.453125 -1.359375q-1.28125 -1.359375 -1.28125 -3.78125q0 -2.4375 1.296875 -3.796875q1.296875 -1.359375 3.484375 -1.359375q1.796875 0 2.859375 0.78125q1.0625 0.765625 1.53125 2.359375zm1.6881714 6.9375l0 -13.59375l2.609375 0l0 7.203125l3.0625 -3.46875l3.203125 0l-3.375 3.609375l3.609375 6.25l-2.796875 0l-2.484375 -4.421875l-1.21875 1.265625l0 3.15625l-2.609375 0zm16.172607 -3.140625l2.609375 0.4375q-0.5 1.4375 -1.59375 2.1875q-1.078125 0.734375 -2.703125 0.734375q-2.5625 0 -3.796875 -1.671875q-0.96875 -1.34375 -0.96875 -3.40625q0 -2.4375 1.265625 -3.828125q1.28125 -1.390625 3.25 -1.390625q2.1875 0 3.453125 1.453125q1.28125 1.453125 1.234375 4.453125l-6.53125 0q0.015625 1.15625 0.625 1.8125q0.609375 0.640625 1.5 0.640625q0.609375 0 1.03125 -0.328125q0.421875 -0.34375 0.625 -1.09375zm0.15625 -2.625q-0.03125 -1.140625 -0.59375 -1.71875q-0.546875 -0.59375 -1.34375 -0.59375q-0.859375 0 -1.40625 0.625q-0.5625 0.609375 -0.546875 1.6875l3.890625 0zm13.485107 5.765625l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm11.474121 0l-2.421875 0l0 -1.453125q-0.609375 0.84375 -1.4375 1.265625q-0.8125 0.40625 -1.640625 0.40625q-1.703125 0 -2.921875 -1.359375q-1.203125 -1.375 -1.203125 -3.828125q0 -2.5 1.171875 -3.796875q1.1875 -1.3125 2.984375 -1.3125q1.65625 0 2.859375 1.375l0 -4.890625l2.609375 0l0 13.59375zm-6.96875 -5.140625q0 1.578125 0.4375 2.28125q0.640625 1.015625 1.765625 1.015625q0.90625 0 1.53125 -0.765625q0.625 -0.765625 0.625 -2.28125q0 -1.703125 -0.609375 -2.4375q-0.609375 -0.75 -1.5625 -0.75q-0.9375 0 -1.5625 0.734375q-0.625 0.734375 -0.625 2.203125zm14.56366 1.75l-1.25 0l0 -2.03125l1.671875 0l0.546875 -2.75l-2.21875 0l0 -2.046875l2.640625 0l0.734375 -3.609375l2.078125 0l-0.734375 3.609375l2.046875 0l0.71875 -3.609375l2.15625 0l-0.75 3.609375l1.28125 0l0 2.046875l-1.703125 0l-0.546875 2.75l2.25 0l0 2.03125l-2.671875 0l-0.734375 3.625l-2.0625 0l0.703125 -3.625l-2.046875 0l-0.734375 3.625l-2.09375 0l0.71875 -3.625zm3.0625 -4.78125l-0.546875 2.75l2.0625 0l0.53125 -2.75l-2.046875 0zm13.375671 8.171875l-2.609375 0l0 -9.828125q-1.4375 1.34375 -3.375 1.984375l0 -2.375q1.03125 -0.328125 2.21875 -1.25q1.203125 -0.9375 1.640625 -2.1875l2.125 0l0 13.65625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 -70.551186" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l82.62979 -59.97757" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m512.9422 71.98533l8.106934 -12.007488l-13.928558 3.9872055z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 70.55118" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l82.62979 59.97757" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m507.12057 191.94046l13.928558 3.9872131l-8.106934 -12.007492z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m182.72704 127.95276l70.55118 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m182.72704 127.95276l64.55118 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m247.27821 129.60449l4.538101 -1.6517334l-4.538101 -1.6517334z" fill-rule="evenodd"></path></g></svg>
-
diff --git a/content/2015/gotham-grpc/backend/backend.go b/content/2015/gotham-grpc/backend/backend.go
deleted file mode 100644
index 92ec6ae..0000000
--- a/content/2015/gotham-grpc/backend/backend.go
+++ /dev/null
@@ -1,86 +0,0 @@
-// +build ignore,OMIT
-
-// The backend command runs a Google server that returns fake results.
-package main
-
-import (
-	"flag"
-	"fmt"
-	"log"
-	"math/rand"
-	"net"
-	"net/http"
-	_ "net/http/pprof"
-	"time"
-
-	"golang.org/x/net/context"
-	"golang.org/x/net/trace"
-	pb "golang.org/x/talks/content/2015/gotham-grpc/search"
-	"google.golang.org/grpc"
-)
-
-var (
-	index = flag.Int("index", 0, "RPC port is 36061+index; debug port is 36661+index")
-)
-
-type server struct{}
-
-// randomDuration returns a random duration up to max, at intervals of max/10.
-func randomDuration(max time.Duration) time.Duration {
-	return time.Duration(1+int64(rand.Intn(10))) * (max / 10)
-}
-
-// Search sleeps for a random interval then returns a string
-// identifying the query and this backend.
-func (s *server) Search(ctx context.Context, req *pb.Request) (*pb.Result, error) { // HL
-	d := randomDuration(100 * time.Millisecond)
-	logSleep(ctx, d) // HL
-	select {
-	case <-time.After(d):
-		return &pb.Result{ // HL
-			Title: fmt.Sprintf("result for [%s] from backend %d", req.Query, *index), // HL
-		}, nil // HL
-	case <-ctx.Done():
-		return nil, ctx.Err()
-	}
-}
-
-func logSleep(ctx context.Context, d time.Duration) {
-	if tr, ok := trace.FromContext(ctx); ok { // HL
-		tr.LazyPrintf("sleeping for %s", d) // HL
-	}
-}
-
-// Watch returns a stream of results identifying the query and this
-// backend, sleeping a random interval between each send.
-func (s *server) Watch(req *pb.Request, stream pb.Google_WatchServer) error { // HL
-	ctx := stream.Context()
-	for i := 0; ; i++ {
-		d := randomDuration(1 * time.Second)
-		logSleep(ctx, d) // HL
-		select {
-		case <-time.After(d):
-			err := stream.Send(&pb.Result{ // HL
-				Title: fmt.Sprintf("result %d for [%s] from backend %d", i, req.Query, *index), // HL
-			}) // HL
-			if err != nil {
-				return err
-			}
-		case <-ctx.Done():
-			return ctx.Err()
-		}
-	}
-}
-
-func main() {
-	flag.Parse()
-	rand.Seed(time.Now().UnixNano())
-	go http.ListenAndServe(fmt.Sprintf(":%d", 36661+*index), nil)   // HTTP debugging
-	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 36061+*index)) // RPC port // HL
-	if err != nil {
-		log.Fatalf("failed to listen: %v", err)
-	}
-	g := grpc.NewServer()                   // HL
-	pb.RegisterGoogleServer(g, new(server)) // HL
-	g.Serve(lis)                            // HL
-}
diff --git a/content/2015/gotham-grpc/client.svg b/content/2015/gotham-grpc/client.svg
deleted file mode 100644
index 94c1899..0000000
--- a/content/2015/gotham-grpc/client.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 705.1417322834645 253.71391076115486" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l705.1417 0l0 253.71391l-705.1417 0l0 -253.71391z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l705.1417 0l0 253.71391l-705.1417 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="8.0" stroke-linejoin="round" stroke-linecap="butt" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m42.90615 116.93526l-2.5625 0.46875q-0.140625 -0.78125 -0.59375 -1.171875q-0.453125 -0.390625 -1.1875 -0.390625q-0.984375 0 -1.5625 0.671875q-0.578125 0.671875 -0.578125 2.25q0 1.765625 0.578125 2.484375q0.59375 0.71875 1.59375 0.71875q0.75 0 1.21875 -0.421875q0.46875 -0.421875 0.671875 -1.453125l2.546875 0.4375q-0.390625 1.765625 -1.53125 2.671875q-1.125 0.890625 -3.03125 0.890625q-2.15625 0 -3.453125 -1.359375q-1.28125 -1.359375 -1.28125 -3.78125q0 -2.4375 1.296875 -3.796875q1.296875 -1.359375 3.484375 -1.359375q1.796875 0 2.859375 0.78125q1.0625 0.765625 1.53125 2.359375zm1.1882172 1.875q0 -1.296875 0.640625 -2.515625q0.640625 -1.21875 1.8125 -1.859375q1.171875 -0.640625 2.609375 -0.640625q2.25 0 3.671875 1.453125q1.421875 1.453125 1.421875 3.671875q0 2.234375 -1.4375 3.703125q-1.4375 1.46875 -3.625 1.46875q-1.359375 0 -2.59375 -0.609375q-1.21875 -0.609375 -1.859375 -1.796875q-0.640625 -1.1875 -0.640625 -2.875zm2.671875 0.140625q0 1.46875 0.6875 2.25q0.703125 0.765625 1.71875 0.765625q1.015625 0 1.703125 -0.765625q0.703125 -0.78125 0.703125 -2.265625q0 -1.453125 -0.703125 -2.234375q-0.6875 -0.78125 -1.703125 -0.78125q-1.015625 0 -1.71875 0.78125q-0.6875 0.78125 -0.6875 2.25zm9.130356 -4.9375l2.40625 0l0 1.359375q1.28125 -1.578125 3.0625 -1.578125q0.953125 0 1.640625 0.390625q0.703125 0.390625 1.140625 1.1875q0.65625 -0.796875 1.40625 -1.1875q0.75 -0.390625 1.609375 -0.390625q1.078125 0 1.828125 0.453125q0.75 0.4375 1.125 1.28125q0.265625 0.640625 0.265625 2.046875l0 6.296875l-2.609375 0l0 -5.625q0 -1.46875 -0.265625 -1.90625q-0.359375 -0.546875 -1.109375 -0.546875q-0.546875 0 -1.03125 0.34375q-0.484375 0.328125 -0.703125 0.96875q-0.203125 0.640625 -0.203125 2.03125l0 4.734375l-2.609375 0l0 -5.40625q0 -1.4375 -0.140625 -1.84375q-0.140625 -0.421875 -0.4375 -0.625q-0.28125 -0.203125 -0.78125 -0.203125q-0.609375 0 -1.09375 0.328125q-0.484375 0.3125 -0.6875 0.9375q-0.203125 0.609375 -0.203125 2.03125l0 4.78125l-2.609375 0l0 -9.859375zm16.588394 0l2.40625 0l0 1.359375q1.28125 -1.578125 3.0625 -1.578125q0.953125 0 1.640625 0.390625q0.703125 0.390625 1.140625 1.1875q0.65625 -0.796875 1.40625 -1.1875q0.75 -0.390625 1.609375 -0.390625q1.078125 0 1.828125 0.453125q0.75 0.4375 1.125 1.28125q0.265625 0.640625 0.265625 2.046875l0 6.296875l-2.609375 0l0 -5.625q0 -1.46875 -0.265625 -1.90625q-0.359375 -0.546875 -1.109375 -0.546875q-0.546875 0 -1.03125 0.34375q-0.484375 0.328125 -0.703125 0.96875q-0.203125 0.640625 -0.203125 2.03125l0 4.734375l-2.609375 0l0 -5.40625q0 -1.4375 -0.140625 -1.84375q-0.140625 -0.421875 -0.4375 -0.625q-0.28125 -0.203125 -0.78125 -0.203125q-0.609375 0 -1.09375 0.328125q-0.484375 0.3125 -0.6875 0.9375q-0.203125 0.609375 -0.203125 2.03125l0 4.78125l-2.609375 0l0 -9.859375zm18.72902 3.015625l-2.359375 -0.4375q0.390625 -1.421875 1.359375 -2.109375q0.984375 -0.6875 2.90625 -0.6875q1.734375 0 2.59375 0.421875q0.859375 0.40625 1.203125 1.046875q0.34375 0.625 0.34375 2.328125l-0.03125 3.046875q0 1.296875 0.125 1.921875q0.125 0.609375 0.46875 1.3125l-2.578125 0q-0.09375 -0.265625 -0.25 -0.765625q-0.0625 -0.234375 -0.09375 -0.3125q-0.65625 0.65625 -1.421875 0.984375q-0.765625 0.3125 -1.625 0.3125q-1.515625 0 -2.40625 -0.8125q-0.875 -0.828125 -0.875 -2.09375q0 -0.84375 0.390625 -1.484375q0.40625 -0.65625 1.125 -1.0q0.71875 -0.359375 2.078125 -0.625q1.828125 -0.328125 2.53125 -0.625l0 -0.265625q0 -0.75 -0.375 -1.0625q-0.359375 -0.328125 -1.390625 -0.328125q-0.703125 0 -1.09375 0.28125q-0.390625 0.265625 -0.625 0.953125zm3.484375 2.109375q-0.5 0.171875 -1.59375 0.40625q-1.078125 0.234375 -1.40625 0.453125q-0.515625 0.359375 -0.515625 0.921875q0 0.546875 0.40625 0.953125q0.40625 0.390625 1.046875 0.390625q0.703125 0 1.34375 -0.46875q0.46875 -0.359375 0.625 -0.859375q0.09375 -0.34375 0.09375 -1.28125l0 -0.515625zm13.906967 4.734375l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm11.474106 0l-2.421875 0l0 -1.453125q-0.609375 0.84375 -1.4375 1.265625q-0.8125 0.40625 -1.640625 0.40625q-1.703125 0 -2.921875 -1.359375q-1.203125 -1.375 -1.203125 -3.828125q0 -2.5 1.171875 -3.796875q1.1875 -1.3125 2.984375 -1.3125q1.65625 0 2.859375 1.375l0 -4.890625l2.609375 0l0 13.59375zm-6.96875 -5.140625q0 1.578125 0.4375 2.28125q0.640625 1.015625 1.765625 1.015625q0.90625 0 1.53125 -0.765625q0.625 -0.765625 0.625 -2.28125q0 -1.703125 -0.609375 -2.4375q-0.609375 -0.75 -1.5625 -0.75q-0.9375 0 -1.5625 0.734375q-0.625 0.734375 -0.625 2.203125zm14.50116 5.140625l0 -13.59375l2.6093826 0l0 13.59375l-2.6093826 0zm5.1833115 -11.1875l0 -2.40625l2.609375 0l0 2.40625l-2.609375 0zm0 11.1875l0 -9.859375l2.609375 0l0 9.859375l-2.609375 0zm14.152054 0l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm8.130356 -3.140625l2.609375 0.4375q-0.5 1.4375 -1.59375 2.1875q-1.078125 0.734375 -2.703125 0.734375q-2.5625 0 -3.796875 -1.671875q-0.96875 -1.34375 -0.96875 -3.40625q0 -2.4375 1.265625 -3.828125q1.28125 -1.390625 3.25 -1.390625q2.1875 0 3.453125 1.453125q1.28125 1.453125 1.234375 4.453125l-6.53125 0q0.015625 1.15625 0.625 1.8125q0.609375 0.640625 1.5 0.640625q0.609375 0 1.03125 -0.328125q0.421875 -0.34375 0.625 -1.09375zm0.15625 -2.625q-0.03125 -1.140625 -0.59375 -1.71875q-0.546875 -0.59375 -1.34375 -0.59375q-0.859375 0 -1.40625 0.625q-0.5625 0.609375 -0.546875 1.6875l3.890625 0z" fill-rule="nonzero"></path><path fill="#000000" d="m81.26169 138.93526l-2.5625 0.46875q-0.140625 -0.78125 -0.59375 -1.171875q-0.453125 -0.390625 -1.1875 -0.390625q-0.984375 0 -1.5625 0.671875q-0.578125 0.671875 -0.578125 2.25q0 1.765625 0.578125 2.484375q0.59375 0.71875 1.59375 0.71875q0.75 0 1.21875 -0.421875q0.46875 -0.421875 0.671875 -1.453125l2.546875 0.4375q-0.390625 1.765625 -1.53125 2.671875q-1.125 0.890625 -3.03125 0.890625q-2.15625 0 -3.453125 -1.359375q-1.28125 -1.359375 -1.28125 -3.78125q0 -2.4375 1.296875 -3.796875q1.296875 -1.359375 3.484375 -1.359375q1.796875 0 2.859375 0.78125q1.0625 0.765625 1.53125 2.359375zm1.7819672 6.9375l0 -13.59375l2.609375 0l0 13.59375l-2.609375 0zm5.183304 -11.1875l0 -2.40625l2.609375 0l0 2.40625l-2.609375 0zm0 11.1875l0 -9.859375l2.609375 0l0 9.859375l-2.609375 0zm10.886429 -3.140625l2.609375 0.4375q-0.5 1.4375 -1.59375 2.1875q-1.078125 0.734375 -2.703125 0.734375q-2.5625 0 -3.796875 -1.671875q-0.96875 -1.34375 -0.96875 -3.40625q0 -2.4375 1.265625 -3.828125q1.28125 -1.390625 3.25 -1.390625q2.1875 0 3.453125 1.453125q1.28125 1.453125 1.234375 4.453125l-6.53125 0q0.015625 1.15625 0.625 1.8125q0.609375 0.640625 1.5 0.640625q0.609375 0 1.03125 -0.328125q0.421875 -0.34375 0.625 -1.09375zm0.15625 -2.625q-0.03125 -1.140625 -0.59375 -1.71875q-0.546875 -0.59375 -1.34375 -0.59375q-0.859375 0 -1.40625 0.625q-0.5625 0.609375 -0.546875 1.6875l3.890625 0zm13.485092 5.765625l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm6.942856 -9.859375l0 2.078125l-1.78125 0l0 3.984375q0 1.203125 0.046875 1.40625q0.0625 0.1875 0.234375 0.328125q0.1875 0.125 0.453125 0.125q0.359375 0 1.046875 -0.25l0.21875 2.015625q-0.90625 0.390625 -2.0625 0.390625q-0.703125 0 -1.265625 -0.234375q-0.5625 -0.234375 -0.828125 -0.609375q-0.265625 -0.375 -0.375 -1.015625q-0.078125 -0.453125 -0.078125 -1.84375l0 -4.296875l-1.203125 0l0 -2.078125l1.203125 0l0 -1.953125l2.609375 -1.515625l0 3.46875l1.78125 0z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m307.77377 134.87276l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7614136 0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281982 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277069 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110077 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 64.32157l-1.546875 0l0 -13.593746l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.3749962 -3.0 1.3749962q-1.75 0 -2.734375 -1.4531212l0 1.2343712zm-0.015625 -4.999996q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.1249962q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.7812462q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.1718712l-1.75 0q-0.265625 -0.5156212 -0.328125 -1.2187462zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.9531212 -2.734375 0.9531212q-2.015625 0 -3.25 -1.3124962q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.6093712l0 -13.593746l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203121l-2.0625 0l-3.25 -5.031246l-1.171875 1.125l0 3.9062462l-1.671875 0zm16.0625 -3.1718712l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.8281212 -2.8125 0.8281212q-2.15625 0 -3.421875 -1.3281212q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.874996l0 -9.859371l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.062496l-1.671875 0l0 -5.999996q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.374996l-1.671875 0zm16.766357 0l0 -1.2499962q-0.9375 1.4687462 -2.75 1.4687462q-1.171875 0 -2.171875 -0.6406212q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.593746l-1.546875 0zm-5.28125 -4.921871q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.156246l0.8125 -3.9531212l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.9531212l-1.390625 0l0.796875 -3.9531212l-2.90625 0l-0.8125 3.9531212l-1.390625 0zm2.484375 -5.343746l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm7.7194824 -1.59375q0 -2.421875 0.5 -3.890625q0.5 -1.46875 1.46875 -2.265625q0.984375 -0.796875 2.46875 -0.796875q1.09375 0 1.921875 0.4375q0.828125 0.4375 1.359375 1.28125q0.546875 0.828125 0.84375 2.015625q0.3125 1.1875 0.3125 3.21875q0 2.390625 -0.5 3.859375q-0.484375 1.46875 -1.46875 2.28125q-0.96875 0.7968712 -2.46875 0.7968712q-1.96875 0 -3.078125 -1.4062462q-1.359375 -1.703125 -1.359375 -5.53125zm1.71875 0q0 3.34375 0.78125 4.453125q0.796875 1.109375 1.9375 1.109375q1.15625 0 1.9375 -1.109375q0.78125 -1.125 0.78125 -4.453125q0 -3.359375 -0.78125 -4.46875q-0.78125 -1.109375 -1.953125 -1.109375q-1.15625 0 -1.828125 0.984375q-0.875 1.234375 -0.875 4.59375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 205.42393l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm14.016357 5.109375l-1.671875 0l0 -10.640625q-0.59375 0.578125 -1.578125 1.15625q-0.984375 0.5625 -1.765625 0.859375l0 -1.625q1.40625 -0.65625 2.453125 -1.59375q1.046875 -0.9375 1.484375 -1.8125l1.078125 0l0 13.65625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 -70.551186" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l92.341156 -67.02664" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m520.713 62.262825l2.7023315 -4.002495l-4.6428833 1.3290672z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 70.55118" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l92.341156 67.02663" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m518.77246 196.31612l4.6428833 1.329071l-2.7023315 -4.0025024z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m182.72704 127.95276l70.55118 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m182.72704 127.95276l52.551178 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m235.27821 132.90796l13.614288 -4.9552l-13.614288 -4.9552z" fill-rule="evenodd"></path></g></svg>
-
diff --git a/content/2015/gotham-grpc/client/client.go b/content/2015/gotham-grpc/client/client.go
deleted file mode 100644
index 2dbb896..0000000
--- a/content/2015/gotham-grpc/client/client.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// +build ignore,OMIT
-
-// The client command issues RPCs to a Google server and prints the
-// results.
-//
-// In "search" mode, client calls Search on the server and prints the
-// results.
-//
-// In "watch" mode, client starts a Watch on the server and prints the
-// result stream.
-package main
-
-import (
-	"flag"
-	"fmt"
-	"io"
-	"log"
-	"time"
-
-	"golang.org/x/net/context"
-	pb "golang.org/x/talks/content/2015/gotham-grpc/search"
-	"google.golang.org/grpc"
-)
-
-var (
-	server = flag.String("server", "localhost:36060", "server address")
-	mode   = flag.String("mode", "search", `one of "search" or "watch"`)
-	query  = flag.String("query", "test", "query string")
-)
-
-func main() {
-	flag.Parse()
-
-	// Connect to the server.
-	conn, err := grpc.Dial(*server, grpc.WithInsecure()) // HL
-	if err != nil {
-		log.Fatalf("fail to dial: %v", err)
-	}
-	defer conn.Close()
-	client := pb.NewGoogleClient(conn) // HL
-
-	// Run the RPC.
-	switch *mode {
-	case "search":
-		search(client, *query) // HL
-	case "watch":
-		watch(client, *query)
-	default:
-		log.Fatalf("unknown mode: %q", *mode)
-	}
-}
-
-// search issues a search for query and prints the result.
-func search(client pb.GoogleClient, query string) {
-	ctx, cancel := context.WithTimeout(context.Background(), 80*time.Millisecond) // HL
-	defer cancel()
-	req := &pb.Request{Query: query}    // HL
-	res, err := client.Search(ctx, req) // HL
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(res) // HL
-}
-
-// watch runs a Watch RPC and prints the result stream.
-func watch(client pb.GoogleClient, query string) {
-	ctx, cancel := context.WithCancel(context.Background())
-	defer cancel()
-	req := &pb.Request{Query: query}      // HL
-	stream, err := client.Watch(ctx, req) // HL
-	if err != nil {
-		log.Fatal(err)
-	}
-	for {
-		res, err := stream.Recv() // HL
-		if err == io.EOF {        // HL
-			fmt.Println("and now your watch is ended")
-			return
-		}
-		if err != nil {
-			log.Fatal(err)
-		}
-		fmt.Println(res) // HL
-	}
-}
diff --git a/content/2015/gotham-grpc/frontend.svg b/content/2015/gotham-grpc/frontend.svg
deleted file mode 100644
index efed5bc..0000000
--- a/content/2015/gotham-grpc/frontend.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 705.1417322834645 253.71391076115486" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l705.1417 0l0 253.71391l-705.1417 0l0 -253.71391z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l705.1417 0l0 253.71391l-705.1417 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m45.290924 120.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281967 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm21.978302 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.418396 4.921875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129196 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm17.125732 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" d="m81.58316 142.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879196 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="8.0" stroke-linejoin="round" stroke-linecap="butt" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m302.74258 125.01338l1.453125 0l0 -0.734375q0 -1.25 0.265625 -1.859375q0.265625 -0.609375 0.96875 -0.984375q0.71875 -0.390625 1.796875 -0.390625q1.109375 0 2.1875 0.328125l-0.359375 1.8125q-0.625 -0.140625 -1.203125 -0.140625q-0.5625 0 -0.8125 0.265625q-0.234375 0.265625 -0.234375 1.015625l0 0.6875l1.9375 0l0 2.0625l-1.9375 0l0 7.796875l-2.609375 0l0 -7.796875l-1.453125 0l0 -2.0625zm9.853302 9.859375l-2.609375 0l0 -9.859375l2.421875 0l0 1.40625q0.625 -0.984375 1.109375 -1.296875q0.5 -0.328125 1.140625 -0.328125q0.890625 0 1.71875 0.5l-0.8125 2.265625q-0.65625 -0.421875 -1.21875 -0.421875q-0.546875 0 -0.9375 0.296875q-0.375 0.296875 -0.59375 1.09375q-0.21875 0.78125 -0.21875 3.296875l0 3.046875zm4.166504 -5.0625q0 -1.296875 0.640625 -2.515625q0.640625 -1.21875 1.8125 -1.859375q1.171875 -0.640625 2.609375 -0.640625q2.25 0 3.671875 1.453125q1.421875 1.453125 1.421875 3.671875q0 2.234375 -1.4375 3.703125q-1.4375 1.46875 -3.625 1.46875q-1.359375 0 -2.59375 -0.609375q-1.21875 -0.609375 -1.859375 -1.796875q-0.640625 -1.1875 -0.640625 -2.875zm2.671875 0.140625q0 1.46875 0.6875 2.25q0.703125 0.765625 1.71875 0.765625q1.015625 0 1.703125 -0.765625q0.703125 -0.78125 0.703125 -2.265625q0 -1.453125 -0.703125 -2.234375q-0.6875 -0.78125 -1.703125 -0.78125q-1.015625 0 -1.71875 0.78125q-0.6875 0.78125 -0.6875 2.25zm18.286621 4.921875l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm6.9428406 -9.859375l0 2.078125l-1.78125 0l0 3.984375q0 1.203125 0.046875 1.40625q0.0625 0.1875 0.234375 0.328125q0.1875 0.125 0.453125 0.125q0.359375 0 1.046875 -0.25l0.21875 2.015625q-0.90625 0.390625 -2.0625 0.390625q-0.703125 0 -1.265625 -0.234375q-0.5625 -0.234375 -0.828125 -0.609375q-0.265625 -0.375 -0.375 -1.015625q-0.078125 -0.453125 -0.078125 -1.84375l0 -4.296875l-1.203125 0l0 -2.078125l1.203125 0l0 -1.953125l2.609375 -1.515625l0 3.46875l1.78125 0zm7.400177 6.71875l2.609375 0.4375q-0.5 1.4375 -1.59375 2.1875q-1.078125 0.734375 -2.703125 0.734375q-2.5625 0 -3.796875 -1.671875q-0.96875 -1.34375 -0.96875 -3.40625q0 -2.4375 1.265625 -3.828125q1.28125 -1.390625 3.25 -1.390625q2.1875 0 3.453125 1.453125q1.28125 1.453125 1.234375 4.453125l-6.53125 0q0.015625 1.15625 0.625 1.8125q0.609375 0.640625 1.5 0.640625q0.609375 0 1.03125 -0.328125q0.421875 -0.34375 0.625 -1.09375zm0.15625 -2.625q-0.03125 -1.140625 -0.59375 -1.71875q-0.546875 -0.59375 -1.34375 -0.59375q-0.859375 0 -1.40625 0.625q-0.5625 0.609375 -0.546875 1.6875l3.890625 0zm13.485107 5.765625l-2.609375 0l0 -5.03125q0 -1.59375 -0.171875 -2.0625q-0.15625 -0.46875 -0.53125 -0.71875q-0.375 -0.265625 -0.90625 -0.265625q-0.6875 0 -1.234375 0.375q-0.53125 0.359375 -0.734375 0.984375q-0.1875 0.609375 -0.1875 2.25l0 4.46875l-2.609375 0l0 -9.859375l2.421875 0l0 1.453125q1.296875 -1.671875 3.25 -1.671875q0.859375 0 1.578125 0.3125q0.71875 0.3125 1.078125 0.796875q0.359375 0.484375 0.5 1.09375q0.15625 0.609375 0.15625 1.75l0 6.125zm11.474091 0l-2.421875 0l0 -1.453125q-0.609375 0.84375 -1.4375 1.265625q-0.8125 0.40625 -1.640625 0.40625q-1.703125 0 -2.921875 -1.359375q-1.203125 -1.375 -1.203125 -3.828125q0 -2.5 1.171875 -3.796875q1.1875 -1.3125 2.984375 -1.3125q1.65625 0 2.859375 1.375l0 -4.890625l2.609375 0l0 13.59375zm-6.96875 -5.140625q0 1.578125 0.4375 2.28125q0.640625 1.015625 1.765625 1.015625q0.90625 0 1.53125 -0.765625q0.625 -0.765625 0.625 -2.28125q0 -1.703125 -0.609375 -2.4375q-0.609375 -0.75 -1.5625 -0.75q-0.9375 0 -1.5625 0.734375q-0.625 0.734375 -0.625 2.203125z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 64.32157l-1.546875 0l0 -13.593746l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.3749962 -3.0 1.3749962q-1.75 0 -2.734375 -1.4531212l0 1.2343712zm-0.015625 -4.999996q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.1249962q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.7812462q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.1718712l-1.75 0q-0.265625 -0.5156212 -0.328125 -1.2187462zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.9531212 -2.734375 0.9531212q-2.015625 0 -3.25 -1.3124962q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.6093712l0 -13.593746l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203121l-2.0625 0l-3.25 -5.031246l-1.171875 1.125l0 3.9062462l-1.671875 0zm16.0625 -3.1718712l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.8281212 -2.8125 0.8281212q-2.15625 0 -3.421875 -1.3281212q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.874996l0 -9.859371l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.062496l-1.671875 0l0 -5.999996q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.374996l-1.671875 0zm16.766357 0l0 -1.2499962q-0.9375 1.4687462 -2.75 1.4687462q-1.171875 0 -2.171875 -0.6406212q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.593746l-1.546875 0zm-5.28125 -4.921871q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.156246l0.8125 -3.9531212l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.9531212l-1.390625 0l0.796875 -3.9531212l-2.90625 0l-0.8125 3.9531212l-1.390625 0zm2.484375 -5.343746l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm7.7194824 -1.59375q0 -2.421875 0.5 -3.890625q0.5 -1.46875 1.46875 -2.265625q0.984375 -0.796875 2.46875 -0.796875q1.09375 0 1.921875 0.4375q0.828125 0.4375 1.359375 1.28125q0.546875 0.828125 0.84375 2.015625q0.3125 1.1875 0.3125 3.21875q0 2.390625 -0.5 3.859375q-0.484375 1.46875 -1.46875 2.28125q-0.96875 0.7968712 -2.46875 0.7968712q-1.96875 0 -3.078125 -1.4062462q-1.359375 -1.703125 -1.359375 -5.53125zm1.71875 0q0 3.34375 0.78125 4.453125q0.796875 1.109375 1.9375 1.109375q1.15625 0 1.9375 -1.109375q0.78125 -1.125 0.78125 -4.453125q0 -3.359375 -0.78125 -4.46875q-0.78125 -1.109375 -1.953125 -1.109375q-1.15625 0 -1.828125 0.984375q-0.875 1.234375 -0.875 4.59375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 205.42393l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm14.016357 5.109375l-1.671875 0l0 -10.640625q-0.59375 0.578125 -1.578125 1.15625q-0.984375 0.5625 -1.765625 0.859375l0 -1.625q1.40625 -0.65625 2.453125 -1.59375q1.046875 -0.9375 1.484375 -1.8125l1.078125 0l0 13.65625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 -70.551186" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l82.62979 -59.97757" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m512.9422 71.98533l8.106934 -12.007488l-13.928558 3.9872055z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 70.55118" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l82.62979 59.97757" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m507.12057 191.94046l13.928558 3.9872131l-8.106934 -12.007492z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m182.72704 127.95276l70.55118 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="3.0" stroke-linejoin="round" stroke-linecap="butt" d="m182.72704 127.95276l52.551178 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="3.0" stroke-linecap="butt" d="m235.27821 132.90796l13.614288 -4.9552l-13.614288 -4.9552z" fill-rule="evenodd"></path></g></svg>
-
diff --git a/content/2015/gotham-grpc/frontend/frontend.go b/content/2015/gotham-grpc/frontend/frontend.go
deleted file mode 100644
index 35b5480..0000000
--- a/content/2015/gotham-grpc/frontend/frontend.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// +build ignore,OMIT
-
-// The frontend command runs a Google server that combines results
-// from multiple backends.
-package main
-
-import (
-	"flag"
-	"log"
-	"net"
-	"net/http"
-	_ "net/http/pprof"
-	"strings"
-	"sync"
-
-	"golang.org/x/net/context"
-	pb "golang.org/x/talks/content/2015/gotham-grpc/search"
-	"google.golang.org/grpc"
-)
-
-var (
-	backends = flag.String("backends", "localhost:36061,localhost:36062", "comma-separated backend server addresses")
-)
-
-type server struct {
-	backends []pb.GoogleClient
-}
-
-// Search issues Search RPCs in parallel to the backends and returns
-// the first result.
-func (s *server) Search(ctx context.Context, req *pb.Request) (*pb.Result, error) { // HL
-	c := make(chan result, len(s.backends))
-	for _, b := range s.backends {
-		go func(backend pb.GoogleClient) { // HL
-			res, err := backend.Search(ctx, req) // HL
-			c <- result{res, err}                // HL
-		}(b) // HL
-	}
-	first := <-c                // HL
-	return first.res, first.err // HL
-}
-
-type result struct {
-	res *pb.Result
-	err error
-}
-
-// Watch runs Watch RPCs in parallel on the backends and returns a
-// merged stream of results.
-func (s *server) Watch(req *pb.Request, stream pb.Google_WatchServer) error { // HL
-	ctx := stream.Context()
-	c := make(chan result) // HL
-	var wg sync.WaitGroup
-	for _, b := range s.backends {
-		wg.Add(1)
-		go func(backend pb.GoogleClient) { // HL
-			defer wg.Done()                    // HL
-			watchBackend(ctx, backend, req, c) // HL
-		}(b) // HL
-	}
-	go func() {
-		wg.Wait()
-		close(c) // HL
-	}()
-	for res := range c { // HL
-		if res.err != nil {
-			return res.err
-		}
-		if err := stream.Send(res.res); err != nil { // HL
-			return err // HL
-		} // HL
-	}
-	return nil
-}
-
-// watchBackend runs Watch on a single backend and sends results on c.
-// watchBackend returns when ctx.Done is closed or stream.Recv fails.
-func watchBackend(ctx context.Context, backend pb.GoogleClient, req *pb.Request, c chan<- result) {
-	stream, err := backend.Watch(ctx, req) // HL
-	if err != nil {
-		select {
-		case c <- result{err: err}: // HL
-		case <-ctx.Done():
-		}
-		return
-	}
-	for {
-		res, err := stream.Recv() // HL
-		select {
-		case c <- result{res, err}: // HL
-			if err != nil {
-				return
-			}
-		case <-ctx.Done():
-			return
-		}
-	}
-}
-
-func main() {
-	flag.Parse()
-	go http.ListenAndServe(":36660", nil)   // HTTP debugging
-	lis, err := net.Listen("tcp", ":36060") // RPC port
-	if err != nil {
-		log.Fatalf("failed to listen: %v", err)
-	}
-	s := new(server)
-	for _, addr := range strings.Split(*backends, ",") {
-		conn, err := grpc.Dial(addr, grpc.WithInsecure())
-		if err != nil {
-			log.Fatalf("fail to dial: %v", err)
-		}
-		client := pb.NewGoogleClient(conn)
-		s.backends = append(s.backends, client)
-	}
-	g := grpc.NewServer()
-	pb.RegisterGoogleServer(g, s)
-	g.Serve(lis)
-}
diff --git a/content/2015/gotham-grpc/search-only/README.md b/content/2015/gotham-grpc/search-only/README.md
deleted file mode 100644
index f884708..0000000
--- a/content/2015/gotham-grpc/search-only/README.md
+++ /dev/null
@@ -1 +0,0 @@
-protoc ./search-only.proto --go_out=plugins=grpc:.
diff --git a/content/2015/gotham-grpc/search-only/search-only.pb.go b/content/2015/gotham-grpc/search-only/search-only.pb.go
deleted file mode 100644
index 5112a2d..0000000
--- a/content/2015/gotham-grpc/search-only/search-only.pb.go
+++ /dev/null
@@ -1,112 +0,0 @@
-// Code generated by protoc-gen-go.
-// source: search-only.proto
-// DO NOT EDIT!
-
-// +build ignore,OMIT
-
-/*
-Package search_only is a generated protocol buffer package.
-
-It is generated from these files:
-	search-only.proto
-
-It has these top-level messages:
-	Request
-	Result
-*/
-package search_only
-
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-
-import (
-	context "golang.org/x/net/context"
-	grpc "google.golang.org/grpc"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-type Request struct {
-	Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"`
-}
-
-func (m *Request) Reset()         { *m = Request{} }
-func (m *Request) String() string { return proto.CompactTextString(m) }
-func (*Request) ProtoMessage()    {}
-
-type Result struct {
-	Title   string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"`
-	Url     string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"`
-	Snippet string `protobuf:"bytes,3,opt,name=snippet" json:"snippet,omitempty"`
-}
-
-func (m *Result) Reset()         { *m = Result{} }
-func (m *Result) String() string { return proto.CompactTextString(m) }
-func (*Result) ProtoMessage()    {}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// Client API for Google service
-
-type GoogleClient interface {
-	// Search returns a Google search result for the query.
-	Search(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Result, error)
-}
-
-type googleClient struct {
-	cc *grpc.ClientConn
-}
-
-func NewGoogleClient(cc *grpc.ClientConn) GoogleClient {
-	return &googleClient{cc}
-}
-
-func (c *googleClient) Search(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Result, error) {
-	out := new(Result)
-	err := grpc.Invoke(ctx, "/.Google/Search", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// Server API for Google service
-
-type GoogleServer interface {
-	// Search returns a Google search result for the query.
-	Search(context.Context, *Request) (*Result, error)
-}
-
-func RegisterGoogleServer(s *grpc.Server, srv GoogleServer) {
-	s.RegisterService(&_Google_serviceDesc, srv)
-}
-
-func _Google_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(Request)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	out, err := srv.(GoogleServer).Search(ctx, in)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-var _Google_serviceDesc = grpc.ServiceDesc{
-	ServiceName: ".Google",
-	HandlerType: (*GoogleServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "Search",
-			Handler:    _Google_Search_Handler,
-		},
-	},
-	Streams: []grpc.StreamDesc{},
-}
diff --git a/content/2015/gotham-grpc/search-only/search-only.proto b/content/2015/gotham-grpc/search-only/search-only.proto
deleted file mode 100644
index e406e02..0000000
--- a/content/2015/gotham-grpc/search-only/search-only.proto
+++ /dev/null
@@ -1,17 +0,0 @@
-syntax = "proto3";
-
-service Google { // HL
-  // Search returns a Google search result for the query.
-  rpc Search(Request) returns (Result) { // HL
-  }
-}
-
-message Request { // HL
-  string query = 1;
-}
-
-message Result { // HL
-  string title = 1;
-  string url = 2;
-  string snippet = 3;
-}
diff --git a/content/2015/gotham-grpc/search.svg b/content/2015/gotham-grpc/search.svg
deleted file mode 100644
index cba7a0a..0000000
--- a/content/2015/gotham-grpc/search.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 558.5931758530184 277.18110236220474" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l558.5932 0l0 277.1811l-558.5932 0l0 -277.1811z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l558.5932 0l0 277.1811l-558.5932 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m132.46194 30.981627l416.94485 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m132.46194 30.981627l416.94485 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m132.46194 101.177605l416.94485 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m132.46194 101.177605l416.94485 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m132.46194 171.37358l416.94485 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m132.46194 171.37358l416.94485 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m132.46194 241.56955l416.94485 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m132.46194 241.56955l416.94485 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m160.89764 30.887138l18.708649 69.79527" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m160.89764 30.887138l17.155197 63.99987" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m176.45743 95.31466l2.7703705 3.9557037l0.42045593 -4.8110046z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m208.89764 101.11024l19.086609 71.2756" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m208.89764 101.11024l17.534561 65.479805" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m224.8367 167.01729l2.769394 3.9563904l0.42164612 -4.810898z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m200.3622 101.11024l37.637802 140.44095" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m200.3622 101.11024l36.084625 134.64548" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m234.8514 236.18327l2.770172 3.955841l0.4206848 -4.8109894z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m229.0882 163.92287l147.08661 0l0 28.7874l-147.08661 0z" fill-rule="nonzero"></path><path fill="#b7b7b7" d="m242.5257 194.84286q-1.375 -1.75 -2.328125 -4.078125q-0.953125 -2.34375 -0.953125 -4.84375q0 -2.21875 0.703125 -4.234375q0.84375 -2.34375 2.578125 -4.671875l1.203125 0q-1.125 1.921875 -1.484375 2.75q-0.5625 1.28125 -0.890625 2.671875q-0.40625 1.734375 -0.40625 3.484375q0 4.46875 2.78125 8.921875l-1.203125 0zm3.009552 -4.0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078827 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm8.641327 0q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281982 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm27.114716 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016357 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078827 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.613586 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.000702 8.734375l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm10.5 0.203125l-1.1875 0q2.765625 -4.453125 2.765625 -8.921875q0 -1.734375 -0.390625 -3.453125q-0.328125 -1.390625 -0.890625 -2.671875q-0.359375 -0.84375 -1.484375 -2.78125l1.1875 0q1.75 2.328125 2.578125 4.671875q0.71875 2.015625 0.71875 4.234375q0 2.5 -0.96875 4.84375q-0.953125 2.328125 -2.328125 4.078125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m286.88782 234.91031l147.08661 0l0 28.787415l-147.08661 0z" fill-rule="nonzero"></path><path fill="#b7b7b7" d="m300.32532 265.83032q-1.375 -1.75 -2.328125 -4.078125q-0.953125 -2.34375 -0.953125 -4.84375q0 -2.2187653 0.703125 -4.2343903q0.84375 -2.34375 2.578125 -4.671875l1.203125 0q-1.125 1.921875 -1.484375 2.75q-0.5625 1.28125 -0.890625 2.671875q-0.40625 1.734375 -0.40625 3.4843903q0 4.46875 2.78125 8.921875l-1.203125 0zm3.009552 -4.0l0 -9.85939l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.9531403l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25001526 2.984375 -0.57814026q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.2343903q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078827 4.9375l0 -9.85939l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625153l-1.671875 0l0 -6.0000153q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.5781403l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.4687653 0.484375 -2.6718903q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.593765l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.0156403 -0.78125 -2.9531403q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.8593903zm8.641327 0q0 -2.7343903 1.53125 -4.0625153q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.6718903q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.8281403 -0.828125 -2.7656403q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.8281403zm9.281982 4.921875l0 -9.85939l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.7656403l-1.671875 0l0 -6.2031403q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.2187653l0 5.71875l-1.671875 0l0 -6.4062653q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625153l0 5.109375l-1.671875 0zm27.114716 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.4687653 0.484375 -2.6718903q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.593765l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.0156403 -0.78125 -2.9531403q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.8593903zm16.016357 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.4843903 1.265625 -3.8593903q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.7968903q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.7031403l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078827 5.8750153l0 -13.593765l1.671875 0l0 13.593765l-1.671875 0zm10.613586 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25001526 2.984375 -0.57814026q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.2343903q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.000702 8.734375l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875015l1.796875 0l2.046875 5.7187653q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.7500153l1.671875 0l-3.75 10.031265q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm10.5 0.203125l-1.1875 0q2.765625 -4.453125 2.765625 -8.921875q0 -1.7343903 -0.390625 -3.4531403q-0.328125 -1.390625 -0.890625 -2.671875q-0.359375 -0.84375 -1.484375 -2.78125l1.1875 0q1.75 2.328125 2.578125 4.671875q0.71875 2.015625 0.71875 4.2343903q0 2.5 -0.96875 4.84375q-0.953125 2.328125 -2.328125 4.078125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m377.59317 171.37534l18.614166 -69.417336" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m377.59317 171.37534l17.06018 -63.622063" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m396.24872 108.18107l-0.42001343 -4.811043l-2.7707214 3.9554443z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m452.40158 101.86614l18.551178 -69.25984" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m452.40158 101.86614l16.99881 -63.46414" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m470.99588 38.82935l-0.4213562 -4.8109245l-2.7696228 3.9562225z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m444.5013 100.637794l37.700775 140.6614" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m444.5013 100.637794l36.14746 134.86597" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m479.05334 235.93138l2.7702942 3.9557648l0.42056274 -4.8109894z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m172.84251 60.719162l71.27559 0l0 44.15748l-71.27559 0z" fill-rule="nonzero"></path><path fill="#000000" d="m189.37376 91.42041l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672592 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094467 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m225.96379 135.74689l91.68504 0l0 44.15747l-91.68504 0z" fill-rule="nonzero"></path><path fill="#000000" d="m242.49504 166.44814l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672577 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m410.2021 20.717848l64.09451 0l0 44.15748l-64.09451 0z" fill-rule="nonzero"></path><path fill="#000000" d="m420.43646 47.637844l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.978302 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 9.65625l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm8.828827 4.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.0979614 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m335.15015 91.09194l64.09451 0l0 44.15748l-64.09451 0z" fill-rule="nonzero"></path><path fill="#000000" d="m345.38452 118.01194l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.978302 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 9.65625l0 -13.640625l1.53125 0l0 1.28125q0.53125 -0.75 1.203125 -1.125q0.6875 -0.375 1.640625 -0.375q1.265625 0 2.234375 0.65625q0.96875 0.640625 1.453125 1.828125q0.5 1.1875 0.5 2.59375q0 1.515625 -0.546875 2.734375q-0.546875 1.203125 -1.578125 1.84375q-1.03125 0.640625 -2.171875 0.640625q-0.84375 0 -1.515625 -0.34375q-0.65625 -0.359375 -1.078125 -0.890625l0 4.796875l-1.671875 0zm1.515625 -8.65625q0 1.90625 0.765625 2.8125q0.78125 0.90625 1.875 0.90625q1.109375 0 1.890625 -0.9375q0.796875 -0.9375 0.796875 -2.921875q0 -1.875 -0.78125 -2.8125q-0.765625 -0.9375 -1.84375 -0.9375q-1.0625 0 -1.890625 1.0q-0.8125 1.0 -0.8125 2.890625zm8.828827 4.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.0979614 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m474.2021 199.74803l78.04724 0l0 44.157486l-78.04724 0z" fill-rule="nonzero"></path><path fill="#000000" d="m490.8896 223.05865l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.328125 2.390625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813232 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.640625 0.4375l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078796 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m162.98471 30.888165l305.6063 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m162.98471 30.888165l305.6063 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m180.41277 100.91659l269.7638 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m180.41277 100.91659l269.7638 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m230.67455 172.18373l145.22835 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m230.67455 172.18373l145.22835 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m240.7598 241.55495l238.99213 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m240.7598 241.55495l238.99213 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m236.88286 206.90053l91.68504 0l0 44.157486l-91.68504 0z" fill-rule="nonzero"></path><path fill="#000000" d="m253.41411 237.60178l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672577 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094482 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m11.028872 20.803246l0 0c0 -2.6498604 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055027 3.3926926 1.4053001c0.8998108 0.89979935 1.405304 2.1201878 1.405304 3.3926964l0 19.19141c0 2.6498604 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481361 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 20.803246l0 0c0 -2.6498604 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055027 3.3926926 1.4053001c0.8998108 0.89979935 1.405304 2.1201878 1.405304 3.3926964l0 19.19141c0 2.6498604 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481361 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path fill="#000000" d="m57.444057 33.70957l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.1916924 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879196 -3.171875l1.7187576 0.21875q-0.40625 1.5 -1.5156326 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.2500076 1.34375 1.2500076 3.796875q0 0.140625 -0.015625 0.4375l-7.3437576 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.1101 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m11.028872 91.724724l0 0c0 -2.6498642 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055008 3.3926926 1.4052963c0.8998108 0.89980316 1.405304 2.1201859 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.14814 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 91.724724l0 0c0 -2.6498642 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055008 3.3926926 1.4052963c0.8998108 0.89980316 1.405304 2.1201859 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.14814 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path fill="#000000" d="m38.960125 108.240425l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.761429 0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281967 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.1406212 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0624962 0 -1.8437462 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031963 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277061 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656326 -1.328125 -1.2656326 -3.734375q0 -2.484375 1.2656326 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m11.028872 161.56767l0 0c0 -2.6498566 2.1481361 -4.798004 4.7979965 -4.798004l111.41188 0c1.2725143 0 2.492897 0.5055084 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201935 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 161.56767l0 0c0 -2.6498566 2.1481361 -4.798004 4.7979965 -4.798004l111.41188 0c1.2725143 0 2.492897 0.5055084 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201935 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path fill="#000000" d="m26.094896 178.08337l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.5312519 0.65625 0.8281269 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.2500019 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281969 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516342 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.062496 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656212 -1.328125 -1.2656212 -3.734375q0 -2.484375 1.2656212 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm7.719467 -1.59375q0 -2.421875 0.5 -3.890625q0.5 -1.46875 1.46875 -2.265625q0.984375 -0.796875 2.46875 -0.796875q1.09375 0 1.921875 0.4375q0.828125 0.4375 1.359375 1.28125q0.546875 0.828125 0.84375 2.015625q0.3125 1.1875 0.3125 3.21875q0 2.390625 -0.5 3.859375q-0.484375 1.46875 -1.46875 2.28125q-0.96875 0.796875 -2.46875 0.796875q-1.96875 0 -3.078125 -1.40625q-1.359375 -1.703125 -1.359375 -5.53125zm1.71875 0q0 3.34375 0.78125 4.453125q0.796875 1.109375 1.9375 1.109375q1.15625 0 1.9375 -1.109375q0.78125 -1.125 0.78125 -4.453125q0 -3.359375 -0.78125 -4.46875q-0.78125 -1.109375 -1.953125 -1.109375q-1.15625 0 -1.828125 0.984375q-0.875 1.234375 -0.875 4.59375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m11.028872 231.94987l0 0c0 -2.6498566 2.1481361 -4.797989 4.7979965 -4.797989l111.41188 0c1.2725143 0 2.492897 0.50549316 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201782 1.405304 3.392685l0 19.191422c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 231.94987l0 0c0 -2.6498566 2.1481361 -4.797989 4.7979965 -4.797989l111.41188 0c1.2725143 0 2.492897 0.50549316 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201782 1.405304 3.392685l0 19.191422c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path fill="#000000" d="m26.094896 248.46558l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.5312519 0.65625 0.8281269 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.2500019 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281969 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516342 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.062496 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656212 -1.328125 -1.2656212 -3.734375q0 -2.484375 1.2656212 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm14.016342 5.109375l-1.671875 0l0 -10.640625q-0.59375 0.578125 -1.578125 1.15625q-0.984375 0.5625 -1.765625 0.859375l0 -1.625q1.40625 -0.65625 2.453125 -1.59375q1.046875 -0.9375 1.484375 -1.8125l1.078125 0l0 13.65625z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2015/gotham-grpc/search/README.md b/content/2015/gotham-grpc/search/README.md
deleted file mode 100644
index 7343436..0000000
--- a/content/2015/gotham-grpc/search/README.md
+++ /dev/null
@@ -1 +0,0 @@
-protoc ./search.proto --go_out=plugins=grpc:.
diff --git a/content/2015/gotham-grpc/search/search.pb.go b/content/2015/gotham-grpc/search/search.pb.go
deleted file mode 100644
index f123fa0..0000000
--- a/content/2015/gotham-grpc/search/search.pb.go
+++ /dev/null
@@ -1,175 +0,0 @@
-// Code generated by protoc-gen-go.
-// source: search.proto
-// DO NOT EDIT!
-
-// +build ignore,OMIT
-
-/*
-Package search is a generated protocol buffer package.
-
-It is generated from these files:
-	search.proto
-
-It has these top-level messages:
-	Request
-	Result
-*/
-package search
-
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-
-import (
-	context "golang.org/x/net/context"
-	grpc "google.golang.org/grpc"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-type Request struct {
-	Query string `protobuf:"bytes,1,opt,name=query" json:"query,omitempty"`
-}
-
-func (m *Request) Reset()         { *m = Request{} }
-func (m *Request) String() string { return proto.CompactTextString(m) }
-func (*Request) ProtoMessage()    {}
-
-type Result struct {
-	Title   string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"`
-	Url     string `protobuf:"bytes,2,opt,name=url" json:"url,omitempty"`
-	Snippet string `protobuf:"bytes,3,opt,name=snippet" json:"snippet,omitempty"`
-}
-
-func (m *Result) Reset()         { *m = Result{} }
-func (m *Result) String() string { return proto.CompactTextString(m) }
-func (*Result) ProtoMessage()    {}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// Client API for Google service
-
-type GoogleClient interface {
-	// Search returns a Google search result for the query.
-	Search(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Result, error)
-	// Watch returns a stream of Google search results for the query.
-	Watch(ctx context.Context, in *Request, opts ...grpc.CallOption) (Google_WatchClient, error)
-}
-
-type googleClient struct {
-	cc *grpc.ClientConn
-}
-
-func NewGoogleClient(cc *grpc.ClientConn) GoogleClient {
-	return &googleClient{cc}
-}
-
-func (c *googleClient) Search(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Result, error) {
-	out := new(Result)
-	err := grpc.Invoke(ctx, "/.Google/Search", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-func (c *googleClient) Watch(ctx context.Context, in *Request, opts ...grpc.CallOption) (Google_WatchClient, error) {
-	stream, err := grpc.NewClientStream(ctx, &_Google_serviceDesc.Streams[0], c.cc, "/.Google/Watch", opts...)
-	if err != nil {
-		return nil, err
-	}
-	x := &googleWatchClient{stream}
-	if err := x.ClientStream.SendMsg(in); err != nil {
-		return nil, err
-	}
-	if err := x.ClientStream.CloseSend(); err != nil {
-		return nil, err
-	}
-	return x, nil
-}
-
-type Google_WatchClient interface {
-	Recv() (*Result, error)
-	grpc.ClientStream
-}
-
-type googleWatchClient struct {
-	grpc.ClientStream
-}
-
-func (x *googleWatchClient) Recv() (*Result, error) {
-	m := new(Result)
-	if err := x.ClientStream.RecvMsg(m); err != nil {
-		return nil, err
-	}
-	return m, nil
-}
-
-// Server API for Google service
-
-type GoogleServer interface {
-	// Search returns a Google search result for the query.
-	Search(context.Context, *Request) (*Result, error)
-	// Watch returns a stream of Google search results for the query.
-	Watch(*Request, Google_WatchServer) error
-}
-
-func RegisterGoogleServer(s *grpc.Server, srv GoogleServer) {
-	s.RegisterService(&_Google_serviceDesc, srv)
-}
-
-func _Google_Search_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error) (interface{}, error) {
-	in := new(Request)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	out, err := srv.(GoogleServer).Search(ctx, in)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-func _Google_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
-	m := new(Request)
-	if err := stream.RecvMsg(m); err != nil {
-		return err
-	}
-	return srv.(GoogleServer).Watch(m, &googleWatchServer{stream})
-}
-
-type Google_WatchServer interface {
-	Send(*Result) error
-	grpc.ServerStream
-}
-
-type googleWatchServer struct {
-	grpc.ServerStream
-}
-
-func (x *googleWatchServer) Send(m *Result) error {
-	return x.ServerStream.SendMsg(m)
-}
-
-var _Google_serviceDesc = grpc.ServiceDesc{
-	ServiceName: ".Google",
-	HandlerType: (*GoogleServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "Search",
-			Handler:    _Google_Search_Handler,
-		},
-	},
-	Streams: []grpc.StreamDesc{
-		{
-			StreamName:    "Watch",
-			Handler:       _Google_Watch_Handler,
-			ServerStreams: true,
-		},
-	},
-}
diff --git a/content/2015/gotham-grpc/search/search.proto b/content/2015/gotham-grpc/search/search.proto
deleted file mode 100644
index f4c48e1..0000000
--- a/content/2015/gotham-grpc/search/search.proto
+++ /dev/null
@@ -1,20 +0,0 @@
-syntax = "proto3";
-
-service Google {
-  // Search returns a Google search result for the query.
-  rpc Search(Request) returns (Result) {
-  }
-  // Watch returns a stream of Google search results for the query.
-  rpc Watch(Request) returns (stream Result) { // HL
-  }
-}
-
-message Request {
-  string query = 1;
-}
-
-message Result {
-  string title = 1;
-  string url = 2;
-  string snippet = 3;
-}
diff --git a/content/2015/gotham-grpc/system.svg b/content/2015/gotham-grpc/system.svg
deleted file mode 100644
index cdc432e..0000000
--- a/content/2015/gotham-grpc/system.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 705.1417322834645 253.71391076115486" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l705.1417 0l0 253.71391l-705.1417 0l0 -253.71391z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l705.1417 0l0 253.71391l-705.1417 0z" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m8.616797 93.76937l0 0c0 -9.439766 7.652442 -17.092209 17.092205 -17.092209l139.92583 0c4.533142 0 8.8806 1.8007812 12.086014 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092209 17.092209l-139.92583 0c-9.439764 0 -17.092205 -7.6524353 -17.092205 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m45.290924 120.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.265625 -1.3125q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281967 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm15.540802 0l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm21.978302 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.418396 4.921875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm4.129196 0l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm17.125732 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875z" fill-rule="nonzero"></path><path fill="#000000" d="m81.58316 142.26338l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm4.191696 -11.6875l0 -1.90625l1.671875 0l0 1.90625l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879196 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m253.29134 93.76937l0 0c0 -9.439766 7.6524506 -17.092209 17.092209 -17.092209l139.92581 0c4.533142 0 8.880615 1.8007812 12.086029 5.006195c3.2054138 3.2054062 5.006195 7.5528793 5.006195 12.086014l0 68.36677c0 9.439774 -7.6524353 17.092209 -17.092224 17.092209l-139.92581 0c-9.439758 0 -17.092209 -7.6524353 -17.092209 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m307.77377 134.87276l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.7614136 0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281982 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031952 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277069 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110077 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 23.21819l0 0c0 -9.439764 7.652405 -17.092205 17.092163 -17.092205l139.92584 0c4.533142 0 8.880615 1.8007808 12.085999 5.0061913c3.2054443 3.20541 5.0062256 7.5528793 5.0062256 12.086014l0 68.366776c0 9.439766 -7.652466 17.092201 -17.092224 17.092201l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092201z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 64.32157l-1.546875 0l0 -13.593746l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.3749962 -3.0 1.3749962q-1.75 0 -2.734375 -1.4531212l0 1.2343712zm-0.015625 -4.999996q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.1249962q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.7812462q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.1718712l-1.75 0q-0.265625 -0.5156212 -0.328125 -1.2187462zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.9531212 -2.734375 0.9531212q-2.015625 0 -3.25 -1.3124962q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.6093712l0 -13.593746l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203121l-2.0625 0l-3.25 -5.031246l-1.171875 1.125l0 3.9062462l-1.671875 0zm16.0625 -3.1718712l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.8281212 -2.8125 0.8281212q-2.15625 0 -3.421875 -1.3281212q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.874996l0 -9.859371l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.062496l-1.671875 0l0 -5.999996q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.374996l-1.671875 0zm16.766357 0l0 -1.2499962q-0.9375 1.4687462 -2.75 1.4687462q-1.171875 0 -2.171875 -0.6406212q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.593746l-1.546875 0zm-5.28125 -4.921871q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.156246l0.8125 -3.9531212l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.9531212l-1.390625 0l0.796875 -3.9531212l-2.90625 0l-0.8125 3.9531212l-1.390625 0zm2.484375 -5.343746l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm7.7194824 -1.59375q0 -2.421875 0.5 -3.890625q0.5 -1.46875 1.46875 -2.265625q0.984375 -0.796875 2.46875 -0.796875q1.09375 0 1.921875 0.4375q0.828125 0.4375 1.359375 1.28125q0.546875 0.828125 0.84375 2.015625q0.3125 1.1875 0.3125 3.21875q0 2.390625 -0.5 3.859375q-0.484375 1.46875 -1.46875 2.28125q-0.96875 0.7968712 -2.46875 0.7968712q-1.96875 0 -3.078125 -1.4062462q-1.359375 -1.703125 -1.359375 -5.53125zm1.71875 0q0 3.34375 0.78125 4.453125q0.796875 1.109375 1.9375 1.109375q1.15625 0 1.9375 -1.109375q0.78125 -1.125 0.78125 -4.453125q0 -3.359375 -0.78125 -4.46875q-0.78125 -1.109375 -1.953125 -1.109375q-1.15625 0 -1.828125 0.984375q-0.875 1.234375 -0.875 4.59375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m524.6037 164.32056l0 0c0 -9.439774 7.652405 -17.092209 17.092163 -17.092209l139.92584 0c4.533142 0 8.880615 1.8007812 12.085999 5.006195c3.2054443 3.2053986 5.0062256 7.5528717 5.0062256 12.086014l0 68.36676c0 9.439774 -7.652466 17.092209 -17.092224 17.092209l-139.92584 0c-9.439758 0 -17.092163 -7.6524353 -17.092163 -17.092209z" fill-rule="nonzero"></path><path fill="#000000" d="m566.2209 205.42393l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.53125 0.65625 0.828125 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.25 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281982 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516296 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.0625 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110107 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm14.016357 5.109375l-1.671875 0l0 -10.640625q-0.59375 0.578125 -1.578125 1.15625q-0.984375 0.5625 -1.765625 0.859375l0 -1.625q1.40625 -0.65625 2.453125 -1.59375q1.046875 -0.9375 1.484375 -1.8125l1.078125 0l0 13.65625z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 -70.551186" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l92.341156 -67.02664" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m520.713 62.262825l2.7023315 -4.002495l-4.6428833 1.3290672z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m427.40158 127.95276l97.19687 70.55118" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m427.40158 127.95276l92.341156 67.02663" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m518.77246 196.31612l4.6428833 1.329071l-2.7023315 -4.0025024z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m182.72704 127.95276l70.55118 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m182.72704 127.95276l64.55118 0" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m247.27821 129.60449l4.538101 -1.6517334l-4.538101 -1.6517334z" fill-rule="evenodd"></path></g></svg>
-
diff --git a/content/2015/gotham-grpc/watch.svg b/content/2015/gotham-grpc/watch.svg
deleted file mode 100644
index 6280c81..0000000
--- a/content/2015/gotham-grpc/watch.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-
-<svg version="1.1" viewBox="0.0 0.0 699.2047244094488 272.002624671916" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="p.0"><path d="m0 0l699.2047 0l0 272.00262l-699.2047 0l0 -272.00262z" clip-rule="nonzero"></path></clipPath><g clip-path="url(#p.0)"><path fill="#000000" fill-opacity="0.0" d="m0 0l699.2047 0l0 272.00262l-699.2047 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m126.69283 22.981627l545.3229 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m126.69283 22.981627l545.3229 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m126.69283 93.177605l545.3229 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m126.69283 93.177605l545.3229 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m126.69283 163.37358l545.3229 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m126.69283 163.37358l545.3229 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m126.69283 233.56955l545.3229 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m126.69283 233.56955l545.3229 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m169.34702 22.887138l18.897629 70.58267" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m169.34702 22.887138l17.345856 64.78682" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m185.09734 88.10114l2.769226 3.9565125l0.42184448 -4.8108826z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m201.34717 93.11024l19.2126 71.685036" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m201.34717 93.11024l17.659332 65.88958" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m217.41109 159.42741l2.7702332 3.9557953l0.42060852 -4.8109894z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m196.54399 93.11024l37.448807 139.71652" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m196.54399 93.11024l35.89543 133.92108" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m230.84401 227.45897l2.7703094 3.9557495l0.42053223 -4.8110046z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m215.63252 155.92389l164.47243 0l0 28.7874l-164.47243 0z" fill-rule="nonzero"></path><path fill="#b7b7b7" d="m229.07002 186.84389q-1.375 -1.75 -2.328125 -4.078125q-0.953125 -2.34375 -0.953125 -4.84375q0 -2.21875 0.703125 -4.234375q0.84375 -2.34375 2.578125 -4.671875l1.203125 0q-1.125 1.921875 -1.484375 2.75q-0.5625 1.28125 -0.890625 2.671875q-0.40625 1.734375 -0.40625 3.484375q0 4.46875 2.78125 8.921875l-1.203125 0zm3.009552 -4.0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665802 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.078842 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766357 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm8.641327 0q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281982 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm27.114716 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016357 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078827 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.613586 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.000702 8.734375l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm10.5 0.203125l-1.1875 0q2.765625 -4.453125 2.765625 -8.921875q0 -1.734375 -0.390625 -3.453125q-0.328125 -1.390625 -0.890625 -2.671875q-0.359375 -0.84375 -1.484375 -2.78125l1.1875 0q1.75 2.328125 2.578125 4.671875q0.71875 2.015625 0.71875 4.234375q0 2.5 -0.96875 4.84375q-0.953125 2.328125 -2.328125 4.078125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m229.20317 224.26773l147.99998 0l0 35.77954l-147.99998 0z" fill-rule="nonzero"></path><path fill="#b7b7b7" d="m242.64067 255.18773q-1.375 -1.75 -2.328125 -4.078125q-0.953125 -2.34375 -0.953125 -4.84375q0 -2.21875 0.703125 -4.234375q0.84375 -2.34375 2.578125 -4.671875l1.203125 0q-1.125 1.921875 -1.484375 2.75q-0.5625 1.28125 -0.890625 2.671875q-0.40625 1.734375 -0.40625 3.484375q0 4.46875 2.78125 8.921875l-1.203125 0zm3.009552 -4.0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.665787 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.85935974 0.3125 -1.8437347 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.0312347 -0.25 2.9843597 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.9062347 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.2499847 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.7343597 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96873474 0 1.7187347 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766327 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm8.641357 0q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281952 4.921875l0 -9.859375l1.5 0l0 1.390625q0.453125 -0.71875 1.21875 -1.15625q0.78125 -0.453125 1.765625 -0.453125q1.09375 0 1.796875 0.453125q0.703125 0.453125 0.984375 1.28125q1.171875 -1.734375 3.046875 -1.734375q1.46875 0 2.25 0.8125q0.796875 0.8125 0.796875 2.5l0 6.765625l-1.671875 0l0 -6.203125q0 -1.0 -0.15625 -1.4375q-0.15625 -0.453125 -0.59375 -0.71875q-0.421875 -0.265625 -1.0 -0.265625q-1.03125 0 -1.71875 0.6875q-0.6875 0.6875 -0.6875 2.21875l0 5.71875l-1.671875 0l0 -6.40625q0 -1.109375 -0.40625 -1.65625q-0.40625 -0.5625 -1.34375 -0.5625q-0.703125 0 -1.3125 0.375q-0.59375 0.359375 -0.859375 1.078125q-0.265625 0.71875 -0.265625 2.0625l0 5.109375l-1.671875 0zm27.114746 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm16.016327 1.75l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078857 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0zm10.613556 -1.21875q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0007324 8.734375l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125zm10.5 0.203125l-1.1875 0q2.765625 -4.453125 2.765625 -8.921875q0 -1.734375 -0.390625 -3.453125q-0.328125 -1.390625 -0.890625 -2.671875q-0.359375 -0.84375 -1.484375 -2.78125l1.1875 0q1.75 2.328125 2.578125 4.671875q0.71875 2.015625 0.71875 4.234375q0 2.5 -0.96875 4.84375q-0.953125 2.328125 -2.328125 4.078125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m358.39102 163.37534l18.141754 -67.716545" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m358.39102 163.37534l16.58905 -61.92093" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m376.57556 101.88184l-0.42111206 -4.8109436l-2.7698364 3.95607z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m570.4359 92.637794l18.48822 69.039375" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m570.4359 92.637794l16.936157 63.2436" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m585.77655 156.30865l2.7694092 3.9563599l0.42163086 -4.810898z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m183.26472 52.719162l73.511795 0l0 44.15748l-73.511795 0z" fill-rule="nonzero"></path><path fill="#000000" d="m199.79597 83.42041l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672592 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094467 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m215.26514 127.74803l102.33072 0l0 44.157486l-102.33072 0z" fill-rule="nonzero"></path><path fill="#000000" d="m231.79639 158.44928l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672592 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094452 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m323.36185 16.998056l96.1575 0l0 44.157486l-96.1575 0z" fill-rule="nonzero"></path><path fill="#000000" d="m333.59622 43.918056l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm12.978302 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm8.438232 2.9375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375zm16.453125 2.9375l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm3.891327 0l0 -13.593752l1.671875 0l0 13.593752l-1.671875 0zm7.8323364 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.437502l1.65625 -1.0l0 3.437502l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm0.8551636 -1.4375l1.65625 -0.265625q0.140625 1.0 0.765625 1.53125q0.640625 0.515625 1.78125 0.515625q1.15625 0 1.703125 -0.46875q0.5625 -0.46875 0.5625 -1.09375q0 -0.5625 -0.484375 -0.890625q-0.34375 -0.21875 -1.703125 -0.5625q-1.84375 -0.46875 -2.5625 -0.796875q-0.703125 -0.34375 -1.078125 -0.9375q-0.359375 -0.609375 -0.359375 -1.328125q0 -0.65625 0.296875 -1.21875q0.3125 -0.5625 0.828125 -0.9375q0.390625 -0.28125 1.0625 -0.484375q0.671875 -0.203125 1.4375 -0.203125q1.171875 0 2.046875 0.34375q0.875 0.328125 1.28125 0.90625q0.421875 0.5625 0.578125 1.515625l-1.625 0.21875q-0.109375 -0.75 -0.65625 -1.171875q-0.53125 -0.4375 -1.5 -0.4375q-1.15625 0 -1.640625 0.390625q-0.484375 0.375 -0.484375 0.875q0 0.328125 0.203125 0.59375q0.203125 0.265625 0.640625 0.4375q0.25 0.09375 1.46875 0.4375q1.765625 0.46875 2.46875 0.765625q0.703125 0.296875 1.09375 0.875q0.40625 0.578125 0.40625 1.4375q0 0.828125 -0.484375 1.578125q-0.484375 0.734375 -1.40625 1.140625q-0.921875 0.390625 -2.078125 0.390625q-1.921875 0 -2.9375 -0.796875q-1.0 -0.796875 -1.28125 -2.359375z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m584.1046 127.74803l73.51184 0l0 44.157486l-73.51184 0z" fill-rule="nonzero"></path><path fill="#000000" d="m600.7921 151.05865l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.328125 2.390625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813232 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.640625 0.4375l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078796 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m172.47762 22.888165l373.92126 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m172.47762 22.888165l373.92126 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m198.61977 92.91659l365.38586 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m198.61977 92.91659l365.38586 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m226.01259 163.38373l130.80315 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m226.01259 163.38373l130.80315 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m235.2021 232.9837l135.99998 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m235.2021 232.9837l135.99998 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m224.86514 191.74803l102.33069 0l0 44.157486l-102.33069 0z" fill-rule="nonzero"></path><path fill="#000000" d="m241.3964 222.44928l0 -4.828125q-0.390625 0.546875 -1.09375 0.90625q-0.6875 0.359375 -1.484375 0.359375q-1.75 0 -3.015625 -1.390625q-1.265625 -1.40625 -1.265625 -3.84375q0 -1.484375 0.515625 -2.65625q0.515625 -1.1875 1.484375 -1.796875q0.984375 -0.609375 2.15625 -0.609375q1.828125 0 2.875 1.546875l0 -1.328125l1.5 0l0 13.640625l-1.671875 0zm-5.140625 -8.734375q0 1.90625 0.796875 2.859375q0.796875 0.9375 1.90625 0.9375q1.0625 0 1.828125 -0.890625q0.78125 -0.90625 0.78125 -2.765625q0 -1.953125 -0.8125 -2.953125q-0.8125 -1.0 -1.90625 -1.0q-1.09375 0 -1.84375 0.9375q-0.75 0.921875 -0.75 2.875zm15.688217 4.953125l0 -1.453125q-1.140625 1.671875 -3.125 1.671875q-0.859375 0 -1.625 -0.328125q-0.75 -0.34375 -1.125 -0.84375q-0.359375 -0.5 -0.515625 -1.234375q-0.09375 -0.5 -0.09375 -1.5625l0 -6.109375l1.671875 0l0 5.46875q0 1.3125 0.09375 1.765625q0.15625 0.65625 0.671875 1.03125q0.515625 0.375 1.265625 0.375q0.75 0 1.40625 -0.375q0.65625 -0.390625 0.921875 -1.046875q0.28125 -0.671875 0.28125 -1.9375l0 -5.28125l1.671875 0l0 9.859375l-1.5 0zm10.672592 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.094452 5.875l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm6.150177 3.796875l-0.171875 -1.5625q0.546875 0.140625 0.953125 0.140625q0.546875 0 0.875 -0.1875q0.34375 -0.1875 0.5625 -0.515625q0.15625 -0.25 0.5 -1.25q0.046875 -0.140625 0.15625 -0.40625l-3.734375 -9.875l1.796875 0l2.046875 5.71875q0.40625 1.078125 0.71875 2.28125q0.28125 -1.15625 0.6875 -2.25l2.09375 -5.75l1.671875 0l-3.75 10.03125q-0.59375 1.625 -0.9375 2.234375q-0.4375 0.828125 -1.015625 1.203125q-0.578125 0.390625 -1.375 0.390625q-0.484375 0 -1.078125 -0.203125z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m374.67978 234.26247l37.480316 -139.87402" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m374.67978 234.26247l35.92737 -134.07848" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m412.2026 100.6115l-0.42086792 -4.8109665l-2.77005 3.9559479z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m415.99106 91.37533l18.141724 -67.71654" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m415.99106 91.37533l16.58905 -61.92092" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m434.17557 29.881845l-0.42108154 -4.8109493l-2.7698364 3.9560757z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m382.39102 91.37533l18.141754 -67.71654" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m382.39102 91.37533l16.58905 -61.92092" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m400.57556 29.881845l-0.42111206 -4.8109493l-2.7698364 3.9560757z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m362.0126 163.38373l125.19684 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m362.0126 163.38373l125.19684 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m378.0126 232.9837l55.590546 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m378.0126 232.9837l55.590546 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m437.07977 234.26247l37.480316 -139.87402" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m437.07977 234.26247l35.92737 -134.07848" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m474.60257 100.6115l-0.42086792 -4.8109665l-2.7700195 3.9559479z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m479.99106 91.37533l18.141724 -67.71654" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m479.99106 91.37533l16.58905 -61.92092" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m498.17557 29.881845l-0.42108154 -4.8109493l-2.7698364 3.9560757z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m490.39108 163.37534l18.141724 -67.716545" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m490.39108 163.37534l16.58902 -61.92093" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m508.5756 101.88184l-0.42108154 -4.8109436l-2.769867 3.95607z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m511.99106 91.37533l18.141754 -67.71654" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m511.99106 91.37533l16.58902 -61.92092" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m530.1756 29.881845l-0.42114258 -4.8109493l-2.7698364 3.9560757z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m565.93304 93.708664l37.13385 138.61418" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m565.93304 93.708664l35.581238 132.81853" fill-rule="evenodd"></path><path fill="#000000" stroke="#000000" stroke-width="1.0" stroke-linecap="butt" d="m599.9188 226.95462l2.7697754 3.9561005l0.42114258 -4.8109436z" fill-rule="evenodd"></path><path fill="#000000" fill-opacity="0.0" d="m598.50464 199.74803l73.51178 0l0 44.157486l-73.51178 0z" fill-rule="nonzero"></path><path fill="#000000" d="m615.19214 223.05865l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.328125 2.390625q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm4.0788574 4.9375l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.813171 -3.609375l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm9.640625 0.4375l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.078857 5.875l0 -13.59375l1.671875 0l0 13.59375l-1.671875 0z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m440.4126 232.9837l157.98425 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m440.4126 232.9837l157.98425 0" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m495.61258 163.38373l81.98422 0" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="4.0" stroke-linejoin="round" stroke-linecap="butt" d="m495.61258 163.38373l81.98422 0" fill-rule="nonzero"></path><path fill="#000000" d="m556.5907 15.192221l5.5126343 -7.1922207l-0.43896484 9.569199l5.7677 -4.3150015l-2.6950073 5.565606l8.646545 0.18717766l-7.644409 4.566778l2.128479 3.1273403l-3.1306152 1.6895599l4.1360474 5.5026627l-7.0182495 -2.1235447l0.50024414 5.0024204l-4.5750732 -2.3769798l-0.94085693 4.815243l-2.8822021 -2.438263l-1.9413452 3.8793602l-1.9429932 -2.6287575l-4.323242 5.756096l-0.18554688 -5.565605l-5.8306274 -0.6874199l3.3873901 -4.066536l-5.51593 -4.1294804l6.5180664 -2.1285133l-4.576721 -5.5026627l6.9570312 -0.7503624l-1.4411011 -6.943756l6.7052 4.566778l1.9413452 -7.445655z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m556.5907 15.192221l5.5126343 -7.1922207l-0.43896484 9.569199l5.7677 -4.3150015l-2.6950073 5.565606l8.646545 0.18717766l-7.644409 4.566778l2.128479 3.1273403l-3.1306152 1.6895599l4.1360474 5.5026627l-7.0182495 -2.1235447l0.50024414 5.0024204l-4.5750732 -2.3769798l-0.94085693 4.815243l-2.8822021 -2.438263l-1.9413452 3.8793602l-1.9429932 -2.6287575l-4.323242 5.756096l-0.18554688 -5.565605l-5.8306274 -0.6874199l3.3873901 -4.066536l-5.51593 -4.1294804l6.5180664 -2.1285133l-4.576721 -5.5026627l6.9570312 -0.7503624l-1.4411011 -6.943756l6.7052 4.566778l1.9413452 -7.445655z" fill-rule="nonzero"></path><path fill="#000000" fill-opacity="0.0" d="m546.4359 23.139423l18.48822 69.03937" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" stroke-dasharray="4.0,3.0" d="m546.4359 23.139423l18.48822 69.03937" fill-rule="nonzero"></path><path fill="#cfe2f3" d="m11.028872 12.803246l0 0c0 -2.6498604 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.50550175 3.3926926 1.4053011c0.8998108 0.8997984 1.405304 2.1201878 1.405304 3.3926954l0 19.19141c0 2.6498604 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481361 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 12.803246l0 0c0 -2.6498604 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.50550175 3.3926926 1.4053011c0.8998108 0.8997984 1.405304 2.1201878 1.405304 3.3926954l0 19.19141c0 2.6498604 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481361 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path fill="#000000" d="m57.444057 25.709572l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.859375 3.609375l0 -13.593749l1.671875 0l0 13.593749l-1.671875 0zm4.1916924 -11.6875l0 -1.906249l1.671875 0l0 1.906249l-1.671875 0zm0 11.6875l0 -9.859375l1.671875 0l0 9.859375l-1.671875 0zm10.879196 -3.171875l1.7187576 0.21875q-0.40625 1.5 -1.5156326 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.265625 -1.328125 -1.265625 -3.734375q0 -2.484375 1.265625 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.2500076 1.34375 1.2500076 3.796875q0 0.140625 -0.015625 0.4375l-7.3437576 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.1101 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031967 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125z" fill-rule="nonzero"></path><path fill="#d9ead3" d="m11.028872 83.724724l0 0c0 -2.6498642 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055008 3.3926926 1.4052963c0.8998108 0.89980316 1.405304 2.1201859 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.14814 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 83.724724l0 0c0 -2.6498642 2.1481361 -4.7979965 4.7979965 -4.7979965l111.41188 0c1.2725143 0 2.492897 0.5055008 3.3926926 1.4052963c0.8998108 0.89980316 1.405304 2.1201859 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.7979965 -4.7979965 4.7979965l-111.41188 0c-2.6498604 0 -4.7979965 -2.14814 -4.7979965 -4.7979965z" fill-rule="nonzero"></path><path fill="#000000" d="m38.960125 100.240425l0 -8.546875l-1.484375 0l0 -1.3125l1.484375 0l0 -1.046875q0 -0.984375 0.171875 -1.46875q0.234375 -0.65625 0.84375 -1.046875q0.609375 -0.40625 1.703125 -0.40625q0.703125 0 1.5625 0.15625l-0.25 1.46875q-0.515625 -0.09375 -0.984375 -0.09375q-0.765625 0 -1.078125 0.328125q-0.3125 0.3125 -0.3125 1.203125l0 0.90625l1.921875 0l0 1.3125l-1.921875 0l0 8.546875l-1.65625 0zm4.761429 0l0 -9.859375l1.5 0l0 1.5q0.578125 -1.046875 1.0625 -1.375q0.484375 -0.34375 1.078125 -0.34375q0.84375 0 1.71875 0.546875l-0.578125 1.546875q-0.609375 -0.359375 -1.234375 -0.359375q-0.546875 0 -0.984375 0.328125q-0.421875 0.328125 -0.609375 0.90625q-0.28125 0.890625 -0.28125 1.953125l0 5.15625l-1.671875 0zm5.603302 -4.921875q0 -2.734375 1.53125 -4.0625q1.265625 -1.09375 3.09375 -1.09375q2.03125 0 3.3125 1.34375q1.296875 1.328125 1.296875 3.671875q0 1.90625 -0.578125 3.0q-0.5625 1.078125 -1.65625 1.6875q-1.078125 0.59375 -2.375 0.59375q-2.0625 0 -3.34375 -1.328125q-1.28125 -1.328125 -1.28125 -3.8125zm1.71875 0q0 1.890625 0.828125 2.828125q0.828125 0.9375 2.078125 0.9375q1.25 0 2.0625 -0.9375q0.828125 -0.953125 0.828125 -2.890625q0 -1.828125 -0.828125 -2.765625q-0.828125 -0.9375 -2.0625 -0.9375q-1.25 0 -2.078125 0.9375q-0.828125 0.9375 -0.828125 2.828125zm9.281967 4.921875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.1406212 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0624962 0 -1.8437462 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm14.031963 -1.5l0.234375 1.484375q-0.703125 0.140625 -1.265625 0.140625q-0.90625 0 -1.40625 -0.28125q-0.5 -0.296875 -0.703125 -0.75q-0.203125 -0.46875 -0.203125 -1.984375l0 -5.65625l-1.234375 0l0 -1.3125l1.234375 0l0 -2.4375l1.65625 -1.0l0 3.4375l1.6875 0l0 1.3125l-1.6875 0l0 5.75q0 0.71875 0.078125 0.921875q0.09375 0.203125 0.296875 0.328125q0.203125 0.125 0.578125 0.125q0.265625 0 0.734375 -0.078125zm8.277061 -1.671875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656326 -1.328125 -1.2656326 -3.734375q0 -2.484375 1.2656326 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m11.028872 153.56767l0 0c0 -2.6498566 2.1481361 -4.798004 4.7979965 -4.798004l111.41188 0c1.2725143 0 2.492897 0.5055084 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201935 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 153.56767l0 0c0 -2.6498566 2.1481361 -4.798004 4.7979965 -4.798004l111.41188 0c1.2725143 0 2.492897 0.5055084 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201935 1.405304 3.3927002l0 19.191406c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path fill="#000000" d="m26.094896 170.08337l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.5312519 0.65625 0.8281269 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.2500019 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281969 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516342 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.062496 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656212 -1.328125 -1.2656212 -3.734375q0 -2.484375 1.2656212 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm7.719467 -1.59375q0 -2.421875 0.5 -3.890625q0.5 -1.46875 1.46875 -2.265625q0.984375 -0.796875 2.46875 -0.796875q1.09375 0 1.921875 0.4375q0.828125 0.4375 1.359375 1.28125q0.546875 0.828125 0.84375 2.015625q0.3125 1.1875 0.3125 3.21875q0 2.390625 -0.5 3.859375q-0.484375 1.46875 -1.46875 2.28125q-0.96875 0.796875 -2.46875 0.796875q-1.96875 0 -3.078125 -1.40625q-1.359375 -1.703125 -1.359375 -5.53125zm1.71875 0q0 3.34375 0.78125 4.453125q0.796875 1.109375 1.9375 1.109375q1.15625 0 1.9375 -1.109375q0.78125 -1.125 0.78125 -4.453125q0 -3.359375 -0.78125 -4.46875q-0.78125 -1.109375 -1.953125 -1.109375q-1.15625 0 -1.828125 0.984375q-0.875 1.234375 -0.875 4.59375z" fill-rule="nonzero"></path><path fill="#fce5cd" d="m11.028872 223.94987l0 0c0 -2.6498566 2.1481361 -4.797989 4.7979965 -4.797989l111.41188 0c1.2725143 0 2.492897 0.50549316 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201782 1.405304 3.392685l0 19.191422c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path stroke="#000000" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m11.028872 223.94987l0 0c0 -2.6498566 2.1481361 -4.797989 4.7979965 -4.797989l111.41188 0c1.2725143 0 2.492897 0.50549316 3.3926926 1.405304c0.8998108 0.89979553 1.405304 2.1201782 1.405304 3.392685l0 19.191422c0 2.6498566 -2.1481323 4.797989 -4.7979965 4.797989l-111.41188 0c-2.6498604 0 -4.7979965 -2.1481323 -4.7979965 -4.797989z" fill-rule="nonzero"></path><path fill="#000000" d="m26.094896 240.46558l-1.546875 0l0 -13.59375l1.65625 0l0 4.84375q1.0625 -1.328125 2.703125 -1.328125q0.90625 0 1.71875 0.375q0.8125 0.359375 1.328125 1.03125q0.5312519 0.65625 0.8281269 1.59375q0.296875 0.9375 0.296875 2.0q0 2.53125 -1.2500019 3.921875q-1.25 1.375 -3.0 1.375q-1.75 0 -2.734375 -1.453125l0 1.234375zm-0.015625 -5.0q0 1.765625 0.46875 2.5625q0.796875 1.28125 2.140625 1.28125q1.09375 0 1.890625 -0.9375q0.796875 -0.953125 0.796875 -2.84375q0 -1.921875 -0.765625 -2.84375q-0.765625 -0.921875 -1.84375 -0.921875q-1.09375 0 -1.890625 0.953125q-0.796875 0.953125 -0.796875 2.75zm15.281969 3.78125q-0.9375 0.796875 -1.796875 1.125q-0.859375 0.3125 -1.84375 0.3125q-1.609375 0 -2.484375 -0.78125q-0.875 -0.796875 -0.875 -2.03125q0 -0.734375 0.328125 -1.328125q0.328125 -0.59375 0.859375 -0.953125q0.53125 -0.359375 1.203125 -0.546875q0.5 -0.140625 1.484375 -0.25q2.03125 -0.25 2.984375 -0.578125q0 -0.34375 0 -0.4375q0 -1.015625 -0.46875 -1.4375q-0.640625 -0.5625 -1.90625 -0.5625q-1.171875 0 -1.734375 0.40625q-0.5625 0.40625 -0.828125 1.46875l-1.640625 -0.234375q0.234375 -1.046875 0.734375 -1.6875q0.515625 -0.640625 1.46875 -0.984375q0.96875 -0.359375 2.25 -0.359375q1.265625 0 2.046875 0.296875q0.78125 0.296875 1.15625 0.75q0.375 0.453125 0.515625 1.140625q0.09375 0.421875 0.09375 1.53125l0 2.234375q0 2.328125 0.09375 2.953125q0.109375 0.609375 0.4375 1.171875l-1.75 0q-0.265625 -0.515625 -0.328125 -1.21875zm-0.140625 -3.71875q-0.90625 0.359375 -2.734375 0.625q-1.03125 0.140625 -1.453125 0.328125q-0.421875 0.1875 -0.65625 0.546875q-0.234375 0.359375 -0.234375 0.796875q0 0.671875 0.5 1.125q0.515625 0.4375 1.484375 0.4375q0.96875 0 1.71875 -0.421875q0.75 -0.4375 1.109375 -1.15625q0.265625 -0.578125 0.265625 -1.671875l0 -0.609375zm10.516342 1.328125l1.640625 0.21875q-0.265625 1.6875 -1.375 2.65625q-1.109375 0.953125 -2.734375 0.953125q-2.015625 0 -3.25 -1.3125q-1.21875 -1.328125 -1.21875 -3.796875q0 -1.59375 0.515625 -2.78125q0.53125 -1.203125 1.609375 -1.796875q1.09375 -0.609375 2.359375 -0.609375q1.609375 0 2.625 0.8125q1.015625 0.8125 1.3125 2.3125l-1.625 0.25q-0.234375 -1.0 -0.828125 -1.5q-0.59375 -0.5 -1.421875 -0.5q-1.265625 0 -2.0625 0.90625q-0.78125 0.90625 -0.78125 2.859375q0 1.984375 0.765625 2.890625q0.765625 0.890625 1.984375 0.890625q0.984375 0 1.640625 -0.59375q0.65625 -0.609375 0.84375 -1.859375zm2.90625 3.609375l0 -13.59375l1.671875 0l0 7.75l3.953125 -4.015625l2.15625 0l-3.765625 3.65625l4.140625 6.203125l-2.0625 0l-3.25 -5.03125l-1.171875 1.125l0 3.90625l-1.671875 0zm16.062496 -3.171875l1.71875 0.21875q-0.40625 1.5 -1.515625 2.34375q-1.09375 0.828125 -2.8125 0.828125q-2.15625 0 -3.421875 -1.328125q-1.2656212 -1.328125 -1.2656212 -3.734375q0 -2.484375 1.2656212 -3.859375q1.28125 -1.375 3.328125 -1.375q1.984375 0 3.234375 1.34375q1.25 1.34375 1.25 3.796875q0 0.140625 -0.015625 0.4375l-7.34375 0q0.09375 1.625 0.921875 2.484375q0.828125 0.859375 2.0625 0.859375q0.90625 0 1.546875 -0.46875q0.65625 -0.484375 1.046875 -1.546875zm-5.484375 -2.703125l5.5 0q-0.109375 -1.234375 -0.625 -1.859375q-0.796875 -0.96875 -2.078125 -0.96875q-1.140625 0 -1.9375 0.78125q-0.78125 0.765625 -0.859375 2.046875zm9.110092 5.875l0 -9.859375l1.5 0l0 1.40625q1.09375 -1.625 3.140625 -1.625q0.890625 0 1.640625 0.328125q0.75 0.3125 1.109375 0.84375q0.375 0.515625 0.53125 1.21875q0.09375 0.46875 0.09375 1.625l0 6.0625l-1.671875 0l0 -6.0q0 -1.015625 -0.203125 -1.515625q-0.1875 -0.515625 -0.6875 -0.8125q-0.5 -0.296875 -1.171875 -0.296875q-1.0625 0 -1.84375 0.671875q-0.765625 0.671875 -0.765625 2.578125l0 5.375l-1.671875 0zm16.766342 0l0 -1.25q-0.9375 1.46875 -2.75 1.46875q-1.171875 0 -2.171875 -0.640625q-0.984375 -0.65625 -1.53125 -1.8125q-0.53125 -1.171875 -0.53125 -2.6875q0 -1.46875 0.484375 -2.671875q0.5 -1.203125 1.46875 -1.84375q0.984375 -0.640625 2.203125 -0.640625q0.890625 0 1.578125 0.375q0.703125 0.375 1.140625 0.984375l0 -4.875l1.65625 0l0 13.59375l-1.546875 0zm-5.28125 -4.921875q0 1.890625 0.796875 2.828125q0.8125 0.9375 1.890625 0.9375q1.09375 0 1.859375 -0.890625q0.765625 -0.890625 0.765625 -2.734375q0 -2.015625 -0.78125 -2.953125q-0.78125 -0.953125 -1.921875 -0.953125q-1.109375 0 -1.859375 0.90625q-0.75 0.90625 -0.75 2.859375zm14.152771 5.15625l0.8125 -3.953125l-1.578125 0l0 -1.390625l1.859375 0l0.6875 -3.359375l-2.546875 0l0 -1.390625l2.8125 0l0.8125 -3.96875l1.390625 0l-0.8125 3.96875l2.921875 0l0.8125 -3.96875l1.40625 0l-0.8125 3.96875l1.609375 0l0 1.390625l-1.890625 0l-0.6875 3.359375l2.578125 0l0 1.390625l-2.859375 0l-0.8125 3.953125l-1.390625 0l0.796875 -3.953125l-2.90625 0l-0.8125 3.953125l-1.390625 0zm2.484375 -5.34375l2.90625 0l0.703125 -3.359375l-2.921875 0l-0.6875 3.359375zm14.016342 5.109375l-1.671875 0l0 -10.640625q-0.59375 0.578125 -1.578125 1.15625q-0.984375 0.5625 -1.765625 0.859375l0 -1.625q1.40625 -0.65625 2.453125 -1.59375q1.046875 -0.9375 1.484375 -1.8125l1.078125 0l0 13.65625z" fill-rule="nonzero"></path></g></svg>
-
diff --git a/content/2015/how-go-was-made.slide b/content/2015/how-go-was-made.slide
deleted file mode 100644
index 1f37f68..0000000
--- a/content/2015/how-go-was-made.slide
+++ /dev/null
@@ -1,610 +0,0 @@
-How Go was made
-GopherCon Closing Keynote
-9 Jul 2015
-
-Andrew Gerrand
-adg@golang.org
-
-
-* Video
-
-A video of this talk was recorded at GopherCon in Denver.
-
-.link https://www.youtube.com/watch?v=0ht89TxZZnk Watch the talk on YouTube
-
-
-* This talk
-
-How was Go made?
-
-What was its development process?
-
-How has the process changed?
-
-What is its future?
-
-.image how-go-was-made/gopherswrench.jpg 300 _
-
-
-* The early days
-
-
-* Three friends
-
-Robert Griesemer, Rob Pike, and Ken Thompson's thought experiment:
-
-"What should a modern, practical programming language look like?"
-
-
-* The early process
-
-Design discussions by mail and in-person.
-
-Consensus-driven:
-A feature was accepted only when *all* the three authors agreed it necessary.
-
-Most proposed changes were rejected.
-
-
-* The initial spec
-
-The first artifact of Go was the language specification.
-
-The first commit (now git hash `18c5b48`) was a draft of that spec:
-
-	Author: Robert Griesemer <gri@golang.org>
-	Date:   Sun Mar 2 20:47:34 2008 -0800
-
-	    Go spec starting point.
-
-Go's entire history is preserved in the core reposistory.
-
-
-* The first Go program 
-
-The first Go program was a Prime Sieve, and was included in the spec.
-
-	func Filter(in *chan< int, out *chan> int, prime int) {
-	  for {
-	    i := <in;  // Receive value of new variable 'i' from 'in'.
-	    if i % prime != 0 {
-	      >out = i  // Send 'i' to channel 'out'.
-	    }
-	  }
-	}
-
-	func Sieve() {
-	  ch := new(chan int);  // Create a new channel.
-	  go Generate(ch);  // Start Generate() as a subprocess.
-	  for {
-	    prime := <ch;
-	    printf("%d\n",  prime);
-	    ch1 := new(chan int);
-	    go Filter(ch, ch1, prime);
-	    ch = ch1
-	  }
-	}
-
-
-* Version control
-
-Subversion was the project's first version control system. (no code review!)
-The trio made 400 commits to Subversion.
-
-The last Subversion commit (git hash `777ee7`, 21 July 2008) contained:
-
-- the spec,
-- a Go compiler (linux/darwin amd64),
-- a few packages (fmt, rand, and math),
-- some test programs.
-
-`test/helloworld.go`:
-
-	package main
-
-	func main() {
-		print "hello, world\n";
-	}
-
-
-* Getting serious
- 
-In July 2008 the project migrated from Subversion to Perforce,
-to use Google's excellent code review system.
-
-The team grew:
-
-- Russ Cox joined in August 2008,
-- Ian Lance Taylor joined in September,
-- ~20 other Googlers got involved in their 20% time.
-
-
-* Early changes
-
-It was easy to make changes in those days.
-Everyone knew each other.
-There were ~0 users.
-All the source code in one place.
-
-Workflow informal, but design-oriented.
-
-
-* Waiting for good design (1/2)
-
-Many problems don't have obvious solutions.
-
-The team were prepared to wait until they found the correct design.
-
-For example:
-
-The `fmt` package was written long before `reflect`.
-Before then, `fmt` had an awkward chaining API:
-
-	fmt.New().s("i = ").d(i).putnl()
-
-Now: 
-
-	fmt.Println("i = ", i)
-
-
-* Waiting for good design (2/2)
-
-Another example:
-
-Slices took more than a year to figure out.
-Before then, there were "open arrays" but they were awkward.
-
-`src/lib/container/vector.go` @ `f4dcf51`:
-
-	// BUG: workaround for non-constant allocation.
-	// i must be a power of 10.
-	func Alloc(i int) *[]Element {
-		switch i {
-		case 1:
-			return new([1]Element);
-		case 10:
-			return new([10]Element);
-		case 100:
-			return new([100]Element);
-		case 1000:
-			return new([1000]Element);
-		}
-		print "bad size ", i, "\n";
-		panic "not known size\n";
-	}
-
-
-* An early language change
-
-`chan` and `map` were originally spelled `*chan` and `*map`.
-
-The team had a meeting to discuss removing the asterisks.
-
-Russ implemented the compiler change (`dc7b2e9`),
-and updated ~every Go file in existence (`08ca30b`).
-
-.code how-go-was-made/mapchan.diff
-
-This rapid approach works well at a small scale.
-
-
-* Toward open source
-
-In mid-2009 the team prepared for the open source release.
-
-Moved to their third version control system:
-Mercurial, with Rietveld for code review.
-# (We would go on to use these tools for five years.)
-
-The last Perforce commit (`9e96f25`, Oct 29) contained
-
-- a mature spec and compiler,
-- a broad standard library (82 packages),
-- gofmt, godoc, cgo,
-- the testing framework,
-- the FAQ, Effective Go, and more.
-
-
-* Open source
-
-
-* The release
-
-10 November 2009: Go was released. (`78c47c3`)
-
-.image how-go-was-made/website.png 500 _
-
-
-* The response
-
-There was a huge response to the release. The team was overwhelmed.
-
-People sent changes from day one. The first non-Googler change:
-
-	commit 022e3ae2659491e519d392e266acd86223a510f4
-	Author: Kevin Ballard <kevin@sb.org>
-	Date:   Tue Nov 10 20:04:14 2009 -0800
-
-	    Fix go-mode.el to work on empty buffers
-	    
-	    Fixes #8.
-	    
-	    R=agl, agl1, rsc
-	    https://golang.org/cl/153056
-
-In the first month, 32 people from outside Google contributed to Go.
-
-The contribution process worked.
-
-
-* Changes after the release
-
-The team continued to make big changes after the release.
-
-But the process was now different, as they now had a community.
-
-
-* The first major public change (1/2)
-
-On December 9th, Rob Pike sent the first public change proposal.
-
-He proposed to remove semicolons at line endings.
-[[https://golang.org/s/semicolon-proposal][golang.org/s/semicolon-proposal]]
-
-The proposal was a "design doc" that included:
-
-- background,
-- rationale,
-- a formal specification of the change,
-- an implementation plan, and
-- examples (including a copy of the Prime Sieve program without semicolons).
-
-
-* The first major public change (2/2)
-
-The design doc was shared with the community for feedback.
-
-"Please read the proposal and think about its consequences.
-We're pretty sure it makes the language nicer to use and sacrifices almost nothing in precision or safety."
-
-The response was positive.
-
-The proposal was implemented.
-
-Most of the changes were made mechanically (thanks `gofmt`)).
-
-This would be the shape of things to come.
-
-
-* Curating change
-
-* Curating change
-
-The team was careful to curate the changes that made it into the language.
-(Remember: "Wait for good design.")
-
-There were many proposed changes and additions to Go.
-
-As before, many more were declined than accepted.
-
-Some fit with the project's goals, others did not.
-
-An early accepted proposal:
-
-- Make the upper and lower bounds of slice operations optional. (`x[lo:]`, `x[:hi]`)
-
-And a declined proposal:
-
-- Allow negative indices in slice operations. (`x[-n]` `==` `x[len(x)-n]`)
-
-
-* Communicating goals
-
-At first, we did a poor job explaining the project's goals and development process.
-
-This caused frustration. ("Why don't they accept my suggestions?")
-
-It took us a while to articulate it:
-Rob Pike's [[http://talks.golang.org/2012/splash.article][talk]] in October 2012
-"Go at Google: Language Design in the Service of Software Engineering"
-was the first thorough explanation of Go's _raison_d'être_.
-
-I wish we'd had this document written in 2009.
-(But we couldn't have written it then.)
-
-Read it, if you haven't already.
-
-
-* A thought on openness
-
-What if Go has been open source from day one?
-
-It may have been easier for the public to understand the project.
-
-But it's not that simple:
-
-Ideas are fragile in their early stages; they need to be nurtured before exposed to the world.
-
-
-* Managing change
-
-* Weekly snapshots
-
-Attempt to keep everyone in sync.
-
-- Apply a Mercurial tag to a specific, stable revision.
-- Announce to user mailing list with detailed changelog.
-
-Great for early adopters and core developers.
-
-
-* Problems with weeklies
-
-Contributors work at tip; users sync to weeklies.
-
-Burden on users:
-
-- annoying to update weekly,
-- painful to update less often.
-
-Version skew results because users are at different weeklies.
-
-Skew fragments the community and slows adoption.
-
-
-* Formal release process
-
-March 2011: introduced releases every 1-2 months.
-
-- Pick the most stable of the past few snapshots and tag it.
-- Announce with abridged "must read" release notes.
-
-Keeps the community more in sync. Reduces churn.
-
-Popular with users.
-
-But skew still prevalent: adventurers and core devs still use weeklies (or tip!).
-
-
-* Introducing Gofix
-
-A tool to mechanically update code to accommodate language and library changes.
-
-  gofix prog.go
-
-Announced in May 2011.
-
-Eases the burden of staying current.
-Release notes now mostly say "run gofix."
-
-Not a sed script. Works on the AST.
-
-
-* A gofix example
-
-The `reflect` API was completely redesigned in 2011.
-Gofix made most of the changes:
-
-.image how-go-was-made/reflect1.png _ 1000
-.image how-go-was-made/reflect3.png _ 1000
-.image how-go-was-made/reflect2.png _ 1000
-
-
-* Versioning issues persist
-
-Gofix is no panacea.
-
-As the root of the dependency graph, a programming language can suffer acutely from version skew.
-
-The fundamental issue remains:
-Code you write today may not compile tomorrow.
-
-Some companies unwilling to bet on Go as they saw it as unstable.
-
-
-* A need for stability
-
-Gofix makes changes very easy, and also makes it easy to experiment.
-But it can't do everything.
-
-Priorities: If change is easy, what change is important?
-
-Wanted to make major changes to the language and libraries,
-but this requires planning.
-
-Decision: design and implement a stable version of Go, its libraries, and its tools.
-
-
-* Go 1
-
-* What is Go 1?
-
-A specification of the language and libraries that will be supported for years.
-
-Available as downloadable binary packages.
-
-An opportunity to:
-
-- fix minor language irritations,
-- fix inconsistencies in the standard library,
-- focus on bug fixing and cleaning up TODOs,
-- design and build a strong build tool set (get rid of make),
-- bring Windows support up to par.
-
-Polish and refine, not redesign.
-
-
-* Planning Go 1
-
-The team at Google prepared a detailed design document.
-
-Implemented (but did not commit) many of the proposed changes.
-
-Met for a week to discuss and refine the document (October 2011).
-
-Presented the document to the community for discussion.
-
-Community feedback essential in refining the document.
-
-.link http://blog.golang.org/preview-of-go-version-1
-
-
-* An example: errors (1/5)
-
-Before Go 1, there was no error type.
-Instead, the `os` package provided an `Error` type:
-
-	package os
-
-	type Error interface {
-		String() string
-	}
-
-References to `os.Error` were ubiquitous.
-
-	package io
-
-	type Reader interface {
-		Read(p []byte) (n int, err os.Error)
-	}
-	
-	type Closer interface {
-		Close() os.Error
-	}
-
-
-
-* An example: errors (2/5)
-
-Before the Go 1 meeting, Russ raised the issue in the design document:
-
-.image how-go-was-made/errors-issue.png 500 _
-
-
-* An example: errors (3/5)
-
-At the meeting the team discussed the issue,
-Russ presented data from his experiments with the change,
-and we made a tentative decision:
-
-.image how-go-was-made/errors-discussion.png 350 _ 
-
-
-* An example: errors (4/5)
-
-On the list, the community made some keen suggestions:
-
-.image how-go-was-made/errors-rog.png 500 _ 
-
-
-* An example: errors (5/5)
-
-Many of those suggestions were rolled into the Go 1 design document:
-
-.image how-go-was-made/errors-final.png 500 _
-
-
-* Implementing Go 1
-
-Create many new issues on the tracker.
-
-Contributors nominate themselves to address specific issues.
-
-Stop developing new features; prioritize stability.
-
-
-* The success of Go 1
-
-The Go 1 release in March 2012 heralded a new era for the project.
-
-Users appreciated the stability. Huge uptick in community growth.
-
-.image how-go-was-made/trends.png
-
-Contributors focused on implementation, tools, and ecosystem.
-
-
-* The release cycle
-
-The next release was Go 1.1, more than a year after Go 1.
-
-This is too long; switch to a 6-month release cycle.
-
-Stuck to this plan for 1.2, 1.3, and 1.4, and we're (almost) on track for 1.5.
-
-
-* The future of change
-
-
-* A question
-
-Go's development process emphasizes up-front design.
-
-The project has ~450 contributors and many committers from outside Google.
-
-But most change proposals
-(despite being driven by community feedback)
-were made by the Go team at Google.
-
-Why is this?
-
-
-* Contribution guidelines
-
-The Go contribution guidelines are thorough on the code review process.
-
-But on design, just this:
-
-"Before undertaking to write something new for the Go project, send mail to the mailing list to discuss what you plan to do."
-
-Does this decribe the project's approach to design? Only superficially.
-
-Successful proposals include design docs
-that discuss rationale, tradeoffs, and implementation.
-
-There is a gap in our documented process.
-
-
-* Go Change Proposal Process: a proposal
-
-Brad Fitzpatrick and I recently proposed a formal Change Proposal Process.
-
-Its goals:
-
-- Make the design process clear to new contributors.
-- Commit to timely evaluations of proposals.
-- Build a recorded history of proposals.
-
-
-* How does it work?
-
-The new change process, in brief:
-
-- File an issue.
-- The contributors triage the issue.
-- Write a design document (following a template).
-- The contributors review the document.
-- If the proposal is accepted, implement it.
-
-[[https://golang.org/s/proposal-process][golang.org/s/proposal-process]]
-
-
-* An experimental process
-
-The new process is an experiment.
-
-We're still discussing exactly how it should work.
-
-I hope it will make Go's design process more accessible to the community.
-
-
-* Conclusion
-
-Go's design-driven process has served us well.
-
-But as Go is more widely used,
-the community needs a larger role in shaping its future.
-
-With your help, we can make Go's next 5 years more spectacular than the last.
-
-.image how-go-was-made/5years.png 350 _ 
diff --git a/content/2015/how-go-was-made/5years.png b/content/2015/how-go-was-made/5years.png
deleted file mode 100644
index df10648..0000000
--- a/content/2015/how-go-was-made/5years.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/errors-discussion.png b/content/2015/how-go-was-made/errors-discussion.png
deleted file mode 100644
index 3ca8a5e..0000000
--- a/content/2015/how-go-was-made/errors-discussion.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/errors-final.png b/content/2015/how-go-was-made/errors-final.png
deleted file mode 100644
index 78bad5b..0000000
--- a/content/2015/how-go-was-made/errors-final.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/errors-issue.png b/content/2015/how-go-was-made/errors-issue.png
deleted file mode 100644
index 72a4225..0000000
--- a/content/2015/how-go-was-made/errors-issue.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/errors-rog.png b/content/2015/how-go-was-made/errors-rog.png
deleted file mode 100644
index 0c121d8..0000000
--- a/content/2015/how-go-was-made/errors-rog.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/gopherswrench.jpg b/content/2015/how-go-was-made/gopherswrench.jpg
deleted file mode 100644
index 93005f4..0000000
--- a/content/2015/how-go-was-made/gopherswrench.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/mapchan.diff b/content/2015/how-go-was-made/mapchan.diff
deleted file mode 100644
index ddd5cd0..0000000
--- a/content/2015/how-go-was-made/mapchan.diff
+++ /dev/null
@@ -1,8 +0,0 @@
- type PollServer struct {
--       cr, cw *chan *FD;       // buffered >= 1
-+       cr, cw chan *FD;        // buffered >= 1
-        pr, pw *os.FD;
--       pending *map[int64] *FD;
-+       pending map[int64] *FD;
-        poll *Pollster; // low-level OS hooks
- }
diff --git a/content/2015/how-go-was-made/reflect1.png b/content/2015/how-go-was-made/reflect1.png
deleted file mode 100644
index 3ab1299..0000000
--- a/content/2015/how-go-was-made/reflect1.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/reflect2.png b/content/2015/how-go-was-made/reflect2.png
deleted file mode 100644
index dcf8213..0000000
--- a/content/2015/how-go-was-made/reflect2.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/reflect3.png b/content/2015/how-go-was-made/reflect3.png
deleted file mode 100644
index a4361d6..0000000
--- a/content/2015/how-go-was-made/reflect3.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/trends.png b/content/2015/how-go-was-made/trends.png
deleted file mode 100644
index a5a26a1..0000000
--- a/content/2015/how-go-was-made/trends.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/how-go-was-made/website.png b/content/2015/how-go-was-made/website.png
deleted file mode 100644
index 6254020..0000000
--- a/content/2015/how-go-was-made/website.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/json.slide b/content/2015/json.slide
deleted file mode 100644
index 1991819..0000000
--- a/content/2015/json.slide
+++ /dev/null
@@ -1,319 +0,0 @@
-JSON, interfaces, and go generate
-
-Francesc Campoy
-Developer, Advocate, and Gopher
-@francesc
-campoy@golang.org
-
-* Your mission
-
-Your mission, should you choose to accept it, is to decode this message:
-
-.code json/unmarshaler0map.go /^{/,/^}/
-
-into:
-
-.code json/unmarshaler0.go /type Person/,/^}/
-
-* Your mission (cont.)
-
-Where `ShirtSize` is an enum _(1)_:
-
-.code json/unmarshaler0.go /type ShirtSize byte/,/^\)/
-
-_(1)_: Go doesn't have enums.
-In this talk I will refer to constants of integer types as enums.
-
-* Using a map
-
-* Using a map
-
-_Pros_: very simple
-
-_Cons_: too simple? we have to write extra code
-
-.code json/unmarshaler0map.go /Person.*Parse/,/p.Name/
-
-* Parsing dates
-
-Time format based on a "magic" date:
-
-    Mon Jan 2 15:04:05 -0700 MST 2006
-
-An example:
-
-.play json/dates.go /func main/,
-
-* Why that date?
-
-Let's reorder:
-
-    Mon Jan 2 15:04:05 -0700 MST 2006
-
-into:
-
-    01/02 03:04:05 PM 2006 -07:00 MST
-
-which is:
-
-* 1 2 3 4 5 6 7!
-
-.image json/img/mindblown.gif 500 _
-
-* Parsing the birth date:
-
-Since our input was:
-
-.code json/unmarshaler0map.go /^{/,/^}/
-
-Parse the birth date:
-
-.code json/unmarshaler0map.go /time.Parse/,/p.Born/
-
-* Parsing the shirt size
-
-Many ways of writing this, this is a pretty bad one:
-
-.code json/unmarshaler0map.go /ParseShirtSize/,/^}/
-
-Use a `switch` statement, but a map is more compact.
-
-* Parsing the shirt size
-
-Our complete parsing function:
-
-.code json/unmarshaler0map.go /Person.*Parse/,/^}/
-
-* Does this work?
-
-.play json/unmarshaler0map.go /func main/,/^}/
-
-_Note_: `ShirtSize` is a `fmt.Stringer`
-
-* JSON decoding into structs
-
-* JSON decoding into structs
-
-Use tags to adapt field names:
-
-.code json/unmarshaler0bad.go /type Person/,/^}/
-
-But this doesn't fit:
-
-.play json/unmarshaler0bad.go /func main/,
-
-* Let's use an auxiliary struct type
-
-Use string fields and do any decoding manually afterwards.
-
-.code json/unmarshaler0.go /var aux struct/,/}/
-
-_Note_: the field tag for `Name` is not needed; the JSON decoder performs a case
-insensitive match if the exact form is not found.
-
-* Let's use an auxiliary struct type (cont.)
-
-The rest of the `Parse` function doesn't change much:
-
-.code json/unmarshaler0.go /Person.*Parse/,/^}/
-
-* Can we do better?
-
-* Current solution
-
-Repetition if other types have fields with:
-
-- date fields with same formatting,
-- or t-shirt sizes.
-
-Let's make the types smarter so `json.Decoder` will do all the work transparently.
-
-*Goal*: `json.Decoder` should do all the work for me!
-
-* Meet Marshaler and Unmarshaler
-
-Types satisfying `json.Marshaler` define how to be encoded into json.
-
-    type Marshaler interface {
-        MarshalJSON() ([]byte, error)
-    }
-
-And `json.Unmarshaler` for the decoding part.
-
-    type Unmarshaler interface {
-        UnmarshalJSON([]byte) error
-    }
-
-* UnmarshalJSON all the things!
-
-* Let's make Person a json.Unmarshaler
-
-Replace:
-
-.code json/unmarshaler0.go /Person.*Parse/
-
-with:
-
-.code json/unmarshaler1.go /Person.*UnmarshalJSON/,/rest of function/
-
-* Let's make Person a json.Unmarshaler (cont.)
-
-And our `main` function becomes:
-
-.play json/unmarshaler1.go /func main/,/^}/
-
-* UnmarshalJSON for enums
-
-Substitute `ParseShirtSize`:
-
-.code json/unmarshaler1.go /ParseShirtSize/
-
-with `UnmarshalJSON`:
-
-.code json/unmarshaler2.go /ShirtSize.*UnmarshalJSON/,/^}/
-
-* UnmarshalJSON for enums (cont.)
-
-Now use `ShirtSize` in the aux struct:
-
-.play json/unmarshaler2.go /Person.*UnmarshalJSON/,/rest of function/
-
-Use the same trick to parse the birthdate.
-
-* Unmarshaling differently formatted dates
-
-Create a new type `Date`:
-
-.code json/unmarshaler3.go /type Date/
-
-And make it a `json.Unmarshaler`:
-
-.code json/unmarshaler3.go /Date.*UnmarshalJSON/,/^}/
-
-* Unmarshaling differently formatted dates (cont.)
-
-Now use `Date` in the aux struct:
-
-.play json/unmarshaler3.go /Person.*UnmarshalJSON/,/^}/
-
-Can this code be shorter?
-
-* Yes!
-
-By making the `Born` field in `Person` of type `Date`.
-
-`Person.UnmarshalJSON` is then equivalent to the default behavior!
-
-It can be safely removed.
-
-.play json/unmarshaler4.go /func main/,/^}/
-
-* Was this really better?
-
-- Code length: 86LoC vs 80LoC
-
-- Reusability of types
-
-- Easier to maintain
-
-- Usage of the standard library
-
-* Other ideas
-
-* Roman numerals
-
-* Roman numerals
-
-Because why not?
-
-.code json/roman_numerals.go /type romanNumeral/
-
-And because Roman numerals are classier
-
-.code json/roman_numerals.go /type Movie/,/^}/
-
-* Roman numerals (cont.)
-
-.play json/roman_numerals.go /func main/,/^}/
-
-* Secret data
-
-* Secret data
-
-Some data is never to be encoded in clear text.
-
-.code json/secret.go /type Person/,/type secret/
-
-Use cryptography to make sure this is safe:
-
-.code json/secret.go /secret.*MarshalJSON/,/^}/
-
-_Note_: This solution is just a toy; don't use it for real systems.
-
-* Secret data (cont.)
-
-And use the same key to decode it when it comes back:
-
-.code json/secret.go /secret.*UnmarshalJSON/,/^}/
-
-* Secret data (cont.)
-
-Let's try it:
-
-.play json/secret.go /func main/,/^}/
-
-* But most JSON enums are boring
-
-* go generate to the rescue!
-
-`go`generate`:
-
-- introduced in Go 1.4
-- a tool for package authors
-- an extra step before `go`build`
-
-You will see it as comments in the code like:
-
-    //go:generate go tool yacc -o gopher.go -p parser gopher.y
-
-More information in the [[http://blog.golang.org/generate][blog post]].
-
-* code generation tools: stringer
-
-`stringer` generates `String` methods for enum types.
-
-    package painkiller
-
-    //go:generate stringer -type=Pill
-
-    type Pill int
-
-    const (
-        Placebo Pill = iota
-        Aspirin
-        Ibuprofen
-        Paracetamol
-    )
-
-Call `go`generate`:
-
-    $ go generate $GOPATH/src/path_to_painkiller
-
-which will create a new file containing the `String` definition for `Pill`.
-
-* jsonenums
-
-Around 200 lines of code.
-
-Parses and analyses a package using:
-
-- `go/{ast/build/format/parser/token}`
-- `golang.org/x/tools/go/exact`, `golang.org/x/tools/go/types`
-
-And generates the code using:
-
-- `text/template`
-
-And it's on github: [[http://github.com/campoy/jsonenums][github.com/campoy/jsonenums]]
-
-* Demo
diff --git a/content/2015/json/dates.go b/content/2015/json/dates.go
deleted file mode 100644
index 60fce9b..0000000
--- a/content/2015/json/dates.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	now := time.Now()
-	fmt.Printf("Standard format: %v\n", now)
-	fmt.Printf("American format: %v\n", now.Format("Jan 2 2006"))
-	fmt.Printf("European format: %v\n", now.Format("02/01/2006"))
-	fmt.Printf("Chinese format: %v\n", now.Format("2006/01/02"))
-}
diff --git a/content/2015/json/img/mindblown.gif b/content/2015/json/img/mindblown.gif
deleted file mode 100644
index 7cf3738..0000000
--- a/content/2015/json/img/mindblown.gif
+++ /dev/null
Binary files differ
diff --git a/content/2015/json/roman_numerals.go b/content/2015/json/roman_numerals.go
deleted file mode 100644
index 2a5f006..0000000
--- a/content/2015/json/roman_numerals.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-)
-
-type romanNumeral int
-
-var numerals = []struct {
-	s string
-	v int
-}{
-	{"M", 1000}, {"CM", 900},
-	{"D", 500}, {"CD", 400},
-	{"C", 100}, {"XC", 90},
-	{"L", 50}, {"XL", 40},
-	{"X", 10}, {"IX", 9},
-	{"V", 5}, {"IV", 4},
-	{"I", 1},
-}
-
-func (n romanNumeral) String() string {
-	res := ""
-	v := int(n)
-	for _, num := range numerals {
-		res += strings.Repeat(num.s, v/num.v)
-		v %= num.v
-	}
-	return res
-}
-
-func parseRomanNumeral(s string) (romanNumeral, error) {
-	res := 0
-	for _, num := range numerals {
-		for strings.HasPrefix(s, num.s) {
-			res += num.v
-			s = s[len(num.s):]
-		}
-	}
-	return romanNumeral(res), nil
-}
-
-func (n romanNumeral) MarshalJSON() ([]byte, error) {
-	if n <= 0 {
-		return nil, fmt.Errorf("Romans had only natural (=>1) numbers")
-	}
-	return json.Marshal(n.String())
-}
-
-func (n *romanNumeral) UnmarshalJSON(data []byte) error {
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil {
-		return err
-	}
-	p, err := parseRomanNumeral(s)
-	if err == nil {
-		*n = p
-	}
-	return err
-}
-
-type Movie struct {
-	Title string
-	Year  romanNumeral
-}
-
-func main() {
-	// Encoding
-	movies := []Movie{{"E.T.", 1982}, {"The Matrix", 1999}, {"Casablanca", 1942}}
-	res, err := json.MarshalIndent(movies, "", "\t") // HL
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Printf("Movies: %s\n", res)
-
-	// Decoding
-	var m Movie
-	inputText := `{"Title": "Alien", "Year":"MCMLXXIX"}`
-	if err := json.NewDecoder(strings.NewReader(inputText)).Decode(&m); err != nil {
-		log.Fatal(err)
-	}
-	fmt.Printf("%s was released in %d\n", m.Title, m.Year)
-}
diff --git a/content/2015/json/secret.go b/content/2015/json/secret.go
deleted file mode 100644
index 60e72d4..0000000
--- a/content/2015/json/secret.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"crypto"
-	"crypto/rand"
-	"crypto/rsa"
-	_ "crypto/sha512"
-	"encoding/base64"
-	"encoding/json"
-	"fmt"
-	"log"
-)
-
-var key *rsa.PrivateKey
-
-func init() {
-	k, err := rsa.GenerateKey(rand.Reader, 2048)
-	if err != nil {
-		log.Fatalf("generate key: %v", err)
-	}
-	key = k
-}
-
-type Person struct {
-	Name string `json:"name"`
-	SSN  secret `json:"ssn"`
-}
-
-type secret string
-
-func (s secret) MarshalJSON() ([]byte, error) {
-	m, err := rsa.EncryptOAEP(crypto.SHA512.New(), rand.Reader, key.Public().(*rsa.PublicKey), []byte(s), nil)
-	if err != nil {
-		return nil, err
-	}
-	return json.Marshal(base64.StdEncoding.EncodeToString(m))
-}
-
-func (s *secret) UnmarshalJSON(data []byte) error {
-	var text string
-	if err := json.Unmarshal(data, &text); err != nil { // HL
-		return fmt.Errorf("deocde secret string: %v", err)
-	}
-	cypher, err := base64.StdEncoding.DecodeString(text) // HL
-	if err != nil {
-		return err
-	}
-	raw, err := rsa.DecryptOAEP(crypto.SHA512.New(), rand.Reader, key, cypher, nil) // HL
-	if err == nil {
-		*s = secret(raw)
-	}
-	return err
-}
-
-func main() {
-	p := Person{
-		Name: "Francesc",
-		SSN:  "123456789",
-	}
-
-	b, err := json.MarshalIndent(p, "", "\t")
-	if err != nil {
-		log.Fatalf("Encode person: %v", err)
-	}
-	fmt.Printf("%s\n", b)
-
-	var d Person
-	if err := json.Unmarshal(b, &d); err != nil {
-		log.Fatalf("Decode person: %v", err)
-	}
-	fmt.Println(d)
-}
diff --git a/content/2015/json/unmarshaler0.go b/content/2015/json/unmarshaler0.go
deleted file mode 100644
index 1206f8f..0000000
--- a/content/2015/json/unmarshaler0.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `
-{
-    "name":"Gopher",
-    "birthdate": "2009/11/10",
-    "shirt-size": "XS"
-}
-`
-
-type Person struct {
-	Name string
-	Born time.Time
-	Size ShirtSize
-}
-
-func (p Person) String() string {
-	return fmt.Sprintf("%s was born on %v and uses a %v t-shirt",
-		p.Name, p.Born.Format("Jan 2 2006"), p.Size)
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	sizes := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}
-	s, ok := sizes[ss]
-	if !ok {
-		return "invalid t-shirt size"
-	}
-	return s
-}
-
-func ParseShirtSize(s string) (ShirtSize, error) {
-	sizes := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}
-	ss, ok := sizes[s]
-	if !ok {
-		return NA, fmt.Errorf("invalid t-shirt size %q", s)
-	}
-	return ss, nil
-}
-
-func (p *Person) Parse(s string) error {
-	var aux struct {
-		Name string
-		Born string `json:"birthdate"`
-		Size string `json:"shirt-size"`
-	}
-
-	dec := json.NewDecoder(strings.NewReader(s))
-	if err := dec.Decode(&aux); err != nil {
-		return fmt.Errorf("decode person: %v", err)
-	}
-
-	p.Name = aux.Name
-	born, err := time.Parse("2006/01/02", aux.Born)
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	p.Born = born
-	p.Size, err = ParseShirtSize(aux.Size)
-	return err
-}
-
-func main() {
-	var p Person
-	if err := p.Parse(input); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler0bad.go b/content/2015/json/unmarshaler0bad.go
deleted file mode 100644
index f36d176..0000000
--- a/content/2015/json/unmarshaler0bad.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `
-    {
-        "name":"Gopher",
-        "birthdate": "2009/11/10",
-        "shirt-size": "XS"
-    }
-    `
-
-type Person struct {
-	Name string    `json:"name"`
-	Born time.Time `json:"birthdate"`
-	Size ShirtSize `json:"shirt-size"`
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	s, ok := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func main() {
-	var p Person
-	dec := json.NewDecoder(strings.NewReader(input))
-	if err := dec.Decode(&p); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler0map.go b/content/2015/json/unmarshaler0map.go
deleted file mode 100644
index c8af3b6..0000000
--- a/content/2015/json/unmarshaler0map.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `
-{
-    "name": "Gopher",
-    "birthdate": "2009/11/10",
-    "shirt-size": "XS"
-}
-`
-
-type Person struct {
-	Name string
-	Born time.Time
-	Size ShirtSize
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	sizes := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}
-	s, ok := sizes[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func ParseShirtSize(s string) (ShirtSize, error) {
-	sizes := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}
-	ss, ok := sizes[s]
-	if !ok {
-		return NA, fmt.Errorf("invalid ShirtSize %q", s)
-	}
-	return ss, nil
-}
-
-func (p *Person) Parse(s string) error {
-	fields := map[string]string{}
-
-	dec := json.NewDecoder(strings.NewReader(s))
-	if err := dec.Decode(&fields); err != nil {
-		return fmt.Errorf("decode person: %v", err)
-	}
-
-	// Once decoded we can access the fields by name.
-	p.Name = fields["name"]
-
-	born, err := time.Parse("2006/01/02", fields["birthdate"])
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	p.Born = born
-
-	p.Size, err = ParseShirtSize(fields["shirt-size"])
-	return err
-}
-
-func main() {
-	var p Person
-	if err := p.Parse(input); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler1.go b/content/2015/json/unmarshaler1.go
deleted file mode 100644
index cb9f63a..0000000
--- a/content/2015/json/unmarshaler1.go
+++ /dev/null
@@ -1,84 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `
-{
-	"name": "Gopher",
-	"birthdate": "2009/11/10",
-	"shirt-size": "XS"
-}
-`
-
-type Person struct {
-	Name string
-	Born time.Time
-	Size ShirtSize
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	s, ok := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func ParseShirtSize(s string) (ShirtSize, error) {
-	ss, ok := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}[s]
-	if !ok {
-		return NA, fmt.Errorf("invalid ShirtSize %q", s)
-	}
-	return ss, nil
-}
-
-func (p *Person) UnmarshalJSON(data []byte) error {
-	var aux struct {
-		Name string
-		Born string `json:"birthdate"`
-		Size string `json:"shirt-size"`
-	}
-
-	dec := json.NewDecoder(bytes.NewReader(data)) // HL
-	if err := dec.Decode(&aux); err != nil {
-		return fmt.Errorf("decode person: %v", err)
-	}
-	p.Name = aux.Name
-	// ... rest of function omitted ...
-	born, err := time.Parse("2006/01/02", aux.Born)
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	p.Born = born
-	p.Size, err = ParseShirtSize(aux.Size)
-	return err
-}
-
-func main() {
-	var p Person
-	dec := json.NewDecoder(strings.NewReader(input))
-	if err := dec.Decode(&p); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler2.go b/content/2015/json/unmarshaler2.go
deleted file mode 100644
index c7e8a45..0000000
--- a/content/2015/json/unmarshaler2.go
+++ /dev/null
@@ -1,90 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `{
-    "name":"Gopher",
-    "birthdate": "2009/11/10",
-    "shirt-size": "XS"
-}`
-
-type Person struct {
-	Name string
-	Born time.Time
-	Size ShirtSize
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	s, ok := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func (ss *ShirtSize) UnmarshalJSON(data []byte) error {
-	// Extract the string from data.
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil { // HL
-		return fmt.Errorf("shirt-size should be a string, got %s", data)
-	}
-
-	// The rest is equivalen to ParseShirtSize.
-	got, ok := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}[s]
-	if !ok {
-		return fmt.Errorf("invalid ShirtSize %q", s)
-	}
-	*ss = got // HL
-	return nil
-}
-
-func (p *Person) UnmarshalJSON(data []byte) error {
-	var aux struct {
-		Name string
-		Born string    `json:"birthdate"`
-		Size ShirtSize `json:"shirt-size"` // HL
-	}
-
-	dec := json.NewDecoder(bytes.NewReader(data))
-	if err := dec.Decode(&aux); err != nil {
-		return fmt.Errorf("decode person: %v", err)
-	}
-	p.Name = aux.Name
-	p.Size = aux.Size // HL
-	// ... rest of function omitted ...
-	born, err := time.Parse("2006/01/02", aux.Born)
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	p.Born = born
-	return nil
-}
-
-func main() {
-	var p Person
-	dec := json.NewDecoder(strings.NewReader(input))
-	if err := dec.Decode(&p); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler3.go b/content/2015/json/unmarshaler3.go
deleted file mode 100644
index 9a95d40..0000000
--- a/content/2015/json/unmarshaler3.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `{
-    "name":"Gopher",
-    "birthdate": "2009/11/10",
-    "shirt-size": "XS"
-}`
-
-type Person struct {
-	Name string
-	Born Date
-	Size ShirtSize
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	s, ok := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func (ss *ShirtSize) UnmarshalJSON(data []byte) error {
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil {
-		return fmt.Errorf("shirt-size should be a string, got %s", data)
-	}
-	got, ok := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}[s]
-	if !ok {
-		return fmt.Errorf("invalid ShirtSize %q", s)
-	}
-	*ss = got
-	return nil
-}
-
-type Date struct{ time.Time }
-
-func (d Date) String() string { return d.Format("2006/01/02") }
-
-func (d *Date) UnmarshalJSON(data []byte) error {
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil {
-		return fmt.Errorf("birthdate should be a string, got %s", data)
-	}
-	t, err := time.Parse("2006/01/02", s) // HL
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	d.Time = t
-	return nil
-}
-
-func (p *Person) UnmarshalJSON(data []byte) error {
-	r := bytes.NewReader(data)
-	var aux struct {
-		Name string
-		Born Date      `json:"birthdate"` // HL
-		Size ShirtSize `json:"shirt-size"`
-	}
-	if err := json.NewDecoder(r).Decode(&aux); err != nil {
-		return fmt.Errorf("decode person: %v", err)
-	}
-	p.Name = aux.Name
-	p.Size = aux.Size
-	p.Born = aux.Born // HL
-	return nil
-}
-
-func main() {
-	var p Person
-	dec := json.NewDecoder(strings.NewReader(input))
-	if err := dec.Decode(&p); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/json/unmarshaler4.go b/content/2015/json/unmarshaler4.go
deleted file mode 100644
index 0f126a9..0000000
--- a/content/2015/json/unmarshaler4.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-	"strings"
-	"time"
-)
-
-const input = `{
-    "name":"Gopher",
-    "birthdate": "2009/11/10",
-    "shirt-size": "XS"
-}`
-
-type Person struct {
-	Name string    `json:"name"`
-	Born Date      `json:"birthdate"`
-	Size ShirtSize `json:"shirt-size"`
-}
-
-type ShirtSize byte
-
-const (
-	NA ShirtSize = iota
-	XS
-	S
-	M
-	L
-	XL
-)
-
-func (ss ShirtSize) String() string {
-	s, ok := map[ShirtSize]string{XS: "XS", S: "S", M: "M", L: "L", XL: "XL"}[ss]
-	if !ok {
-		return "invalid ShirtSize"
-	}
-	return s
-}
-
-func (ss *ShirtSize) UnmarshalJSON(data []byte) error {
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil {
-		return fmt.Errorf("shirt-size should be a string, got %s", data)
-	}
-	got, ok := map[string]ShirtSize{"XS": XS, "S": S, "M": M, "L": L, "XL": XL}[s]
-	if !ok {
-		return fmt.Errorf("invalid ShirtSize %q", s)
-	}
-	*ss = got
-	return nil
-}
-
-type Date struct{ time.Time }
-
-func (d Date) String() string { return d.Format("2006/01/02") }
-
-func (d *Date) UnmarshalJSON(data []byte) error {
-	var s string
-	if err := json.Unmarshal(data, &s); err != nil {
-		return fmt.Errorf("birthdate should be a string, got %s", data)
-	}
-	t, err := time.Parse("2006/01/02", s)
-	if err != nil {
-		return fmt.Errorf("invalid date: %v", err)
-	}
-	d.Time = t
-	return nil
-}
-
-func main() {
-	var p Person
-	dec := json.NewDecoder(strings.NewReader(input))
-	if err := dec.Decode(&p); err != nil {
-		log.Fatalf("parse person: %v", err)
-	}
-	fmt.Println(p)
-}
diff --git a/content/2015/keeping-up.slide b/content/2015/keeping-up.slide
deleted file mode 100644
index 26f0408..0000000
--- a/content/2015/keeping-up.slide
+++ /dev/null
@@ -1,104 +0,0 @@
-Keeping up with the Gophers
-A brief history of gccgo, improvements, and the future
-
-Chris Manghane
-Google Gopher | Compilers and Toolchains
-cmang@golang.org
-
-* gccgo: "The Other Go Compiler"
-
-- Written and maintained by Ian Lance Taylor (released November 2009)
-
-    2010-01-26  Ian Lance Taylor  <iant@google.com>
-
-    		* MAINTAINERS: Add myself as Go frontend maintainer.
-
-- Compiler frontend for the Go language written in C++
-
-.image keeping-up/gccgo_structure.png 320 _
-
-* gccgo: The Go Team didn't know
-
-"Ian just showed up at our door with a fully working compiler" ~ probably Rob
-
-.html keeping-up/gource_explosion.html
-
-* Why write a Go compiler in C++?
-
-* rationale: architecture support
-
-- cmd/gc (2009) targets 4 major architectures: i386, amd64, ARM, and IBM POWER
-- gcc (4.3, 2009) targets 45 architectures officially, 28 unofficially
-- leveraging gcc => minimal work to support Go on existing architectures
-
-* rationale: code generation
-
-- gcc has ~30 years of work put into code analysis and optimization
-- cmd/gc has only recently focused on code generation (khr's SSA work)
-- leveraging gcc => minimal work to produce optimized binaries
-
-* rationale: technical honesty
-
-- "Keeping each other honest"
-- Distinct implementations => Inconsistencies in specification and implementations
-- Users have options when an implementation lacks features
-- Compilers seek feature parity => Compilers learn from each other
-- Compilers generate better binaries => Virtuous cycle
-
-* gccgo improvements through a telescope
-
-* gofrontend: no dependency on gcc
-
-- gcc implements gofrontend's backend interface
-
-gofrontend (gcc/go/gofrontend/expressions.cc)
-
-.code keeping-up/backend_interface.diff
-
-backend (gcc/go/go-gcc.cc)
-
-.code keeping-up/cst.gcc
-
-* gccgo: builds the `go` tool
-
-- One way to build code across multiple compilers
-
-.code keeping-up/go_build.log
-
-* gofrontend: basic escape analysis
-
-- Implementation of _Escape_analysis_for_Java_ by JD Choi
-
-escape.go
-
-.code keeping-up/escape.go
-
-Connection Graph
-
-.image keeping-up/escape.png
-
-* Keeping up
-
-* gccgo: runtime and garbage collector parity
-
-- gccgo runtime is a modified version of Go 1.3 runtime
-- Go 1.4 runtime was rewritten in Go
-- Go 1.4 changed GC type info
-
-* beyond gccgo: compiler stack maps
-
-- Stack map records locations of live values at a certain address
-- Allows Garbage Collector to be precise about types on stack
-- Enables contiguous stacks to readjust copied pointers
-- Little support in C compilers: gcc has no support, LLVM support is WIP
-
-* llvmgo: another "other Go compiler"
-
-- gofrontend provides backend interface LLVM can implement
-- LLVM byte code is trusted in secure environments such as PNaCl
-- Run native Go in the web
-
-* OS support: OSX and Windows
-
-- gccgo support on not unixes
-- Expert needed
\ No newline at end of file
diff --git a/content/2015/keeping-up/backend_interface.diff b/content/2015/keeping-up/backend_interface.diff
deleted file mode 100644
index f844d34..0000000
--- a/content/2015/keeping-up/backend_interface.diff
+++ /dev/null
@@ -1,7 +0,0 @@
--  tree val_type_tree = type_to_tree(this->type()->get_backend(gogo));
--  go_assert(val_type_tree != error_mark_node);
--  return build_int_cstu(val_type_tree, val);
-+  mpz_t cst;
-+  mpz_init_set_ui(cst, val);
-+  Btype* int_btype = this->type()->get_backend(gogo);
-+  return gogo->backend()->integer_constant_expression(int_btype, cst);
diff --git a/content/2015/keeping-up/cst.gcc b/content/2015/keeping-up/cst.gcc
deleted file mode 100644
index 9784bbb..0000000
--- a/content/2015/keeping-up/cst.gcc
+++ /dev/null
@@ -1,7 +0,0 @@
-Bexpression*
-Gcc_backend::integer_constant_expression(Btype* btype, mpz_t val)
-{
-  tree t = btype->get_tree();
-  tree ret = double_int_to_tree(t, mpz_get_double_int(t, val, true));
-  return this->make_expression(ret);
-}
diff --git a/content/2015/keeping-up/escape.go b/content/2015/keeping-up/escape.go
deleted file mode 100644
index 3a76497..0000000
--- a/content/2015/keeping-up/escape.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package main
-
-var global *int
-
-func f(i *int) { global = i }
-
-func main() {
-	a := new(int)
-	f(a)
-}
diff --git a/content/2015/keeping-up/escape.png b/content/2015/keeping-up/escape.png
deleted file mode 100644
index 401b8f0..0000000
--- a/content/2015/keeping-up/escape.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/keeping-up/gccgo_structure.png b/content/2015/keeping-up/gccgo_structure.png
deleted file mode 100644
index 91bfbf6..0000000
--- a/content/2015/keeping-up/gccgo_structure.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/keeping-up/go_build.log b/content/2015/keeping-up/go_build.log
deleted file mode 100644
index 50353d8..0000000
--- a/content/2015/keeping-up/go_build.log
+++ /dev/null
@@ -1,14 +0,0 @@
-$ cat hello.go
-package main
-
-import "fmt"
-
-func main() {
-     fmt.Println("Hello World!")
-}
-
-$ go run -gccgoflags="-fgo-optimize-allocs" hello.go
-Hello World!
-
-$ go version
-go version go1.4.2 gccgo (GCC) 6.0.0 20150714 (experimental) linux/amd64
\ No newline at end of file
diff --git a/content/2015/keeping-up/gource_explosion.html b/content/2015/keeping-up/gource_explosion.html
deleted file mode 100644
index 10cc0ac..0000000
--- a/content/2015/keeping-up/gource_explosion.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<video id="video" controls="" autoplay="" loop="" width="100%">
-    <source src="http://webm.host/d764a/vid.webm" type="video/webm">
-</video>
diff --git a/content/2015/simplicity-is-complicated.slide b/content/2015/simplicity-is-complicated.slide
deleted file mode 100644
index 19f1fc1..0000000
--- a/content/2015/simplicity-is-complicated.slide
+++ /dev/null
@@ -1,373 +0,0 @@
-Simplicity is Complicated
-
-dotGo
-9 Nov 2015
-
-Rob Pike
-Google
-@rob_pike
-[[http://golang.org/s/plusrob][+RobPikeTheHuman]]
-http://golang.org/
-
-* Bonjour mes Gophers!
-
-.image simplicity-is-complicated/gophers.jpg 512 _
-
-* Success
-
-What makes Go successful?
-
-Many reasons cited:
-
-- speed of compilation
-- speed of execution
-- deployment
-- tools
-- libraries
-
-These are not language features.
-Less often cited: true language features such as interfaces or concurrency.
-
-All are important but not really an answer.
-
-* Simplicity
-
-My answer: Simplicity.
-
-Go is simple, at least compared to established languages.
-
-Simplicity has many facets.
-
-Simplicity is complicated.
-
-* Convergence
-
-[[http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/From-Parallel-to-Concurrent?utm_content=bufferf1e11&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer][Attended]] [[https://langnext2014.eventday.com/][Lang.Next]] conference last year (2014).
-
-Heard talks about new versions of Java, JavaScript (ECMAScript), Typescript, C#, C++, Hack (PHP), and more.
-
-These languages actively borrow features from one another.
-
-They are converging into a single huge language.
-
-* Language relativity
-
-_Sapir-Whorf_hypothesis_: Language influences thought.
-
-Controversial with regard to human languages.
-
-Close to a fact for computer languages. Consider:
-
-- logic programming
-- procedural programming
-- functional programming
-- object-oriented programming
-- concurrent programming
-
-Like disciplines in mathematics.
-
-* Convergence and relativity
-
-If the languages all converge, we will all think the same.
-
-But different ways of thinking are good.
-
-Need different languages for different problems.
-
-We don't want just one tool, we want a set of tools, each best at one task.
-
-* Convergence and features
-
-The talks at Lang.Next were about new language versions (Java 8, ECMAScript 6, C#, C++14) and were lists of features.
-
-These languages evolve and compete by adding features.
-
-The languages grow in complexity while becoming more similar.
-
-Bloat without distinction.
-
-* Features in Go
-
-Go is different.
-
-Go does not try to be like the other languages.
-
-Go does not compete on features.
-
-As of Go 1, the language is fixed.
-
-Many newcomers to Go ask for features from languages they know.
-But those features do not belong in Go—and the language is fixed.
-
-Adding features to Go would not make it better, just bigger.
-
-That would make Go less interesting by being less different.
-
-* But you need features!
-
-Of course, there must be _some_ features.
-
-But which ones? The right ones!
-
-Design by consensus.
-
-* Readability
-
-If a language has too many features, you waste time choosing which ones to use.
-Then implement, refine, possibly rethink and redo.
-
-Later, "Why does the code work this way?"
-
-_The_code_is_harder_to_understand_simply_because_it_is_using_a_more_complex_language._
-
-Preferable to have just one way, or at least fewer, simpler ways.
-
-Features add complexity. We want simplicity.
-
-Features hurt readability. We want readability.
-
-Readability is paramount.
-
-* Readable means Reliable
-
-Readable code is reliable code.
-
-It's easier to understand.
-
-It's easier to work on.
-
-If it breaks, it's easier to fix.
-
-If the language is complicated:
-
-- You must understand more things to read and work on the code.
-- You must understand more things to debug and fix it.
-
-A key tradeoff: More fun to write, or less work to maintain?
-
-* Expressiveness
-
-Features are often suggested to aid "expressiveness".
-
-Conciseness can be expressive but not always readable.
-(Consider APL:  ⊃ 1 ω ∨ . ∧ 3 4 = +/ +⌿ 1 0 ‾1 ∘.θ 1 - ‾1 Φ″ ⊂ ω)
-
-Can also be expensive, implementing simple ideas with too-powerful primitives.
-Performance can also be unpredictable.
-
-On the other hand, verbosity can inhibit readability by obscuring the intent.
-
-Build on, but do not be limited by, familiar ideas.
-
-Be concise while remaining expressive.
-
-* The right set of features
-
-Not features for features' sake.
-
-Features that "cover the space", like a vector basis covering solution space.
-
-Orthogonal features that interact predictably.
-
-Simple features that interact in simple ways.
-
-Simplicity comes from orthogonality and predictability.
-
-Keep the language's goals in mind.
-
-* Go's goals
-
-Clean procedural language designed for scalable cloud software.
-
-Composable distinct elements, including:
-
-- concrete data types
-- functions and methods
-- interfaces
-- packages
-- concurrency
-
-Plus: Good tools, fast builds.
-
-All the pieces feel simple in practice.
-
-* Simple can be expressive
-
-.image simplicity-is-complicated/gopherslide2smblue.jpg 512 _
-
-* Don't need all those features
-
-They add complexity without clarity.
-
-.image simplicity-is-complicated/gopherslide2sm.jpg 512 _
-
-* Simplicity
-
-Go is actually complex, but it _feels_ simple.
-
-Interacting elements must mesh seamlessly, without surprises.
-
-Requires a lot of design, implementation work, refinement.
-
-Simplicity is the art of hiding complexity.
-
-* A few simple things in Go
-
-- garbage collection
-- goroutines
-- constants
-- interfaces
-- packages
-
-Each hides complexity behind a simple facade.
-
-* Garbage collection
-
-Perhaps the best example of simplicity hiding complexity.
-
-Very difficult to implement well, but worth it.
-Yet so simple the language specification mentions it only in the introduction.
-Nonetheless, parts of the language strongly influenced by it.
-
-Code is simpler because GC is there.
-Design does not need to include "ownership".
-
-Go: there is no `free`. There is only garbage collection.
-As simple as it can be. (But complex behind the facade.)
-
-* Concurrency
-
-Concurrency is the ability to write your program as independently executing pieces.
-In Go, concurrency has three elements:
-
-- goroutines (execution)
-- channels (communication)
-- `select` (coordination)
-
-Let's talk about goroutines.
-
-* Goroutines
-
-Start a goroutine with the `go` keyword:
-
-	go function(args)
-
-Three extra keystrokes ('g', 'o', ' '). Hard to be much simpler.
-
-Like garbage collection, eliminate considerations from the programmer's concern:
-
-- no stack size
-- no return or completion status
-- no mechanism for management
-- no "ID"
-
-These are things other systems would provide. Go instead has a minimalist design.
-
-Implementation complex, dependent on garbage collection for stack management.
-
-* Constants
-
-In Go, constants are just numbers, even though (because) it is strongly typed.
-
-	var nanosecond = time.Second/1e9
-
-Simple idea took about a year to work out. Difficulties:
-
-- "infinite" precision integers
-- "infinite" precision floating point (tried and failed with rationals)
-- promotion rules (`i` `:=` `2;` `f` `:=` `2.0;`  `g` `:=` `1/2;` `h` `:=` `1/2.0`)
-- corner cases like shift
-
-.play simplicity-is-complicated/shift.go /Printf/
-
-Still not totally satisfied, but the effect is that constants feel like numbers, contribute to the ease of using Go. But complicated behind the scenes.
-
-More at [[http://blog.golang.org/constants][this blog post]].
-
-* Interfaces
-
-Just a set of methods. No data. Simple idea, but more complex than expected.
-
-	type Reader interface {
-		Read([]byte) (int, error)
-	}
-
-Also need variables of that type (`var` `reader` `io.Reader`).
-These variables add dynamic typing to a statically typed language.
-
-	var r Reader = os.Stdin // Statically checked.
-	var x interface{} = os.Stdin // Statically checked.
-	r = x.(Reader) // Dynamically checked. Must be explicit here - design decision.
-
-Requires careful design. Interface assignment must be implemented at run time (not a v-table). What if it fails? Led to type assertions and the "comma, ok" idiom.
-
-More complexity crept in. Type assertions and type switches were not in the original plan.
-
-* Interfaces
-
-Go's most distinctive and powerful feature.
-
-Profound effect on library design.
-
-Enables true component architectures. Prime examples are `io.Reader` and `io.Writer`, generalizations of the Unix pipe idea.
-
-Feel simple, worth the complexity.
-
-* Packages
-
-A design for structuring programs and libraries.
-
-	package big
-	...
-	import "math/big"
-
-Took a long time to design. Enable componentization, scalability, sharing, data hiding and isolation, ...
-
-Affect program design, syntax, naming, building, linking, testing, ...
-
-Separation of package path (`"math/big"`) from package name (`big`).
-Enabled the `go` `get` mechanism.
-
-Intricate to implement yet natural to use.
-
-After garbage collection, perhaps the highest ratio of true complexity to apparent simplicity, and therefore of the power of simplicity to hide complexity.
-
-* A "simple" example
-
-.play simplicity-is-complicated/hello.go
-
-* Hidden complexity
-
-Unicode and UTF-8 handled seamlessly.
-
-Packages imported and used easily.
-
-`Fprintf` direct to network connection.
-
-Function promoted to method (`HandleFunc`).
-
-Truly concurrent—server won't block.
-
-Production ready.
-
-All very simple.
-
-* Summary
-
-Simplicity is complicated but the clarity is worth the fight.
-
-.image simplicity-is-complicated/gopherslide2sm.jpg 512 _
-
-* Conclusion
-
-Simplicity is hard—to design.
-
-Simplicity is complicated—to build.
-
-But if you get it right...
-
-Simplicity is easy—to use.
-
-The success of Go proves it.
-
-.image simplicity-is-complicated/gopherslide2smblue.jpg 256 _
diff --git a/content/2015/simplicity-is-complicated/gophers.jpg b/content/2015/simplicity-is-complicated/gophers.jpg
deleted file mode 100644
index ac88bfc..0000000
--- a/content/2015/simplicity-is-complicated/gophers.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/simplicity-is-complicated/gopherslide2sm.jpg b/content/2015/simplicity-is-complicated/gopherslide2sm.jpg
deleted file mode 100644
index 887a7bd..0000000
--- a/content/2015/simplicity-is-complicated/gopherslide2sm.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/simplicity-is-complicated/gopherslide2smblue.jpg b/content/2015/simplicity-is-complicated/gopherslide2smblue.jpg
deleted file mode 100644
index 54581a1..0000000
--- a/content/2015/simplicity-is-complicated/gopherslide2smblue.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/simplicity-is-complicated/gopherslide2smbrown.jpg b/content/2015/simplicity-is-complicated/gopherslide2smbrown.jpg
deleted file mode 100644
index 4ec67af..0000000
--- a/content/2015/simplicity-is-complicated/gopherslide2smbrown.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/simplicity-is-complicated/hello.go b/content/2015/simplicity-is-complicated/hello.go
deleted file mode 100644
index 3d0e80c..0000000
--- a/content/2015/simplicity-is-complicated/hello.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func こんにちは_Gophers(w http.ResponseWriter, req *http.Request) {
-	fmt.Fprintf(w, "こんにちは  Gophers!\n")
-}
-
-func main() {
-	http.HandleFunc("/", こんにちは_Gophers)
-	err := http.ListenAndServe("localhost:12345", nil)
-	if err != nil {
-		log.Fatal("ListenAndServe: ", err)
-	}
-}
diff --git a/content/2015/simplicity-is-complicated/shift.go b/content/2015/simplicity-is-complicated/shift.go
deleted file mode 100644
index fe93b01..0000000
--- a/content/2015/simplicity-is-complicated/shift.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Printf("%T %T", 2.0, 2.0<<0)
-}
diff --git a/content/2015/state-of-go-may.slide b/content/2015/state-of-go-may.slide
deleted file mode 100644
index aa90188..0000000
--- a/content/2015/state-of-go-may.slide
+++ /dev/null
@@ -1,288 +0,0 @@
-The State of Go
-Where we are in May 2015
-27 May 2015
-
-Andrew Gerrand
-adg@golang.org
-
-
-* The State of the State of Go
-
-I gave a similar talk at FOSDEM in February 2015.
-
-.link https://talks.golang.org/2015/state-of-go.slide
-
-This talk builds on that talk.
-
-
-* Go 1.5
-
-
-* Release schedule
-
-Go 1.5 is scheduled for release in August 2015.
-
-The major work is done.
-We are now in the "feature freeze" period.
-
-
-* From C to Go
-
-The `gc` tool chain has been converted from C to Go.
-
-Machine-translated `compile` tool replaces `6g`, `8g`, etc.
-Machine-translated `link` tool replaces `6l`, `8l`, etc.
-New `asm` tool replaces `6a`, `8a`, etc.
-
-Go 1.5 has *no* C code in the tool chain or runtime.
-
-Rob will talk more about this.
-
-
-* Concurrent Garbage Collector
-
-Goals:
-
-- Limit GC latency to less than 10 milliseconds.
-- Run Go application code for at least 40ms out of every 50ms.
-
-.image state-of-go-may/gc.png
-
-.link https://golang.org/s/go14gc
-
-
-* Concurrent GC trade-offs
-
-The new GC spends a little more memory and CPU time
-in exchange for significantly shorter GC pause times.
-
-.image state-of-go-may/gc2.png
-
-
-* Better concurrency performance
-
-Setting `GOMAXPROCS=N` (where `N` is your number of CPUs) works well in Go 1.5.
-
-Better performance executing goroutines in parallel:
-
-.image state-of-go-may/conc-sieve.png _ 800
-
-Better perfomance switching between goroutines in serial:
-
-.image state-of-go-may/conc-chain.png _ 800
-
-
-* Better concurrency performance (bottom line)
-
-Better performance under practical workloads:
-
-.image state-of-go-may/conc-practical.png _ 800
-
-And our benchmark suite:
-
-.image state-of-go-may/conc-bench.png _ 500
-
-
-* Go 1.5 overall performance 
-
-.image state-of-go-may/gcperf.png
-
-
-* Go 1.5 overall performance (continued)
-
-.image state-of-go-may/perfchart.png
-
-
-* OS/Arch ports
-
-Go 1.5 supports some new `GOOS/GOARCH` combinations:
-
-- `darwin/arm`, a.k.a iOS
-- `darwin/arm64` (newer iDevices)
-- `linux/arm64` (cgo is supported, but only with external linking)
-- `openbsd/arm` (no cgo or external linking)
-
-And retires some old ones:
-
-DragonflyBSD dropped support for i386; `dragonfly/386` was removed from Go.
-
-Apple no longer supports OS X 10.6 (no security updates since 2013);
-the Go port to OS X 10.6 (Snow Leopard) is no longer actively maintained.
-
-
-* Shared libraries
-
-Go 1.5 can produce Go shared libraries that can be consumed by Go programs.
-
-Build the standard library as shared libraries:
-
-	$ go install -buildmode=shared std
-
-Build a "Hello, world" program that links against the shared libraries:
-
-	$ go build -linkshared hello.go
-	$ ls -l hello
-	-rwxr-xr-x 1 adg adg 13926 May 26 02:13 hello
-
-
-Go 1.5 can also build Go programs as C archive files (for static linking)
-or shared libraries (for dynamic linking) that can be consumed by C programs.
-
-.link https://golang.org/s/execmodes
-
-(Demo)
-
-
-* Go programs as C libraries
-
-Given a package:
-
-	package p // import "p"
-
-	import "C"
-
-	//export Foo
-	func Foo() int32 { return 42 }
-
-And a main package that imports it:
-
-	package main // import "m"
-
-	import _ "p"
-
-	func main() {} // ignored
-
-You can build an archive file that can be linked into a C program:
-
-	$ go build -buildmode=c-archive m
-	$ ls $GOPATH/pkg/linux_amd64
-	m.a  p.a  p.h
-
-
-* A minor language change
-
-You may now omit the key type from a map literal.
-
-This map literal
-
-	m := map[Point]string{
-		Point{29.935523, 52.891566}:   "Persepolis",
-		Point{-25.352594, 131.034361}: "Uluru",
-		Point{37.422455, -122.084306}: "Googleplex",
-	}
-
-may now be written as:
-
-	m := map[Point]string{
-		{29.935523, 52.891566}:   "Persepolis",
-		{-25.352594, 131.034361}: "Uluru",
-		{37.422455, -122.084306}: "Googleplex",
-	}
-
-
-* "go doc"
-
-The `go` tool has a new implementation of the old `doc` subcommand,
-with a much improved command-line interface:
-
-	$ go doc zip.reader
-	package zip // import "archive/zip"
-
-	type Reader struct {
-		File    []*File
-		Comment string
-		// Has unexported fields.
-	}
-
-	func NewReader(r io.ReaderAt, size int64) (*Reader, error)
-
-	$ cd $GOROOT/src/archive/zip
-	$ go doc reader
-	# same output as above
-
-(Demo)
-
-
-* Execution tracing
-
-The new execution tracer collects data to produce diagrams of process execution.
-
-.image state-of-go/trace.png 350 _
-
-Front end is the Android/Chrome trace-viewer. ([[https://github.com/google/trace-viewer][github.com/google/trace-viewer]])
-
-.link http://golang.org/s/go15trace
-
-
-* Analysis and Refactoring Tools
-
-We have been working on tools for analyzing and manipulating Go source code.
-
-Analysis tools:
-
-- `oracle`: a tool for answering questions about Go source code (w/ plugins for Sublime Text and Emacs).
-- `callgraph`: display the call graph of a Go program.
-- `godoc`-analysis=pointer:` see pointer analysis details in godoc.
-
-Refactoring tools:
-
-- `eg`: a template-based refactoring tool
-- `gorename`: type-safe renaming of identifiers in Go source code.
-
-
-* Builder infrastructure
-
-We have been hacking away at our continuous build infrastructure.
-
-Now running Linux, Windows, OS X, FreeBSD, OpenBSD, and Plan 9 builders
-on Google Compute Engine.
-
-Spin up builders to do work, spin up many in parallel.
-Gives us results much faster.
-
-Sharding of tests on slower platforms (eg, ARM).
-
-Trybots test pending changes. (Demo)
-
-
-* Mobile
-
-Go 1.5 provides support for Android and experimental support for iOS.
-
-.image state-of-go-may/iphone.jpg 500 _
-
-
-* The gomobile tool
-
-The `gomobile` tool simplifies toolchain installation and app
-deployment.
-(It only supports Android right now.)
-
-To install the Android compiler toolchain:
-
-	$ gomobile init
-
-To build an Android APK and install on a device:
-
-	$ gomobile install
-
-To build a shared library for an Android or iOS app:
-
-	$ gomobile bind
-
-(Demo)
-
-
-* Go community events
-
-- GoCon, Tokyo, June
-- GopherCon, Denver, July
-- GolangUK, London, August
-- GothamGo, New York, October
-- dotGo, Paris, November
-
-And more to be announced.
-
-.image state-of-go-may/gophercon.png
-
-
diff --git a/content/2015/state-of-go-may/conc-bench.png b/content/2015/state-of-go-may/conc-bench.png
deleted file mode 100644
index be6b2c5..0000000
--- a/content/2015/state-of-go-may/conc-bench.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/conc-chain.png b/content/2015/state-of-go-may/conc-chain.png
deleted file mode 100644
index 96544fe..0000000
--- a/content/2015/state-of-go-may/conc-chain.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/conc-powser.png b/content/2015/state-of-go-may/conc-powser.png
deleted file mode 100644
index 67d16c4..0000000
--- a/content/2015/state-of-go-may/conc-powser.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/conc-practical.png b/content/2015/state-of-go-may/conc-practical.png
deleted file mode 100644
index 31de73d..0000000
--- a/content/2015/state-of-go-may/conc-practical.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/conc-sieve.png b/content/2015/state-of-go-may/conc-sieve.png
deleted file mode 100644
index 598b89d..0000000
--- a/content/2015/state-of-go-may/conc-sieve.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/gc.png b/content/2015/state-of-go-may/gc.png
deleted file mode 100644
index 92cf682..0000000
--- a/content/2015/state-of-go-may/gc.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/gc2.png b/content/2015/state-of-go-may/gc2.png
deleted file mode 100644
index f91c0cc..0000000
--- a/content/2015/state-of-go-may/gc2.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/gcperf.png b/content/2015/state-of-go-may/gcperf.png
deleted file mode 100644
index 62739bb..0000000
--- a/content/2015/state-of-go-may/gcperf.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/go1bench.svg b/content/2015/state-of-go-may/go1bench.svg
deleted file mode 100644
index 53ee9da..0000000
--- a/content/2015/state-of-go-may/go1bench.svg
+++ /dev/null
@@ -1,515 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="576pt" height="396pt" viewBox="0 0 576 396" version="1.1">
-<defs>
-<g>
-<symbol overflow="visible" id="glyph0-0">
-<path style="stroke:none;" d="M 0.328125 0 L 0.328125 -6.671875 L 2.984375 -6.671875 L 2.984375 0 Z M 0.671875 -0.328125 L 2.65625 -0.328125 L 2.65625 -6.328125 L 0.671875 -6.328125 Z M 0.671875 -0.328125 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-1">
-<path style="stroke:none;" d="M 5.703125 0 L 4.90625 -2.015625 L 1.78125 -2.015625 L 0.984375 0 L 0.015625 0 L 2.828125 -6.875 L 3.890625 -6.875 L 6.65625 0 Z M 3.75 -5.015625 C 3.695312 -5.140625 3.644531 -5.269531 3.59375 -5.40625 C 3.550781 -5.539062 3.507812 -5.660156 3.46875 -5.765625 C 3.4375 -5.878906 3.40625 -5.972656 3.375 -6.046875 C 3.351562 -6.117188 3.34375 -6.160156 3.34375 -6.171875 C 3.332031 -6.160156 3.316406 -6.113281 3.296875 -6.03125 C 3.273438 -5.957031 3.242188 -5.863281 3.203125 -5.75 C 3.171875 -5.644531 3.128906 -5.523438 3.078125 -5.390625 C 3.035156 -5.265625 2.988281 -5.132812 2.9375 -5 L 2.0625 -2.734375 L 4.640625 -2.734375 Z M 3.75 -5.015625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-2">
-<path style="stroke:none;" d="M 5.140625 -2.671875 C 5.140625 -2.265625 5.109375 -1.890625 5.046875 -1.546875 C 4.984375 -1.210938 4.875 -0.921875 4.71875 -0.671875 C 4.570312 -0.429688 4.375 -0.242188 4.125 -0.109375 C 3.875 0.0234375 3.566406 0.09375 3.203125 0.09375 C 2.816406 0.09375 2.484375 0.0234375 2.203125 -0.109375 C 1.921875 -0.253906 1.707031 -0.492188 1.5625 -0.828125 L 1.53125 -0.828125 C 1.53125 -0.816406 1.53125 -0.785156 1.53125 -0.734375 C 1.539062 -0.679688 1.546875 -0.613281 1.546875 -0.53125 C 1.546875 -0.457031 1.546875 -0.367188 1.546875 -0.265625 C 1.546875 -0.171875 1.546875 -0.078125 1.546875 0.015625 L 1.546875 2.078125 L 0.671875 2.078125 L 0.671875 -4.203125 C 0.671875 -4.328125 0.671875 -4.445312 0.671875 -4.5625 C 0.671875 -4.6875 0.664062 -4.796875 0.65625 -4.890625 C 0.65625 -4.984375 0.65625 -5.0625 0.65625 -5.125 C 0.65625 -5.195312 0.648438 -5.25 0.640625 -5.28125 L 1.5 -5.28125 C 1.5 -5.269531 1.5 -5.234375 1.5 -5.171875 C 1.507812 -5.117188 1.515625 -5.050781 1.515625 -4.96875 C 1.523438 -4.882812 1.53125 -4.796875 1.53125 -4.703125 C 1.539062 -4.609375 1.546875 -4.519531 1.546875 -4.4375 L 1.5625 -4.4375 C 1.644531 -4.601562 1.738281 -4.742188 1.84375 -4.859375 C 1.945312 -4.984375 2.0625 -5.082031 2.1875 -5.15625 C 2.320312 -5.238281 2.472656 -5.296875 2.640625 -5.328125 C 2.804688 -5.359375 2.992188 -5.375 3.203125 -5.375 C 3.566406 -5.375 3.875 -5.304688 4.125 -5.171875 C 4.375 -5.046875 4.570312 -4.863281 4.71875 -4.625 C 4.875 -4.394531 4.984375 -4.113281 5.046875 -3.78125 C 5.109375 -3.445312 5.140625 -3.078125 5.140625 -2.671875 Z M 4.21875 -2.640625 C 4.21875 -2.972656 4.195312 -3.265625 4.15625 -3.515625 C 4.125 -3.765625 4.054688 -3.976562 3.953125 -4.15625 C 3.859375 -4.332031 3.726562 -4.46875 3.5625 -4.5625 C 3.40625 -4.65625 3.207031 -4.703125 2.96875 -4.703125 C 2.78125 -4.703125 2.597656 -4.671875 2.421875 -4.609375 C 2.242188 -4.554688 2.09375 -4.453125 1.96875 -4.296875 C 1.84375 -4.140625 1.738281 -3.921875 1.65625 -3.640625 C 1.582031 -3.367188 1.546875 -3.015625 1.546875 -2.578125 C 1.546875 -2.203125 1.578125 -1.882812 1.640625 -1.625 C 1.703125 -1.363281 1.789062 -1.15625 1.90625 -1 C 2.03125 -0.84375 2.179688 -0.726562 2.359375 -0.65625 C 2.535156 -0.582031 2.738281 -0.546875 2.96875 -0.546875 C 3.207031 -0.546875 3.40625 -0.59375 3.5625 -0.6875 C 3.726562 -0.78125 3.859375 -0.914062 3.953125 -1.09375 C 4.054688 -1.28125 4.125 -1.503906 4.15625 -1.765625 C 4.195312 -2.023438 4.21875 -2.316406 4.21875 -2.640625 Z M 4.21875 -2.640625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-3">
-<path style="stroke:none;" d="M 0.6875 0 L 0.6875 -4.046875 C 0.6875 -4.160156 0.6875 -4.273438 0.6875 -4.390625 C 0.6875 -4.503906 0.679688 -4.613281 0.671875 -4.71875 C 0.671875 -4.832031 0.671875 -4.9375 0.671875 -5.03125 C 0.671875 -5.125 0.671875 -5.207031 0.671875 -5.28125 L 1.5 -5.28125 C 1.5 -5.207031 1.5 -5.125 1.5 -5.03125 C 1.507812 -4.9375 1.515625 -4.835938 1.515625 -4.734375 C 1.523438 -4.628906 1.53125 -4.53125 1.53125 -4.4375 C 1.53125 -4.34375 1.53125 -4.265625 1.53125 -4.203125 L 1.546875 -4.203125 C 1.609375 -4.398438 1.675781 -4.570312 1.75 -4.71875 C 1.820312 -4.875 1.90625 -5 2 -5.09375 C 2.09375 -5.1875 2.203125 -5.253906 2.328125 -5.296875 C 2.460938 -5.347656 2.625 -5.375 2.8125 -5.375 C 2.882812 -5.375 2.953125 -5.367188 3.015625 -5.359375 C 3.078125 -5.347656 3.128906 -5.335938 3.171875 -5.328125 L 3.171875 -4.53125 C 3.109375 -4.539062 3.035156 -4.550781 2.953125 -4.5625 C 2.878906 -4.570312 2.796875 -4.578125 2.703125 -4.578125 C 2.492188 -4.578125 2.316406 -4.53125 2.171875 -4.4375 C 2.035156 -4.34375 1.921875 -4.210938 1.828125 -4.046875 C 1.742188 -3.890625 1.679688 -3.703125 1.640625 -3.484375 C 1.597656 -3.265625 1.578125 -3.019531 1.578125 -2.75 L 1.578125 0 Z M 0.6875 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-4">
-<path style="stroke:none;" d=""/>
-</symbol>
-<symbol overflow="visible" id="glyph0-5">
-<path style="stroke:none;" d="M 0.765625 0 L 0.765625 -0.75 L 2.515625 -0.75 L 2.515625 -6.046875 L 0.96875 -4.9375 L 0.96875 -5.765625 L 2.59375 -6.875 L 3.40625 -6.875 L 3.40625 -0.75 L 5.078125 -0.75 L 5.078125 0 Z M 0.765625 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-6">
-<path style="stroke:none;" d="M 5.125 -1.90625 C 5.125 -1.582031 5.070312 -1.296875 4.96875 -1.046875 C 4.863281 -0.804688 4.710938 -0.597656 4.515625 -0.421875 C 4.316406 -0.253906 4.070312 -0.125 3.78125 -0.03125 C 3.488281 0.0507812 3.15625 0.09375 2.78125 0.09375 C 2.363281 0.09375 2.007812 0.0390625 1.71875 -0.0625 C 1.425781 -0.164062 1.179688 -0.304688 0.984375 -0.484375 C 0.796875 -0.660156 0.65625 -0.859375 0.5625 -1.078125 C 0.46875 -1.296875 0.40625 -1.523438 0.375 -1.765625 L 1.296875 -1.84375 C 1.316406 -1.664062 1.359375 -1.5 1.421875 -1.34375 C 1.492188 -1.195312 1.59375 -1.070312 1.71875 -0.96875 C 1.84375 -0.863281 1.988281 -0.78125 2.15625 -0.71875 C 2.332031 -0.65625 2.539062 -0.625 2.78125 -0.625 C 3.226562 -0.625 3.578125 -0.734375 3.828125 -0.953125 C 4.078125 -1.171875 4.203125 -1.492188 4.203125 -1.921875 C 4.203125 -2.179688 4.144531 -2.390625 4.03125 -2.546875 C 3.925781 -2.703125 3.789062 -2.820312 3.625 -2.90625 C 3.457031 -2.988281 3.273438 -3.046875 3.078125 -3.078125 C 2.878906 -3.109375 2.695312 -3.125 2.53125 -3.125 L 2.03125 -3.125 L 2.03125 -3.875 L 2.515625 -3.875 C 2.679688 -3.875 2.851562 -3.890625 3.03125 -3.921875 C 3.207031 -3.960938 3.367188 -4.023438 3.515625 -4.109375 C 3.660156 -4.203125 3.78125 -4.328125 3.875 -4.484375 C 3.976562 -4.640625 4.03125 -4.832031 4.03125 -5.0625 C 4.03125 -5.4375 3.921875 -5.726562 3.703125 -5.9375 C 3.484375 -6.15625 3.160156 -6.265625 2.734375 -6.265625 C 2.347656 -6.265625 2.035156 -6.164062 1.796875 -5.96875 C 1.554688 -5.769531 1.414062 -5.488281 1.375 -5.125 L 0.5 -5.1875 C 0.53125 -5.488281 0.609375 -5.75 0.734375 -5.96875 C 0.867188 -6.195312 1.035156 -6.382812 1.234375 -6.53125 C 1.441406 -6.6875 1.671875 -6.800781 1.921875 -6.875 C 2.179688 -6.945312 2.457031 -6.984375 2.75 -6.984375 C 3.132812 -6.984375 3.460938 -6.929688 3.734375 -6.828125 C 4.015625 -6.734375 4.242188 -6.601562 4.421875 -6.4375 C 4.597656 -6.28125 4.726562 -6.085938 4.8125 -5.859375 C 4.894531 -5.640625 4.9375 -5.40625 4.9375 -5.15625 C 4.9375 -4.957031 4.90625 -4.769531 4.84375 -4.59375 C 4.789062 -4.414062 4.707031 -4.253906 4.59375 -4.109375 C 4.476562 -3.972656 4.328125 -3.851562 4.140625 -3.75 C 3.960938 -3.65625 3.742188 -3.582031 3.484375 -3.53125 L 3.484375 -3.515625 C 3.765625 -3.484375 4.003906 -3.414062 4.203125 -3.3125 C 4.410156 -3.21875 4.582031 -3.097656 4.71875 -2.953125 C 4.851562 -2.816406 4.953125 -2.65625 5.015625 -2.46875 C 5.085938 -2.289062 5.125 -2.101562 5.125 -1.90625 Z M 5.125 -1.90625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-7">
-<path style="stroke:none;" d="M 5.125 -2.25 C 5.125 -1.90625 5.070312 -1.585938 4.96875 -1.296875 C 4.875 -1.015625 4.734375 -0.769531 4.546875 -0.5625 C 4.359375 -0.351562 4.125 -0.191406 3.84375 -0.078125 C 3.570312 0.0351562 3.257812 0.09375 2.90625 0.09375 C 2.5 0.09375 2.144531 0.0195312 1.84375 -0.125 C 1.550781 -0.28125 1.304688 -0.5 1.109375 -0.78125 C 0.910156 -1.070312 0.757812 -1.425781 0.65625 -1.84375 C 0.5625 -2.269531 0.515625 -2.75 0.515625 -3.28125 C 0.515625 -3.894531 0.566406 -4.429688 0.671875 -4.890625 C 0.785156 -5.359375 0.945312 -5.742188 1.15625 -6.046875 C 1.375 -6.359375 1.632812 -6.59375 1.9375 -6.75 C 2.238281 -6.90625 2.582031 -6.984375 2.96875 -6.984375 C 3.207031 -6.984375 3.425781 -6.957031 3.625 -6.90625 C 3.832031 -6.863281 4.019531 -6.785156 4.1875 -6.671875 C 4.351562 -6.566406 4.5 -6.421875 4.625 -6.234375 C 4.75 -6.054688 4.851562 -5.835938 4.9375 -5.578125 L 4.09375 -5.4375 C 4 -5.726562 3.851562 -5.9375 3.65625 -6.0625 C 3.457031 -6.195312 3.222656 -6.265625 2.953125 -6.265625 C 2.710938 -6.265625 2.492188 -6.207031 2.296875 -6.09375 C 2.109375 -5.976562 1.945312 -5.804688 1.8125 -5.578125 C 1.675781 -5.359375 1.566406 -5.078125 1.484375 -4.734375 C 1.410156 -4.390625 1.375 -3.992188 1.375 -3.546875 C 1.539062 -3.835938 1.765625 -4.0625 2.046875 -4.21875 C 2.335938 -4.375 2.671875 -4.453125 3.046875 -4.453125 C 3.359375 -4.453125 3.640625 -4.398438 3.890625 -4.296875 C 4.148438 -4.191406 4.367188 -4.046875 4.546875 -3.859375 C 4.734375 -3.671875 4.875 -3.441406 4.96875 -3.171875 C 5.070312 -2.898438 5.125 -2.59375 5.125 -2.25 Z M 4.234375 -2.21875 C 4.234375 -2.445312 4.203125 -2.65625 4.140625 -2.84375 C 4.078125 -3.039062 3.988281 -3.207031 3.875 -3.34375 C 3.757812 -3.476562 3.613281 -3.582031 3.4375 -3.65625 C 3.269531 -3.726562 3.070312 -3.765625 2.84375 -3.765625 C 2.6875 -3.765625 2.523438 -3.738281 2.359375 -3.6875 C 2.191406 -3.644531 2.039062 -3.570312 1.90625 -3.46875 C 1.78125 -3.363281 1.675781 -3.222656 1.59375 -3.046875 C 1.507812 -2.878906 1.46875 -2.671875 1.46875 -2.421875 C 1.46875 -2.171875 1.5 -1.929688 1.5625 -1.703125 C 1.632812 -1.484375 1.726562 -1.289062 1.84375 -1.125 C 1.96875 -0.96875 2.113281 -0.84375 2.28125 -0.75 C 2.457031 -0.65625 2.65625 -0.609375 2.875 -0.609375 C 3.082031 -0.609375 3.269531 -0.644531 3.4375 -0.71875 C 3.601562 -0.789062 3.742188 -0.894531 3.859375 -1.03125 C 3.984375 -1.175781 4.078125 -1.347656 4.140625 -1.546875 C 4.203125 -1.742188 4.234375 -1.96875 4.234375 -2.21875 Z M 4.234375 -2.21875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-8">
-<path style="stroke:none;" d="M 5.09375 -3.578125 C 5.09375 -2.960938 5.03125 -2.425781 4.90625 -1.96875 C 4.789062 -1.507812 4.625 -1.125 4.40625 -0.8125 C 4.195312 -0.507812 3.9375 -0.28125 3.625 -0.125 C 3.320312 0.0195312 2.976562 0.09375 2.59375 0.09375 C 2.332031 0.09375 2.09375 0.0664062 1.875 0.015625 C 1.664062 -0.0351562 1.476562 -0.117188 1.3125 -0.234375 C 1.144531 -0.347656 1.003906 -0.492188 0.890625 -0.671875 C 0.773438 -0.859375 0.679688 -1.082031 0.609375 -1.34375 L 1.453125 -1.46875 C 1.546875 -1.175781 1.6875 -0.957031 1.875 -0.8125 C 2.070312 -0.675781 2.316406 -0.609375 2.609375 -0.609375 C 2.847656 -0.609375 3.066406 -0.664062 3.265625 -0.78125 C 3.460938 -0.894531 3.628906 -1.0625 3.765625 -1.28125 C 3.898438 -1.507812 4.003906 -1.789062 4.078125 -2.125 C 4.160156 -2.46875 4.207031 -2.867188 4.21875 -3.328125 C 4.144531 -3.171875 4.050781 -3.03125 3.9375 -2.90625 C 3.820312 -2.789062 3.6875 -2.691406 3.53125 -2.609375 C 3.382812 -2.523438 3.222656 -2.457031 3.046875 -2.40625 C 2.867188 -2.363281 2.691406 -2.34375 2.515625 -2.34375 C 2.203125 -2.34375 1.914062 -2.398438 1.65625 -2.515625 C 1.40625 -2.628906 1.191406 -2.785156 1.015625 -2.984375 C 0.835938 -3.191406 0.703125 -3.4375 0.609375 -3.71875 C 0.515625 -4 0.46875 -4.316406 0.46875 -4.671875 C 0.46875 -5.023438 0.519531 -5.34375 0.625 -5.625 C 0.726562 -5.914062 0.875 -6.160156 1.0625 -6.359375 C 1.257812 -6.554688 1.5 -6.707031 1.78125 -6.8125 C 2.070312 -6.925781 2.398438 -6.984375 2.765625 -6.984375 C 3.523438 -6.984375 4.101562 -6.695312 4.5 -6.125 C 4.894531 -5.5625 5.09375 -4.710938 5.09375 -3.578125 Z M 4.125 -4.421875 C 4.125 -4.679688 4.09375 -4.921875 4.03125 -5.140625 C 3.976562 -5.367188 3.890625 -5.566406 3.765625 -5.734375 C 3.648438 -5.898438 3.503906 -6.03125 3.328125 -6.125 C 3.160156 -6.21875 2.960938 -6.265625 2.734375 -6.265625 C 2.515625 -6.265625 2.320312 -6.226562 2.15625 -6.15625 C 1.988281 -6.082031 1.84375 -5.972656 1.71875 -5.828125 C 1.601562 -5.691406 1.515625 -5.523438 1.453125 -5.328125 C 1.390625 -5.128906 1.359375 -4.910156 1.359375 -4.671875 C 1.359375 -4.441406 1.382812 -4.222656 1.4375 -4.015625 C 1.5 -3.816406 1.585938 -3.644531 1.703125 -3.5 C 1.816406 -3.363281 1.957031 -3.253906 2.125 -3.171875 C 2.300781 -3.085938 2.5 -3.046875 2.71875 -3.046875 C 2.882812 -3.046875 3.050781 -3.070312 3.21875 -3.125 C 3.382812 -3.175781 3.535156 -3.257812 3.671875 -3.375 C 3.804688 -3.488281 3.914062 -3.632812 4 -3.8125 C 4.082031 -3.988281 4.125 -4.191406 4.125 -4.421875 Z M 4.125 -4.421875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-9">
-<path style="stroke:none;" d="M 0.5 0 L 0.5 -0.625 C 0.664062 -1 0.867188 -1.332031 1.109375 -1.625 C 1.347656 -1.914062 1.597656 -2.179688 1.859375 -2.421875 C 2.128906 -2.660156 2.390625 -2.878906 2.640625 -3.078125 C 2.898438 -3.273438 3.132812 -3.472656 3.34375 -3.671875 C 3.550781 -3.878906 3.71875 -4.09375 3.84375 -4.3125 C 3.976562 -4.539062 4.046875 -4.789062 4.046875 -5.0625 C 4.046875 -5.257812 4.015625 -5.429688 3.953125 -5.578125 C 3.898438 -5.734375 3.816406 -5.859375 3.703125 -5.953125 C 3.597656 -6.054688 3.46875 -6.132812 3.3125 -6.1875 C 3.15625 -6.238281 2.984375 -6.265625 2.796875 -6.265625 C 2.617188 -6.265625 2.453125 -6.238281 2.296875 -6.1875 C 2.140625 -6.132812 2 -6.0625 1.875 -5.96875 C 1.757812 -5.875 1.660156 -5.753906 1.578125 -5.609375 C 1.503906 -5.460938 1.457031 -5.289062 1.4375 -5.09375 L 0.546875 -5.1875 C 0.578125 -5.425781 0.644531 -5.65625 0.75 -5.875 C 0.851562 -6.09375 1 -6.285156 1.1875 -6.453125 C 1.375 -6.617188 1.597656 -6.75 1.859375 -6.84375 C 2.128906 -6.9375 2.441406 -6.984375 2.796875 -6.984375 C 3.140625 -6.984375 3.441406 -6.941406 3.703125 -6.859375 C 3.972656 -6.773438 4.195312 -6.65625 4.375 -6.5 C 4.5625 -6.34375 4.703125 -6.144531 4.796875 -5.90625 C 4.898438 -5.675781 4.953125 -5.40625 4.953125 -5.09375 C 4.953125 -4.863281 4.910156 -4.644531 4.828125 -4.4375 C 4.742188 -4.226562 4.628906 -4.03125 4.484375 -3.84375 C 4.347656 -3.65625 4.1875 -3.472656 4 -3.296875 C 3.820312 -3.117188 3.632812 -2.945312 3.4375 -2.78125 C 3.238281 -2.613281 3.039062 -2.445312 2.84375 -2.28125 C 2.644531 -2.113281 2.453125 -1.945312 2.265625 -1.78125 C 2.085938 -1.613281 1.929688 -1.445312 1.796875 -1.28125 C 1.660156 -1.113281 1.550781 -0.9375 1.46875 -0.75 L 5.0625 -0.75 L 5.0625 0 Z M 0.5 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-10">
-<path style="stroke:none;" d="M 5.140625 -2.234375 C 5.140625 -1.890625 5.085938 -1.570312 4.984375 -1.28125 C 4.878906 -1 4.722656 -0.753906 4.515625 -0.546875 C 4.316406 -0.347656 4.0625 -0.191406 3.75 -0.078125 C 3.445312 0.0351562 3.097656 0.09375 2.703125 0.09375 C 2.335938 0.09375 2.019531 0.0507812 1.75 -0.03125 C 1.488281 -0.113281 1.265625 -0.226562 1.078125 -0.375 C 0.890625 -0.519531 0.738281 -0.691406 0.625 -0.890625 C 0.519531 -1.097656 0.445312 -1.3125 0.40625 -1.53125 L 1.296875 -1.640625 C 1.328125 -1.515625 1.375 -1.390625 1.4375 -1.265625 C 1.5 -1.140625 1.585938 -1.03125 1.703125 -0.9375 C 1.816406 -0.84375 1.957031 -0.765625 2.125 -0.703125 C 2.289062 -0.648438 2.488281 -0.625 2.71875 -0.625 C 2.945312 -0.625 3.15625 -0.65625 3.34375 -0.71875 C 3.53125 -0.789062 3.6875 -0.894531 3.8125 -1.03125 C 3.945312 -1.164062 4.050781 -1.332031 4.125 -1.53125 C 4.195312 -1.738281 4.234375 -1.96875 4.234375 -2.21875 C 4.234375 -2.4375 4.195312 -2.632812 4.125 -2.8125 C 4.0625 -2.988281 3.960938 -3.140625 3.828125 -3.265625 C 3.703125 -3.390625 3.546875 -3.488281 3.359375 -3.5625 C 3.179688 -3.632812 2.972656 -3.671875 2.734375 -3.671875 C 2.585938 -3.671875 2.453125 -3.65625 2.328125 -3.625 C 2.210938 -3.601562 2.097656 -3.566406 1.984375 -3.515625 C 1.878906 -3.472656 1.785156 -3.421875 1.703125 -3.359375 C 1.617188 -3.304688 1.535156 -3.242188 1.453125 -3.171875 L 0.59375 -3.171875 L 0.828125 -6.875 L 4.734375 -6.875 L 4.734375 -6.140625 L 1.625 -6.140625 L 1.5 -3.953125 C 1.65625 -4.066406 1.847656 -4.164062 2.078125 -4.25 C 2.316406 -4.34375 2.597656 -4.390625 2.921875 -4.390625 C 3.265625 -4.390625 3.570312 -4.335938 3.84375 -4.234375 C 4.113281 -4.128906 4.34375 -3.976562 4.53125 -3.78125 C 4.726562 -3.59375 4.878906 -3.367188 4.984375 -3.109375 C 5.085938 -2.847656 5.140625 -2.554688 5.140625 -2.234375 Z M 5.140625 -2.234375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-11">
-<path style="stroke:none;" d="M 5.125 -1.921875 C 5.125 -1.628906 5.078125 -1.359375 4.984375 -1.109375 C 4.890625 -0.867188 4.75 -0.65625 4.5625 -0.46875 C 4.375 -0.289062 4.128906 -0.148438 3.828125 -0.046875 C 3.535156 0.046875 3.1875 0.09375 2.78125 0.09375 C 2.375 0.09375 2.023438 0.046875 1.734375 -0.046875 C 1.441406 -0.148438 1.195312 -0.289062 1 -0.46875 C 0.8125 -0.644531 0.671875 -0.851562 0.578125 -1.09375 C 0.484375 -1.34375 0.4375 -1.613281 0.4375 -1.90625 C 0.4375 -2.15625 0.472656 -2.378906 0.546875 -2.578125 C 0.628906 -2.773438 0.734375 -2.941406 0.859375 -3.078125 C 0.984375 -3.222656 1.128906 -3.335938 1.296875 -3.421875 C 1.460938 -3.515625 1.632812 -3.570312 1.8125 -3.59375 L 1.8125 -3.625 C 1.613281 -3.664062 1.4375 -3.734375 1.28125 -3.828125 C 1.132812 -3.929688 1.007812 -4.054688 0.90625 -4.203125 C 0.800781 -4.347656 0.722656 -4.503906 0.671875 -4.671875 C 0.617188 -4.847656 0.59375 -5.03125 0.59375 -5.21875 C 0.59375 -5.457031 0.640625 -5.679688 0.734375 -5.890625 C 0.828125 -6.109375 0.960938 -6.296875 1.140625 -6.453125 C 1.328125 -6.617188 1.554688 -6.75 1.828125 -6.84375 C 2.097656 -6.9375 2.410156 -6.984375 2.765625 -6.984375 C 3.140625 -6.984375 3.460938 -6.9375 3.734375 -6.84375 C 4.015625 -6.75 4.242188 -6.617188 4.421875 -6.453125 C 4.597656 -6.296875 4.726562 -6.109375 4.8125 -5.890625 C 4.90625 -5.679688 4.953125 -5.453125 4.953125 -5.203125 C 4.953125 -5.015625 4.925781 -4.832031 4.875 -4.65625 C 4.820312 -4.488281 4.742188 -4.332031 4.640625 -4.1875 C 4.535156 -4.050781 4.40625 -3.929688 4.25 -3.828125 C 4.101562 -3.734375 3.929688 -3.664062 3.734375 -3.625 L 3.734375 -3.609375 C 3.929688 -3.578125 4.113281 -3.515625 4.28125 -3.421875 C 4.457031 -3.335938 4.601562 -3.222656 4.71875 -3.078125 C 4.84375 -2.941406 4.941406 -2.773438 5.015625 -2.578125 C 5.085938 -2.390625 5.125 -2.171875 5.125 -1.921875 Z M 4.046875 -5.15625 C 4.046875 -5.332031 4.019531 -5.488281 3.96875 -5.625 C 3.925781 -5.769531 3.851562 -5.894531 3.75 -6 C 3.65625 -6.101562 3.523438 -6.179688 3.359375 -6.234375 C 3.203125 -6.296875 3.003906 -6.328125 2.765625 -6.328125 C 2.535156 -6.328125 2.335938 -6.296875 2.171875 -6.234375 C 2.015625 -6.179688 1.882812 -6.101562 1.78125 -6 C 1.675781 -5.894531 1.601562 -5.769531 1.5625 -5.625 C 1.519531 -5.488281 1.5 -5.332031 1.5 -5.15625 C 1.5 -5.019531 1.515625 -4.878906 1.546875 -4.734375 C 1.585938 -4.597656 1.65625 -4.46875 1.75 -4.34375 C 1.84375 -4.226562 1.972656 -4.132812 2.140625 -4.0625 C 2.304688 -3.988281 2.519531 -3.953125 2.78125 -3.953125 C 3.050781 -3.953125 3.269531 -3.988281 3.4375 -4.0625 C 3.601562 -4.132812 3.726562 -4.226562 3.8125 -4.34375 C 3.90625 -4.46875 3.96875 -4.597656 4 -4.734375 C 4.03125 -4.878906 4.046875 -5.019531 4.046875 -5.15625 Z M 4.21875 -2 C 4.21875 -2.164062 4.191406 -2.328125 4.140625 -2.484375 C 4.097656 -2.640625 4.019531 -2.773438 3.90625 -2.890625 C 3.800781 -3.015625 3.65625 -3.113281 3.46875 -3.1875 C 3.28125 -3.257812 3.046875 -3.296875 2.765625 -3.296875 C 2.503906 -3.296875 2.285156 -3.257812 2.109375 -3.1875 C 1.929688 -3.113281 1.785156 -3.015625 1.671875 -2.890625 C 1.554688 -2.765625 1.472656 -2.625 1.421875 -2.46875 C 1.367188 -2.3125 1.34375 -2.148438 1.34375 -1.984375 C 1.34375 -1.773438 1.367188 -1.582031 1.421875 -1.40625 C 1.472656 -1.226562 1.554688 -1.078125 1.671875 -0.953125 C 1.785156 -0.828125 1.929688 -0.726562 2.109375 -0.65625 C 2.296875 -0.59375 2.523438 -0.5625 2.796875 -0.5625 C 3.054688 -0.5625 3.273438 -0.59375 3.453125 -0.65625 C 3.640625 -0.726562 3.789062 -0.828125 3.90625 -0.953125 C 4.019531 -1.078125 4.097656 -1.226562 4.140625 -1.40625 C 4.191406 -1.582031 4.21875 -1.78125 4.21875 -2 Z M 4.21875 -2 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-12">
-<path style="stroke:none;" d="M 6.671875 0 L 6.671875 -4.59375 C 6.671875 -4.757812 6.671875 -4.925781 6.671875 -5.09375 C 6.679688 -5.269531 6.6875 -5.429688 6.6875 -5.578125 C 6.695312 -5.742188 6.707031 -5.90625 6.71875 -6.0625 C 6.664062 -5.894531 6.617188 -5.726562 6.578125 -5.5625 C 6.535156 -5.425781 6.488281 -5.273438 6.4375 -5.109375 C 6.382812 -4.953125 6.332031 -4.8125 6.28125 -4.6875 L 4.5 0 L 3.859375 0 L 2.046875 -4.6875 C 2.023438 -4.738281 2.003906 -4.796875 1.984375 -4.859375 C 1.960938 -4.921875 1.941406 -4.988281 1.921875 -5.0625 C 1.898438 -5.132812 1.875 -5.207031 1.84375 -5.28125 C 1.820312 -5.363281 1.800781 -5.441406 1.78125 -5.515625 C 1.71875 -5.691406 1.660156 -5.875 1.609375 -6.0625 C 1.617188 -5.875 1.625 -5.691406 1.625 -5.515625 C 1.632812 -5.359375 1.640625 -5.195312 1.640625 -5.03125 C 1.648438 -4.863281 1.65625 -4.71875 1.65625 -4.59375 L 1.65625 0 L 0.828125 0 L 0.828125 -6.875 L 2.046875 -6.875 L 3.875 -2.109375 C 3.894531 -2.046875 3.921875 -1.960938 3.953125 -1.859375 C 3.992188 -1.753906 4.023438 -1.644531 4.046875 -1.53125 C 4.078125 -1.425781 4.101562 -1.328125 4.125 -1.234375 C 4.15625 -1.140625 4.175781 -1.066406 4.1875 -1.015625 C 4.195312 -1.066406 4.210938 -1.140625 4.234375 -1.234375 C 4.265625 -1.335938 4.296875 -1.441406 4.328125 -1.546875 C 4.359375 -1.648438 4.390625 -1.753906 4.421875 -1.859375 C 4.460938 -1.960938 4.492188 -2.046875 4.515625 -2.109375 L 6.3125 -6.875 L 7.515625 -6.875 L 7.515625 0 Z M 6.671875 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-13">
-<path style="stroke:none;" d="M 2.015625 0.09375 C 1.484375 0.09375 1.082031 -0.046875 0.8125 -0.328125 C 0.550781 -0.609375 0.421875 -0.988281 0.421875 -1.46875 C 0.421875 -1.820312 0.488281 -2.109375 0.625 -2.328125 C 0.757812 -2.554688 0.929688 -2.734375 1.140625 -2.859375 C 1.347656 -2.984375 1.585938 -3.066406 1.859375 -3.109375 C 2.140625 -3.160156 2.421875 -3.191406 2.703125 -3.203125 L 3.890625 -3.21875 L 3.890625 -3.515625 C 3.890625 -3.734375 3.863281 -3.914062 3.8125 -4.0625 C 3.769531 -4.21875 3.703125 -4.34375 3.609375 -4.4375 C 3.515625 -4.53125 3.394531 -4.597656 3.25 -4.640625 C 3.113281 -4.691406 2.953125 -4.71875 2.765625 -4.71875 C 2.585938 -4.71875 2.429688 -4.703125 2.296875 -4.671875 C 2.160156 -4.648438 2.039062 -4.609375 1.9375 -4.546875 C 1.84375 -4.484375 1.765625 -4.394531 1.703125 -4.28125 C 1.640625 -4.175781 1.597656 -4.039062 1.578125 -3.875 L 0.65625 -3.953125 C 0.6875 -4.160156 0.75 -4.351562 0.84375 -4.53125 C 0.9375 -4.707031 1.066406 -4.859375 1.234375 -4.984375 C 1.398438 -5.109375 1.609375 -5.203125 1.859375 -5.265625 C 2.109375 -5.335938 2.414062 -5.375 2.78125 -5.375 C 3.445312 -5.375 3.945312 -5.222656 4.28125 -4.921875 C 4.613281 -4.617188 4.78125 -4.179688 4.78125 -3.609375 L 4.78125 -1.328125 C 4.78125 -1.066406 4.8125 -0.867188 4.875 -0.734375 C 4.945312 -0.609375 5.082031 -0.546875 5.28125 -0.546875 C 5.320312 -0.546875 5.367188 -0.546875 5.421875 -0.546875 C 5.472656 -0.554688 5.519531 -0.566406 5.5625 -0.578125 L 5.5625 -0.03125 C 5.445312 0 5.332031 0.0195312 5.21875 0.03125 C 5.113281 0.0390625 5.003906 0.046875 4.890625 0.046875 C 4.722656 0.046875 4.578125 0.0234375 4.453125 -0.015625 C 4.335938 -0.0546875 4.238281 -0.125 4.15625 -0.21875 C 4.082031 -0.3125 4.023438 -0.421875 3.984375 -0.546875 C 3.953125 -0.679688 3.929688 -0.835938 3.921875 -1.015625 L 3.890625 -1.015625 C 3.796875 -0.835938 3.691406 -0.679688 3.578125 -0.546875 C 3.460938 -0.410156 3.332031 -0.296875 3.1875 -0.203125 C 3.039062 -0.109375 2.867188 -0.0351562 2.671875 0.015625 C 2.484375 0.0664062 2.265625 0.09375 2.015625 0.09375 Z M 2.21875 -0.5625 C 2.5 -0.5625 2.742188 -0.613281 2.953125 -0.71875 C 3.160156 -0.820312 3.332031 -0.953125 3.46875 -1.109375 C 3.613281 -1.265625 3.71875 -1.4375 3.78125 -1.625 C 3.851562 -1.820312 3.890625 -2.003906 3.890625 -2.171875 L 3.890625 -2.609375 L 2.9375 -2.59375 C 2.71875 -2.582031 2.507812 -2.5625 2.3125 -2.53125 C 2.125 -2.507812 1.957031 -2.457031 1.8125 -2.375 C 1.664062 -2.289062 1.546875 -2.175781 1.453125 -2.03125 C 1.367188 -1.882812 1.328125 -1.691406 1.328125 -1.453125 C 1.328125 -1.171875 1.40625 -0.953125 1.5625 -0.796875 C 1.71875 -0.640625 1.9375 -0.5625 2.21875 -0.5625 Z M 2.21875 -0.5625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-14">
-<path style="stroke:none;" d="M 2.953125 0 C 2.828125 0.320312 2.695312 0.609375 2.5625 0.859375 C 2.4375 1.117188 2.296875 1.335938 2.140625 1.515625 C 1.984375 1.691406 1.804688 1.828125 1.609375 1.921875 C 1.410156 2.023438 1.1875 2.078125 0.9375 2.078125 C 0.820312 2.078125 0.71875 2.070312 0.625 2.0625 C 0.53125 2.0625 0.429688 2.046875 0.328125 2.015625 L 0.328125 1.359375 C 0.390625 1.367188 0.457031 1.375 0.53125 1.375 C 0.613281 1.382812 0.679688 1.390625 0.734375 1.390625 C 0.992188 1.390625 1.234375 1.289062 1.453125 1.09375 C 1.671875 0.90625 1.863281 0.601562 2.03125 0.1875 L 2.125 -0.03125 L 0.03125 -5.28125 L 0.96875 -5.28125 L 2.078125 -2.359375 C 2.109375 -2.273438 2.148438 -2.160156 2.203125 -2.015625 C 2.253906 -1.867188 2.300781 -1.722656 2.34375 -1.578125 C 2.394531 -1.429688 2.441406 -1.296875 2.484375 -1.171875 C 2.523438 -1.054688 2.546875 -0.984375 2.546875 -0.953125 C 2.554688 -0.992188 2.582031 -1.066406 2.625 -1.171875 C 2.664062 -1.273438 2.707031 -1.390625 2.75 -1.515625 C 2.800781 -1.648438 2.847656 -1.785156 2.890625 -1.921875 C 2.941406 -2.054688 2.984375 -2.171875 3.015625 -2.265625 L 4.046875 -5.28125 L 4.984375 -5.28125 Z M 2.953125 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-15">
-<path style="stroke:none;" d="M 4.296875 -1.5625 L 4.296875 0 L 3.46875 0 L 3.46875 -1.5625 L 0.234375 -1.5625 L 0.234375 -2.234375 L 3.375 -6.875 L 4.296875 -6.875 L 4.296875 -2.25 L 5.265625 -2.25 L 5.265625 -1.5625 Z M 3.46875 -5.890625 C 3.46875 -5.867188 3.453125 -5.832031 3.421875 -5.78125 C 3.398438 -5.738281 3.367188 -5.6875 3.328125 -5.625 C 3.296875 -5.570312 3.265625 -5.515625 3.234375 -5.453125 C 3.203125 -5.390625 3.171875 -5.34375 3.140625 -5.3125 L 1.375 -2.703125 C 1.363281 -2.679688 1.34375 -2.648438 1.3125 -2.609375 C 1.28125 -2.566406 1.25 -2.519531 1.21875 -2.46875 C 1.1875 -2.425781 1.148438 -2.382812 1.109375 -2.34375 C 1.078125 -2.300781 1.054688 -2.269531 1.046875 -2.25 L 3.46875 -2.25 Z M 3.46875 -5.890625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-16">
-<path style="stroke:none;" d="M 5.0625 -6.171875 C 4.71875 -5.640625 4.398438 -5.128906 4.109375 -4.640625 C 3.816406 -4.160156 3.566406 -3.671875 3.359375 -3.171875 C 3.148438 -2.679688 2.988281 -2.175781 2.875 -1.65625 C 2.757812 -1.132812 2.703125 -0.582031 2.703125 0 L 1.78125 0 C 1.78125 -0.550781 1.84375 -1.085938 1.96875 -1.609375 C 2.101562 -2.140625 2.28125 -2.660156 2.5 -3.171875 C 2.726562 -3.679688 2.988281 -4.179688 3.28125 -4.671875 C 3.570312 -5.171875 3.878906 -5.660156 4.203125 -6.140625 L 0.515625 -6.140625 L 0.515625 -6.875 L 5.0625 -6.875 Z M 5.0625 -6.171875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-17">
-<path style="stroke:none;" d="M 5.171875 -3.4375 C 5.171875 -2.78125 5.109375 -2.222656 4.984375 -1.765625 C 4.859375 -1.316406 4.6875 -0.953125 4.46875 -0.671875 C 4.25 -0.398438 3.992188 -0.203125 3.703125 -0.078125 C 3.410156 0.0351562 3.097656 0.09375 2.765625 0.09375 C 2.429688 0.09375 2.117188 0.0351562 1.828125 -0.078125 C 1.535156 -0.203125 1.28125 -0.398438 1.0625 -0.671875 C 0.851562 -0.953125 0.6875 -1.316406 0.5625 -1.765625 C 0.445312 -2.222656 0.390625 -2.78125 0.390625 -3.4375 C 0.390625 -4.132812 0.445312 -4.707031 0.5625 -5.15625 C 0.6875 -5.613281 0.859375 -5.976562 1.078125 -6.25 C 1.296875 -6.519531 1.550781 -6.707031 1.84375 -6.8125 C 2.132812 -6.925781 2.453125 -6.984375 2.796875 -6.984375 C 3.128906 -6.984375 3.4375 -6.925781 3.71875 -6.8125 C 4.007812 -6.707031 4.257812 -6.519531 4.46875 -6.25 C 4.6875 -5.976562 4.859375 -5.613281 4.984375 -5.15625 C 5.109375 -4.707031 5.171875 -4.132812 5.171875 -3.4375 Z M 4.28125 -3.4375 C 4.28125 -3.988281 4.242188 -4.445312 4.171875 -4.8125 C 4.109375 -5.175781 4.015625 -5.460938 3.890625 -5.671875 C 3.765625 -5.890625 3.609375 -6.039062 3.421875 -6.125 C 3.242188 -6.21875 3.035156 -6.265625 2.796875 -6.265625 C 2.546875 -6.265625 2.328125 -6.21875 2.140625 -6.125 C 1.953125 -6.039062 1.789062 -5.890625 1.65625 -5.671875 C 1.53125 -5.453125 1.4375 -5.160156 1.375 -4.796875 C 1.3125 -4.441406 1.28125 -3.988281 1.28125 -3.4375 C 1.28125 -2.914062 1.3125 -2.472656 1.375 -2.109375 C 1.445312 -1.742188 1.546875 -1.453125 1.671875 -1.234375 C 1.796875 -1.015625 1.953125 -0.859375 2.140625 -0.765625 C 2.328125 -0.671875 2.539062 -0.625 2.78125 -0.625 C 3.007812 -0.625 3.21875 -0.671875 3.40625 -0.765625 C 3.59375 -0.859375 3.75 -1.015625 3.875 -1.234375 C 4 -1.453125 4.097656 -1.742188 4.171875 -2.109375 C 4.242188 -2.472656 4.28125 -2.914062 4.28125 -3.4375 Z M 4.28125 -3.4375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph0-18">
-<path style="stroke:none;" d="M 0.90625 0 L 0.90625 -1.0625 L 1.859375 -1.0625 L 1.859375 0 Z M 0.90625 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-0">
-<path style="stroke:none;" d="M 0 -0.359375 L -7.328125 -0.359375 L -7.328125 -3.28125 L 0 -3.28125 Z M -0.359375 -0.734375 L -0.359375 -2.921875 L -6.96875 -2.921875 L -6.96875 -0.734375 Z M -0.359375 -0.734375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-1">
-<path style="stroke:none;" d="M -3.8125 -0.546875 C -4.40625 -0.546875 -4.941406 -0.625 -5.421875 -0.78125 C -5.898438 -0.945312 -6.304688 -1.1875 -6.640625 -1.5 C -6.972656 -1.820312 -7.226562 -2.21875 -7.40625 -2.6875 C -7.59375 -3.15625 -7.6875 -3.695312 -7.6875 -4.3125 C -7.6875 -4.78125 -7.644531 -5.1875 -7.5625 -5.53125 C -7.476562 -5.882812 -7.359375 -6.191406 -7.203125 -6.453125 C -7.046875 -6.710938 -6.859375 -6.929688 -6.640625 -7.109375 C -6.421875 -7.285156 -6.171875 -7.4375 -5.890625 -7.5625 L -5.609375 -6.59375 C -5.796875 -6.5 -5.960938 -6.382812 -6.109375 -6.25 C -6.265625 -6.125 -6.394531 -5.96875 -6.5 -5.78125 C -6.613281 -5.59375 -6.695312 -5.375 -6.75 -5.125 C -6.8125 -4.882812 -6.84375 -4.609375 -6.84375 -4.296875 C -6.84375 -3.835938 -6.769531 -3.4375 -6.625 -3.09375 C -6.476562 -2.757812 -6.273438 -2.476562 -6.015625 -2.25 C -5.753906 -2.03125 -5.4375 -1.863281 -5.0625 -1.75 C -4.6875 -1.644531 -4.269531 -1.59375 -3.8125 -1.59375 C -3.363281 -1.59375 -2.945312 -1.648438 -2.5625 -1.765625 C -2.1875 -1.890625 -1.863281 -2.066406 -1.59375 -2.296875 C -1.320312 -2.523438 -1.109375 -2.8125 -0.953125 -3.15625 C -0.796875 -3.507812 -0.71875 -3.910156 -0.71875 -4.359375 C -0.71875 -4.660156 -0.742188 -4.9375 -0.796875 -5.1875 C -0.847656 -5.4375 -0.914062 -5.660156 -1 -5.859375 C -1.082031 -6.066406 -1.171875 -6.25 -1.265625 -6.40625 C -1.359375 -6.5625 -1.457031 -6.691406 -1.5625 -6.796875 L -2.921875 -6.796875 L -2.921875 -4.53125 L -3.78125 -4.53125 L -3.78125 -7.734375 L -1.171875 -7.734375 C -1.003906 -7.566406 -0.84375 -7.367188 -0.6875 -7.140625 C -0.53125 -6.910156 -0.390625 -6.65625 -0.265625 -6.375 C -0.148438 -6.09375 -0.0625 -5.78125 0 -5.4375 C 0.0703125 -5.101562 0.109375 -4.742188 0.109375 -4.359375 C 0.109375 -3.722656 0.0078125 -3.164062 -0.1875 -2.6875 C -0.382812 -2.21875 -0.65625 -1.820312 -1 -1.5 C -1.351562 -1.1875 -1.769531 -0.945312 -2.25 -0.78125 C -2.726562 -0.625 -3.25 -0.546875 -3.8125 -0.546875 Z M -3.8125 -0.546875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-2">
-<path style="stroke:none;" d="M -2.703125 -1.484375 C -2.398438 -1.484375 -2.117188 -1.515625 -1.859375 -1.578125 C -1.609375 -1.640625 -1.390625 -1.734375 -1.203125 -1.859375 C -1.015625 -1.992188 -0.867188 -2.160156 -0.765625 -2.359375 C -0.671875 -2.566406 -0.625 -2.816406 -0.625 -3.109375 C -0.625 -3.523438 -0.707031 -3.859375 -0.875 -4.109375 C -1.039062 -4.359375 -1.253906 -4.53125 -1.515625 -4.625 L -1.265625 -5.46875 C -1.109375 -5.40625 -0.945312 -5.316406 -0.78125 -5.203125 C -0.613281 -5.097656 -0.460938 -4.953125 -0.328125 -4.765625 C -0.203125 -4.585938 -0.0976562 -4.363281 -0.015625 -4.09375 C 0.0664062 -3.820312 0.109375 -3.492188 0.109375 -3.109375 C 0.109375 -2.242188 -0.144531 -1.585938 -0.65625 -1.140625 C -1.164062 -0.691406 -1.925781 -0.46875 -2.9375 -0.46875 C -3.488281 -0.46875 -3.953125 -0.535156 -4.328125 -0.671875 C -4.703125 -0.804688 -5.007812 -0.988281 -5.25 -1.21875 C -5.488281 -1.457031 -5.660156 -1.734375 -5.765625 -2.046875 C -5.867188 -2.367188 -5.921875 -2.707031 -5.921875 -3.0625 C -5.921875 -3.550781 -5.84375 -3.957031 -5.6875 -4.28125 C -5.53125 -4.613281 -5.3125 -4.878906 -5.03125 -5.078125 C -4.75 -5.273438 -4.421875 -5.414062 -4.046875 -5.5 C -3.671875 -5.582031 -3.265625 -5.625 -2.828125 -5.625 L -2.703125 -5.625 Z M -3.4375 -4.625 C -4.050781 -4.570312 -4.5 -4.414062 -4.78125 -4.15625 C -5.0625 -3.90625 -5.203125 -3.535156 -5.203125 -3.046875 C -5.203125 -2.890625 -5.175781 -2.722656 -5.125 -2.546875 C -5.070312 -2.367188 -4.976562 -2.203125 -4.84375 -2.046875 C -4.71875 -1.898438 -4.539062 -1.773438 -4.3125 -1.671875 C -4.082031 -1.566406 -3.789062 -1.507812 -3.4375 -1.5 Z M -3.4375 -4.625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-3">
-<path style="stroke:none;" d="M -2.90625 -5.65625 C -1.894531 -5.65625 -1.140625 -5.429688 -0.640625 -4.984375 C -0.140625 -4.535156 0.109375 -3.882812 0.109375 -3.03125 C 0.109375 -2.625 0.046875 -2.257812 -0.078125 -1.9375 C -0.203125 -1.625 -0.390625 -1.359375 -0.640625 -1.140625 C -0.890625 -0.921875 -1.203125 -0.753906 -1.578125 -0.640625 C -1.953125 -0.523438 -2.394531 -0.46875 -2.90625 -0.46875 C -4.914062 -0.46875 -5.921875 -1.332031 -5.921875 -3.0625 C -5.921875 -3.519531 -5.859375 -3.910156 -5.734375 -4.234375 C -5.609375 -4.566406 -5.421875 -4.835938 -5.171875 -5.046875 C -4.921875 -5.253906 -4.601562 -5.40625 -4.21875 -5.5 C -3.84375 -5.601562 -3.40625 -5.65625 -2.90625 -5.65625 Z M -2.90625 -4.640625 C -3.363281 -4.640625 -3.738281 -4.601562 -4.03125 -4.53125 C -4.320312 -4.46875 -4.554688 -4.367188 -4.734375 -4.234375 C -4.910156 -4.097656 -5.03125 -3.929688 -5.09375 -3.734375 C -5.164062 -3.546875 -5.203125 -3.328125 -5.203125 -3.078125 C -5.203125 -2.835938 -5.164062 -2.613281 -5.09375 -2.40625 C -5.019531 -2.207031 -4.894531 -2.039062 -4.71875 -1.90625 C -4.539062 -1.769531 -4.304688 -1.664062 -4.015625 -1.59375 C -3.722656 -1.519531 -3.351562 -1.484375 -2.90625 -1.484375 C -2.457031 -1.484375 -2.082031 -1.519531 -1.78125 -1.59375 C -1.488281 -1.675781 -1.253906 -1.785156 -1.078125 -1.921875 C -0.910156 -2.054688 -0.789062 -2.21875 -0.71875 -2.40625 C -0.644531 -2.59375 -0.609375 -2.800781 -0.609375 -3.03125 C -0.609375 -3.269531 -0.640625 -3.488281 -0.703125 -3.6875 C -0.773438 -3.894531 -0.898438 -4.066406 -1.078125 -4.203125 C -1.253906 -4.347656 -1.488281 -4.457031 -1.78125 -4.53125 C -2.082031 -4.601562 -2.457031 -4.640625 -2.90625 -4.640625 Z M -2.90625 -4.640625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-4">
-<path style="stroke:none;" d="M 0 -4.125 L -3.6875 -4.125 C -3.96875 -4.125 -4.203125 -4.101562 -4.390625 -4.0625 C -4.578125 -4.03125 -4.726562 -3.972656 -4.84375 -3.890625 C -4.96875 -3.804688 -5.050781 -3.695312 -5.09375 -3.5625 C -5.144531 -3.425781 -5.171875 -3.257812 -5.171875 -3.0625 C -5.171875 -2.851562 -5.128906 -2.664062 -5.046875 -2.5 C -4.972656 -2.34375 -4.859375 -2.203125 -4.703125 -2.078125 C -4.546875 -1.960938 -4.351562 -1.875 -4.125 -1.8125 C -3.90625 -1.75 -3.65625 -1.71875 -3.375 -1.71875 L 0 -1.71875 L 0 -0.765625 L -4.578125 -0.765625 C -4.691406 -0.765625 -4.816406 -0.757812 -4.953125 -0.75 C -5.085938 -0.75 -5.210938 -0.75 -5.328125 -0.75 C -5.453125 -0.75 -5.554688 -0.742188 -5.640625 -0.734375 C -5.734375 -0.734375 -5.789062 -0.734375 -5.8125 -0.734375 L -5.8125 -1.640625 C -5.789062 -1.648438 -5.738281 -1.65625 -5.65625 -1.65625 C -5.582031 -1.65625 -5.492188 -1.65625 -5.390625 -1.65625 C -5.296875 -1.664062 -5.191406 -1.671875 -5.078125 -1.671875 C -4.972656 -1.679688 -4.882812 -1.6875 -4.8125 -1.6875 L -4.8125 -1.703125 C -4.988281 -1.785156 -5.144531 -1.875 -5.28125 -1.96875 C -5.414062 -2.070312 -5.53125 -2.191406 -5.625 -2.328125 C -5.71875 -2.460938 -5.789062 -2.617188 -5.84375 -2.796875 C -5.894531 -2.972656 -5.921875 -3.175781 -5.921875 -3.40625 C -5.921875 -3.84375 -5.832031 -4.1875 -5.65625 -4.4375 C -5.476562 -4.695312 -5.195312 -4.878906 -4.8125 -4.984375 L -4.8125 -5 C -4.988281 -5.082031 -5.144531 -5.175781 -5.28125 -5.28125 C -5.414062 -5.394531 -5.53125 -5.519531 -5.625 -5.65625 C -5.71875 -5.800781 -5.789062 -5.960938 -5.84375 -6.140625 C -5.894531 -6.316406 -5.921875 -6.519531 -5.921875 -6.75 C -5.921875 -7.050781 -5.878906 -7.304688 -5.796875 -7.515625 C -5.722656 -7.734375 -5.601562 -7.910156 -5.4375 -8.046875 C -5.269531 -8.179688 -5.054688 -8.28125 -4.796875 -8.34375 C -4.535156 -8.40625 -4.226562 -8.4375 -3.875 -8.4375 L 0 -8.4375 L 0 -7.484375 L -3.6875 -7.484375 C -3.96875 -7.484375 -4.203125 -7.460938 -4.390625 -7.421875 C -4.578125 -7.390625 -4.726562 -7.332031 -4.84375 -7.25 C -4.96875 -7.164062 -5.050781 -7.054688 -5.09375 -6.921875 C -5.144531 -6.785156 -5.171875 -6.617188 -5.171875 -6.421875 C -5.171875 -6.210938 -5.128906 -6.023438 -5.046875 -5.859375 C -4.972656 -5.703125 -4.859375 -5.5625 -4.703125 -5.4375 C -4.554688 -5.320312 -4.367188 -5.234375 -4.140625 -5.171875 C -3.921875 -5.109375 -3.664062 -5.078125 -3.375 -5.078125 L 0 -5.078125 Z M 0 -4.125 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-5">
-<path style="stroke:none;" d="M 0.109375 -2.21875 C 0.109375 -1.632812 -0.0390625 -1.195312 -0.34375 -0.90625 C -0.65625 -0.613281 -1.082031 -0.46875 -1.625 -0.46875 C -2.007812 -0.46875 -2.320312 -0.539062 -2.5625 -0.6875 C -2.8125 -0.832031 -3.003906 -1.019531 -3.140625 -1.25 C -3.285156 -1.488281 -3.382812 -1.757812 -3.4375 -2.0625 C -3.488281 -2.363281 -3.519531 -2.664062 -3.53125 -2.96875 L -3.546875 -4.28125 L -3.859375 -4.28125 C -4.097656 -4.28125 -4.300781 -4.253906 -4.46875 -4.203125 C -4.644531 -4.148438 -4.78125 -4.070312 -4.875 -3.96875 C -4.976562 -3.863281 -5.054688 -3.734375 -5.109375 -3.578125 C -5.160156 -3.429688 -5.1875 -3.25 -5.1875 -3.03125 C -5.1875 -2.84375 -5.171875 -2.671875 -5.140625 -2.515625 C -5.117188 -2.367188 -5.070312 -2.238281 -5 -2.125 C -4.925781 -2.019531 -4.828125 -1.929688 -4.703125 -1.859375 C -4.585938 -1.796875 -4.441406 -1.753906 -4.265625 -1.734375 L -4.34375 -0.71875 C -4.570312 -0.757812 -4.78125 -0.828125 -4.96875 -0.921875 C -5.164062 -1.023438 -5.332031 -1.171875 -5.46875 -1.359375 C -5.613281 -1.546875 -5.722656 -1.773438 -5.796875 -2.046875 C -5.878906 -2.328125 -5.921875 -2.664062 -5.921875 -3.0625 C -5.921875 -3.789062 -5.753906 -4.335938 -5.421875 -4.703125 C -5.085938 -5.078125 -4.601562 -5.265625 -3.96875 -5.265625 L -1.46875 -5.265625 C -1.175781 -5.265625 -0.957031 -5.300781 -0.8125 -5.375 C -0.664062 -5.445312 -0.59375 -5.585938 -0.59375 -5.796875 C -0.59375 -5.847656 -0.597656 -5.898438 -0.609375 -5.953125 C -0.617188 -6.015625 -0.628906 -6.070312 -0.640625 -6.125 L -0.03125 -6.125 C 0 -6 0.0195312 -5.875 0.03125 -5.75 C 0.0390625 -5.632812 0.046875 -5.507812 0.046875 -5.375 C 0.046875 -5.1875 0.0234375 -5.023438 -0.015625 -4.890625 C -0.0664062 -4.765625 -0.140625 -4.660156 -0.234375 -4.578125 C -0.335938 -4.492188 -0.460938 -4.429688 -0.609375 -4.390625 C -0.753906 -4.347656 -0.921875 -4.320312 -1.109375 -4.3125 L -1.109375 -4.28125 C -0.921875 -4.175781 -0.75 -4.0625 -0.59375 -3.9375 C -0.445312 -3.8125 -0.320312 -3.664062 -0.21875 -3.5 C -0.113281 -3.34375 -0.0351562 -3.15625 0.015625 -2.9375 C 0.078125 -2.726562 0.109375 -2.488281 0.109375 -2.21875 Z M -0.625 -2.4375 C -0.625 -2.75 -0.675781 -3.019531 -0.78125 -3.25 C -0.894531 -3.476562 -1.039062 -3.671875 -1.21875 -3.828125 C -1.394531 -3.984375 -1.585938 -4.097656 -1.796875 -4.171875 C -2.003906 -4.242188 -2.203125 -4.28125 -2.390625 -4.28125 L -2.875 -4.28125 L -2.84375 -3.21875 C -2.84375 -2.988281 -2.828125 -2.765625 -2.796875 -2.546875 C -2.765625 -2.335938 -2.703125 -2.148438 -2.609375 -1.984375 C -2.523438 -1.828125 -2.398438 -1.703125 -2.234375 -1.609375 C -2.078125 -1.515625 -1.867188 -1.46875 -1.609375 -1.46875 C -1.296875 -1.46875 -1.050781 -1.550781 -0.875 -1.71875 C -0.707031 -1.882812 -0.625 -2.125 -0.625 -2.4375 Z M -0.625 -2.4375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-6">
-<path style="stroke:none;" d="M 0 -4.4375 L -3.6875 -4.4375 C -3.96875 -4.4375 -4.203125 -4.414062 -4.390625 -4.375 C -4.578125 -4.332031 -4.726562 -4.265625 -4.84375 -4.171875 C -4.96875 -4.078125 -5.050781 -3.953125 -5.09375 -3.796875 C -5.144531 -3.648438 -5.171875 -3.460938 -5.171875 -3.234375 C -5.171875 -3.003906 -5.128906 -2.796875 -5.046875 -2.609375 C -4.972656 -2.429688 -4.859375 -2.273438 -4.703125 -2.140625 C -4.546875 -2.003906 -4.351562 -1.898438 -4.125 -1.828125 C -3.90625 -1.765625 -3.65625 -1.734375 -3.375 -1.734375 L 0 -1.734375 L 0 -0.765625 L -4.578125 -0.765625 C -4.691406 -0.765625 -4.816406 -0.757812 -4.953125 -0.75 C -5.085938 -0.75 -5.210938 -0.75 -5.328125 -0.75 C -5.453125 -0.75 -5.554688 -0.742188 -5.640625 -0.734375 C -5.734375 -0.734375 -5.789062 -0.734375 -5.8125 -0.734375 L -5.8125 -1.640625 C -5.789062 -1.648438 -5.738281 -1.65625 -5.65625 -1.65625 C -5.582031 -1.65625 -5.492188 -1.65625 -5.390625 -1.65625 C -5.296875 -1.664062 -5.191406 -1.671875 -5.078125 -1.671875 C -4.972656 -1.679688 -4.882812 -1.6875 -4.8125 -1.6875 L -4.8125 -1.703125 C -4.988281 -1.796875 -5.144531 -1.894531 -5.28125 -2 C -5.414062 -2.113281 -5.53125 -2.242188 -5.625 -2.390625 C -5.71875 -2.535156 -5.789062 -2.703125 -5.84375 -2.890625 C -5.894531 -3.085938 -5.921875 -3.3125 -5.921875 -3.5625 C -5.921875 -3.882812 -5.878906 -4.160156 -5.796875 -4.390625 C -5.722656 -4.628906 -5.601562 -4.820312 -5.4375 -4.96875 C -5.269531 -5.113281 -5.054688 -5.222656 -4.796875 -5.296875 C -4.535156 -5.367188 -4.226562 -5.40625 -3.875 -5.40625 L 0 -5.40625 Z M 0 -4.4375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-7">
-<path style="stroke:none;" d=""/>
-</symbol>
-<symbol overflow="visible" id="glyph1-8">
-<path style="stroke:none;" d="M -2.9375 -5.65625 C -2.488281 -5.65625 -2.078125 -5.617188 -1.703125 -5.546875 C -1.335938 -5.472656 -1.019531 -5.351562 -0.75 -5.1875 C -0.476562 -5.019531 -0.265625 -4.800781 -0.109375 -4.53125 C 0.0351562 -4.257812 0.109375 -3.921875 0.109375 -3.515625 C 0.109375 -3.097656 0.03125 -2.734375 -0.125 -2.421875 C -0.28125 -2.109375 -0.539062 -1.875 -0.90625 -1.71875 L -0.90625 -1.6875 C -0.894531 -1.6875 -0.859375 -1.6875 -0.796875 -1.6875 C -0.742188 -1.695312 -0.675781 -1.703125 -0.59375 -1.703125 C -0.507812 -1.703125 -0.410156 -1.703125 -0.296875 -1.703125 C -0.191406 -1.703125 -0.0859375 -1.703125 0.015625 -1.703125 L 2.28125 -1.703125 L 2.28125 -0.734375 L -4.625 -0.734375 C -4.757812 -0.734375 -4.890625 -0.734375 -5.015625 -0.734375 C -5.148438 -0.734375 -5.269531 -0.726562 -5.375 -0.71875 C -5.476562 -0.71875 -5.566406 -0.71875 -5.640625 -0.71875 C -5.722656 -0.71875 -5.78125 -0.710938 -5.8125 -0.703125 L -5.8125 -1.640625 C -5.800781 -1.648438 -5.765625 -1.65625 -5.703125 -1.65625 C -5.640625 -1.664062 -5.5625 -1.671875 -5.46875 -1.671875 C -5.375 -1.679688 -5.273438 -1.6875 -5.171875 -1.6875 C -5.066406 -1.695312 -4.96875 -1.703125 -4.875 -1.703125 L -4.875 -1.71875 C -5.0625 -1.8125 -5.21875 -1.914062 -5.34375 -2.03125 C -5.476562 -2.144531 -5.585938 -2.273438 -5.671875 -2.421875 C -5.753906 -2.566406 -5.8125 -2.726562 -5.84375 -2.90625 C -5.882812 -3.09375 -5.90625 -3.296875 -5.90625 -3.515625 C -5.90625 -3.921875 -5.832031 -4.257812 -5.6875 -4.53125 C -5.550781 -4.800781 -5.351562 -5.019531 -5.09375 -5.1875 C -4.832031 -5.351562 -4.519531 -5.472656 -4.15625 -5.546875 C -3.789062 -5.617188 -3.382812 -5.65625 -2.9375 -5.65625 Z M -2.90625 -4.640625 C -3.269531 -4.640625 -3.585938 -4.617188 -3.859375 -4.578125 C -4.140625 -4.535156 -4.375 -4.457031 -4.5625 -4.34375 C -4.757812 -4.238281 -4.910156 -4.097656 -5.015625 -3.921875 C -5.117188 -3.753906 -5.171875 -3.535156 -5.171875 -3.265625 C -5.171875 -3.054688 -5.140625 -2.851562 -5.078125 -2.65625 C -5.015625 -2.46875 -4.894531 -2.300781 -4.71875 -2.15625 C -4.550781 -2.019531 -4.316406 -1.910156 -4.015625 -1.828125 C -3.710938 -1.742188 -3.320312 -1.703125 -2.84375 -1.703125 C -2.425781 -1.703125 -2.070312 -1.734375 -1.78125 -1.796875 C -1.5 -1.867188 -1.269531 -1.96875 -1.09375 -2.09375 C -0.925781 -2.226562 -0.800781 -2.394531 -0.71875 -2.59375 C -0.644531 -2.789062 -0.609375 -3.015625 -0.609375 -3.265625 C -0.609375 -3.523438 -0.660156 -3.742188 -0.765625 -3.921875 C -0.867188 -4.097656 -1.019531 -4.238281 -1.21875 -4.34375 C -1.414062 -4.457031 -1.65625 -4.535156 -1.9375 -4.578125 C -2.21875 -4.617188 -2.539062 -4.640625 -2.90625 -4.640625 Z M -2.90625 -4.640625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-9">
-<path style="stroke:none;" d="M 0 -0.765625 L -4.453125 -0.765625 C -4.578125 -0.765625 -4.703125 -0.757812 -4.828125 -0.75 C -4.953125 -0.75 -5.070312 -0.75 -5.1875 -0.75 C -5.3125 -0.75 -5.425781 -0.742188 -5.53125 -0.734375 C -5.632812 -0.734375 -5.726562 -0.734375 -5.8125 -0.734375 L -5.8125 -1.640625 C -5.726562 -1.648438 -5.632812 -1.65625 -5.53125 -1.65625 C -5.425781 -1.664062 -5.316406 -1.671875 -5.203125 -1.671875 C -5.085938 -1.679688 -4.976562 -1.6875 -4.875 -1.6875 C -4.78125 -1.6875 -4.695312 -1.6875 -4.625 -1.6875 L -4.625 -1.703125 C -4.84375 -1.773438 -5.035156 -1.847656 -5.203125 -1.921875 C -5.367188 -2.003906 -5.503906 -2.097656 -5.609375 -2.203125 C -5.710938 -2.304688 -5.789062 -2.425781 -5.84375 -2.5625 C -5.894531 -2.707031 -5.921875 -2.882812 -5.921875 -3.09375 C -5.921875 -3.164062 -5.910156 -3.238281 -5.890625 -3.3125 C -5.878906 -3.382812 -5.867188 -3.441406 -5.859375 -3.484375 L -4.984375 -3.484375 C -4.992188 -3.421875 -5.003906 -3.34375 -5.015625 -3.25 C -5.023438 -3.164062 -5.03125 -3.070312 -5.03125 -2.96875 C -5.03125 -2.738281 -4.976562 -2.546875 -4.875 -2.390625 C -4.78125 -2.242188 -4.644531 -2.117188 -4.46875 -2.015625 C -4.289062 -1.921875 -4.078125 -1.847656 -3.828125 -1.796875 C -3.585938 -1.753906 -3.320312 -1.734375 -3.03125 -1.734375 L 0 -1.734375 Z M 0 -0.765625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-10">
-<path style="stroke:none;" d="M -5.109375 -1.9375 L 0 -1.9375 L 0 -0.96875 L -5.109375 -0.96875 L -5.109375 -0.15625 L -5.8125 -0.15625 L -5.8125 -0.96875 L -6.46875 -0.96875 C -6.675781 -0.96875 -6.867188 -0.988281 -7.046875 -1.03125 C -7.234375 -1.070312 -7.394531 -1.144531 -7.53125 -1.25 C -7.664062 -1.351562 -7.769531 -1.492188 -7.84375 -1.671875 C -7.914062 -1.859375 -7.953125 -2.097656 -7.953125 -2.390625 C -7.953125 -2.503906 -7.945312 -2.625 -7.9375 -2.75 C -7.925781 -2.875 -7.910156 -2.984375 -7.890625 -3.078125 L -7.15625 -3.078125 C -7.164062 -3.015625 -7.175781 -2.941406 -7.1875 -2.859375 C -7.195312 -2.773438 -7.203125 -2.703125 -7.203125 -2.640625 C -7.203125 -2.492188 -7.179688 -2.375 -7.140625 -2.28125 C -7.097656 -2.195312 -7.039062 -2.128906 -6.96875 -2.078125 C -6.894531 -2.023438 -6.804688 -1.988281 -6.703125 -1.96875 C -6.597656 -1.945312 -6.472656 -1.9375 -6.328125 -1.9375 L -5.8125 -1.9375 L -5.8125 -3.078125 L -5.109375 -3.078125 Z M -5.109375 -1.9375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-11">
-<path style="stroke:none;" d="M -2.9375 -1.484375 C -2.601562 -1.484375 -2.296875 -1.503906 -2.015625 -1.546875 C -1.734375 -1.597656 -1.488281 -1.679688 -1.28125 -1.796875 C -1.082031 -1.910156 -0.925781 -2.0625 -0.8125 -2.25 C -0.707031 -2.4375 -0.65625 -2.664062 -0.65625 -2.9375 C -0.65625 -3.28125 -0.75 -3.566406 -0.9375 -3.796875 C -1.125 -4.035156 -1.410156 -4.179688 -1.796875 -4.234375 L -1.734375 -5.203125 C -1.492188 -5.171875 -1.257812 -5.101562 -1.03125 -5 C -0.8125 -4.894531 -0.617188 -4.75 -0.453125 -4.5625 C -0.285156 -4.375 -0.148438 -4.144531 -0.046875 -3.875 C 0.0546875 -3.613281 0.109375 -3.3125 0.109375 -2.96875 C 0.109375 -2.507812 0.03125 -2.117188 -0.125 -1.796875 C -0.28125 -1.484375 -0.492188 -1.226562 -0.765625 -1.03125 C -1.035156 -0.832031 -1.351562 -0.6875 -1.71875 -0.59375 C -2.082031 -0.507812 -2.476562 -0.46875 -2.90625 -0.46875 C -3.300781 -0.46875 -3.644531 -0.5 -3.9375 -0.5625 C -4.238281 -0.625 -4.5 -0.710938 -4.71875 -0.828125 C -4.945312 -0.953125 -5.132812 -1.09375 -5.28125 -1.25 C -5.4375 -1.40625 -5.5625 -1.570312 -5.65625 -1.75 C -5.75 -1.9375 -5.816406 -2.128906 -5.859375 -2.328125 C -5.898438 -2.535156 -5.921875 -2.742188 -5.921875 -2.953125 C -5.921875 -3.285156 -5.875 -3.578125 -5.78125 -3.828125 C -5.695312 -4.085938 -5.578125 -4.304688 -5.421875 -4.484375 C -5.265625 -4.671875 -5.078125 -4.820312 -4.859375 -4.9375 C -4.648438 -5.050781 -4.425781 -5.128906 -4.1875 -5.171875 L -4.109375 -4.1875 C -4.429688 -4.132812 -4.6875 -4.003906 -4.875 -3.796875 C -5.0625 -3.597656 -5.15625 -3.3125 -5.15625 -2.9375 C -5.15625 -2.65625 -5.109375 -2.421875 -5.015625 -2.234375 C -4.929688 -2.054688 -4.796875 -1.910156 -4.609375 -1.796875 C -4.421875 -1.679688 -4.1875 -1.597656 -3.90625 -1.546875 C -3.632812 -1.503906 -3.3125 -1.484375 -2.9375 -1.484375 Z M -2.9375 -1.484375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-12">
-<path style="stroke:none;" d="M -2.859375 -0.6875 C -3.359375 -0.6875 -3.832031 -0.722656 -4.28125 -0.796875 C -4.738281 -0.867188 -5.175781 -0.984375 -5.59375 -1.140625 C -6.007812 -1.304688 -6.414062 -1.515625 -6.8125 -1.765625 C -7.207031 -2.015625 -7.59375 -2.316406 -7.96875 -2.671875 L -7.96875 -3.59375 C -7.59375 -3.257812 -7.207031 -2.96875 -6.8125 -2.71875 C -6.414062 -2.476562 -6.003906 -2.28125 -5.578125 -2.125 C -5.160156 -1.96875 -4.722656 -1.847656 -4.265625 -1.765625 C -3.816406 -1.691406 -3.34375 -1.65625 -2.84375 -1.65625 C -2.34375 -1.65625 -1.863281 -1.691406 -1.40625 -1.765625 C -0.957031 -1.847656 -0.519531 -1.96875 -0.09375 -2.125 C 0.320312 -2.28125 0.726562 -2.476562 1.125 -2.71875 C 1.519531 -2.96875 1.90625 -3.257812 2.28125 -3.59375 L 2.28125 -2.671875 C 1.90625 -2.316406 1.519531 -2.015625 1.125 -1.765625 C 0.726562 -1.515625 0.320312 -1.304688 -0.09375 -1.140625 C -0.507812 -0.984375 -0.941406 -0.867188 -1.390625 -0.796875 C -1.847656 -0.722656 -2.332031 -0.6875 -2.84375 -0.6875 Z M -2.859375 -0.6875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-13">
-<path style="stroke:none;" d="M 0 -0.734375 L -7.96875 -0.734375 L -7.96875 -1.703125 L 0 -1.703125 Z M 0 -0.734375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-14">
-<path style="stroke:none;" d="M -7.046875 -0.734375 L -7.96875 -0.734375 L -7.96875 -1.703125 L -7.046875 -1.703125 Z M 0 -0.734375 L -5.8125 -0.734375 L -5.8125 -1.703125 L 0 -1.703125 Z M 0 -0.734375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-15">
-<path style="stroke:none;" d="M 0 -0.265625 L -0.734375 -0.265625 L -5.0625 -3.8125 L -5.0625 -0.484375 L -5.8125 -0.484375 L -5.8125 -4.90625 L -5.078125 -4.90625 L -0.75 -1.34375 L -0.75 -5.109375 L 0 -5.109375 Z M 0 -0.265625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-16">
-<path style="stroke:none;" d="M -0.9375 -4.40625 C -0.5625 -4.226562 -0.289062 -3.988281 -0.125 -3.6875 C 0.03125 -3.394531 0.109375 -3.03125 0.109375 -2.59375 C 0.109375 -1.863281 -0.132812 -1.328125 -0.625 -0.984375 C -1.125 -0.640625 -1.875 -0.46875 -2.875 -0.46875 C -4.90625 -0.46875 -5.921875 -1.175781 -5.921875 -2.59375 C -5.921875 -3.039062 -5.835938 -3.410156 -5.671875 -3.703125 C -5.515625 -3.992188 -5.257812 -4.226562 -4.90625 -4.40625 L -4.90625 -4.421875 C -4.945312 -4.421875 -5.003906 -4.421875 -5.078125 -4.421875 C -5.148438 -4.421875 -5.226562 -4.414062 -5.3125 -4.40625 C -5.40625 -4.40625 -5.488281 -4.40625 -5.5625 -4.40625 C -5.632812 -4.40625 -5.6875 -4.40625 -5.71875 -4.40625 L -7.96875 -4.40625 L -7.96875 -5.375 L -1.203125 -5.375 C -1.054688 -5.375 -0.921875 -5.375 -0.796875 -5.375 C -0.671875 -5.375 -0.550781 -5.375 -0.4375 -5.375 C -0.332031 -5.382812 -0.238281 -5.390625 -0.15625 -5.390625 C -0.0820312 -5.398438 -0.03125 -5.40625 0 -5.40625 L 0 -4.484375 C -0.03125 -4.472656 -0.078125 -4.460938 -0.140625 -4.453125 C -0.210938 -4.453125 -0.289062 -4.445312 -0.375 -4.4375 C -0.46875 -4.4375 -0.5625 -4.4375 -0.65625 -4.4375 C -0.75 -4.4375 -0.84375 -4.4375 -0.9375 -4.4375 Z M -2.90625 -1.484375 C -2.507812 -1.484375 -2.164062 -1.503906 -1.875 -1.546875 C -1.59375 -1.597656 -1.359375 -1.675781 -1.171875 -1.78125 C -0.984375 -1.894531 -0.847656 -2.035156 -0.765625 -2.203125 C -0.679688 -2.378906 -0.640625 -2.59375 -0.640625 -2.84375 C -0.640625 -3.101562 -0.679688 -3.328125 -0.765625 -3.515625 C -0.847656 -3.710938 -0.976562 -3.875 -1.15625 -4 C -1.34375 -4.132812 -1.582031 -4.234375 -1.875 -4.296875 C -2.175781 -4.367188 -2.539062 -4.40625 -2.96875 -4.40625 C -3.382812 -4.40625 -3.734375 -4.367188 -4.015625 -4.296875 C -4.304688 -4.234375 -4.535156 -4.132812 -4.703125 -4 C -4.878906 -3.875 -5.003906 -3.710938 -5.078125 -3.515625 C -5.160156 -3.328125 -5.203125 -3.109375 -5.203125 -2.859375 C -5.203125 -2.617188 -5.160156 -2.410156 -5.078125 -2.234375 C -4.992188 -2.066406 -4.859375 -1.925781 -4.671875 -1.8125 C -4.492188 -1.695312 -4.257812 -1.613281 -3.96875 -1.5625 C -3.675781 -1.507812 -3.320312 -1.484375 -2.90625 -1.484375 Z M -2.90625 -1.484375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-17">
-<path style="stroke:none;" d="M -1.609375 -5.109375 C -1.335938 -5.109375 -1.09375 -5.050781 -0.875 -4.9375 C -0.664062 -4.832031 -0.488281 -4.679688 -0.34375 -4.484375 C -0.195312 -4.285156 -0.0820312 -4.039062 0 -3.75 C 0.0703125 -3.457031 0.109375 -3.125 0.109375 -2.75 C 0.109375 -2.40625 0.0820312 -2.097656 0.03125 -1.828125 C -0.0195312 -1.554688 -0.101562 -1.316406 -0.21875 -1.109375 C -0.332031 -0.910156 -0.484375 -0.742188 -0.671875 -0.609375 C -0.859375 -0.472656 -1.085938 -0.375 -1.359375 -0.3125 L -1.53125 -1.15625 C -1.21875 -1.238281 -0.988281 -1.410156 -0.84375 -1.671875 C -0.695312 -1.929688 -0.625 -2.289062 -0.625 -2.75 C -0.625 -2.957031 -0.640625 -3.144531 -0.671875 -3.3125 C -0.703125 -3.488281 -0.75 -3.640625 -0.8125 -3.765625 C -0.882812 -3.890625 -0.976562 -3.984375 -1.09375 -4.046875 C -1.207031 -4.117188 -1.351562 -4.15625 -1.53125 -4.15625 C -1.707031 -4.15625 -1.847656 -4.113281 -1.953125 -4.03125 C -2.066406 -3.957031 -2.160156 -3.84375 -2.234375 -3.6875 C -2.316406 -3.539062 -2.382812 -3.363281 -2.4375 -3.15625 C -2.5 -2.945312 -2.5625 -2.71875 -2.625 -2.46875 C -2.6875 -2.238281 -2.753906 -2.007812 -2.828125 -1.78125 C -2.898438 -1.550781 -3 -1.34375 -3.125 -1.15625 C -3.25 -0.96875 -3.398438 -0.816406 -3.578125 -0.703125 C -3.765625 -0.585938 -4 -0.53125 -4.28125 -0.53125 C -4.8125 -0.53125 -5.210938 -0.71875 -5.484375 -1.09375 C -5.765625 -1.476562 -5.90625 -2.03125 -5.90625 -2.75 C -5.90625 -3.394531 -5.789062 -3.90625 -5.5625 -4.28125 C -5.332031 -4.65625 -4.972656 -4.894531 -4.484375 -5 L -4.375 -4.125 C -4.519531 -4.09375 -4.644531 -4.035156 -4.75 -3.953125 C -4.851562 -3.867188 -4.9375 -3.765625 -5 -3.640625 C -5.0625 -3.515625 -5.101562 -3.375 -5.125 -3.21875 C -5.15625 -3.070312 -5.171875 -2.914062 -5.171875 -2.75 C -5.171875 -2.3125 -5.101562 -1.988281 -4.96875 -1.78125 C -4.84375 -1.582031 -4.644531 -1.484375 -4.375 -1.484375 C -4.21875 -1.484375 -4.085938 -1.519531 -3.984375 -1.59375 C -3.878906 -1.664062 -3.789062 -1.769531 -3.71875 -1.90625 C -3.65625 -2.050781 -3.597656 -2.21875 -3.546875 -2.40625 C -3.492188 -2.601562 -3.4375 -2.816406 -3.375 -3.046875 C -3.332031 -3.203125 -3.289062 -3.359375 -3.25 -3.515625 C -3.207031 -3.679688 -3.15625 -3.835938 -3.09375 -3.984375 C -3.03125 -4.140625 -2.957031 -4.285156 -2.875 -4.421875 C -2.789062 -4.554688 -2.6875 -4.671875 -2.5625 -4.765625 C -2.445312 -4.867188 -2.3125 -4.953125 -2.15625 -5.015625 C -2 -5.078125 -1.816406 -5.109375 -1.609375 -5.109375 Z M -1.609375 -5.109375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-18">
-<path style="stroke:none;" d="M 0.109375 0 L -7.96875 -2.203125 L -7.96875 -3.0625 L 0.109375 -0.875 Z M 0.109375 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph1-19">
-<path style="stroke:none;" d="M -2.84375 -2.984375 C -2.332031 -2.984375 -1.847656 -2.941406 -1.390625 -2.859375 C -0.941406 -2.785156 -0.507812 -2.664062 -0.09375 -2.5 C 0.320312 -2.34375 0.726562 -2.140625 1.125 -1.890625 C 1.519531 -1.640625 1.90625 -1.34375 2.28125 -1 L 2.28125 -0.0625 C 1.90625 -0.394531 1.519531 -0.6875 1.125 -0.9375 C 0.726562 -1.1875 0.320312 -1.390625 -0.09375 -1.546875 C -0.519531 -1.703125 -0.957031 -1.816406 -1.40625 -1.890625 C -1.863281 -1.972656 -2.34375 -2.015625 -2.84375 -2.015625 C -3.34375 -2.015625 -3.816406 -1.972656 -4.265625 -1.890625 C -4.722656 -1.816406 -5.160156 -1.703125 -5.578125 -1.546875 C -6.003906 -1.390625 -6.414062 -1.1875 -6.8125 -0.9375 C -7.207031 -0.6875 -7.59375 -0.394531 -7.96875 -0.0625 L -7.96875 -1 C -7.59375 -1.34375 -7.207031 -1.640625 -6.8125 -1.890625 C -6.414062 -2.140625 -6.007812 -2.34375 -5.59375 -2.5 C -5.175781 -2.664062 -4.738281 -2.785156 -4.28125 -2.859375 C -3.832031 -2.941406 -3.359375 -2.984375 -2.859375 -2.984375 Z M -2.84375 -2.984375 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-0">
-<path style="stroke:none;" d="M 0.40625 0 L 0.40625 -8 L 3.59375 -8 L 3.59375 0 Z M 0.796875 -0.40625 L 3.1875 -0.40625 L 3.1875 -7.59375 L 0.796875 -7.59375 Z M 0.796875 -0.40625 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-1">
-<path style="stroke:none;" d="M 3.21875 2.484375 C 2.851562 2.484375 2.53125 2.445312 2.25 2.375 C 1.96875 2.300781 1.722656 2.195312 1.515625 2.0625 C 1.316406 1.925781 1.15625 1.757812 1.03125 1.5625 C 0.90625 1.375 0.816406 1.160156 0.765625 0.921875 L 1.828125 0.78125 C 1.898438 1.070312 2.054688 1.296875 2.296875 1.453125 C 2.535156 1.609375 2.847656 1.6875 3.234375 1.6875 C 3.472656 1.6875 3.691406 1.648438 3.890625 1.578125 C 4.085938 1.515625 4.253906 1.410156 4.390625 1.265625 C 4.523438 1.117188 4.628906 0.925781 4.703125 0.6875 C 4.773438 0.457031 4.8125 0.175781 4.8125 -0.15625 L 4.8125 -1.171875 C 4.726562 -1.015625 4.628906 -0.863281 4.515625 -0.71875 C 4.398438 -0.570312 4.257812 -0.441406 4.09375 -0.328125 C 3.925781 -0.210938 3.734375 -0.117188 3.515625 -0.046875 C 3.296875 0.015625 3.046875 0.046875 2.765625 0.046875 C 2.359375 0.046875 2.007812 -0.0195312 1.71875 -0.15625 C 1.4375 -0.289062 1.203125 -0.492188 1.015625 -0.765625 C 0.835938 -1.035156 0.707031 -1.367188 0.625 -1.765625 C 0.539062 -2.171875 0.5 -2.632812 0.5 -3.15625 C 0.5 -3.664062 0.539062 -4.125 0.625 -4.53125 C 0.707031 -4.9375 0.84375 -5.28125 1.03125 -5.5625 C 1.226562 -5.84375 1.476562 -6.054688 1.78125 -6.203125 C 2.082031 -6.359375 2.453125 -6.4375 2.890625 -6.4375 C 3.335938 -6.4375 3.722656 -6.332031 4.046875 -6.125 C 4.378906 -5.925781 4.632812 -5.632812 4.8125 -5.25 L 4.828125 -5.25 C 4.828125 -5.351562 4.828125 -5.460938 4.828125 -5.578125 C 4.835938 -5.703125 4.84375 -5.816406 4.84375 -5.921875 C 4.851562 -6.035156 4.863281 -6.128906 4.875 -6.203125 C 4.882812 -6.285156 4.894531 -6.332031 4.90625 -6.34375 L 5.90625 -6.34375 C 5.894531 -6.300781 5.890625 -6.238281 5.890625 -6.15625 C 5.890625 -6.070312 5.882812 -5.972656 5.875 -5.859375 C 5.875 -5.742188 5.867188 -5.613281 5.859375 -5.46875 C 5.859375 -5.320312 5.859375 -5.175781 5.859375 -5.03125 L 5.859375 -0.1875 C 5.859375 0.707031 5.640625 1.375 5.203125 1.8125 C 4.773438 2.257812 4.113281 2.484375 3.21875 2.484375 Z M 4.8125 -3.171875 C 4.8125 -3.609375 4.765625 -3.984375 4.671875 -4.296875 C 4.578125 -4.617188 4.453125 -4.878906 4.296875 -5.078125 C 4.140625 -5.273438 3.957031 -5.421875 3.75 -5.515625 C 3.550781 -5.609375 3.347656 -5.65625 3.140625 -5.65625 C 2.867188 -5.65625 2.632812 -5.609375 2.4375 -5.515625 C 2.25 -5.421875 2.09375 -5.269531 1.96875 -5.0625 C 1.84375 -4.863281 1.75 -4.609375 1.6875 -4.296875 C 1.625 -3.984375 1.59375 -3.609375 1.59375 -3.171875 C 1.59375 -2.710938 1.625 -2.328125 1.6875 -2.015625 C 1.75 -1.703125 1.84375 -1.453125 1.96875 -1.265625 C 2.09375 -1.078125 2.25 -0.941406 2.4375 -0.859375 C 2.625 -0.773438 2.851562 -0.734375 3.125 -0.734375 C 3.332031 -0.734375 3.535156 -0.773438 3.734375 -0.859375 C 3.941406 -0.953125 4.125 -1.097656 4.28125 -1.296875 C 4.445312 -1.492188 4.578125 -1.742188 4.671875 -2.046875 C 4.765625 -2.359375 4.8125 -2.734375 4.8125 -3.171875 Z M 4.8125 -3.171875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-2">
-<path style="stroke:none;" d="M 6.171875 -3.171875 C 6.171875 -2.066406 5.925781 -1.238281 5.4375 -0.6875 C 4.945312 -0.144531 4.238281 0.125 3.3125 0.125 C 2.875 0.125 2.476562 0.0546875 2.125 -0.078125 C 1.78125 -0.210938 1.488281 -0.414062 1.25 -0.6875 C 1.007812 -0.96875 0.820312 -1.3125 0.6875 -1.71875 C 0.5625 -2.132812 0.5 -2.617188 0.5 -3.171875 C 0.5 -5.359375 1.445312 -6.453125 3.34375 -6.453125 C 3.832031 -6.453125 4.253906 -6.382812 4.609375 -6.25 C 4.972656 -6.113281 5.269531 -5.910156 5.5 -5.640625 C 5.726562 -5.367188 5.894531 -5.023438 6 -4.609375 C 6.113281 -4.203125 6.171875 -3.722656 6.171875 -3.171875 Z M 5.0625 -3.171875 C 5.0625 -3.671875 5.019531 -4.078125 4.9375 -4.390625 C 4.863281 -4.710938 4.753906 -4.96875 4.609375 -5.15625 C 4.460938 -5.351562 4.285156 -5.488281 4.078125 -5.5625 C 3.867188 -5.632812 3.628906 -5.671875 3.359375 -5.671875 C 3.085938 -5.671875 2.84375 -5.628906 2.625 -5.546875 C 2.414062 -5.472656 2.234375 -5.335938 2.078125 -5.140625 C 1.929688 -4.953125 1.816406 -4.695312 1.734375 -4.375 C 1.648438 -4.050781 1.609375 -3.648438 1.609375 -3.171875 C 1.609375 -2.679688 1.648438 -2.273438 1.734375 -1.953125 C 1.828125 -1.628906 1.945312 -1.367188 2.09375 -1.171875 C 2.25 -0.984375 2.425781 -0.847656 2.625 -0.765625 C 2.832031 -0.691406 3.054688 -0.65625 3.296875 -0.65625 C 3.566406 -0.65625 3.8125 -0.691406 4.03125 -0.765625 C 4.25 -0.847656 4.429688 -0.984375 4.578125 -1.171875 C 4.734375 -1.367188 4.851562 -1.628906 4.9375 -1.953125 C 5.019531 -2.273438 5.0625 -2.679688 5.0625 -3.171875 Z M 5.0625 -3.171875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-3">
-<path style="stroke:none;" d="M 0.921875 0 L 0.921875 -0.890625 L 3.015625 -0.890625 L 3.015625 -7.25 L 1.15625 -5.921875 L 1.15625 -6.921875 L 3.109375 -8.25 L 4.078125 -8.25 L 4.078125 -0.890625 L 6.09375 -0.890625 L 6.09375 0 Z M 0.921875 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-4">
-<path style="stroke:none;" d=""/>
-</symbol>
-<symbol overflow="visible" id="glyph2-5">
-<path style="stroke:none;" d="M 6.171875 -3.203125 C 6.171875 -0.984375 5.394531 0.125 3.84375 0.125 C 3.363281 0.125 2.960938 0.0351562 2.640625 -0.140625 C 2.316406 -0.316406 2.054688 -0.597656 1.859375 -0.984375 C 1.859375 -0.878906 1.851562 -0.769531 1.84375 -0.65625 C 1.832031 -0.550781 1.820312 -0.453125 1.8125 -0.359375 C 1.8125 -0.265625 1.804688 -0.1875 1.796875 -0.125 C 1.796875 -0.0625 1.796875 -0.0195312 1.796875 0 L 0.78125 0 C 0.78125 -0.03125 0.78125 -0.0859375 0.78125 -0.171875 C 0.789062 -0.265625 0.796875 -0.367188 0.796875 -0.484375 C 0.796875 -0.597656 0.796875 -0.722656 0.796875 -0.859375 C 0.804688 -1.003906 0.8125 -1.15625 0.8125 -1.3125 L 0.8125 -8.703125 L 1.859375 -8.703125 L 1.859375 -6.21875 C 1.859375 -6.101562 1.859375 -5.988281 1.859375 -5.875 C 1.859375 -5.769531 1.859375 -5.675781 1.859375 -5.59375 C 1.847656 -5.5 1.84375 -5.410156 1.84375 -5.328125 L 1.859375 -5.328125 C 2.054688 -5.734375 2.316406 -6.019531 2.640625 -6.1875 C 2.960938 -6.363281 3.363281 -6.453125 3.84375 -6.453125 C 4.644531 -6.453125 5.234375 -6.179688 5.609375 -5.640625 C 5.984375 -5.109375 6.171875 -4.296875 6.171875 -3.203125 Z M 5.0625 -3.171875 C 5.0625 -3.609375 5.035156 -3.984375 4.984375 -4.296875 C 4.929688 -4.609375 4.84375 -4.863281 4.71875 -5.0625 C 4.59375 -5.257812 4.4375 -5.40625 4.25 -5.5 C 4.0625 -5.59375 3.832031 -5.640625 3.5625 -5.640625 C 3.289062 -5.640625 3.046875 -5.59375 2.828125 -5.5 C 2.617188 -5.414062 2.441406 -5.273438 2.296875 -5.078125 C 2.160156 -4.878906 2.050781 -4.613281 1.96875 -4.28125 C 1.894531 -3.957031 1.859375 -3.5625 1.859375 -3.09375 C 1.859375 -2.644531 1.894531 -2.265625 1.96875 -1.953125 C 2.050781 -1.648438 2.160156 -1.398438 2.296875 -1.203125 C 2.441406 -1.015625 2.617188 -0.875 2.828125 -0.78125 C 3.035156 -0.695312 3.28125 -0.65625 3.5625 -0.65625 C 3.8125 -0.65625 4.03125 -0.703125 4.21875 -0.796875 C 4.40625 -0.890625 4.5625 -1.035156 4.6875 -1.234375 C 4.8125 -1.429688 4.90625 -1.6875 4.96875 -2 C 5.03125 -2.320312 5.0625 -2.710938 5.0625 -3.171875 Z M 5.0625 -3.171875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-6">
-<path style="stroke:none;" d="M 1.625 -2.953125 C 1.625 -2.617188 1.65625 -2.3125 1.71875 -2.03125 C 1.789062 -1.75 1.894531 -1.507812 2.03125 -1.3125 C 2.175781 -1.113281 2.359375 -0.957031 2.578125 -0.84375 C 2.804688 -0.726562 3.078125 -0.671875 3.390625 -0.671875 C 3.847656 -0.671875 4.210938 -0.757812 4.484375 -0.9375 C 4.765625 -1.125 4.953125 -1.359375 5.046875 -1.640625 L 5.96875 -1.390625 C 5.90625 -1.210938 5.8125 -1.035156 5.6875 -0.859375 C 5.570312 -0.679688 5.414062 -0.519531 5.21875 -0.375 C 5.019531 -0.226562 4.769531 -0.109375 4.46875 -0.015625 C 4.164062 0.078125 3.804688 0.125 3.390625 0.125 C 2.453125 0.125 1.738281 -0.15625 1.25 -0.71875 C 0.757812 -1.28125 0.515625 -2.113281 0.515625 -3.21875 C 0.515625 -3.8125 0.585938 -4.3125 0.734375 -4.71875 C 0.878906 -5.132812 1.082031 -5.46875 1.34375 -5.71875 C 1.601562 -5.976562 1.90625 -6.164062 2.25 -6.28125 C 2.59375 -6.394531 2.957031 -6.453125 3.34375 -6.453125 C 3.875 -6.453125 4.316406 -6.363281 4.671875 -6.1875 C 5.035156 -6.019531 5.320312 -5.785156 5.53125 -5.484375 C 5.75 -5.179688 5.90625 -4.820312 6 -4.40625 C 6.09375 -4 6.140625 -3.5625 6.140625 -3.09375 L 6.140625 -2.953125 Z M 5.046875 -3.75 C 4.992188 -4.425781 4.828125 -4.914062 4.546875 -5.21875 C 4.265625 -5.519531 3.859375 -5.671875 3.328125 -5.671875 C 3.148438 -5.671875 2.960938 -5.644531 2.765625 -5.59375 C 2.578125 -5.539062 2.398438 -5.441406 2.234375 -5.296875 C 2.078125 -5.148438 1.941406 -4.953125 1.828125 -4.703125 C 1.710938 -4.453125 1.644531 -4.132812 1.625 -3.75 Z M 5.046875 -3.75 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-7">
-<path style="stroke:none;" d="M 4.828125 0 L 4.828125 -4.015625 C 4.828125 -4.328125 4.804688 -4.585938 4.765625 -4.796875 C 4.722656 -5.003906 4.648438 -5.171875 4.546875 -5.296875 C 4.441406 -5.421875 4.304688 -5.507812 4.140625 -5.5625 C 3.972656 -5.613281 3.769531 -5.640625 3.53125 -5.640625 C 3.28125 -5.640625 3.050781 -5.59375 2.84375 -5.5 C 2.644531 -5.414062 2.472656 -5.289062 2.328125 -5.125 C 2.191406 -4.957031 2.082031 -4.753906 2 -4.515625 C 1.925781 -4.273438 1.890625 -3.992188 1.890625 -3.671875 L 1.890625 0 L 0.828125 0 L 0.828125 -4.984375 C 0.828125 -5.117188 0.828125 -5.257812 0.828125 -5.40625 C 0.828125 -5.550781 0.820312 -5.6875 0.8125 -5.8125 C 0.8125 -5.945312 0.804688 -6.0625 0.796875 -6.15625 C 0.796875 -6.25 0.796875 -6.3125 0.796875 -6.34375 L 1.796875 -6.34375 C 1.796875 -6.320312 1.796875 -6.265625 1.796875 -6.171875 C 1.804688 -6.085938 1.8125 -5.988281 1.8125 -5.875 C 1.820312 -5.769531 1.828125 -5.660156 1.828125 -5.546875 C 1.835938 -5.429688 1.84375 -5.332031 1.84375 -5.25 L 1.859375 -5.25 C 1.960938 -5.4375 2.070312 -5.601562 2.1875 -5.75 C 2.3125 -5.90625 2.453125 -6.03125 2.609375 -6.125 C 2.773438 -6.226562 2.957031 -6.304688 3.15625 -6.359375 C 3.363281 -6.421875 3.609375 -6.453125 3.890625 -6.453125 C 4.234375 -6.453125 4.53125 -6.410156 4.78125 -6.328125 C 5.039062 -6.242188 5.253906 -6.109375 5.421875 -5.921875 C 5.585938 -5.742188 5.707031 -5.515625 5.78125 -5.234375 C 5.851562 -4.953125 5.890625 -4.613281 5.890625 -4.21875 L 5.890625 0 Z M 4.828125 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-8">
-<path style="stroke:none;" d="M 1.609375 -3.203125 C 1.609375 -2.835938 1.632812 -2.5 1.6875 -2.1875 C 1.738281 -1.882812 1.828125 -1.625 1.953125 -1.40625 C 2.078125 -1.1875 2.242188 -1.015625 2.453125 -0.890625 C 2.660156 -0.773438 2.914062 -0.71875 3.21875 -0.71875 C 3.59375 -0.71875 3.90625 -0.816406 4.15625 -1.015625 C 4.40625 -1.222656 4.5625 -1.535156 4.625 -1.953125 L 5.6875 -1.890625 C 5.644531 -1.628906 5.566406 -1.375 5.453125 -1.125 C 5.335938 -0.882812 5.175781 -0.671875 4.96875 -0.484375 C 4.769531 -0.304688 4.523438 -0.160156 4.234375 -0.046875 C 3.953125 0.0664062 3.617188 0.125 3.234375 0.125 C 2.742188 0.125 2.320312 0.0390625 1.96875 -0.125 C 1.625 -0.300781 1.34375 -0.535156 1.125 -0.828125 C 0.90625 -1.117188 0.75 -1.460938 0.65625 -1.859375 C 0.5625 -2.265625 0.515625 -2.703125 0.515625 -3.171875 C 0.515625 -3.597656 0.546875 -3.972656 0.609375 -4.296875 C 0.679688 -4.628906 0.78125 -4.914062 0.90625 -5.15625 C 1.039062 -5.40625 1.191406 -5.613281 1.359375 -5.78125 C 1.535156 -5.945312 1.722656 -6.078125 1.921875 -6.171875 C 2.117188 -6.273438 2.328125 -6.347656 2.546875 -6.390625 C 2.773438 -6.429688 3.003906 -6.453125 3.234375 -6.453125 C 3.585938 -6.453125 3.898438 -6.40625 4.171875 -6.3125 C 4.453125 -6.21875 4.691406 -6.082031 4.890625 -5.90625 C 5.097656 -5.738281 5.265625 -5.539062 5.390625 -5.3125 C 5.515625 -5.082031 5.601562 -4.832031 5.65625 -4.5625 L 4.5625 -4.484375 C 4.507812 -4.835938 4.367188 -5.113281 4.140625 -5.3125 C 3.921875 -5.519531 3.609375 -5.625 3.203125 -5.625 C 2.898438 -5.625 2.644531 -5.570312 2.4375 -5.46875 C 2.238281 -5.375 2.078125 -5.226562 1.953125 -5.03125 C 1.828125 -4.832031 1.738281 -4.578125 1.6875 -4.265625 C 1.632812 -3.960938 1.609375 -3.609375 1.609375 -3.203125 Z M 1.609375 -3.203125 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-9">
-<path style="stroke:none;" d="M 1.859375 -5.25 C 1.972656 -5.46875 2.097656 -5.648438 2.234375 -5.796875 C 2.367188 -5.953125 2.519531 -6.078125 2.6875 -6.171875 C 2.851562 -6.273438 3.03125 -6.347656 3.21875 -6.390625 C 3.414062 -6.429688 3.640625 -6.453125 3.890625 -6.453125 C 4.296875 -6.453125 4.628906 -6.394531 4.890625 -6.28125 C 5.148438 -6.175781 5.351562 -6.023438 5.5 -5.828125 C 5.644531 -5.628906 5.742188 -5.394531 5.796875 -5.125 C 5.859375 -4.851562 5.890625 -4.550781 5.890625 -4.21875 L 5.890625 0 L 4.828125 0 L 4.828125 -4.015625 C 4.828125 -4.285156 4.8125 -4.519531 4.78125 -4.71875 C 4.75 -4.925781 4.6875 -5.097656 4.59375 -5.234375 C 4.5 -5.367188 4.363281 -5.46875 4.1875 -5.53125 C 4.019531 -5.601562 3.800781 -5.640625 3.53125 -5.640625 C 3.28125 -5.640625 3.050781 -5.59375 2.84375 -5.5 C 2.644531 -5.414062 2.472656 -5.289062 2.328125 -5.125 C 2.191406 -4.957031 2.082031 -4.753906 2 -4.515625 C 1.925781 -4.285156 1.890625 -4.023438 1.890625 -3.734375 L 1.890625 0 L 0.828125 0 L 0.828125 -8.703125 L 1.890625 -8.703125 L 1.890625 -6.4375 C 1.890625 -6.300781 1.882812 -6.171875 1.875 -6.046875 C 1.875 -5.921875 1.867188 -5.800781 1.859375 -5.6875 C 1.859375 -5.582031 1.851562 -5.488281 1.84375 -5.40625 C 1.84375 -5.332031 1.84375 -5.28125 1.84375 -5.25 Z M 1.859375 -5.25 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-10">
-<path style="stroke:none;" d="M 4.5 0 L 4.5 -4.015625 C 4.5 -4.328125 4.476562 -4.585938 4.4375 -4.796875 C 4.40625 -5.003906 4.34375 -5.171875 4.25 -5.296875 C 4.15625 -5.421875 4.03125 -5.507812 3.875 -5.5625 C 3.726562 -5.613281 3.550781 -5.640625 3.34375 -5.640625 C 3.113281 -5.640625 2.910156 -5.59375 2.734375 -5.5 C 2.554688 -5.414062 2.40625 -5.289062 2.28125 -5.125 C 2.15625 -4.957031 2.054688 -4.753906 1.984375 -4.515625 C 1.910156 -4.273438 1.875 -3.992188 1.875 -3.671875 L 1.875 0 L 0.828125 0 L 0.828125 -4.984375 C 0.828125 -5.117188 0.828125 -5.257812 0.828125 -5.40625 C 0.828125 -5.550781 0.820312 -5.6875 0.8125 -5.8125 C 0.8125 -5.945312 0.804688 -6.0625 0.796875 -6.15625 C 0.796875 -6.25 0.796875 -6.3125 0.796875 -6.34375 L 1.796875 -6.34375 C 1.796875 -6.320312 1.796875 -6.265625 1.796875 -6.171875 C 1.804688 -6.085938 1.8125 -5.988281 1.8125 -5.875 C 1.820312 -5.769531 1.828125 -5.660156 1.828125 -5.546875 C 1.835938 -5.429688 1.84375 -5.332031 1.84375 -5.25 L 1.859375 -5.25 C 1.953125 -5.4375 2.050781 -5.601562 2.15625 -5.75 C 2.269531 -5.90625 2.398438 -6.03125 2.546875 -6.125 C 2.691406 -6.226562 2.859375 -6.304688 3.046875 -6.359375 C 3.234375 -6.421875 3.453125 -6.453125 3.703125 -6.453125 C 4.191406 -6.453125 4.570312 -6.359375 4.84375 -6.171875 C 5.125 -5.984375 5.320312 -5.675781 5.4375 -5.25 L 5.453125 -5.25 C 5.546875 -5.4375 5.648438 -5.601562 5.765625 -5.75 C 5.878906 -5.90625 6.015625 -6.03125 6.171875 -6.125 C 6.328125 -6.226562 6.503906 -6.304688 6.703125 -6.359375 C 6.898438 -6.421875 7.125 -6.453125 7.375 -6.453125 C 7.695312 -6.453125 7.972656 -6.410156 8.203125 -6.328125 C 8.429688 -6.242188 8.617188 -6.109375 8.765625 -5.921875 C 8.921875 -5.742188 9.03125 -5.515625 9.09375 -5.234375 C 9.164062 -4.953125 9.203125 -4.613281 9.203125 -4.21875 L 9.203125 0 L 8.15625 0 L 8.15625 -4.015625 C 8.15625 -4.328125 8.132812 -4.585938 8.09375 -4.796875 C 8.0625 -5.003906 8 -5.171875 7.90625 -5.296875 C 7.8125 -5.421875 7.691406 -5.507812 7.546875 -5.5625 C 7.398438 -5.613281 7.21875 -5.640625 7 -5.640625 C 6.78125 -5.640625 6.578125 -5.597656 6.390625 -5.515625 C 6.210938 -5.429688 6.0625 -5.304688 5.9375 -5.140625 C 5.8125 -4.984375 5.710938 -4.78125 5.640625 -4.53125 C 5.578125 -4.28125 5.546875 -3.992188 5.546875 -3.671875 L 5.546875 0 Z M 4.5 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-11">
-<path style="stroke:none;" d="M 2.421875 0.125 C 1.785156 0.125 1.304688 -0.0390625 0.984375 -0.375 C 0.671875 -0.71875 0.515625 -1.179688 0.515625 -1.765625 C 0.515625 -2.179688 0.59375 -2.523438 0.75 -2.796875 C 0.90625 -3.066406 1.109375 -3.273438 1.359375 -3.421875 C 1.617188 -3.578125 1.910156 -3.679688 2.234375 -3.734375 C 2.566406 -3.796875 2.90625 -3.832031 3.25 -3.84375 L 4.671875 -3.875 L 4.671875 -4.21875 C 4.671875 -4.476562 4.640625 -4.695312 4.578125 -4.875 C 4.523438 -5.0625 4.441406 -5.210938 4.328125 -5.328125 C 4.222656 -5.441406 4.082031 -5.523438 3.90625 -5.578125 C 3.738281 -5.628906 3.539062 -5.65625 3.3125 -5.65625 C 3.101562 -5.65625 2.914062 -5.640625 2.75 -5.609375 C 2.59375 -5.578125 2.453125 -5.523438 2.328125 -5.453125 C 2.210938 -5.378906 2.113281 -5.273438 2.03125 -5.140625 C 1.957031 -5.015625 1.910156 -4.847656 1.890625 -4.640625 L 0.796875 -4.75 C 0.828125 -5 0.894531 -5.226562 1 -5.4375 C 1.113281 -5.644531 1.269531 -5.820312 1.46875 -5.96875 C 1.675781 -6.125 1.929688 -6.242188 2.234375 -6.328125 C 2.535156 -6.410156 2.898438 -6.453125 3.328125 -6.453125 C 4.128906 -6.453125 4.726562 -6.269531 5.125 -5.90625 C 5.53125 -5.539062 5.734375 -5.015625 5.734375 -4.328125 L 5.734375 -1.59375 C 5.734375 -1.28125 5.773438 -1.046875 5.859375 -0.890625 C 5.941406 -0.734375 6.097656 -0.65625 6.328125 -0.65625 C 6.390625 -0.65625 6.445312 -0.65625 6.5 -0.65625 C 6.5625 -0.664062 6.617188 -0.675781 6.671875 -0.6875 L 6.671875 -0.03125 C 6.535156 0 6.398438 0.0195312 6.265625 0.03125 C 6.140625 0.0507812 6.003906 0.0625 5.859375 0.0625 C 5.660156 0.0625 5.488281 0.0351562 5.34375 -0.015625 C 5.207031 -0.0664062 5.09375 -0.144531 5 -0.25 C 4.90625 -0.363281 4.832031 -0.5 4.78125 -0.65625 C 4.738281 -0.8125 4.710938 -1 4.703125 -1.21875 L 4.671875 -1.21875 C 4.554688 -1.007812 4.429688 -0.820312 4.296875 -0.65625 C 4.160156 -0.5 4.003906 -0.363281 3.828125 -0.25 C 3.648438 -0.132812 3.445312 -0.046875 3.21875 0.015625 C 2.988281 0.0859375 2.722656 0.125 2.421875 0.125 Z M 2.671875 -0.671875 C 3.003906 -0.671875 3.296875 -0.734375 3.546875 -0.859375 C 3.796875 -0.984375 4.003906 -1.140625 4.171875 -1.328125 C 4.335938 -1.523438 4.460938 -1.734375 4.546875 -1.953125 C 4.628906 -2.179688 4.671875 -2.398438 4.671875 -2.609375 L 4.671875 -3.125 L 3.515625 -3.109375 C 3.253906 -3.097656 3.007812 -3.078125 2.78125 -3.046875 C 2.550781 -3.015625 2.347656 -2.945312 2.171875 -2.84375 C 1.992188 -2.75 1.851562 -2.613281 1.75 -2.4375 C 1.644531 -2.269531 1.59375 -2.039062 1.59375 -1.75 C 1.59375 -1.40625 1.6875 -1.140625 1.875 -0.953125 C 2.0625 -0.765625 2.328125 -0.671875 2.671875 -0.671875 Z M 2.671875 -0.671875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-12">
-<path style="stroke:none;" d="M 0.828125 0 L 0.828125 -4.859375 C 0.828125 -4.992188 0.828125 -5.128906 0.828125 -5.265625 C 0.828125 -5.410156 0.820312 -5.546875 0.8125 -5.671875 C 0.8125 -5.796875 0.804688 -5.914062 0.796875 -6.03125 C 0.796875 -6.144531 0.796875 -6.25 0.796875 -6.34375 L 1.796875 -6.34375 C 1.796875 -6.25 1.796875 -6.144531 1.796875 -6.03125 C 1.804688 -5.914062 1.8125 -5.796875 1.8125 -5.671875 C 1.820312 -5.554688 1.828125 -5.441406 1.828125 -5.328125 C 1.835938 -5.210938 1.84375 -5.117188 1.84375 -5.046875 L 1.859375 -5.046875 C 1.929688 -5.285156 2.007812 -5.492188 2.09375 -5.671875 C 2.1875 -5.847656 2.285156 -5.992188 2.390625 -6.109375 C 2.503906 -6.222656 2.640625 -6.304688 2.796875 -6.359375 C 2.953125 -6.421875 3.144531 -6.453125 3.375 -6.453125 C 3.457031 -6.453125 3.535156 -6.445312 3.609375 -6.4375 C 3.691406 -6.425781 3.753906 -6.414062 3.796875 -6.40625 L 3.796875 -5.4375 C 3.722656 -5.457031 3.640625 -5.46875 3.546875 -5.46875 C 3.453125 -5.476562 3.347656 -5.484375 3.234375 -5.484375 C 2.992188 -5.484375 2.785156 -5.425781 2.609375 -5.3125 C 2.441406 -5.207031 2.304688 -5.054688 2.203125 -4.859375 C 2.097656 -4.671875 2.019531 -4.441406 1.96875 -4.171875 C 1.914062 -3.910156 1.890625 -3.625 1.890625 -3.3125 L 1.890625 0 Z M 0.828125 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-13">
-<path style="stroke:none;" d="M 4.78125 0 L 2.640625 -2.890625 L 1.859375 -2.25 L 1.859375 0 L 0.8125 0 L 0.8125 -8.703125 L 1.859375 -8.703125 L 1.859375 -3.265625 L 4.640625 -6.34375 L 5.890625 -6.34375 L 3.3125 -3.609375 L 6.015625 0 Z M 4.78125 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-14">
-<path style="stroke:none;" d="M 5.5625 -1.75 C 5.5625 -1.457031 5.503906 -1.191406 5.390625 -0.953125 C 5.273438 -0.722656 5.109375 -0.53125 4.890625 -0.375 C 4.671875 -0.21875 4.398438 -0.09375 4.078125 0 C 3.765625 0.0820312 3.40625 0.125 3 0.125 C 2.625 0.125 2.289062 0.09375 2 0.03125 C 1.707031 -0.0195312 1.445312 -0.109375 1.21875 -0.234375 C 1 -0.359375 0.8125 -0.523438 0.65625 -0.734375 C 0.507812 -0.941406 0.398438 -1.191406 0.328125 -1.484375 L 1.265625 -1.671875 C 1.359375 -1.328125 1.546875 -1.078125 1.828125 -0.921875 C 2.109375 -0.765625 2.5 -0.6875 3 -0.6875 C 3.21875 -0.6875 3.421875 -0.703125 3.609375 -0.734375 C 3.804688 -0.765625 3.972656 -0.816406 4.109375 -0.890625 C 4.242188 -0.972656 4.347656 -1.078125 4.421875 -1.203125 C 4.503906 -1.328125 4.546875 -1.484375 4.546875 -1.671875 C 4.546875 -1.859375 4.5 -2.015625 4.40625 -2.140625 C 4.3125 -2.265625 4.1875 -2.367188 4.03125 -2.453125 C 3.875 -2.535156 3.679688 -2.601562 3.453125 -2.65625 C 3.222656 -2.71875 2.972656 -2.785156 2.703125 -2.859375 C 2.441406 -2.929688 2.1875 -3.007812 1.9375 -3.09375 C 1.6875 -3.175781 1.460938 -3.28125 1.265625 -3.40625 C 1.066406 -3.539062 0.90625 -3.707031 0.78125 -3.90625 C 0.65625 -4.113281 0.59375 -4.367188 0.59375 -4.671875 C 0.59375 -5.242188 0.796875 -5.679688 1.203125 -5.984375 C 1.617188 -6.285156 2.21875 -6.4375 3 -6.4375 C 3.707031 -6.4375 4.265625 -6.3125 4.671875 -6.0625 C 5.085938 -5.820312 5.347656 -5.429688 5.453125 -4.890625 L 4.5 -4.765625 C 4.46875 -4.929688 4.40625 -5.066406 4.3125 -5.171875 C 4.21875 -5.285156 4.101562 -5.378906 3.96875 -5.453125 C 3.84375 -5.523438 3.695312 -5.570312 3.53125 -5.59375 C 3.363281 -5.625 3.1875 -5.640625 3 -5.640625 C 2.53125 -5.640625 2.179688 -5.566406 1.953125 -5.421875 C 1.722656 -5.273438 1.609375 -5.054688 1.609375 -4.765625 C 1.609375 -4.597656 1.648438 -4.457031 1.734375 -4.34375 C 1.816406 -4.226562 1.929688 -4.132812 2.078125 -4.0625 C 2.234375 -3.988281 2.414062 -3.921875 2.625 -3.859375 C 2.84375 -3.804688 3.078125 -3.75 3.328125 -3.6875 C 3.492188 -3.644531 3.664062 -3.597656 3.84375 -3.546875 C 4.019531 -3.492188 4.191406 -3.429688 4.359375 -3.359375 C 4.523438 -3.296875 4.679688 -3.21875 4.828125 -3.125 C 4.972656 -3.039062 5.097656 -2.929688 5.203125 -2.796875 C 5.316406 -2.671875 5.40625 -2.519531 5.46875 -2.34375 C 5.53125 -2.175781 5.5625 -1.976562 5.5625 -1.75 Z M 5.5625 -1.75 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-15">
-<path style="stroke:none;" d="M 0.8125 0 L 0.8125 -8.703125 L 1.859375 -8.703125 L 1.859375 0 Z M 0.8125 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-16">
-<path style="stroke:none;" d="M 3.25 -0.046875 C 3.082031 -0.00390625 2.914062 0.0234375 2.75 0.046875 C 2.59375 0.078125 2.40625 0.09375 2.1875 0.09375 C 1.34375 0.09375 0.921875 -0.382812 0.921875 -1.34375 L 0.921875 -5.578125 L 0.1875 -5.578125 L 0.1875 -6.34375 L 0.953125 -6.34375 L 1.265625 -7.765625 L 1.96875 -7.765625 L 1.96875 -6.34375 L 3.140625 -6.34375 L 3.140625 -5.578125 L 1.96875 -5.578125 L 1.96875 -1.578125 C 1.96875 -1.265625 2.015625 -1.046875 2.109375 -0.921875 C 2.210938 -0.804688 2.390625 -0.75 2.640625 -0.75 C 2.742188 -0.75 2.84375 -0.753906 2.9375 -0.765625 C 3.03125 -0.785156 3.132812 -0.804688 3.25 -0.828125 Z M 3.25 -0.046875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-17">
-<path style="stroke:none;" d="M 0.796875 -7.6875 L 0.796875 -8.703125 L 1.859375 -8.703125 L 1.859375 -7.6875 Z M 0.796875 0 L 0.796875 -6.34375 L 1.859375 -6.34375 L 1.859375 0 Z M 0.796875 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-18">
-<path style="stroke:none;" d="M 3.59375 0 L 2.34375 0 L 0.046875 -6.34375 L 1.171875 -6.34375 L 2.5625 -2.21875 C 2.59375 -2.132812 2.625 -2.03125 2.65625 -1.90625 C 2.695312 -1.78125 2.734375 -1.648438 2.765625 -1.515625 C 2.804688 -1.378906 2.84375 -1.25 2.875 -1.125 C 2.914062 -1.007812 2.945312 -0.910156 2.96875 -0.828125 C 2.988281 -0.910156 3.015625 -1.007812 3.046875 -1.125 C 3.085938 -1.25 3.128906 -1.375 3.171875 -1.5 C 3.210938 -1.632812 3.253906 -1.765625 3.296875 -1.890625 C 3.335938 -2.015625 3.375 -2.117188 3.40625 -2.203125 L 4.84375 -6.34375 L 5.953125 -6.34375 Z M 3.59375 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-19">
-<path style="stroke:none;" d="M 0.609375 -4.171875 C 0.609375 -4.816406 0.691406 -5.394531 0.859375 -5.90625 C 1.035156 -6.425781 1.296875 -6.867188 1.640625 -7.234375 C 1.984375 -7.597656 2.410156 -7.878906 2.921875 -8.078125 C 3.441406 -8.273438 4.039062 -8.375 4.71875 -8.375 C 5.21875 -8.375 5.660156 -8.328125 6.046875 -8.234375 C 6.429688 -8.148438 6.765625 -8.023438 7.046875 -7.859375 C 7.328125 -7.691406 7.5625 -7.488281 7.75 -7.25 C 7.945312 -7.007812 8.113281 -6.738281 8.25 -6.4375 L 7.1875 -6.125 C 7.082031 -6.320312 6.957031 -6.503906 6.8125 -6.671875 C 6.675781 -6.835938 6.503906 -6.976562 6.296875 -7.09375 C 6.097656 -7.207031 5.863281 -7.296875 5.59375 -7.359375 C 5.332031 -7.429688 5.03125 -7.46875 4.6875 -7.46875 C 4.1875 -7.46875 3.75 -7.390625 3.375 -7.234375 C 3.007812 -7.078125 2.703125 -6.851562 2.453125 -6.5625 C 2.210938 -6.269531 2.03125 -5.921875 1.90625 -5.515625 C 1.789062 -5.109375 1.734375 -4.660156 1.734375 -4.171875 C 1.734375 -3.671875 1.796875 -3.210938 1.921875 -2.796875 C 2.054688 -2.390625 2.25 -2.035156 2.5 -1.734375 C 2.757812 -1.441406 3.078125 -1.210938 3.453125 -1.046875 C 3.828125 -0.878906 4.265625 -0.796875 4.765625 -0.796875 C 5.085938 -0.796875 5.382812 -0.820312 5.65625 -0.875 C 5.9375 -0.925781 6.1875 -0.992188 6.40625 -1.078125 C 6.625 -1.171875 6.816406 -1.269531 6.984375 -1.375 C 7.148438 -1.488281 7.289062 -1.597656 7.40625 -1.703125 L 7.40625 -3.1875 L 4.9375 -3.1875 L 4.9375 -4.125 L 8.4375 -4.125 L 8.4375 -1.28125 C 8.25 -1.09375 8.03125 -0.914062 7.78125 -0.75 C 7.539062 -0.582031 7.265625 -0.429688 6.953125 -0.296875 C 6.648438 -0.171875 6.3125 -0.0703125 5.9375 0 C 5.570312 0.0820312 5.179688 0.125 4.765625 0.125 C 4.066406 0.125 3.457031 0.0195312 2.9375 -0.1875 C 2.414062 -0.40625 1.984375 -0.707031 1.640625 -1.09375 C 1.296875 -1.476562 1.035156 -1.929688 0.859375 -2.453125 C 0.691406 -2.972656 0.609375 -3.546875 0.609375 -4.171875 Z M 0.609375 -4.171875 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-20">
-<path style="stroke:none;" d="M 1.09375 0 L 1.09375 -1.28125 L 2.234375 -1.28125 L 2.234375 0 Z M 1.09375 0 "/>
-</symbol>
-<symbol overflow="visible" id="glyph2-21">
-<path style="stroke:none;" d="M 5.15625 -1.875 L 5.15625 0 L 4.171875 0 L 4.171875 -1.875 L 0.28125 -1.875 L 0.28125 -2.6875 L 4.0625 -8.25 L 5.15625 -8.25 L 5.15625 -2.703125 L 6.328125 -2.703125 L 6.328125 -1.875 Z M 4.171875 -7.0625 C 4.160156 -7.039062 4.140625 -7.003906 4.109375 -6.953125 C 4.078125 -6.898438 4.039062 -6.835938 4 -6.765625 C 3.957031 -6.691406 3.914062 -6.617188 3.875 -6.546875 C 3.84375 -6.472656 3.8125 -6.414062 3.78125 -6.375 L 1.65625 -3.25 C 1.632812 -3.21875 1.601562 -3.175781 1.5625 -3.125 C 1.53125 -3.070312 1.492188 -3.019531 1.453125 -2.96875 C 1.421875 -2.914062 1.382812 -2.863281 1.34375 -2.8125 C 1.300781 -2.769531 1.269531 -2.734375 1.25 -2.703125 L 4.171875 -2.703125 Z M 4.171875 -7.0625 "/>
-</symbol>
-</g>
-<clipPath id="clip1">
-  <path d="M 48 27 L 50 27 L 50 367 L 48 367 Z M 48 27 "/>
-</clipPath>
-<clipPath id="clip2">
-  <path d="M 101 27 L 103 27 L 103 367 L 101 367 Z M 101 27 "/>
-</clipPath>
-<clipPath id="clip3">
-  <path d="M 154 27 L 156 27 L 156 367 L 154 367 Z M 154 27 "/>
-</clipPath>
-<clipPath id="clip4">
-  <path d="M 207 27 L 209 27 L 209 367 L 207 367 Z M 207 27 "/>
-</clipPath>
-<clipPath id="clip5">
-  <path d="M 259 27 L 261 27 L 261 367 L 259 367 Z M 259 27 "/>
-</clipPath>
-<clipPath id="clip6">
-  <path d="M 312 27 L 314 27 L 314 367 L 312 367 Z M 312 27 "/>
-</clipPath>
-<clipPath id="clip7">
-  <path d="M 365 27 L 367 27 L 367 367 L 365 367 Z M 365 27 "/>
-</clipPath>
-<clipPath id="clip8">
-  <path d="M 418 27 L 420 27 L 420 367 L 418 367 Z M 418 27 "/>
-</clipPath>
-<clipPath id="clip9">
-  <path d="M 471 27 L 473 27 L 473 367 L 471 367 Z M 471 27 "/>
-</clipPath>
-<clipPath id="clip10">
-  <path d="M 524 27 L 526 27 L 526 367 L 524 367 Z M 524 27 "/>
-</clipPath>
-<clipPath id="clip11">
-  <path d="M 48 366 L 563 366 L 563 367 L 48 367 Z M 48 366 "/>
-</clipPath>
-<clipPath id="clip12">
-  <path d="M 48 304 L 563 304 L 563 306 L 48 306 Z M 48 304 "/>
-</clipPath>
-<clipPath id="clip13">
-  <path d="M 48 242 L 563 242 L 563 244 L 48 244 Z M 48 242 "/>
-</clipPath>
-<clipPath id="clip14">
-  <path d="M 48 181 L 563 181 L 563 183 L 48 183 Z M 48 181 "/>
-</clipPath>
-<clipPath id="clip15">
-  <path d="M 48 119 L 563 119 L 563 121 L 48 121 Z M 48 119 "/>
-</clipPath>
-<clipPath id="clip16">
-  <path d="M 48 57 L 563 57 L 563 59 L 48 59 Z M 48 57 "/>
-</clipPath>
-<clipPath id="clip17">
-  <path d="M 48 43 L 563 43 L 563 306 L 48 306 Z M 48 43 "/>
-</clipPath>
-</defs>
-<g id="surface4122">
-<rect x="0" y="0" width="576" height="396" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(91.764706%,91.764706%,94.901961%);fill-opacity:1;" d="M 48.285156 367.039062 L 563.039062 367.039062 L 563.039062 26.960938 L 48.285156 26.960938 Z M 48.285156 367.039062 "/>
-<g clip-path="url(#clip1)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.921875 367.039062 L 48.921875 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.921875 367.039062 L 48.921875 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.921875 26.960938 L 48.921875 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="33.421875" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="40.091797" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="45.65332" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="48.983398" y="382.039062"/>
-  <use xlink:href="#glyph0-5" x="51.761719" y="382.039062"/>
-  <use xlink:href="#glyph0-6" x="57.323242" y="382.039062"/>
-</g>
-<g clip-path="url(#clip2)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 101.800781 367.039062 L 101.800781 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 101.800781 367.039062 L 101.800781 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 101.800781 26.960938 L 101.800781 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="86.300781" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="92.970703" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="98.532227" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="101.862305" y="382.039062"/>
-  <use xlink:href="#glyph0-5" x="104.640625" y="382.039062"/>
-  <use xlink:href="#glyph0-7" x="110.202148" y="382.039062"/>
-</g>
-<g clip-path="url(#clip3)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 154.679688 367.039062 L 154.679688 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 154.679688 367.039062 L 154.679688 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 154.679688 26.960938 L 154.679688 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="139.179688" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="145.849609" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="151.411133" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="154.741211" y="382.039062"/>
-  <use xlink:href="#glyph0-5" x="157.519531" y="382.039062"/>
-  <use xlink:href="#glyph0-8" x="163.081055" y="382.039062"/>
-</g>
-<g clip-path="url(#clip4)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 207.554688 367.039062 L 207.554688 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 207.554688 367.039062 L 207.554688 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 207.554688 26.960938 L 207.554688 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="192.054688" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="198.724609" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="204.286133" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="207.616211" y="382.039062"/>
-  <use xlink:href="#glyph0-9" x="210.394531" y="382.039062"/>
-  <use xlink:href="#glyph0-9" x="215.956055" y="382.039062"/>
-</g>
-<g clip-path="url(#clip5)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 260.433594 367.039062 L 260.433594 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 260.433594 367.039062 L 260.433594 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 260.433594 26.960938 L 260.433594 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="244.933594" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="251.603516" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="257.165039" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="260.495117" y="382.039062"/>
-  <use xlink:href="#glyph0-9" x="263.273438" y="382.039062"/>
-  <use xlink:href="#glyph0-10" x="268.834961" y="382.039062"/>
-</g>
-<g clip-path="url(#clip6)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 313.3125 367.039062 L 313.3125 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 313.3125 367.039062 L 313.3125 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 313.3125 26.960938 L 313.3125 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-1" x="297.8125" y="382.039062"/>
-  <use xlink:href="#glyph0-2" x="304.482422" y="382.039062"/>
-  <use xlink:href="#glyph0-3" x="310.043945" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="313.374023" y="382.039062"/>
-  <use xlink:href="#glyph0-9" x="316.152344" y="382.039062"/>
-  <use xlink:href="#glyph0-11" x="321.713867" y="382.039062"/>
-</g>
-<g clip-path="url(#clip7)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 366.1875 367.039062 L 366.1875 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 366.1875 367.039062 L 366.1875 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 366.1875 26.960938 L 366.1875 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-12" x="350.6875" y="382.039062"/>
-  <use xlink:href="#glyph0-13" x="359.017578" y="382.039062"/>
-  <use xlink:href="#glyph0-14" x="364.579102" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="369.579102" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="372.357422" y="382.039062"/>
-  <use xlink:href="#glyph0-5" x="375.135742" y="382.039062"/>
-</g>
-<g clip-path="url(#clip8)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 419.066406 367.039062 L 419.066406 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 419.066406 367.039062 L 419.066406 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 419.066406 26.960938 L 419.066406 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-12" x="403.566406" y="382.039062"/>
-  <use xlink:href="#glyph0-13" x="411.896484" y="382.039062"/>
-  <use xlink:href="#glyph0-14" x="417.458008" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="422.458008" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="425.236328" y="382.039062"/>
-  <use xlink:href="#glyph0-15" x="428.014648" y="382.039062"/>
-</g>
-<g clip-path="url(#clip9)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 471.945312 367.039062 L 471.945312 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 471.945312 367.039062 L 471.945312 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 471.945312 26.960938 L 471.945312 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-12" x="456.445312" y="382.039062"/>
-  <use xlink:href="#glyph0-13" x="464.775391" y="382.039062"/>
-  <use xlink:href="#glyph0-14" x="470.336914" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="475.336914" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="478.115234" y="382.039062"/>
-  <use xlink:href="#glyph0-16" x="480.893555" y="382.039062"/>
-</g>
-<g clip-path="url(#clip10)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 524.820312 367.039062 L 524.820312 26.960938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 524.820312 367.039062 L 524.820312 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 524.820312 26.960938 L 524.820312 26.960938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-12" x="507.820312" y="382.039062"/>
-  <use xlink:href="#glyph0-13" x="516.150391" y="382.039062"/>
-  <use xlink:href="#glyph0-14" x="521.711914" y="382.039062"/>
-  <use xlink:href="#glyph0-4" x="526.711914" y="382.039062"/>
-  <use xlink:href="#glyph0-5" x="529.490234" y="382.039062"/>
-  <use xlink:href="#glyph0-17" x="535.051758" y="382.039062"/>
-</g>
-<g clip-path="url(#clip11)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 367.039062 L 563.039062 367.039062 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 367.039062 L 48.285156 367.039062 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 367.039062 L 563.039062 367.039062 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-17" x="26.285156" y="370.039062"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="370.039062"/>
-  <use xlink:href="#glyph0-17" x="34.625" y="370.039062"/>
-</g>
-<g clip-path="url(#clip12)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 305.207031 L 563.039062 305.207031 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 305.207031 L 48.285156 305.207031 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 305.207031 L 563.039062 305.207031 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-17" x="26.285156" y="308.207031"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="308.207031"/>
-  <use xlink:href="#glyph0-9" x="34.625" y="308.207031"/>
-</g>
-<g clip-path="url(#clip13)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 243.375 L 563.039062 243.375 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 243.375 L 48.285156 243.375 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 243.375 L 563.039062 243.375 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-17" x="26.285156" y="246.375"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="246.375"/>
-  <use xlink:href="#glyph0-15" x="34.625" y="246.375"/>
-</g>
-<g clip-path="url(#clip14)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 181.542969 L 563.039062 181.542969 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 181.542969 L 48.285156 181.542969 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 181.542969 L 563.039062 181.542969 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-17" x="26.285156" y="184.542969"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="184.542969"/>
-  <use xlink:href="#glyph0-7" x="34.625" y="184.542969"/>
-</g>
-<g clip-path="url(#clip15)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 119.710938 L 563.039062 119.710938 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 119.710938 L 48.285156 119.710938 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 119.710938 L 563.039062 119.710938 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-17" x="26.285156" y="122.710938"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="122.710938"/>
-  <use xlink:href="#glyph0-11" x="34.625" y="122.710938"/>
-</g>
-<g clip-path="url(#clip16)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 57.875 L 563.039062 57.875 "/>
-</g>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 57.875 L 48.285156 57.875 "/>
-<path style="fill:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(15%,15%,15%);stroke-opacity:1;stroke-miterlimit:10;" d="M 563.039062 57.875 L 563.039062 57.875 "/>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph0-5" x="26.285156" y="60.875"/>
-  <use xlink:href="#glyph0-18" x="31.84668" y="60.875"/>
-  <use xlink:href="#glyph0-17" x="34.625" y="60.875"/>
-</g>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph1-1" x="19.285156" y="306"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="297.443848"/>
-  <use xlink:href="#glyph1-3" x="19.285156" y="291.326172"/>
-  <use xlink:href="#glyph1-4" x="19.285156" y="285.208496"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="276.04541"/>
-  <use xlink:href="#glyph1-5" x="19.285156" y="269.927734"/>
-  <use xlink:href="#glyph1-6" x="19.285156" y="263.810059"/>
-  <use xlink:href="#glyph1-7" x="19.285156" y="257.692383"/>
-  <use xlink:href="#glyph1-8" x="19.285156" y="254.63623"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="248.518555"/>
-  <use xlink:href="#glyph1-9" x="19.285156" y="242.400879"/>
-  <use xlink:href="#glyph1-10" x="19.285156" y="238.737793"/>
-  <use xlink:href="#glyph1-3" x="19.285156" y="235.681641"/>
-  <use xlink:href="#glyph1-9" x="19.285156" y="229.563965"/>
-  <use xlink:href="#glyph1-4" x="19.285156" y="225.900879"/>
-  <use xlink:href="#glyph1-5" x="19.285156" y="216.737793"/>
-  <use xlink:href="#glyph1-6" x="19.285156" y="210.620117"/>
-  <use xlink:href="#glyph1-11" x="19.285156" y="204.502441"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="199.002441"/>
-  <use xlink:href="#glyph1-7" x="19.285156" y="192.884766"/>
-  <use xlink:href="#glyph1-12" x="19.285156" y="189.828613"/>
-  <use xlink:href="#glyph1-6" x="19.285156" y="186.165527"/>
-  <use xlink:href="#glyph1-3" x="19.285156" y="180.047852"/>
-  <use xlink:href="#glyph1-9" x="19.285156" y="173.930176"/>
-  <use xlink:href="#glyph1-4" x="19.285156" y="170.26709"/>
-  <use xlink:href="#glyph1-5" x="19.285156" y="161.104004"/>
-  <use xlink:href="#glyph1-13" x="19.285156" y="154.986328"/>
-  <use xlink:href="#glyph1-14" x="19.285156" y="152.54248"/>
-  <use xlink:href="#glyph1-15" x="19.285156" y="150.098633"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="144.598633"/>
-  <use xlink:href="#glyph1-16" x="19.285156" y="138.480957"/>
-  <use xlink:href="#glyph1-7" x="19.285156" y="132.363281"/>
-  <use xlink:href="#glyph1-3" x="19.285156" y="129.307129"/>
-  <use xlink:href="#glyph1-8" x="19.285156" y="123.189453"/>
-  <use xlink:href="#glyph1-17" x="19.285156" y="117.071777"/>
-  <use xlink:href="#glyph1-18" x="19.285156" y="111.571777"/>
-  <use xlink:href="#glyph1-17" x="19.285156" y="108.515625"/>
-  <use xlink:href="#glyph1-2" x="19.285156" y="103.015625"/>
-  <use xlink:href="#glyph1-11" x="19.285156" y="96.897949"/>
-  <use xlink:href="#glyph1-19" x="19.285156" y="91.397949"/>
-</g>
-<g clip-path="url(#clip17)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(29.803922%,44.705882%,69.019608%);stroke-opacity:1;stroke-miterlimit:10;" d="M 48.285156 82.117188 L 52.289062 82.292969 L 54.164062 82.371094 L 57.648438 82.292969 L 57.652344 82.484375 L 57.660156 82.171875 L 57.667969 82.316406 L 57.683594 82.503906 L 57.703125 82.242188 L 57.707031 87.492188 L 57.78125 82.070312 L 57.84375 82.519531 L 58.730469 82.242188 L 61.191406 82.136719 L 61.667969 82.941406 L 62.523438 82.410156 L 62.855469 82.609375 L 63.003906 82.167969 L 64.125 82.070312 L 64.226562 81.617188 L 66.125 81.675781 L 66.152344 81.445312 L 69.957031 81.480469 L 69.992188 83.644531 L 71.96875 85.726562 L 75.746094 85.722656 L 76.574219 85.96875 L 78.121094 85.863281 L 79.125 86.320312 L 79.273438 85.917969 L 81.054688 86.050781 L 81.902344 87.589844 L 81.914062 85.949219 L 84.125 85.910156 L 84.175781 86.121094 L 87.546875 86.113281 L 87.890625 86.335938 L 91.058594 86.0625 L 92.300781 87.9375 L 92.839844 85.894531 L 93.3125 85.949219 L 95.917969 87.246094 L 95.921875 87.785156 L 95.957031 87.617188 L 96.640625 87.261719 L 96.65625 88.785156 L 98.15625 89 L 98.339844 89.167969 L 100.890625 88.953125 L 100.90625 89.199219 L 101.722656 89.039062 L 101.730469 88.871094 L 102.351562 89.21875 L 102.796875 88.964844 L 103.011719 89.023438 L 104.941406 88.988281 L 105.625 89.160156 L 105.628906 89.289062 L 105.632812 89.261719 L 106.152344 89.109375 L 110.972656 89.296875 L 111.234375 89.105469 L 111.347656 89.136719 L 111.359375 89.308594 L 111.363281 89.15625 L 111.730469 88.9375 L 113.535156 89.128906 L 113.6875 87.558594 L 113.777344 87.589844 L 113.917969 87.921875 L 114.167969 88.007812 L 114.269531 87.28125 L 115.03125 87.175781 L 115.570312 87.488281 L 115.71875 87.511719 L 116.066406 87.3125 L 116.503906 87.539062 L 117.308594 87.386719 L 119.539062 87.265625 L 119.953125 87.546875 L 120.539062 86.636719 L 121.941406 86.664062 L 122.753906 86.5 L 123.5625 86.5625 L 127.886719 87.253906 L 128.375 87.214844 L 130.375 88.039062 L 130.417969 88.136719 L 131.382812 89.226562 L 132.257812 88.101562 L 132.535156 87.964844 L 132.636719 88.199219 L 133.085938 88.257812 L 133.738281 108.871094 L 133.769531 108.554688 L 134.265625 107.347656 L 134.519531 107.539062 L 134.542969 107.3125 L 135.949219 107.949219 L 136.199219 107.210938 L 136.554688 107.015625 L 137.929688 107.125 L 138.320312 106.585938 L 138.367188 107.265625 L 138.761719 106.871094 L 139.0625 107.386719 L 139.730469 107.757812 L 141.082031 107.394531 L 162.582031 107.347656 L 169.550781 107.769531 L 174.113281 107.453125 L 184.015625 106.945312 L 184.71875 107.238281 L 185.179688 107.703125 L 185.640625 107.351562 L 186.917969 107.449219 L 187.054688 107.023438 L 187.238281 107.167969 L 187.324219 105.089844 L 187.417969 105.617188 L 187.558594 105.316406 L 188.207031 106.148438 L 188.914062 105.746094 L 189.445312 105.988281 L 189.460938 105.730469 L 190.667969 105.453125 L 192.136719 106.285156 L 192.941406 105.761719 L 193.066406 105.527344 L 193.800781 105.417969 L 194.761719 105.617188 L 197.296875 105.589844 L 201.207031 105.792969 L 201.375 105.054688 L 201.375 106.335938 L 201.375 105.035156 L 201.378906 106.054688 L 201.378906 106.472656 L 201.378906 105.367188 L 201.445312 153.746094 L 202.671875 152.566406 L 202.773438 151.765625 L 202.851562 154.320312 L 203.640625 151.25 L 204.441406 153.984375 L 205.234375 152.96875 L 206.988281 153.167969 L 207.695312 150.59375 L 207.804688 153.214844 L 207.917969 153.945312 L 209.394531 153.066406 L 209.398438 153.972656 L 209.648438 153.324219 L 215.257812 153.035156 L 215.335938 153.507812 L 216.660156 153.164062 L 217.238281 152.628906 L 219.660156 153.148438 L 220.035156 153.808594 L 221.390625 153.160156 L 221.601562 152.492188 L 221.605469 154.527344 L 221.851562 153.421875 L 221.859375 156.160156 L 222.640625 156.640625 L 223.101562 156.308594 L 224.710938 152.25 L 225.585938 156.785156 L 226.183594 156.222656 L 227.246094 157.394531 L 227.867188 156.691406 L 230.078125 156.21875 L 239.242188 156.679688 L 240.210938 154.640625 L 240.519531 165.933594 L 242.183594 164.378906 L 242.429688 165.628906 L 242.640625 162.304688 L 244.101562 165.34375 L 246.71875 165.292969 L 247.039062 164.199219 L 252.898438 165.355469 L 253.578125 165.1875 L 253.980469 165.269531 L 253.984375 155.398438 L 254.800781 154.789062 L 254.957031 155.097656 L 255.210938 154.804688 L 256.394531 151.414062 L 256.421875 154.238281 L 257.617188 154.632812 L 257.621094 134.210938 L 258.203125 134.480469 L 258.871094 134.273438 L 273.816406 134.523438 L 280.027344 134.875 L 281.65625 134.832031 L 288.171875 132.832031 L 290.164062 133.28125 L 290.460938 132.984375 L 292.898438 133.128906 L 293.449219 132.988281 L 293.570312 133.136719 L 293.625 133.648438 L 294.21875 132.238281 L 294.222656 132.320312 L 297.21875 133.988281 L 297.597656 133.292969 L 305.109375 132.730469 L 305.109375 132.152344 L 307.167969 133.285156 L 308.28125 133.042969 L 308.613281 134.605469 L 308.855469 132.628906 L 309.964844 135.199219 L 309.964844 134.410156 L 309.964844 134.855469 L 310.480469 132.554688 L 310.5 134.054688 L 310.597656 133.542969 L 311.042969 133.71875 L 312.109375 134.730469 L 312.695312 134.238281 L 312.71875 133.539062 L 312.722656 134.15625 L 312.851562 134.105469 L 312.875 134.585938 L 313.164062 134.097656 L 313.417969 133.207031 L 314.5 131.113281 L 314.503906 132.171875 L 314.507812 131.695312 L 314.515625 109.792969 L 315.324219 110.566406 L 316.703125 111.699219 L 321.410156 110.023438 L 324.601562 109.632812 L 325.457031 110.628906 L 325.492188 110.394531 L 327.085938 110.058594 L 327.769531 110.503906 L 327.789062 109.761719 L 328.601562 110.523438 L 328.703125 111.039062 L 329.457031 109.179688 L 329.804688 111.59375 L 330.222656 110.40625 L 331.28125 111.34375 L 331.300781 110.089844 L 333.472656 111.140625 L 333.539062 110.347656 L 334.375 111.015625 L 334.421875 109.664062 L 334.441406 110.222656 L 334.472656 111.292969 L 342.539062 109.089844 L 343.585938 111.523438 L 344.25 109.992188 L 345.046875 110.066406 L 345.113281 110.597656 L 345.199219 109.199219 L 346.457031 107.941406 L 346.859375 108.578125 L 346.890625 108.34375 L 346.957031 109.089844 L 347.367188 107.230469 L 347.554688 107.941406 L 347.8125 107.332031 L 347.847656 109.109375 L 347.886719 107.800781 L 348.058594 109.71875 L 348.285156 107.25 L 348.414062 108.535156 L 348.472656 107.640625 L 348.597656 108.953125 L 348.65625 108.605469 L 349.535156 107.363281 L 351.339844 109.105469 L 351.375 106.855469 L 351.535156 110.074219 L 351.914062 109.464844 L 353.867188 110.171875 L 353.957031 107.386719 L 354.847656 108.003906 L 359.503906 109.664062 L 360.011719 110.3125 L 360.191406 81.792969 L 360.589844 81.0625 L 360.976562 80.613281 L 361.148438 80.902344 L 361.839844 80.839844 L 362.015625 81.570312 L 363.777344 82.09375 L 364.023438 80.976562 L 364.511719 82.246094 L 366.679688 81.425781 L 366.714844 82.113281 L 367.015625 81.136719 L 367.339844 81.605469 L 367.851562 81.085938 L 368.792969 81.65625 L 371.644531 81.316406 L 375.976562 81.839844 L 376.316406 81.996094 L 377.71875 82.109375 L 377.894531 81.738281 L 378.152344 81.894531 L 379.863281 82.410156 L 379.953125 80.523438 L 380.523438 52.0625 L 380.628906 55.394531 L 381.601562 55.355469 L 381.945312 55.542969 L 382.113281 55.378906 L 385.769531 55.507812 L 385.878906 55.414062 L 394.761719 55.675781 L 397.632812 55.4375 L 398.164062 52.714844 L 401.988281 53.203125 L 401.992188 53.523438 L 402.089844 51.378906 L 404.519531 48.726562 L 405.527344 48.972656 L 419.304688 49.011719 L 419.550781 51.519531 L 423.949219 53.324219 L 431.425781 53.554688 L 431.882812 53.089844 L 432.027344 51.589844 L 433.230469 50.742188 L 433.96875 50.835938 L 433.972656 50.601562 L 434.828125 50.355469 L 435.03125 50.8125 L 436.640625 51.242188 L 439.867188 51.097656 L 441.0625 51.367188 L 441.277344 51.214844 L 443.792969 51.640625 L 447.84375 46.839844 L 448.472656 46.46875 L 450.132812 47.292969 L 451.242188 46.878906 L 451.316406 46.621094 L 452.164062 46.8125 L 452.179688 47.007812 L 452.207031 46.457031 L 452.953125 46.460938 L 453.246094 46.125 L 453.632812 46.332031 L 454.441406 46.933594 L 454.53125 46.367188 L 454.710938 46.652344 L 455.277344 46.226562 L 460.027344 46.082031 L 461.234375 46.671875 L 462.84375 46.035156 L 462.855469 46.714844 L 462.871094 46.335938 L 463.171875 46.25 L 463.460938 46.382812 L 463.460938 46.65625 L 463.667969 46.339844 L 463.78125 44.855469 L 465.203125 44.957031 L 466.097656 45.335938 L 466.148438 44.835938 L 466.238281 44.945312 L 466.488281 47.71875 L 466.8125 45.242188 L 467.28125 58.128906 L 468.59375 49.484375 L 468.765625 60.867188 L 468.769531 60.257812 L 468.769531 48.542969 L 469.734375 50.109375 L 470.875 49.859375 L 470.882812 51.996094 L 471.695312 49.851562 L 471.953125 50.175781 L 472.007812 49.820312 L 472.976562 49.660156 L 473.21875 49.835938 L 473.292969 50.066406 L 473.871094 49.96875 L 474.101562 49.730469 L 475.65625 49.851562 L 477.078125 49.726562 L 477.433594 50.183594 L 483.035156 49.324219 L 483.960938 49.746094 L 484.917969 49.285156 L 486.785156 48.945312 L 486.792969 49.101562 L 487.4375 50.761719 L 487.46875 304.675781 L 487.472656 50.359375 L 489.5 54.011719 L 489.992188 50.585938 L 492.796875 45.984375 L 502.070312 45.5 L 502.855469 45.757812 L 503.257812 45.671875 L 503.648438 45.726562 L 509.382812 45.449219 L 510.425781 45.816406 L 522.359375 45.601562 L 526.46875 45.90625 L 526.796875 46.050781 L 546.898438 45.675781 L 546.964844 46.054688 L 547.085938 45.78125 L 548.867188 46.96875 L 553.222656 46.695312 L 553.261719 47.09375 L 553.265625 65.15625 L 553.359375 47.359375 L 553.402344 46.484375 L 553.410156 46.496094 L 553.730469 46.3125 L 553.738281 46.863281 L 553.742188 46.203125 L 554.308594 46.75 L 554.660156 46.179688 L 554.699219 52.492188 L 555.039062 52.902344 L 555.476562 52.492188 L 555.488281 52.769531 L 556.085938 52.597656 L 556.285156 52.363281 L 556.863281 52.222656 L 557.660156 52.449219 L 558.652344 52.957031 L 560.691406 52.46875 L 561.476562 51.621094 L 563.039062 51.636719 "/>
-</g>
-<g style="fill:rgb(15%,15%,15%);fill-opacity:1;">
-  <use xlink:href="#glyph2-1" x="212.664062" y="21.960938"/>
-  <use xlink:href="#glyph2-2" x="219.337891" y="21.960938"/>
-  <use xlink:href="#glyph2-3" x="226.011719" y="21.960938"/>
-  <use xlink:href="#glyph2-4" x="232.685547" y="21.960938"/>
-  <use xlink:href="#glyph2-5" x="236.019531" y="21.960938"/>
-  <use xlink:href="#glyph2-6" x="242.693359" y="21.960938"/>
-  <use xlink:href="#glyph2-7" x="249.367188" y="21.960938"/>
-  <use xlink:href="#glyph2-8" x="256.041016" y="21.960938"/>
-  <use xlink:href="#glyph2-9" x="262.041016" y="21.960938"/>
-  <use xlink:href="#glyph2-10" x="268.714844" y="21.960938"/>
-  <use xlink:href="#glyph2-11" x="278.710938" y="21.960938"/>
-  <use xlink:href="#glyph2-12" x="285.384766" y="21.960938"/>
-  <use xlink:href="#glyph2-13" x="289.380859" y="21.960938"/>
-  <use xlink:href="#glyph2-14" x="295.380859" y="21.960938"/>
-  <use xlink:href="#glyph2-4" x="301.380859" y="21.960938"/>
-  <use xlink:href="#glyph2-12" x="304.714844" y="21.960938"/>
-  <use xlink:href="#glyph2-6" x="308.710938" y="21.960938"/>
-  <use xlink:href="#glyph2-15" x="315.384766" y="21.960938"/>
-  <use xlink:href="#glyph2-11" x="318.050781" y="21.960938"/>
-  <use xlink:href="#glyph2-16" x="324.724609" y="21.960938"/>
-  <use xlink:href="#glyph2-17" x="328.058594" y="21.960938"/>
-  <use xlink:href="#glyph2-18" x="330.724609" y="21.960938"/>
-  <use xlink:href="#glyph2-6" x="336.724609" y="21.960938"/>
-  <use xlink:href="#glyph2-4" x="343.398438" y="21.960938"/>
-  <use xlink:href="#glyph2-16" x="346.732422" y="21.960938"/>
-  <use xlink:href="#glyph2-2" x="350.066406" y="21.960938"/>
-  <use xlink:href="#glyph2-4" x="356.740234" y="21.960938"/>
-  <use xlink:href="#glyph2-19" x="360.074219" y="21.960938"/>
-  <use xlink:href="#glyph2-2" x="369.408203" y="21.960938"/>
-  <use xlink:href="#glyph2-4" x="376.082031" y="21.960938"/>
-  <use xlink:href="#glyph2-3" x="379.416016" y="21.960938"/>
-  <use xlink:href="#glyph2-20" x="386.089844" y="21.960938"/>
-  <use xlink:href="#glyph2-21" x="389.423828" y="21.960938"/>
-</g>
-</g>
-</svg>
diff --git a/content/2015/state-of-go-may/gophercon.png b/content/2015/state-of-go-may/gophercon.png
deleted file mode 100644
index cca3ad0..0000000
--- a/content/2015/state-of-go-may/gophercon.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/iphone.jpg b/content/2015/state-of-go-may/iphone.jpg
deleted file mode 100644
index d090c58..0000000
--- a/content/2015/state-of-go-may/iphone.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go-may/perfchart.png b/content/2015/state-of-go-may/perfchart.png
deleted file mode 100644
index 9cc1401..0000000
--- a/content/2015/state-of-go-may/perfchart.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go.slide b/content/2015/state-of-go.slide
deleted file mode 100644
index cac04d7..0000000
--- a/content/2015/state-of-go.slide
+++ /dev/null
@@ -1,280 +0,0 @@
-The State of Go
-Where we are in February 2015
-
-Andrew Gerrand
-adg@golang.org
-
-
-* Go 1.4
-
-Released in December 2014.
-
-A few important things:
-
-- Android support.
-- Canonical import paths.
-- The `go`generate` command.
-
-Lots of behind-the-scenes work:
-
-- Prep work for new garbage collector.
-- Prep work for C to Go tool chain conversion.
-- Source tree re-organization.
-
-.link https://golang.org/doc/go1.4
-
-
-* Transition to Git
-
-* Transition to Git
-
-In December we migrated the Go repositories from Mercurial to Git.
-
-Also moved to new development infrastructure:
-
-- googlesource.com replaces Google Code for repository hosting.
-- Gerrit replaces Rietveld for code review.
-- GitHub replaces Google Code for issue tracking and wiki.
-
-A big deal for Go contributors, but not important to Go users.
-
-.link https://go.googlesource.com
-.link https://go-review.googlesource.com
-.link https://github.com/golang/go
-
-
-* Why Git?
-
-- Gerrit and GitHub use Git.
-
-Why Gerrit?
-
-- Rietveld was unmaintained.
-- Gerrit is actively maintained; used by Android and Chrome, among others.
-
-Why GitHub?
-
-- Puts us closer to our community.
-- Other GitHub repos can more easily link to Go issues and commits.
-
-
-* Transition pros and cons
-
-Pros:
-
-- More people understand Git than Mercurial.
-- Contributors can use their own Git workflows.
-- Good integration between Git and Gerrit. (Rietveld and Mercurial are separate.)
-- Automated CLA checking.
-
-Cons:
-
-- Git has a steep learning curve.
-- No way to disable pull requests.
-- No way to "star" or +1 issues.
-- The standard of issue reports has gone down. (No issue templates. Different culture.)
-- The transition was a ton of work.
-
-
-* Why not accept pull requests?
-
-Coming from Gerrit, Rietveld, or Google's internal code review systems,
-GitHub's pull request system is lacking.
-
-- Can only view diffs on a single page (can be *very* slow).
-- Comments are sent as they are written; you cannot "draft" comments.
-- Cannot compare differences between patch sets.
-- To create a patch one must fork the repository publicly (weird and unnecessary).
-- Accepting a patch creates a "merge commit" (ugly repo history).
-- In general, pull request culture is not about code review.
-
-
-* Go 1.5
-
-
-* Change to release cycle
-
-Go 1.5 is scheduled for release in August 2015 (was June).
-
-(Previous cycle clashed with holidays and other calendrical events.)
-
-
-* From C to Go
-
-The `gc` tool chain is being converted from C to Go.
-
-An ongoing process, started early 2014.
-Russ Cox says "It'll be done by March [2015]."
-
-New `link` tool to replace `6l`, `8l`, etc.
-New `asm` tool to replace `6a`, `8a`, etc.
-Machine-translated `gc` to replace `6g`, `8g`, etc.
-
-Design doc:
-
-.link https://golang.org/s/go13compiler
-
-Go 1.5 will have *no* C code in the tool chain or runtime.
-
-
-* Compiling Go 1.5
-
-You will need Go 1.4 to build Go 1.5 and above.
-
-(But you will not need a C compiler!)
-
-As a user, put Go 1.4 in `$HOME/go1.4` (or set `$GOROOT_BOOTSTRAP`).
-
-New OS or architecture ports will need to cross-compile.
-
-Design doc:
-
-.link https://golang.org/s/go15bootstrap
-
-If you use a binary distribution of Go, you don't need to do anything.
-
-
-* Concurrent Garbage Collector
-
-Work began on a new, concurrent GC during the Go 1.4 dev cycle.
-
-Goal:
-
-- Limit GC latency to less than 10 milliseconds.
-- Run Go application code for at least 40ms out of every 50ms.
-
-On track for Go 1.5.
-
-.link https://golang.org/s/go14gc
-
-
-* HTTP/2
-
-Brad Fitzpatrick has implemented an `HTTP/2` server for Go.
-
-Will be in the standard library by Go 1.soon.
-
-Go servers that use `net/http` will get `HTTP/2` for free.
-
-Currently in Brad's GitHub:
-
-.link https://github.com/bradfitz/http2
-
-See it in action:
-
-.link https://http2.golang.org
-
-
-* Mobile
-
-David Crawshaw, Hana Kim, Minux, and Burcu Dogan have been working on Go for
-mobile devices.
-
-Can build Android apps with Go 1.4
-(if you can work out the Android build system).
-
-For Go 1.5:
-
-- Simpler build story for Android.
-- More NDK library support.
-- Better bindings for calling Go from Java.
-- Beginnings of iOS support. (New `darwin/arm` build target.)
-
-
-* New architectures
-
-Go 1.5 will support PowerPC 64 and (maybe) ARM64.
-
-PowerPC 64 is basically done; builder running, passes tests.
-
-ARM64 development ongoing.
-Hope to have a dev.arm64 branch in the main repo for Go 1.5.
-Stretch goal is merging it into master.
-
-See work in progress for ARM64 here:
-
-.link https://github.com/4ad/go
-
-
-* Execution tracing
-
-Dmitry Vyukov has implemented a `trace` tool.
-It collects data to produce diagrams of process execution.
-
-.image state-of-go/trace.png 350 _
-
-Front end is the Android/Chrome trace-viewer. ([[https://github.com/google/trace-viewer][github.com/google/trace-viewer]])
-
-.link http://golang.org/s/go15trace
-
-
-* Analysis and Refactoring Tools
-
-Alan Donovan and others have been working on a tools for analyzing and
-manipulating Go source code.
-
-Available in the `tools` repo:
-
-- `callgraph`: display the call graph of a Go program.
-- `gomvpkg`: moves go packages, updating import declarations.
-- `gorename`: type-safe renaming of identifiers in Go source code.
-
-Coming soon:
-
-- `sockdrawer`: a tool for automatically splitting packages.
-
-
-* Builder infrastructure
-
-Brad Fitzpatrick and Andrew Gerrand have been hacking away at our continuous
-build infrastructure.
-
-Now running Linux, FreeBSD, OpenBSD, and Plan 9 builders
-on Google Compute Engine. (OS X, Windows coming soon.)
-
-Spin up builders to do work, spin up many in parallel.
-Gives us results much faster.
-
-Up next: trybots to test pending changes.
-
-Also: gomote! (Demo)
-
-
-* The Go Community
-
-
-* Conferences in 2015
-
-- FOSDEM, Brussels, now!
-- GopherCon India, Bengaluru, February
-- GoCon, Tokyo, Spring and Autumn
-- GopherCon, Denver, July
-- dotGo, Paris, November
-
-More to be announced.
-
-
-* Gopher Gala
-
-A global Go hackathon, in January 2015 (last week).
-
-.image state-of-go/gala.jpg 200 _
-
-Teams compete to produce Go apps, judged by "usefulness, creativity, completeness, and how well they showcase Go's strengths."
-
-Also physical hackathons around the world: from San Francisco to Stockholm to Tokyo.
-
-Cool prizes, including a Chromebook Pixel, a Raspberry Pi, and a trip to Colima, Mexico.
-
-The [[http://gophergala.com/blog/gopher/gala/2015/02/03/winners/][winners have been announced]].
-
-
-
-* Go user groups
-
-Lots of Go meetups popping up all over the world.
-
-Find one near you:
-
-.link https://go-meetups.appspot.com
-
diff --git a/content/2015/state-of-go/gala.jpg b/content/2015/state-of-go/gala.jpg
deleted file mode 100644
index d60a7c0..0000000
--- a/content/2015/state-of-go/gala.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2015/state-of-go/trace.png b/content/2015/state-of-go/trace.png
deleted file mode 100644
index 46006e2..0000000
--- a/content/2015/state-of-go/trace.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/tricks.slide b/content/2015/tricks.slide
deleted file mode 100644
index 1746d77..0000000
--- a/content/2015/tricks.slide
+++ /dev/null
@@ -1,787 +0,0 @@
-Stupid Gopher Tricks
-GolangUK
-21 Aug 2015
-
-Andrew Gerrand
-adg@golang.org
-
-
-* Video
-
-A video of this talk was recorded at GolangUK in London.
-
-.link https://www.youtube.com/watch?v=UECh7X07m6E Watch the talk on YouTube
-
-
-* This talk
-
-This talk is about things you might not know about Go.
-
-Some of this stuff you can add to your Go vocabulary.
-
-Other things are probably best left for special occasions.
-
-
-* Language
-
-
-* Type literals (1/2)
-
-Here's a familiar type declaration:
-
-	type Foo struct {
-		i int
-		s string
-	}
-
-The latter part of a type declaration is the *type*literal*:
-
-	struct {
-		i int
-		s string
-	}
-
-Other examples of type literals are `int` and `[]string`,
-which can also be declared as named types:
-
-	type Bar int
-	type Qux []string
-
-
-* Type literals (2/2)
-
-While we commonly use `int` and `[]string` in variable declarations:
-
-	var i int
-	var s []string
-
-It is less common (but equally valid) to do the same with structs:
-
-	var t struct {
-		i int
-		s string
-	}
-
-An unnamed struct literal is often called an *anonymous*struct*.
-
-
-* Anonymous structs: template data
-
-A common use is providing data to templates:
-
-.play tricks/template.go /BEGIN/,/END/
-
-You could also use `map[string]interface{}`,
-but then you sacrifice performance and type safety.
-
-
-* Anonymous structs: JSON (1/2)
-
-The same technique can be used for encoding JSON objects:
-
-.play tricks/json-encode.go /Marshal/,/Print/
-
-And also decoding:
-
-.play tricks/json-decode.go /data/,/Print/
-
-
-* Anonymous structs: JSON (2/2)
-
-Structs can be nested to describe more complex JSON objects:
-
-.play tricks/json-nest.go /data/,/Print/
-
-
-* Repeated literals and struct names
-
-In repeated literals like slices and maps, Go lets you omit the inner type name:
-
-.code tricks/repeated.go /BEGIN/,/END/
-
-
-* Repeated literals and anonymous structs
-
-Combined with anonymous structs, this convenience shortens the code dramatically:
-
-.code tricks/repeated2.go /BEGIN/,/END/
-
-
-* Anonymous structs: test cases (1/2)
-
-These properties enable a nice way to express test cases:
-
-.code tricks/string_test.go /TestIndex/,/^}/
-
-
-* Anonymous structs: test cases (2/2)
-
-You can go a step further and put the composite literal in the range statement itself:
-
-.code tricks/string_test2.go /TestIndex/,/^}/
-
-But this is harder to read.
-
-
-* Embedded fields
-
-A struct field that has no name is an *embedded*field*.
-The embedded type's methods (and fields, if it is a struct)
-are accessible as if they are part of the embedding struct.
-
-.play tricks/embed.go /BEGIN/,$
-
-
-* Anonymous structs: embedded mutex
-
-Of course, you can embed fields in an anonymous struct.
-
-It's common to protect a global variable with a mutex variable:
-
-	var (
-		viewCount   int64
-		viewCountMu sync.Mutex
-	)
-
-By embedding a mutex in an anonymous struct, we can group the related values:
-
-	var viewCount struct {
-		sync.Mutex
-		n int64
-	}
-
-Users of `viewCount` access it like this:
-
-	viewCount.Lock()
-	viewCount.n++
-	viewCount.Unlock()
-
-
-
-* Anonymous structs: implementing interfaces
-
-And you can embed interfaces, too.
-
-Here's a real example from [[https://camlistore.org/][Camlistore]]:
-
-The function is expected to return a `ReadSeekCloser`,
-but the programmer only had a string.
-
-Anonymous struct (and its standard library friends) to the rescue!
-
-	return struct {
-		io.ReadSeeker
-		io.Closer
-	}{
-		io.NewSectionReader(strings.NewReader(s), 0, int64(len(s))),
-		ioutil.NopCloser(nil),
-	}
-
-
-* Anonymous interfaces
-
-Interfaces can be anonymous, the most common being `interface{}`.
-
-But the interface needn't be empty:
-
-.play tricks/anon-interface.go /var s/,/Println/
-
-Useful for a sly type assertion (from `src/os/exec/exec_test.go`):
-
-	// Check that we can access methods of the underlying os.File.
-	if _, ok := stdin.(interface {
-		Fd() uintptr
-	}); !ok {
-		t.Error("can't access methods of underlying *os.File")
-	}
-
-
-* Method values
-
-A "method value" is what you get when you evaluate a method as an expression.
-The result is a function value.
-
-Evaluating a method from a _type_ yields a function:
-
-.play tricks/method-values-1.go /var f/,/Stdout/
-
-Evaluating a method from a _value_ creates a closure that holds that value:
-
-.play tricks/method-values-2.go /var /,/Stdout/
-
-
-* Method values: sync.Once
-
-The `sync.Once` type is used to perform a task once with concurrency safety.
-
-	// Once is an object that will perform exactly one action.
-	type Once struct { /* Has unexported fields. */ }
-
-	func (o *Once) Do(f func())
-	
-This `LazyPrimes` type computes a slice of prime numbers the first time it is used:
-
-.code tricks/method-once.go /type/,$
-
-
-* Method values: HTTP handlers
-
-You can use method values to implement multiple HTTP handlers with one type:
-
-.code tricks/method-http.go /type Server/,$
-
-
-* Method values: another example
-
-In package `os/exec`, the `Cmd` type implements methods to set up
-standard input, output, and error:
-
-	func (c *Cmd) stdin() (f *os.File, err error)
-	func (c *Cmd) stdout() (f *os.File, err error)
-	func (c *Cmd) stderr() (f *os.File, err error)
-
-The caller handles each in the same way,
-so it iterates over a slice of method values:
-
-	type F func(*Cmd) (*os.File, error)
-	for _, setupFd := range []F{(*Cmd).stdin, (*Cmd).stdout, (*Cmd).stderr} {
-		fd, err := setupFd(c)
-		if err != nil {
-			c.closeDescriptors(c.closeAfterStart)
-			c.closeDescriptors(c.closeAfterWait)
-			return err
-		}
-		c.childFiles = append(c.childFiles, fd)
-	}
-
-
-* Comparable types
-
-The Go spec defines a set of types as "comparable";
-they may be compared with == and !=.
-
-Bools, ints, floats, complex numbers, strings, pointers,
-channels, *structs*, and *interfaces* are comparable.
-
-.play tricks/compare.go /BEGIN/,/END/
-
-A struct is comparable only if its fields are comparable:
-
-.play tricks/compare2.go /BEGIN/,/END/
-
-
-* Comparable types and map keys
-
-Any comparable type may be used as a map key.
-
-.code tricks/compare-map.go /BEGIN/,/END/
-
-
-* Structs as map keys
-
-An example from the Go continuous build infrastructure:
-
-	type builderRev struct {
-		builder, rev string
-	}
-
-	var br = builderRev{"linux-amd64", "0cd299"}
-
-We track in-flight builds in a map.
-The pre-Go 1 way was to flatten the data to a string first:
-
-	inflight := map[string]bool{}
-
-	inflight[br.builder + "-" + br.rev] = true
-
-But with struct keys, you can avoid the allocation and have cleaner code:
-
-	inflight := map[builderRev]bool{}
-
-	inflight[br] = true
-
-
-* Interfaces as map keys
-
-An example of interface map keys from Docker's `broadcastwriter` package:
-
-.code tricks/broadcastwriter/broadcastwriter.go /type/,/END/
-
-
-* Structs and interfaces together as map keys
-
-A (very) contrived example: (Don't do this! Ever!)
-
-.play tricks/cons.go /type/,$
-
-
-* Libraries
-
-* sync/atomic
-
-For a simple counter, you can use the `sync/atomic` package's
-functions to make atomic updates without the lock.
-
-	func AddInt64(addr *int64, delta int64) (new int64)
-	func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool)
-	func LoadInt64(addr *int64) (val int64)
-	func StoreInt64(addr *int64, val int64)
-	func SwapInt64(addr *int64, new int64) (old int64)
-
-First, define the global variable (appropriately documented!):
-
-	// viewCount must be updated atomically.
-	var viewCount int64
-
-Then increment it with `AddInt64`:
-
-	count := atomic.AddInt64(&viewCount, 1)
-
-The set are available for `Int32`, `Uint32`, `Int64`, `Uint64`, `Pointer`, and `Uintptr`.
-
-
-* sync/atomic.Value
-
-Another option for sharing state is `atomic.Value`.
-
-For instance, to share configuration between many goroutines:
-
-	type Config struct {
-		Timeout time.Duration
-	}
-
-	var config atomic.Value
-
-To set or update, use the `Store` method:
-	
-	config.Store(&Config{Timeout: 2*time.Second})
-
-To read, each goroutine calls the `Load` method:
-
-	cfg := config.Load().(*Config)
-
-Note that storing different types in the same `Value` will cause a panic.
-
-
-* sync/atomic.Value: how it works (1/5)
-
-The `atomic.Value` primitive is the size of a single interface value:
-
-	package atomic
-
-	type Value struct {
-		v interface{}
-	}
-
-An interface value is represented by the runtime as two pointers:
-one for the type, and one for the value.
-
-	// ifaceWords is interface{} internal representation.
-	type ifaceWords struct {
-		typ  unsafe.Pointer
-		data unsafe.Pointer
-	}
-
-To load and store an interface value atomically, it operates on the parts of the interface value with `atomic.LoadPointer` and `atomic.StorePointer`.
-
-
-* sync/atomic.Value: how it works (2/5)
-
-The `Store` method first validates the input:
-
-	func (v *Value) Store(x interface{}) {
-		if x == nil {
-			panic("sync/atomic: store of nil value into Value")
-		}
-
-Then uses `unsafe` to cast the current and new `interface{}` values to `ifaceWords`:
-
-	// ...
-		vp := (*ifaceWords)(unsafe.Pointer(v))
-		xp := (*ifaceWords)(unsafe.Pointer(&x))
-
-(This allows us to get at the internals of those interface values.)
-
-
-* sync/atomic.Value: how it works (3/5)
-
-Spin while loading the type field:
-
-	// ...
-		for {
-			typ := LoadPointer(&vp.typ)
-
-If it's `nil` the this is the first time the value has been stored.
-Put a sentinel value (max uintptr) in the type field to "lock" it while we work with it:
-
-	// ...
-			if typ == nil {
-				if !CompareAndSwapPointer(&vp.typ, nil, unsafe.Pointer(^uintptr(0))) {
-					continue // Someone beat us to it. Wait.
-				}
-
-Store the data field, then the type field, and we're done!
-
-	// ...
-				StorePointer(&vp.data, xp.data)
-				StorePointer(&vp.typ, xp.typ)
-				return
-			}
-
-* sync/atomic.Value: how it works (4/5)
-
-If this isn't the first store, check whether a store is already happening:
-
-	// ...
-			if uintptr(typ) == ^uintptr(0) {
-				continue // First store in progress. Wait.
-			}
-
-Sanity check whether the type changed:
-
-	// ...
-			if typ != xp.typ {
-				panic("sync/atomic: store of inconsistently typed value into Value")
-			}
-
-If the type field is what we expect, go ahead and atomically store the value:
-
-	// ...
-			StorePointer(&vp.data, xp.data)
-			return
-		}
-	}
-
-* sync/atomic.Value: how it works (5/5)
-
-The `Load` method first loads the interface's type field:
-
-	func (v *Value) Load() (x interface{}) {
-		vp := (*ifaceWords)(unsafe.Pointer(v))
-		typ := LoadPointer(&vp.typ)
-
-Then, check whether a store has happened, or is happening:
-
-	// ...
-		if typ == nil || uintptr(typ) == ^uintptr(0) {
-			return nil
-		}
-
-Otherwise, load the data field and return both type and data as a new interface value:
-
-	// ...
-		data := LoadPointer(&vp.data)
-		xp := (*ifaceWords)(unsafe.Pointer(&x))
-		xp.typ = typ
-		xp.data = data
-		return
-	}
-
-
-* A note on sync/atomic
-
-Usually you don't want or need the stuff in this package.
-
-Try channels or the `sync` package first.
-
-You almost certainly shouldn't write code like the `atomic.Value` implementation.
-(And I didn't show all of it; the real code has hooks into the runtime.)
-
-
-* Tools
-
-
-* Testing
-
-* Subprocess tests
-
-Sometimes you need to test the behavior of a process, not just a function.
-
-.code tricks/subprocess/subprocess.go /func Crasher/,/^}/
-
-To test this code, we invoke the test binary itself as a subprocess:
-
-.code tricks/subprocess/subprocess_test.go /func TestCrasher/,/^}/
-
-
-* Subprocess benchmarks (1/2)
-
-Go's CPU and memory profilers report data for an entire process.
-To profile just one side of a concurrent operation, you can use a sub-process.
-
-This benchmark from the `net/http` package spawns a child process to make
-requests to a server running in the main process.
-
-	func BenchmarkServer(b *testing.B) {
-		b.ReportAllocs()
-		// Child process mode;
-		if url := os.Getenv("TEST_BENCH_SERVER_URL"); url != "" {
-			n, err := strconv.Atoi(os.Getenv("TEST_BENCH_CLIENT_N"))
-			if err != nil {
-				panic(err)
-			}
-			for i := 0; i < n; i++ {
-				res, err := Get(url)
-				// ...
-			}
-			os.Exit(0)
-			return
-		}
-	// ...
-
-* Subprocess benchmarks (2/2)
-
-	// ...
-		res := []byte("Hello world.\n")
-		ts := httptest.NewServer(HandlerFunc(func(rw ResponseWriter, r *Request) {
-			rw.Header().Set("Content-Type", "text/html; charset=utf-8")
-			rw.Write(res)
-		}))
-		defer ts.Close()
-
-		cmd := exec.Command(os.Args[0], "-test.run=XXXX", "-test.bench=BenchmarkServer$")
-		cmd.Env = append([]string{
-			fmt.Sprintf("TEST_BENCH_CLIENT_N=%d", b.N),
-			fmt.Sprintf("TEST_BENCH_SERVER_URL=%s", ts.URL),
-		}, os.Environ()...)
-		if out, err := cmd.CombinedOutput(); err != nil {
-			b.Errorf("Test failure: %v, with output: %s", err, out)
-		}
-	}
-
-To run:
-
-	$ go test -run=XX -bench=BenchmarkServer -benchtime=15s -cpuprofile=http.prof
-	$ go tool pprof http.test http.prof
-
-
-* go list
-
-* go list
-
-	$ go help list
-	usage: go list [-e] [-f format] [-json] [build flags] [packages]
-
-	List lists the packages named by the import paths, one per line.
-
-Show the packages under a path:
-
-	$ go list golang.org/x/oauth2/...
-	golang.org/x/oauth2
-	...
-	golang.org/x/oauth2/vk
-
-Show the standard library:
-
-	$ go list std
-	archive/tar
-	...
-	unsafe
-
-Show all packages:
-
-	$ go list all
-
-* go list -json
-
-The `-json` flag tells you everything the go tool knows about a package:
-
-	$ go list -json bytes
-	{
-		"Dir": "/Users/adg/go/src/bytes",
-		"ImportPath": "bytes",
-		"Name": "bytes",
-		"Doc": "Package bytes implements functions for the manipulation of byte slices.",
-		"Target": "/Users/adg/go/pkg/darwin_amd64/bytes.a",
-		"Goroot": true,
-		"Standard": true,
-		"Stale": true,
-		"Root": "/Users/adg/go",
-		"GoFiles": [
-			"buffer.go",
-			"bytes.go",
-			"bytes_decl.go",
-			"reader.go"
-		],
-		...
-	}
-
-It's easy to write programs that consume this data.
-
-* go list's Package struct (1/3)
-
-The go tool's documented `Package` struct describes all the possible fields:
-
-	type Package struct {
-		Dir           string // directory containing package sources
-		ImportPath    string // import path of package in dir
-		ImportComment string // path in import comment on package statement
-		Name          string // package name
-		Doc           string // package documentation string
-		Target        string // install path
-		Shlib         string // the shared library that contains this package (only set when -linkshared)
-		Goroot        bool   // is this package in the Go root?
-		Standard      bool   // is this package part of the standard Go library?
-		Stale         bool   // would 'go install' do anything for this package?
-		Root          string // Go root or Go path dir containing this package
-
-		// (more fields on next slide)
-	}
-
-* go list's Package struct (2/3)
-
-	type Package struct {
-		// (more fields on previous slide)
-
-		// Source files
-		GoFiles        []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
-		CgoFiles       []string // .go sources files that import "C"
-		IgnoredGoFiles []string // .go sources ignored due to build constraints
-		CFiles         []string // .c source files
-		CXXFiles       []string // .cc, .cxx and .cpp source files
-		MFiles         []string // .m source files
-		HFiles         []string // .h, .hh, .hpp and .hxx source files
-		SFiles         []string // .s source files
-		SwigFiles      []string // .swig files
-		SwigCXXFiles   []string // .swigcxx files
-		SysoFiles      []string // .syso object files to add to archive
-
-		// (more fields on next slide)
-	}
-
-* go list's Package struct (3/3)
-
-	type Package struct {
-		// (more fields on previous slide)
-
-		// Cgo directives
-		CgoCFLAGS    []string // cgo: flags for C compiler
-		CgoCPPFLAGS  []string // cgo: flags for C preprocessor
-		CgoCXXFLAGS  []string // cgo: flags for C++ compiler
-		CgoLDFLAGS   []string // cgo: flags for linker
-		CgoPkgConfig []string // cgo: pkg-config names
-
-		// Dependency information
-		Imports []string // import paths used by this package
-		Deps    []string // all (recursively) imported dependencies
-
-		// Error information
-		Incomplete bool            // this package or a dependency has an error
-		Error      *PackageError   // error loading package
-		DepsErrors []*PackageError // errors loading dependencies
-
-		TestGoFiles  []string // _test.go files in package
-		TestImports  []string // imports from TestGoFiles
-		XTestGoFiles []string // _test.go files outside package
-		XTestImports []string // imports from XTestGoFiles
-	}
-
-* go list -f (1/2)
-
-That's a ton of information, so what can we do with it?
-
-The `-f` flag lets you use Go's `text/template` package to format the ouput.
-
-Show package doc strings:
-
-	$ go list -f '{{.Doc}}' golang.org/x/oauth2/...
-	Package oauth2 provides support for making OAuth2 authorized and authenticated HTTP requests.
-	Package jwt implements the OAuth 2.0 JSON Web Token flow, commonly known as "two-legged OAuth 2.0".
-	...
-
-Show the Go files in a package:
-
-	$ go list -f '{{.GoFiles}}' bytes
-	[buffer.go bytes.go bytes_decl.go reader.go]
-
-Make the output cleaner with a `join`:
-
-	$ go list -f '{{join .GoFiles " "}}' bytes
-	buffer.go bytes.go bytes_decl.go reader.go 
-
-* go list -f (2/2)
-
-With template logic we can test packages for certain conditions.
-
-Find standard libraries that lack documentation:
-
-	$ go list -f '{{if not .Doc}}{{.ImportPath}}{{end}}' std
-	internal/format
-	internal/trace
-
-Find packages that depend (directly or indirectly) on a given package:
-
-	$ go list -f '{{range .Deps}}{{if eq . "golang.org/x/oauth2"}}{{$.ImportPath}}{{end}}{{end}}' all
-	golang.org/x/build/auth
-	golang.org/x/build/buildlet
-	golang.org/x/build/cmd/buildlet
-	...
-
-Find packages that are broken somehow (note `-e`):
-
-	$ go list -e -f '{{with .Error}}{{.}}{{end}}' all
-	package github.com/golang/oauth2: code in directory /Users/adg/src/github.com/golang/oauth2
-		expects import "golang.org/x/oauth2"
-	...
-
-* go list and the shell
-
-Things get interesting once we start using the shell.
-
-For instance, we can use `go` `list` output as input to the go tool.
-
-Test all packages except vendored packages:
-
-	$ go test $(go list ./... | grep -v '/vendor/')
-
-Test the dependencies of a specific package:
-
-	$ go test $(go list -f '{{join .Deps " "}}' golang.org/x/oauth2)
-
-The same, but don't test the standard library:
-
-	$ go test $(
-		go list -f '{{if (not .Goroot)}}{{.ImportPath}}{{end}}' $(
-			go list -f '{{join .Deps " "}}' golang.org/x/oauth2
-		)
-	)
-
-* go list printing line counts
-
-	for pkg in $(go list golang.org/x/oauth2/...); do
-		wc -l $(go list -f '{{range .GoFiles}}{{$.Dir}}/{{.}} {{end}}' $pkg) | \
-			tail -1 | awk '{ print $1 " '$pkg'" }'
-	done | sort -nr
-
-The output:
-
-	617 golang.org/x/oauth2/google
-	600 golang.org/x/oauth2
-	357 golang.org/x/oauth2/internal
-	160 golang.org/x/oauth2/jws
-	147 golang.org/x/oauth2/jwt
-	112 golang.org/x/oauth2/clientcredentials
-	22 golang.org/x/oauth2/paypal
-	16 golang.org/x/oauth2/vk
-	16 golang.org/x/oauth2/odnoklassniki
-	16 golang.org/x/oauth2/linkedin
-	16 golang.org/x/oauth2/github
-	16 golang.org/x/oauth2/facebook
-
-* go list generating dependency graphs
-
-	(   echo "digraph G {"
-		go list -f '{{range .Imports}}{{printf "\t%q -> %q;\n" $.ImportPath .}}{{end}}' \
-			$(go list -f '{{join .Deps " "}}' time) time
-		echo "}"
-	) | dot -Tsvg -o time-deps.svg
-
-.image tricks/time-deps.png 400 _
-
-
-* And there's more!
-
-There are many more fun corners of Go.
-Can you find them all? :-)
-
-Read the docs, explore, and have fun!
diff --git a/content/2015/tricks/anon-interface.go b/content/2015/tricks/anon-interface.go
deleted file mode 100644
index 71c0c02..0000000
--- a/content/2015/tricks/anon-interface.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-)
-
-func main() {
-	var s interface {
-		String() string
-	} = bytes.NewBufferString("I'm secretly a fmt.Stringer!")
-	fmt.Println(s.String())
-}
diff --git a/content/2015/tricks/broadcastwriter/broadcastwriter.go b/content/2015/tricks/broadcastwriter/broadcastwriter.go
deleted file mode 100644
index 2e039c7..0000000
--- a/content/2015/tricks/broadcastwriter/broadcastwriter.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package broadcastwriter
-
-import (
-	"io"
-	"sync"
-)
-
-type BroadcastWriter struct {
-	sync.Mutex
-	writers map[io.WriteCloser]struct{}
-}
-
-func (w *BroadcastWriter) AddWriter(writer io.WriteCloser) {
-	w.Lock()
-	w.writers[writer] = struct{}{}
-	w.Unlock()
-}
-
-func (w *BroadcastWriter) Write(p []byte) (n int, err error) {
-	w.Lock()
-	for sw := range w.writers {
-		if n, err := sw.Write(p); err != nil || n != len(p) {
-			delete(w.writers, sw)
-		}
-	}
-	w.Unlock()
-	return len(p), nil
-}
-
-// END OMIT
-
-func (w *BroadcastWriter) Clean() error {
-	w.Lock()
-	for w := range w.writers {
-		w.Close()
-	}
-	w.writers = make(map[io.WriteCloser]struct{})
-	w.Unlock()
-	return nil
-}
-
-func New() *BroadcastWriter {
-	return &BroadcastWriter{
-		writers: make(map[io.WriteCloser]struct{}),
-	}
-}
diff --git a/content/2015/tricks/compare-map.go b/content/2015/tricks/compare-map.go
deleted file mode 100644
index 6d5e112..0000000
--- a/content/2015/tricks/compare-map.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build ignore
-
-package main
-
-import "io/ioutil"
-
-func main() {
-	// BEGIN OMIT
-	a := map[int]bool{}
-	a[42] = true
-
-	type T struct {
-		i int
-		s string
-	}
-
-	b := map[*T]bool{}
-	b[&T{}] = true
-
-	c := map[T]bool{}
-	c[T{37, "hello!"}] = true
-
-	d := map[interface{}]bool{}
-	d[42] = true
-	d[&T{}] = true
-	d[T{123, "four five six"}] = true
-	d[ioutil.Discard] = true
-	// END OMIT
-}
diff --git a/content/2015/tricks/compare.go b/content/2015/tricks/compare.go
deleted file mode 100644
index 89ca5d3..0000000
--- a/content/2015/tricks/compare.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-func main() {
-	// BEGIN OMIT
-	var a, b int = 42, 42
-	fmt.Println(a == b)
-
-	var i, j interface{} = a, b
-	fmt.Println(i == j)
-
-	var s, t struct{ i interface{} }
-	s.i, t.i = a, b
-	fmt.Println(s == t)
-	// END OMIT
-}
diff --git a/content/2015/tricks/compare2.go b/content/2015/tricks/compare2.go
deleted file mode 100644
index 0271f90..0000000
--- a/content/2015/tricks/compare2.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-func main() {
-	// BEGIN OMIT
-	var q, r struct{ s []string }
-	fmt.Println(q == r)
-	// END OMIT
-}
diff --git a/content/2015/tricks/cons.go b/content/2015/tricks/cons.go
deleted file mode 100644
index c69535c..0000000
--- a/content/2015/tricks/cons.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-type cons struct {
-	car string
-	cdr interface{}
-}
-
-func (c cons) String() string {
-	if c.cdr == nil || c.cdr == (cons{}) {
-		return c.car
-	}
-	return fmt.Sprintf("%v %v", c.car, c.cdr)
-}
-
-func main() {
-	m := map[cons]string{}
-	c := cons{}
-	for _, s := range []string{"life?", "with my", "I doing", "What am"} {
-		c = cons{s, c}
-	}
-	m[c] = "No idea."
-	fmt.Println(c, m[c])
-}
diff --git a/content/2015/tricks/embed.go b/content/2015/tricks/embed.go
deleted file mode 100644
index 0eb7e9c..0000000
--- a/content/2015/tricks/embed.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore
-
-package main
-
-import "fmt"
-
-// BEGIN OMIT
-type A struct {
-	s string
-}
-
-func (a A) String() string {
-	return fmt.Sprintf("A's String method called: %v", a.s)
-}
-
-type B struct {
-	A
-}
-
-func main() {
-	b := B{}
-	b.s = "some value"
-	fmt.Println(b)
-}
diff --git a/content/2015/tricks/json-decode.go b/content/2015/tricks/json-decode.go
deleted file mode 100644
index 313561e..0000000
--- a/content/2015/tricks/json-decode.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-)
-
-func main() {
-	var data struct {
-		ID   int
-		Name string
-	}
-	err := json.Unmarshal([]byte(`{"ID": 42, "Name": "The answer"}`), &data)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(data.ID, data.Name)
-}
diff --git a/content/2015/tricks/json-encode.go b/content/2015/tricks/json-encode.go
deleted file mode 100644
index a7aab97..0000000
--- a/content/2015/tricks/json-encode.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-)
-
-func main() {
-	b, err := json.Marshal(struct {
-		ID   int
-		Name string
-	}{42, "The answer"})
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Printf("%s\n", b)
-}
diff --git a/content/2015/tricks/json-nest.go b/content/2015/tricks/json-nest.go
deleted file mode 100644
index 8063ae1..0000000
--- a/content/2015/tricks/json-nest.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-)
-
-func main() {
-	var data struct {
-		ID     int
-		Person struct {
-			Name string
-			Job  string
-		}
-	}
-	const s = `{"ID":42,"Person":{"Name":"George Costanza","Job":"Architect"}}`
-	err := json.Unmarshal([]byte(s), &data)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fmt.Println(data.ID, data.Person.Name, data.Person.Job)
-}
diff --git a/content/2015/tricks/method-http.go b/content/2015/tricks/method-http.go
deleted file mode 100644
index ad20864..0000000
--- a/content/2015/tricks/method-http.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore
-
-package main
-
-import "net/http"
-
-func main() {}
-
-type Server struct {
-	// Server state.
-}
-
-func (s *Server) index(w http.ResponseWriter, r *http.Request)  { /* Implementation. */ }
-func (s *Server) edit(w http.ResponseWriter, r *http.Request)   { /* Implementation. */ }
-func (s *Server) delete(w http.ResponseWriter, r *http.Request) { /* Implementation. */ }
-
-func (s *Server) Register(mux *http.ServeMux) {
-	mux.HandleFunc("/", s.index)
-	mux.HandleFunc("/edit/", s.edit)
-	mux.HandleFunc("/delete/", s.delete)
-}
diff --git a/content/2015/tricks/method-once.go b/content/2015/tricks/method-once.go
deleted file mode 100644
index 7c2c12f..0000000
--- a/content/2015/tricks/method-once.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore
-
-package main
-
-import "sync"
-
-type LazyPrimes struct {
-	once   sync.Once // Guards the primes slice.
-	primes []int
-}
-
-func (p *LazyPrimes) init() {
-	// Populate p.primes with prime numbers.
-}
-
-func (p *LazyPrimes) Primes() []int {
-	p.once.Do(p.init)
-	return p.primes
-}
diff --git a/content/2015/tricks/method-values-1.go b/content/2015/tricks/method-values-1.go
deleted file mode 100644
index c1a8ab1..0000000
--- a/content/2015/tricks/method-values-1.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"bytes"
-	"os"
-)
-
-func main() {
-	var f func(*bytes.Buffer, string) (int, error)
-	var buf bytes.Buffer
-	f = (*bytes.Buffer).WriteString
-	f(&buf, "y u no buf.WriteString?")
-	buf.WriteTo(os.Stdout)
-}
diff --git a/content/2015/tricks/method-values-2.go b/content/2015/tricks/method-values-2.go
deleted file mode 100644
index 5ee0b41..0000000
--- a/content/2015/tricks/method-values-2.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"bytes"
-	"os"
-)
-
-func main() {
-	var f func(string) (int, error)
-	var buf bytes.Buffer
-	f = buf.WriteString
-	f("Hey... ")
-	f("this *is* cute.")
-	buf.WriteTo(os.Stdout)
-}
diff --git a/content/2015/tricks/repeated.go b/content/2015/tricks/repeated.go
deleted file mode 100644
index 88fec40..0000000
--- a/content/2015/tricks/repeated.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-// BEGIN OMIT
-type Foo struct {
-	i int
-	s string
-}
-
-var s = []Foo{
-	{6 * 9, "Question"},
-	{42, "Answer"},
-}
-
-var m = map[int]Foo{
-	7: {6 * 9, "Question"},
-	3: {42, "Answer"},
-}
-
-// END OMIT
-
-func main() {}
diff --git a/content/2015/tricks/repeated2.go b/content/2015/tricks/repeated2.go
deleted file mode 100644
index 164158f..0000000
--- a/content/2015/tricks/repeated2.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore
-
-package main
-
-// BEGIN1 OMIT
-var s = []struct {
-	i int
-	s string
-}{
-	struct {
-		i int
-		s string
-	}{6 * 9, "Question"},
-	struct {
-		i int
-		s string
-	}{42, "Answer"},
-}
-
-var t = []struct {
-	i int
-	s string
-}{
-	{6 * 9, "Question"},
-	{42, "Answer"},
-}
-
-// END OMIT
-
-func main() {}
diff --git a/content/2015/tricks/string_test.go b/content/2015/tricks/string_test.go
deleted file mode 100644
index d626c1d..0000000
--- a/content/2015/tricks/string_test.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build ignore
-
-package strings_test
-
-import (
-	"strings"
-	"testing"
-)
-
-func TestIndex(t *testing.T) {
-	var tests = []struct {
-		s   string
-		sep string
-		out int
-	}{
-		{"", "", 0},
-		{"", "a", -1},
-		{"fo", "foo", -1},
-		{"foo", "foo", 0},
-		{"oofofoofooo", "f", 2},
-		// etc
-	}
-	for _, test := range tests {
-		actual := strings.Index(test.s, test.sep)
-		if actual != test.out {
-			t.Errorf("Index(%q,%q) = %v; want %v", test.s, test.sep, actual, test.out)
-		}
-	}
-}
diff --git a/content/2015/tricks/string_test2.go b/content/2015/tricks/string_test2.go
deleted file mode 100644
index ed692a2..0000000
--- a/content/2015/tricks/string_test2.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build ignore
-
-package strings_test
-
-import (
-	"strings"
-	"testing"
-)
-
-func TestIndex(t *testing.T) {
-	for _, test := range []struct {
-		s   string
-		sep string
-		out int
-	}{
-		{"", "", 0},
-		{"", "a", -1},
-		{"fo", "foo", -1},
-		{"foo", "foo", 0},
-		{"oofofoofooo", "f", 2},
-		// etc
-	} {
-		actual := strings.Index(test.s, test.sep)
-		if actual != test.out {
-			t.Errorf("Index(%q,%q) = %v; want %v", test.s, test.sep, actual, test.out)
-		}
-	}
-}
diff --git a/content/2015/tricks/subprocess/subprocess.go b/content/2015/tricks/subprocess/subprocess.go
deleted file mode 100644
index 8fb8fc0..0000000
--- a/content/2015/tricks/subprocess/subprocess.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package subprocess
-
-import (
-	"fmt"
-	"os"
-)
-
-func Crasher() {
-	fmt.Println("Going down in flames!")
-	os.Exit(1)
-}
diff --git a/content/2015/tricks/subprocess/subprocess_test.go b/content/2015/tricks/subprocess/subprocess_test.go
deleted file mode 100644
index fbdcecc..0000000
--- a/content/2015/tricks/subprocess/subprocess_test.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package subprocess
-
-import (
-	"os"
-	"os/exec"
-	"testing"
-)
-
-func TestCrasher(t *testing.T) {
-	if os.Getenv("BE_CRASHER") == "1" {
-		Crasher()
-		return
-	}
-	cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
-	cmd.Env = append(os.Environ(), "BE_CRASHER=1")
-	err := cmd.Run()
-	if e, ok := err.(*exec.ExitError); ok && !e.Success() {
-		return
-	}
-	t.Fatalf("process ran with err %q, want exit status 1", err)
-}
diff --git a/content/2015/tricks/template.go b/content/2015/tricks/template.go
deleted file mode 100644
index f333a75..0000000
--- a/content/2015/tricks/template.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"log"
-	"os"
-	"strings"
-	"text/template"
-)
-
-func main() {
-	tmpl := template.Must(template.New("").Parse(strings.TrimSpace(`
-Dear {{.Title}} {{.Lastname}},
-
-Congratulations on reaching Level {{.Rank}}!
-I'm sure your parents would say "Great job, {{.Firstname}}!"
-
-Sincerely,
-Rear Admiral Gopher
-	`)))
-	// BEGIN OMIT
-	data := struct {
-		Title               string
-		Firstname, Lastname string
-		Rank                int
-	}{
-		"Dr", "Carl", "Sagan", 7,
-	}
-	if err := tmpl.Execute(os.Stdout, data); err != nil {
-		log.Fatal(err)
-	}
-	// END OMIT
-}
diff --git a/content/2015/tricks/time-deps.png b/content/2015/tricks/time-deps.png
deleted file mode 100644
index 93ee00b..0000000
--- a/content/2015/tricks/time-deps.png
+++ /dev/null
Binary files differ
diff --git a/content/2015/using-go-types-for-tools.html b/content/2015/using-go-types-for-tools.html
deleted file mode 100644
index 2df0d0b..0000000
--- a/content/2015/using-go-types-for-tools.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<head>
-   <meta http-equiv="refresh" content="0; url=https://docs.google.com/presentation/d/13OvHYozAUBeISPRoLgG7kMBuja1NsU1D_mMlmbaYojk"/>
-</head>
-</html>
diff --git a/content/2016/applicative.slide b/content/2016/applicative.slide
deleted file mode 100644
index dbbdae1..0000000
--- a/content/2016/applicative.slide
+++ /dev/null
@@ -1,465 +0,0 @@
-Program your next server in Go
-
-Sameer Ajmani
-Manager, Go team
-Google
-@Sajma
-sameer@golang.org
-
-* Video
-
-This talk was presented at the [[http://applicative.acm.org/][ACM Applicative]] conference in New York City on June 1, 2016.
-
-.link https://www.youtube.com/watch?v=5bYO60-qYOI Watch the talk on YouTube
-
-* Outline
-
-1. What is Go, and who uses it?
-2. Comparing Go and other languages
-3. Code examples
-4. Concurrency
-5. Getting started
-
-* What is Go?
-
-"Go is an open source programming language that makes it easy to build simple, reliable, and efficient software."
-
-.link http://golang.org
-
-* History
-
-Design began in late 2007.
-
-- Robert Griesemer, Rob Pike, and Ken Thompson.
-- Ian Lance Taylor and Russ Cox.
-
-Open source since 2009 with a very active community.
-
-Language stable as of Go 1, early 2012.
-
-Go 1.7 is coming this August.
-
-* Why Go?
-
-Go is an answer to problems of scale at Google.
-
-.image ../2012/splash/datacenter.jpg 500 _
-
-* System Scale
-
-- designed to scale to 10⁶⁺ machines
-- everyday jobs run on 1000s of machines
-- jobs coordinate, interact with others in the system
-- lots going on at once
-
-Solution: great support for concurrency
-
-.image ../2012/waza/gophercomplex6.jpg
-
-* A Second Problem: Engineering Scale
-
-In 2011:
-
-- 5000+ developers across 40+ offices
-- 20+ changes per minute
-- 50% of code base changes every month
-- 50 million test cases executed per day
-- single code tree
-
-Solution: design the language for large code bases
-
-* Who uses Go at Google?
-
-Hundreds of projects. Thousands of Go programmers. Millions of lines of Go code.
-
-Public examples:
-
-- Flywheel: SPDY proxy for Chrome on mobile devices
-
-.image applicative/spdy.png 400 _
-
-* Who uses Go at Google?
-
-Hundreds of projects. Thousands of Go programmers. Millions of lines of Go code.
-
-Public examples:
-
-- Flywheel: SPDY proxy for Chrome on mobile devices
-- dl.google.com: Download server for Chrome, ChromeOS, Android SDK, Earth, etc.
-- Vitess: YouTube MySQL balancer
-- Seesaw: Linux Virtual Server (LVS) based load balancer
-- Lingo: Logs analysis in Go, migrated from Sawzall
-
-The target is networked servers, but Go is a great general-purpose language.
-
-* Who uses Go besides Google?
-
-.link http://golang.org/wiki/GoUsers
-
-Aerospike, BBC Worldwide, Bitbucket, Booking.com, Core OS, Datadog, Digital Ocean, Docker, Dropbox, Facebook, Getty Images, GitHub, GOV.UK, Heroku, IBM, Intel, InfluxDB, Iron.io, Kubernetes, Medium, MongoDB, Mozilla services, Netflix, New York Times, pool.ntp.org, Rackspace, Shutterfly, SmugMug, SoundCloud, SpaceX, Square, Stack Exchange, Thomson Reuters Eikon, Tumblr, Twitch, Twitter, Uber, VMWare ...
-
-.image ../2014/state-of-go/bus.jpg 300 _
-
-* Comparing Go and other languages
-
-* "Go: 90% Perfect, 100% of the time" -bradfitz, 2014
-
-.image ../2014/gocon-tokyo/funfast.svg
-
-# Brad Fitzpatrick, GoCon Tokyo, May 2014
-
-* Go has much in common with Java
-
-- C family (imperative, braces)
-- Statically typed
-- Garbage collected
-- Memory safe (nil references, runtime bounds checks)
-- Variables are always initialized (zero/nil/false)
-- Methods
-- Interfaces
-- Type assertions (`instanceof`)
-- Reflection
-
-* Go differs from Java in several ways
-
-Fast, efficient for computers:
-
-- Programs compile to machine code.  There's no VM.
-- Control over memory layout, fewer indirections
-
-Fun, fast for humans:
-
-- Simple, concise syntax
-- Statically linked binaries
-- Function values and lexical closures
-- Built-in strings (UTF-8)
-- Built-in generic maps and arrays/slices
-- Built-in concurrency
-
-* Go intentionally leaves out many features
-
-- No classes
-- No inheritance
-- No constructors
-- No `final`
-- No exceptions
-- No annotations
-- No user-defined generics
-
-* Why does Go leave out those features?
-
-Clarity is critical.
-
-When reading code, it should be clear what the program will do.
-
-When writing code, it should be clear how to make the program do what you want.
-
-Sometimes this means writing out a loop instead of invoking an obscure function.
-
-(Don't DRY out.)
-
-For more background on design:
-
-- [[http://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html][Less is exponentially more (Pike, 2012)]]
-- [[http://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering (Pike, 2012)]]
-
-* Code examples
-
-* Go looks familiar
-
-Hello, world!
-
-.play applicative/hello/hello.go
-
-* Hello, web server
-
-.play applicative/hello/server.go
-
-Types follow names in declarations.
-Exported names are Capitalized.  Unexported names are not.
-
-* Example: Google Search frontend
-
-.play applicative/frontend.go /func main/,/func handleSearch/
-
-.link http://localhost:8080/search
-.link http://localhost:8080/search?q=golang
-.link http://localhost:8080/search?q=golang&output=json
-.link http://localhost:8080/search?q=golang&output=prettyjson
-
-* Validate the query
-
-.code applicative/frontend.go /func handleSearch/,/ENDQUERY/
-
-`FormValue` is a method on the type `*http.Request`:
-
-  package http
-  type Request struct {...}
-  func (r *Request) FormValue(key string) string {...}
-
-`query`:=`req.FormValue("q")` initializes a new variable `query` with
-the type of the expression on the right hand side, `string`.
-
-* Fetch the search results
-
-  import "golang.org/x/talks/content/2016/applicative/google"
-
-.code applicative/frontend.go /Run the Google search/,/ENDSEARCH/
-
-`Search` returns two values, a slice of results and an error.
-The results are valid only if the error is nil.
-
-  type error interface {
-      Error() string // a useful human-readable error message
-  }
-
-Errors may contain additional information, accessed via type assertions.
-
-* Structure the search results
-
-.code applicative/frontend.go /Create the structured/,/ENDRESPONSE/
-
-The `response` type is defined locally within `handleSearch`.
-
-The `google.Result` type is exported from package `google`:
-
-  package google
-
-  type Result struct { Title, URL string }
-
-The `resp` variable is initialized to a `response` value using a composite struct literal.
-
-
-* Render the search results
-
-.code applicative/frontend.go /Render the response/,/ENDRENDER/
-
-Each case writes bytes to an `io.Writer`:
-
-  type Writer interface {
-          Write(p []byte) (n int, err error)
-  }
-
-`http.ResponseWriter` implements the `io.Writer` interface.
-
-* HTML templates operate on Go values
-
-.play applicative/frontend.go /var responseTemplate/,/\)\)/
-
-.image applicative/frontend-screenshot.png _ 900
-
-* That's it for the search handler
-
-All the packages are from the standard library:
-
-  import (
-      "encoding/json"
-      "fmt"
-      "html/template"
-      "log"
-      "net/http"
-      "time"
-  )
-
-Go servers scale well: each request runs in its own _goroutine_.
-
-Let's talk about concurrency.
-
-* Communicating Sequential Processes (Hoare, 1978)
-
-Concurrent programs are structured as independent processes that
-execute sequentially and communicate by passing messages.
-
-Sequential execution is easy to understand.  Async callbacks are not.
-
-*Go*primitives:* goroutines, channels, and the `select` statement.
-
-* Goroutines
-
-Goroutines are like lightweight threads.
-
-They start with tiny stacks and resize as needed.
-
-Go programs can have hundreds of thousands of them.
-
-Start a goroutine using the `go` statement:
-
-  go f(args)
-
-The Go runtime schedules goroutines onto OS threads.
-
-Blocked goroutines don't use a thread.
-
-* Channels
-
-Channels provide communication between goroutines.
-
-  c := make(chan string)
-
-  // goroutine 1
-  c <- "hello!"
-
-  // goroutine 2
-  s := <-c
-  fmt.Println(s) // "hello!"
-
-* Select
-
-A `select` statement blocks until communication can proceed.
-
-  select {
-  case x := <-in:
-    fmt.Println("received", x)
-  case out <- v:
-    fmt.Println("sent", v)
-  }
-
-Only the selected case runs.
-
-* Example: Google Search (backend)
-
-Q: What does Google search do?
-
-A: Given a query, return a page of search results (and some ads).
-
-Q: How do we get the search results?
-
-A: Send the query to Web search, Image search, YouTube, Maps, News, etc., then mix the results.
-
-How do we implement this?
-
-* Google Search: A fake framework
-
-We can simulate a back end search with a random timeout up to 100ms.
-
-.code applicative/google/fake.go /START2/,/STOP2/
-
-* Google Search: Test the framework
-
-.play applicative/google-serial.go /func.main/,/}/ HLsearch
-
-* Google Search (serial)
-
-The `Search` function takes a query and returns a slice of `Results`.
-
-Search invokes the Web, Image, and Video searches serially, then constructs the `results` slice.
-
-.code applicative/google/serial.go /func Search/,/^}/
-.play applicative/google-serial.go /google.Search/
-
-* Google Search (parallel)
-
-Run the Web, Image, and Video searches concurrently, and wait for all results.
-
-The `func` literals are closures over `query` and `c`.
-
-.code applicative/google/parallel.go /func Search/,/^}/
-.play applicative/google-parallel.go /google.Search/
-
-* Google Search (timeout)
-
-Don't wait for slow servers.
-
-.code applicative/google/timeout.go /func Search/,/STOP/
-.play applicative/google-timeout.go /google.Search/ HLsearch
-
-* Avoid timeout
-
-Q: How do we avoid discarding results from slow servers?
-
-A: Replicate the servers.  Send requests to multiple replicas, and use the first response.
-
-.code applicative/google/first.go /func First/,/^}/
-
-* Using the First function
-
-.play applicative/first.go /func main/,/^}/
-
-* Google Search (replicated)
-
-Reduce tail latency using replicated back ends.
-
-.code applicative/google/first.go /START/,/STOP/
-.play applicative/google-replicated.go /google.Search/
-
-Go functions have simple, synchronous signatures.
-The use of concurrency is encapsulated.
-
-* What just happened?
-
-In just a few simple transformations we used Go's concurrency primitives to convert a
-
-- slow
-- sequential
-- failure-sensitive
-
-program into one that is
-
-- fast
-- concurrent
-- replicated
-- robust.
-
-No locks. No condition variables. No futures. No callbacks.
-
-* Getting started
-
-* You're interested in Go.  What next?
-
-Take the Go Tour online.
-
-.link http://tour.golang.org
-
-Then go deeper ...
-
-.link http://golang.org/wiki/Learn
-
-Still interested?
-
-Run a pilot project.
-
-* Run a pilot project
-
-Reduces the cost & risks of switching to a new technology,
-while helping your organization discover the benefits.
-
-1. Choose something small to write in Go (e.g., a microservice)
-2. Build a prototype with a friend
-
-- Find the libraries you need
-- Integrate with editors & IDEs
-- Integrate with build & test & deploy
-- Learn how to debug & profile your program
-
-3. Compare Go to what you use today
-
-- Isolate the language change; try not to change anything else.
-
-4. *Present*results*to*the*team*
-
-* Go is designed for tooling
-
-Go tools meet you where you are.  There's no one "Go IDE".
-
-- IDE & editor integration: Eclipse, IntelliJ, VisualStudio, SublimeText, emacs, vim, ...
-- [[http://play.golang.org][play.golang.org]]: online playground
-- `gofmt`: automatic formatting
-- `goimports`: automatic updates of package imports
-- `gocode`: automatic completion
-- the `go` tool: automatic fetch & build
-- `guru`: static analysis, bug finding, code navigation
-- [[http://godoc.org][godoc.org]]: open source package index and docs
-
-* Where to Go next
-
-Take the Go Tour online.
-
-.link http://tour.golang.org
-
-Lots more material.
-
-.link http://golang.org/wiki/Learn
-
-Great community.
-
-.link http://golang.org/project
diff --git a/content/2016/applicative/builtin.go b/content/2016/applicative/builtin.go
deleted file mode 100644
index 989ad9c..0000000
--- a/content/2016/applicative/builtin.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-)
-
-func main() {
-	hellos := map[string]string{ // HLbuiltin
-		"English":  "Hello",   // HLstrings
-		"Mandarin": "您好",      // HLstrings
-		"Hindi":    "नमस्कार", // HLstrings
-	}
-	fmt.Println(hellos)               // HLfmt
-	var langs []string                // HLbuiltin
-	for lang, hello := range hellos { // HLbuiltin
-		fmt.Println(lang, ":", hello, "world!") // HLfmt
-		langs = append(langs, lang)             // HLbuiltin
-	}
-	sort.Strings(langs)                           // HLstrings
-	fmt.Printf("len(%v) = %d", langs, len(langs)) // HLfmt
-}
diff --git a/content/2016/applicative/channel.go b/content/2016/applicative/channel.go
deleted file mode 100644
index a1ee2e7..0000000
--- a/content/2016/applicative/channel.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball) // HL
-	go player("ping", table)
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for i := 0; ; i++ {
-		ball := <-table // HL
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball // HL
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/closure.go b/content/2016/applicative/closure.go
deleted file mode 100644
index a0daa9c..0000000
--- a/content/2016/applicative/closure.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func div(n, d int) (q, r int, err error) {
-	if d == 0 {
-		err = fmt.Errorf("%d/%d: divide by zero", n, d)
-		return
-	}
-	return n / d, n % d, nil
-}
-
-func main() {
-	var failures int
-
-	f := func(n, d int) { // HL
-		if q, r, err := div(n, d); err != nil {
-			fmt.Println(err)
-			failures++ // HL
-		} else {
-			fmt.Printf("%d/%d = %d leaving %d\n", n, d, q, r)
-		}
-	}
-
-	f(4, 3)
-	f(3, 0)
-	fmt.Println("failures:", failures)
-}
diff --git a/content/2016/applicative/error.go b/content/2016/applicative/error.go
deleted file mode 100644
index 5f68e5e..0000000
--- a/content/2016/applicative/error.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"errors"
-	"fmt"
-)
-
-// div divides n by d and returns the quotient and remainder.
-// It returns an error if d is zero.
-func div(n, d int) (q, r int, err error) { // HL
-	if d == 0 {
-		err = errors.New("divide by zero") // HL
-		return
-	}
-	return n / d, n % d, nil // HL
-}
-
-func main() {
-	fmt.Println(div(4, 3))
-	fmt.Println(div(3, 0))
-}
diff --git a/content/2016/applicative/first.go b/content/2016/applicative/first.go
deleted file mode 100644
index cffd44c..0000000
--- a/content/2016/applicative/first.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-// START2 OMIT
-func main() {
-	start := time.Now()
-	search := google.First( // HL
-		google.FakeSearch("replica 1", "I'm #1!", ""),  // HL
-		google.FakeSearch("replica 2", "#2 wins!", "")) // HL
-	result := search("golang")
-	elapsed := time.Since(start)
-	fmt.Println(result)
-	fmt.Println(elapsed)
-}
-
-// STOP2 OMIT
diff --git a/content/2016/applicative/frontend-screenshot.png b/content/2016/applicative/frontend-screenshot.png
deleted file mode 100644
index 561c944..0000000
--- a/content/2016/applicative/frontend-screenshot.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/frontend.go b/content/2016/applicative/frontend.go
deleted file mode 100644
index 45f9f96..0000000
--- a/content/2016/applicative/frontend.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// +build ignore,OMIT
-
-// The server program issues Google search requests. It serves on port 8080.
-//
-// The /search endpoint accepts these query params:
-//   q=the Google search query
-//
-// For example, http://localhost:8080/search?q=golang serves the first
-// few Google search results for "golang".
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"html/template"
-	"log"
-	"net/http"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func main() {
-	http.HandleFunc("/search", handleSearch) // HL
-	fmt.Println("serving on http://localhost:8080/search")
-	log.Fatal(http.ListenAndServe("localhost:8080", nil))
-}
-
-// handleSearch handles URLs like "/search?q=golang" by running a
-// Google search for "golang" and writing the results as HTML to w.
-// The query parameter "output" selects alternate output formats:
-// "json" for JSON, "prettyjson" for human-readable JSON.
-func handleSearch(w http.ResponseWriter, req *http.Request) { // HL
-	log.Println("serving", req.URL)
-
-	// Check the search query.
-	query := req.FormValue("q") // HL
-	if query == "" {
-		http.Error(w, `missing "q" URL parameter`, http.StatusBadRequest)
-		return
-	}
-	// ENDQUERY OMIT
-
-	// Run the Google search.
-	start := time.Now()
-	results, err := google.Search(query) // HL
-	elapsed := time.Since(start)
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusInternalServerError)
-		return
-	}
-	// ENDSEARCH OMIT
-
-	// Create the structured response.
-	type response struct {
-		Results []google.Result
-		Elapsed time.Duration
-	}
-	resp := response{results, elapsed} // HL
-	// ENDRESPONSE OMIT
-
-	// Render the response.
-	switch req.FormValue("output") {
-	case "json":
-		err = json.NewEncoder(w).Encode(resp) // HL
-	case "prettyjson":
-		var b []byte
-		b, err = json.MarshalIndent(resp, "", "  ") // HL
-		if err == nil {
-			_, err = w.Write(b)
-		}
-	default: // HTML
-		err = responseTemplate.Execute(w, resp) // HL
-	}
-	// ENDRENDER OMIT
-	if err != nil {
-		log.Print(err)
-		return
-	}
-}
-
-var responseTemplate = template.Must(template.New("results").Parse(`
-<html>
-<head/>
-<body>
-  <ol>
-  {{range .Results}}
-    <li>{{.Title}} - <a href="{{.URL}}">{{.URL}}</a></li>
-  {{end}}
-  </ol>
-  <p>{{len .Results}} results in {{.Elapsed}}</p>
-</body>
-</html>
-`))
diff --git a/content/2016/applicative/func.go b/content/2016/applicative/func.go
deleted file mode 100644
index 4001d40..0000000
--- a/content/2016/applicative/func.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// div divides n by d and returns the quotient and remainder.
-func div(n, d int) (q, r int) { // HL
-	return n / d, n % d
-}
-
-func main() {
-	quot, rem := div(4, 3)
-	fmt.Println(quot, rem)
-}
diff --git a/content/2016/applicative/gofmt-after.go b/content/2016/applicative/gofmt-after.go
deleted file mode 100644
index 85a07d0..0000000
--- a/content/2016/applicative/gofmt-after.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	for i := 0; i < 3; i++ {
-		fmt.Println("Hello, world")
-	}
-}
diff --git a/content/2016/applicative/goimports-after.go b/content/2016/applicative/goimports-after.go
deleted file mode 100644
index aa8c9f7..0000000
--- a/content/2016/applicative/goimports-after.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-
-	"golang.org/x/tools/present"
-)
-
-func main() {
-	fmt.Println(present.Image{})
-}
diff --git a/content/2016/applicative/goimports-before.go b/content/2016/applicative/goimports-before.go
deleted file mode 100644
index 6744f32..0000000
--- a/content/2016/applicative/goimports-before.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-func main() {
-	fmt.Println(present.Image{})
-}
diff --git a/content/2016/applicative/google-parallel.go b/content/2016/applicative/google-parallel.go
deleted file mode 100644
index a73f950..0000000
--- a/content/2016/applicative/google-parallel.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results, err := google.SearchParallel("golang") // HLsearch
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed, err)
-}
diff --git a/content/2016/applicative/google-replicated.go b/content/2016/applicative/google-replicated.go
deleted file mode 100644
index 3d8a37b..0000000
--- a/content/2016/applicative/google-replicated.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results, err := google.SearchReplicated("golang", 80*time.Millisecond) // HLsearch
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed, err)
-}
diff --git a/content/2016/applicative/google-serial.go b/content/2016/applicative/google-serial.go
deleted file mode 100644
index fcf3d3b..0000000
--- a/content/2016/applicative/google-serial.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results, err := google.Search("golang") // HLsearch
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed, err)
-}
diff --git a/content/2016/applicative/google-timeout.go b/content/2016/applicative/google-timeout.go
deleted file mode 100644
index 00d3ed9..0000000
--- a/content/2016/applicative/google-timeout.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build ignore
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-
-	"golang.org/x/talks/content/2016/applicative/google"
-)
-
-func init() {
-	rand.Seed(time.Now().UnixNano())
-}
-
-func main() {
-	start := time.Now()
-	results, err := google.SearchTimeout("golang", 80*time.Millisecond) // HLsearch
-	elapsed := time.Since(start)
-	fmt.Println(results)
-	fmt.Println(elapsed, err)
-}
diff --git a/content/2016/applicative/google/fake.go b/content/2016/applicative/google/fake.go
deleted file mode 100644
index 75f1294..0000000
--- a/content/2016/applicative/google/fake.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package google
-
-import (
-	"fmt"
-	"math/rand"
-	"time"
-)
-
-// START2 OMIT
-var (
-	Web   = FakeSearch("web", "The Go Programming Language", "http://golang.org")
-	Image = FakeSearch("image", "The Go gopher", "https://blog.golang.org/gopher/gopher.png")
-	Video = FakeSearch("video", "Concurrency is not Parallelism", "https://www.youtube.com/watch?v=cN_DpYBzKso")
-)
-
-type SearchFunc func(query string) Result // HL
-
-func FakeSearch(kind, title, url string) SearchFunc {
-	return func(query string) Result {
-		time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) // HL
-		return Result{
-			Title: fmt.Sprintf("%s(%q): %s", kind, query, title),
-			URL:   url,
-		}
-	}
-}
-
-// STOP2 OMIT
-
-// String returns the result's title, followed by a newline.
-func (r Result) String() string { return r.Title + "\n" }
-
-var (
-	Web1   = FakeSearch("web1", "The Go Programming Language", "http://golang.org")
-	Web2   = FakeSearch("web2", "The Go Programming Language", "http://golang.org")
-	Image1 = FakeSearch("image1", "The Go gopher", "https://blog.golang.org/gopher/gopher.png")
-	Image2 = FakeSearch("image2", "The Go gopher", "https://blog.golang.org/gopher/gopher.png")
-	Video1 = FakeSearch("video1", "Concurrency is not Parallelism",
-		"https://www.youtube.com/watch?v=cN_DpYBzKso")
-	Video2 = FakeSearch("video2", "Concurrency is not Parallelism",
-		"https://www.youtube.com/watch?v=cN_DpYBzKso")
-)
diff --git a/content/2016/applicative/google/first.go b/content/2016/applicative/google/first.go
deleted file mode 100644
index 796083c..0000000
--- a/content/2016/applicative/google/first.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package google
-
-import (
-	"errors"
-	"time"
-)
-
-func First(replicas ...SearchFunc) SearchFunc { // HL
-	return func(query string) Result {
-		c := make(chan Result, len(replicas))
-		searchReplica := func(i int) {
-			c <- replicas[i](query)
-		}
-		for i := range replicas {
-			go searchReplica(i) // HL
-		}
-		return <-c
-	}
-}
-
-// START OMIT
-var (
-	replicatedWeb   = First(Web1, Web2)     // HL
-	replicatedImage = First(Image1, Image2) // HL
-	replicatedVideo = First(Video1, Video2) // HL
-)
-
-func SearchReplicated(query string, timeout time.Duration) ([]Result, error) {
-	timer := time.After(timeout)
-	c := make(chan Result, 3)
-	go func() { c <- replicatedWeb(query) }()   // HL
-	go func() { c <- replicatedImage(query) }() // HL
-	go func() { c <- replicatedVideo(query) }() // HL
-	// STOP OMIT
-
-	var results []Result
-	for i := 0; i < 3; i++ {
-		select {
-		case result := <-c:
-			results = append(results, result)
-		case <-timer:
-			return results, errors.New("timed out")
-		}
-	}
-	return results, nil
-}
diff --git a/content/2016/applicative/google/parallel.go b/content/2016/applicative/google/parallel.go
deleted file mode 100644
index 67434ce..0000000
--- a/content/2016/applicative/google/parallel.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package google
-
-func SearchParallel(query string) ([]Result, error) {
-	c := make(chan Result)
-	go func() { c <- Web(query) }()
-	go func() { c <- Image(query) }()
-	go func() { c <- Video(query) }()
-
-	return []Result{<-c, <-c, <-c}, nil
-}
diff --git a/content/2016/applicative/google/serial.go b/content/2016/applicative/google/serial.go
deleted file mode 100644
index 1a723aa..0000000
--- a/content/2016/applicative/google/serial.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package google
-
-// START1 OMIT
-type Result struct {
-	Title, URL string
-}
-
-func Search(query string) ([]Result, error) {
-	results := []Result{
-		Web(query),
-		Image(query),
-		Video(query),
-	}
-	return results, nil
-}
-
-// STOP1 OMIT
diff --git a/content/2016/applicative/google/timeout.go b/content/2016/applicative/google/timeout.go
deleted file mode 100644
index eef1503..0000000
--- a/content/2016/applicative/google/timeout.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package google
-
-import (
-	"errors"
-	"time"
-)
-
-func SearchTimeout(query string, timeout time.Duration) ([]Result, error) { // HL
-	timer := time.After(timeout) // HL
-	c := make(chan Result, 3)
-	go func() { c <- Web(query) }()
-	go func() { c <- Image(query) }()
-	go func() { c <- Video(query) }()
-
-	var results []Result
-	for i := 0; i < 3; i++ {
-		select { // HL
-		case result := <-c: // HL
-			results = append(results, result)
-		case <-timer: // HL
-			return results, errors.New("timed out")
-		}
-	}
-	return results, nil
-	// STOP OMIT
-}
diff --git a/content/2016/applicative/google1.jpg b/content/2016/applicative/google1.jpg
deleted file mode 100644
index e52e5f0..0000000
--- a/content/2016/applicative/google1.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/google14.jpg b/content/2016/applicative/google14.jpg
deleted file mode 100644
index f83bb9b..0000000
--- a/content/2016/applicative/google14.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/google17.jpg b/content/2016/applicative/google17.jpg
deleted file mode 100644
index 909b579..0000000
--- a/content/2016/applicative/google17.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/google20.jpg b/content/2016/applicative/google20.jpg
deleted file mode 100644
index 1ba9213..0000000
--- a/content/2016/applicative/google20.jpg
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/goroutine.go b/content/2016/applicative/goroutine.go
deleted file mode 100644
index 747ea47..0000000
--- a/content/2016/applicative/goroutine.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	go player("ping", new(Ball)) // HL
-	time.Sleep(1 * time.Second)
-}
-
-func player(name string, ball *Ball) {
-	for i := 0; ; i++ {
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/hello/Main.class b/content/2016/applicative/hello/Main.class
deleted file mode 100644
index cccf827..0000000
--- a/content/2016/applicative/hello/Main.class
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/hello/Main.java b/content/2016/applicative/hello/Main.java
deleted file mode 100644
index 73a4d22..0000000
--- a/content/2016/applicative/hello/Main.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class Main {
-    public static void main(String[] args) {
-        System.out.println("Hello, world!");
-    }
-}
diff --git a/content/2016/applicative/hello/hello.go b/content/2016/applicative/hello/hello.go
deleted file mode 100644
index c84b1d7..0000000
--- a/content/2016/applicative/hello/hello.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func main() {
-	fmt.Println("Hello, 世界!")
-}
diff --git a/content/2016/applicative/hello/server.go b/content/2016/applicative/hello/server.go
deleted file mode 100644
index 69bfac1..0000000
--- a/content/2016/applicative/hello/server.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"log"
-	"net/http"
-)
-
-func main() {
-	http.HandleFunc("/hello", handleHello) // HL
-	fmt.Println("serving on http://localhost:7777/hello")
-	log.Fatal(http.ListenAndServe("localhost:7777", nil))
-}
-
-func handleHello(w http.ResponseWriter, req *http.Request) {
-	log.Println("serving", req.URL)
-	fmt.Fprintln(w, "Hello, 世界!") // HL
-}
diff --git a/content/2016/applicative/interface.go b/content/2016/applicative/interface.go
deleted file mode 100644
index ca1021a..0000000
--- a/content/2016/applicative/interface.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-)
-
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-func (r Rectangle) String() string {
-	var buf bytes.Buffer
-	for h := 0; h < r.Max.Y-r.Min.Y; h++ {
-		for w := 0; w < r.Max.X-r.Min.X; w++ {
-			buf.WriteString("#")
-		}
-		buf.WriteString("\n")
-	}
-	return buf.String()
-}
-
-func main() {
-	fmt.Println(Rectangle{Max: Point{20, 5}})
-}
-
-// EOF OMIT
diff --git a/content/2016/applicative/method.go b/content/2016/applicative/method.go
deleted file mode 100644
index 15077fa..0000000
--- a/content/2016/applicative/method.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-)
-
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-func (r Rectangle) String() string { // HL
-	var buf bytes.Buffer
-	for h := 0; h < r.Max.Y-r.Min.Y; h++ {
-		for w := 0; w < r.Max.X-r.Min.X; w++ {
-			buf.WriteString("#")
-		}
-		buf.WriteString("\n")
-	}
-	return buf.String()
-}
-
-func main() {
-	r := Rectangle{Max: Point{20, 5}}
-	s := r.String() // HL
-	fmt.Println(s)
-}
-
-// EOF OMIT
diff --git a/content/2016/applicative/panic.go b/content/2016/applicative/panic.go
deleted file mode 100644
index d2c935f..0000000
--- a/content/2016/applicative/panic.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// div divides n by d and returns the quotient and remainder.
-func div(n, d int) (q, r int) {
-	return n / d, n % d
-}
-
-func main() {
-	quot, rem := div(4, 0) // HL
-	fmt.Println(quot, rem)
-}
diff --git a/content/2016/applicative/pingpipe.go b/content/2016/applicative/pingpipe.go
deleted file mode 100644
index e22b851..0000000
--- a/content/2016/applicative/pingpipe.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	in, out := make(chan *Ball), make(chan *Ball) // HL
-	go player("ping", in, out)
-	go player("pong", in, out)
-
-	go func() {
-		for i := 0; i < 8; i++ {
-			in <- new(Ball) // feed the pipeline // HL
-		}
-	}()
-	for i := 0; i < 8; i++ {
-		<-out // drain the pipeline // HL
-	}
-}
-
-func player(name string, in <-chan *Ball, out chan<- *Ball) { // HL
-	for i := 0; ; i++ {
-		ball := <-in // HL
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		out <- ball // HL
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/pingpong.go b/content/2016/applicative/pingpong.go
deleted file mode 100644
index 2d7664a..0000000
--- a/content/2016/applicative/pingpong.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	table := make(chan *Ball)
-	go player("ping", table)
-	go player("pong", table) // HL
-
-	table <- new(Ball) // game on; toss the ball
-	time.Sleep(1 * time.Second)
-	<-table // game over; grab the ball
-}
-
-func player(name string, table chan *Ball) {
-	for i := 0; ; i++ {
-		ball := <-table
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		table <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/pingselect.go b/content/2016/applicative/pingselect.go
deleted file mode 100644
index 03dcb1e..0000000
--- a/content/2016/applicative/pingselect.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	in, out := make(chan *Ball), make(chan *Ball)
-	go player("ping", in, out)
-	go player("pong", in, out)
-
-	for i := 0; i < 8; {
-		select { // HL
-		case in <- new(Ball): // feed the pipeline // HL
-		case <-out: // drain the pipeline // HL
-			i++ // HL
-		} // HL
-	}
-}
-
-func player(name string, in <-chan *Ball, out chan<- *Ball) {
-	for i := 0; ; i++ {
-		ball := <-in
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-		out <- ball
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/player.go b/content/2016/applicative/player.go
deleted file mode 100644
index 96df122..0000000
--- a/content/2016/applicative/player.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-// STARTMAIN1 OMIT
-type Ball struct{ hits int }
-
-func main() {
-	player("ping", new(Ball))
-}
-
-func player(name string, ball *Ball) {
-	for i := 0; ; i++ {
-		ball.hits++
-		fmt.Println(name, i, "hit", ball.hits)
-		time.Sleep(100 * time.Millisecond)
-	}
-}
-
-// STOPMAIN1 OMIT
diff --git a/content/2016/applicative/pointer.go b/content/2016/applicative/pointer.go
deleted file mode 100644
index eb52944..0000000
--- a/content/2016/applicative/pointer.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START TYPES OMIT
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-// END TYPES OMIT
-
-func main() {
-	var r0 Rectangle
-
-	r1 := r0 // struct copy
-
-	r1.Min.X, r1.Min.Y = -1, -1
-	r1.Max = Point{X: 2}
-
-	fmt.Printf("r0 is %+v\n", r0)
-	fmt.Printf("r1 is %v\n", r1)
-
-	y := &r1.Max.Y // y is a *int // HL
-	*y = 5         // HL
-	fmt.Println(y, "points to", *y)
-
-	min := &r1.Min // min is a *Point // HL
-	min.X = 7      // HL
-	fmt.Printf("r1 is %v\n", r1)
-}
diff --git a/content/2016/applicative/safe.go b/content/2016/applicative/safe.go
deleted file mode 100644
index 234b4d2..0000000
--- a/content/2016/applicative/safe.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func newInt(v int) *int {
-	var n = v
-	return &n // HL
-}
-
-func inc(p *int) {
-	*p++ // try removing * // HL
-}
-
-func main() {
-	p := newInt(3)
-	inc(p)
-	fmt.Println(p, "points to", *p)
-}
diff --git a/content/2016/applicative/spdy.png b/content/2016/applicative/spdy.png
deleted file mode 100644
index bbc0650..0000000
--- a/content/2016/applicative/spdy.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/applicative/struct.go b/content/2016/applicative/struct.go
deleted file mode 100644
index 34fa0fa..0000000
--- a/content/2016/applicative/struct.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-// START SLICES OMIT
-var arr [8]Rectangle
-
-var (
-	rects  = arr[2:4]
-	rects2 = []Rectangle{rects[0], rects[1]}
-)
-
-// START TYPES OMIT
-type Point struct {
-	X, Y int
-}
-
-type Rectangle struct {
-	Min, Max Point
-}
-
-// END TYPES OMIT
-
-func main() {
-	var r0 Rectangle
-
-	r1 := r0 // struct copy
-
-	r1.Min.X, r1.Min.Y = -1, -1
-	r1.Max = Point{X: 2}
-
-	fmt.Printf("r0 is %+v\n", r0)
-	fmt.Printf("r1 is %v\n", r1)
-}
diff --git a/content/2016/asm.slide b/content/2016/asm.slide
deleted file mode 100644
index d75231d..0000000
--- a/content/2016/asm.slide
+++ /dev/null
@@ -1,389 +0,0 @@
-The Design of the Go Assembler
-
-Gophercon
-12 July 2016
-
-Rob Pike
-Google
-@rob_pike
-[[http://golang.org/s/plusrob][+RobPikeTheHuman]]
-http://golang.org/
-
-* Presentation on youtube.com
-
-Video is [[https://www.youtube.com/watch?v=KINIAgRpkDA][here]].
-
-
-* Motivation
- 
-_Why_Learn_Assembler_Language?_
-
-_The_most_important_single_thing_to_realize_about_assembler_language_is_that_it_enables_the_programmer_to_use_all_System/360_machine_functions_as_if_he_were_coding_in_System/360_machine_language._
-
-— A Programmer's Introduction to IBM System/360 Assembler Language, 1970, page 4
-
-* We still need assembly language
-
-Once it was all you needed, then high-level languages like FORTRAN and COBOL came along.
-
-But still needed today:
-
-- environment bootstrap (operating system and program startup, runtime)
-- low-level library code such as stack management and context switching
-- performance (`math/big`)
-- access to features not exposed in language such as crypto instructions
-
-Also, perhaps most important: It's how we talk about the machine.
-
-Knowing assembly, even a little, means understanding computers better.
-
-* What does it look like?
-
-Some examples...
-
-* IBM System/360
-
-.code asm/360.s.txt
-
-* Apollo 11 Guidance Computer
-
-.code asm/apollo.s.txt
-
-* PDP-10
-
-.code asm/pdp10.s.txt
-
-(From the MIT PDP-10 Info file)
-
-* PDP-11
-
-.code asm/pdp11.s.txt
-
-(From Unix v6 `as/as13.s`)
-
-* Motorola 68000
-
-.code asm/68000.s.txt
-
-(From Wikipedia)             
-
-* CRAY-1
-
-.code asm/cray1.s.txt
-
-(From Robert Griesemer's PhD thesis)
-
-
-* Common structure
-
-Columnar layout with function and variable declarations, labels, instructions.
-
-Instructions:
-
-	subroutine header
-	label:
-		instruction operand...	; comment
-		...
-
-Operands:
-
-	register
-	literal constant
-	address
-	register indirection (register as address)
-	...
-
-There are exceptions such as Cray (`A5` `A5+A14`) but they aren't conceptually different.
-
-CPUs are all pretty much the same.
-
-* Use that commonality
-
-We can use the common structure of all assemblers (CPUs, really) to construct a common grammar for all architectures.
-
-This realization took some time.
-
-The seeds were planted long ago.
-
-* Plan 9 assembly
-
-Around 1986, Ken Thompson wrote a C compiler for the National 32000 (Sequent SMP).
-Compiler generated pseudo-code, linker did instruction assignment.
-
-The "assembler" was just a way to write that pseudo-code textually.
-
-	MOVW    $0, var
-
-might become (hypothetical example)
-
-	XORW    R1, R1
-	STORE   R1, var
-
-Note assembler emits the `MOVW`; the linker generates `XORW` and `STORE`.
-We call this _instruction_selection_.
-
-Or consider `RET`, which becomes `RET` or `JMP` `LR` or `JMP` `(R31)` or ...
-
-The assembler is just a way to hand-write the output the compiler produces.
-(Compiler does not feed assembler, unlike in many other systems.)
-
-* The pieces
-
-.image asm/arch1.png
-
-* The Plan 9 assemblers
-
-Assembler for each architecture was a separate C program with a Yacc grammar,
-adapted and partially rewritten for every architecture.
-
-`8a`, `6a`, `va` etc. corresponding to `8c`, `6c` `vc`, etc.
-(One-letter codes: `8` for 386, `6` for AMD64, `v` for MIPS, etc.)
-
-All very similar up front but different in detail.
-
-The earliest Go implementations used this design, adding Go compilers `8g`, `6g` but using the Plan 9 assemblers unchanged.
-
-The separation of (compiler/assembler)⇒linker allowed the Go linker to do more, including helping boot the runtime.
-
-* Go 1.3: Rearrange the pieces
-
-Goal: Move to a pure Go implementation.
-Preparation started in Go 1.3
-
-New library that (in part) does instruction selection: `"liblink"` (as of 1.5, `"obj"`).
-Call it from the compiler.
-
-Thus the first part of the old linker is now in the compiler.
-The compiler now emits (mostly) real instructions, not pseudo-instructions.
-
-Result: Slower compiler, but faster build.
-Instruction selection for library code done once, not every time you link a program.
-
-Assemblers also use `obj`.
-
-For both compiler and assembler, the _input_ is unchanged.
-In fact the whole _process_ is the same, just arranged differently.
-
-* The old pieces
-
-.image asm/arch1.png
-
-
-* The new pieces
-
-.image asm/arch2.png
-
-
-* Go 1.5: C must Go
-
-More prep in Go 1.4, then in Go 1.5, all tooling moved to Go.
-
-Compiler and linker machine-translated from C to Go.
-The old `liblink` became a new suite of libraries, `obj/...`:
-
-- `cmd/internal/obj`  (portable part)
-- `cmd/internal/obj/x86`    (architecture-specific part)
-- `cmd/internal/obj/arm`    (architecture-specific part)
-- ...
- 
-Previous presentations about this work:
-
-- Russ Cox at Gophercon 2014 (out of date): [[youtube.com/watch?v=QIE5nV5fDwA]]
-- Rob Pike at Gopherfest 2015: [[youtube.com/watch?v=cF1zJYkBW4A]]
-* Go 1.5: Compiler and linker as single programs
-
-The many compilers (`6g`, `8g` etc.) were replaced with a single tool: `compile`.
-`GOOS` and `GOARCH` (only!) specify the target operating system and architecture.
-
-	GOOS=darwin GOARCH=arm go tool compile prog.go
-
-Same for the linker: `6l`, `8l`, etc. become `go` `tool` `link`.
-
-How can a single binary handle all these architectures?
-
-Only one input language, only one output generator (the `obj` library).
-The target is configured when the tool starts.
-
-* Go 1.5 Assembler
-
-Unlike the old compilers, which shared much code, the old assemblers were all different programs.
-(Although they were very similar inside, they shared almost no code.)
-
-Proposal: Write a single `go` `tool` `asm` from scratch in Go, replacing all the old assemblers.
-
-`GOOS` and `GOARCH` tell you what the target is.
-
-But assembly language isn't Go. Every machine has a different assembly language.
-
-Well, not really! Not quite universal across machines, but ...
-
-* An example program
-
-Look at the generated assembly for this simple program:
-
-.code asm/add.go
-
-For each architecture, with some noise edited out:
-
-* 32-bit x86 (386)
-
-.code asm/386.s.txt
-
-* 64-bit x86 (amd64)
-
-.code asm/amd64.s.txt
-
-* 32-bit arm
-
-.code asm/arm.s.txt
-
-* 64-bit arm (arm64)
-
-.code asm/arm64.s.txt
-
-* S390 (s390x)
-
-.code asm/s390x.s.txt
-
-* 64-bit MIPS (mips64)
-
-.code asm/mips64.s.txt
-
-* 64-bit Power (ppc64le)
-
-.code asm/ppc64le.s.txt
-
-* Common grammar
-
-They all look the same. (Partly by design, partly because they _are_ the same.)
-
-The only significant variation is the names of instructions and registers.
-Many details hidden, such as what `RET` is. (It's a pseudo-instruction.)
-
-(Offsets are determined by size of `int`, among other things.)
-
-The fortuitous syntax originated in Ken's National 32000 assembler.
-
-With common syntax and the `obj` library, can build a single assembler for all CPUs.
-
-* Aside: Downside
-
-Not the same assembly notation as the manufacturers'.
-Can be offputting to outsiders.
-
-On the other hand, this approach uses the same notation on all machines.
-New architectures can arrive without creating or learning new notation.
-
-A tradeoff worth making.
-
-* Design of the Go 1.5 assembler
-
-The apotheosis of assemblers.
-
-New program, entirely in Go.
-
-Common lexer and parser across all architectures.
-Each instruction parsed into an instruction description.
-That becomes a data structure passed to the new `obj` library.
-
-The core of the assembler has very little per-machine information.
-Instead, tables are constructed at run time, flavored by `$GOARCH`.
-
-An internal package, `cmd/asm/internal/arch`, creates these tables on the fly.
-Machine details are loaded from `obj`.
-
-* An example: initializing the 386
-
-.code asm/arch386._go /^import/,$
-
-Parser just does string matching to find the instruction.
-
-* An example: ADDW on 386
-
-Given an assembly run with `GOOS=386`, the instruction
-
-	ADDW AX, BX
-
-is parsed into in a data structure schematically like:
-
-	&obj.Prog{
-		As: arch.Instructions["ADDW"],
-		From: obj.Addr{Reg: arch.Register["AX"]},
-		To: obj.Addr{Reg: arch.Register["BX"]},
-		...
-	}
-
-That gets passed to the `obj` library for encoding as a 386 instruction.
-
-This is a purely mechanical process devoid of semantics.
-
-* Validation
-
-Assembler does some validation:
-
-- lexical and syntactic correctness
-- operand syntax
-- (with some variation. e.g.: `[R2,R5,R8,g]` only legal on ARM)
-
-But all semantic checking is done by the `obj` library.
-
-If it can be turned into real instructions, it's legal!
-
-* Testing
-
-New assembler was tested against the old (C-written) ones.
-
-A/B testing at the bit level: Same input must give same output.
-Also reworked some parts of `obj` packages for better diagnostics and debugging.
-
-Did `386` first, then `amd64`, `arm`, and `ppc`. Each was easier than the last.
-
-No hardware manuals were opened during this process.
-
-* Result
-
-One Go program replaces many C/Yacc programs, so it's easier to maintain.
-As a Go program it can have proper tests.
-
-Dependent on `obj`, so correctness and completeness are relatively simple to guarantee.
-
-New assembler almost 100% compatible with previous ones.
-Incompatibilities were mostly inconsistencies.
-
-Portability is easy now.
-
-A new instruction set just needs connecting it up with the `obj` library,
-plus a minor amount of architecture-specific tuning and validation.
-
-Several architectures have been added since the assembler was created,
-most by the open source community.
-
-* Tables
-
-To a large extent, the assembler is now table-driven.
-Can we generate those tables?
-
-The disassemblers (used by `go` `tool` `pprof`) are created by machine processing of PDFs.
-The architecture definition is machine-readable, so use it!
-
-Plan to go the other way:
-
-Read in a PDF, write out `obj` library definitions and bind to assembler.
-Why write by hand when you can automate?
-
-Hope to have this working soon; basics are already in place.
-
-Result: a largely machine-generated assembler.
-
-* Conclusion
-
-Assembly language is essentially the same everywhere.
-
-Use that to build a *true* common assembly language.
-
-Customize it on the fly using dynamically loaded tables.
-
-And one day: create those tables automatically.
-
-
-A portable solution to a especially non-portable problem.
diff --git a/content/2016/asm/360.s.txt b/content/2016/asm/360.s.txt
deleted file mode 100644
index 5c9d60c..0000000
--- a/content/2016/asm/360.s.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-1        PRINT NOGEN
-2 STOCK1 START 0
-3 BEGIN  BALR  11,0
-4        USING *,11
-5        MVC   NEWOH,OLDOH
-6        AP    NEWOH,RECPT
-7        AP    NEWOH,ISSUE
-8        EOJ
-11 OLDOH DC    PL4'9'
-12 RECPT DC    PL4'4'
-13 ISSUE DC    PL4'6'
-14 NEWOH DS    PL4
-15       END   BEGIN
diff --git a/content/2016/asm/386.s.txt b/content/2016/asm/386.s.txt
deleted file mode 100644
index 10a78ff..0000000
--- a/content/2016/asm/386.s.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-TEXT add(SB), $0-12
-    MOVL    a+4(FP), BX
-    ADDL    b+8(FP), BX
-    MOVL    BX, 12(FP)
-    RET
diff --git a/content/2016/asm/68000.s.txt b/content/2016/asm/68000.s.txt
deleted file mode 100644
index ba69d36..0000000
--- a/content/2016/asm/68000.s.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-strtolower      public
-                link    a6,#0           ;Set up stack frame
-                movea   8(a6),a0        ;A0 = src, from stack
-                movea   12(a6),a1       ;A1 = dst, from stack
-loop            move.b  (a0)+,d0        ;Load D0 from (src)
-                cmpi    #'A',d0         ;If D0 < 'A',
-                blo     copy            ;skip
-                cmpi    #'Z',d0         ;If D0 > 'Z',
-                bhi     copy            ;skip
-                addi    #'a'-'A',d0     ;D0 = lowercase(D0)
-copy            move.b  d0,(a1)+        ;Store D0 to (dst)
-                bne     loop            ;Repeat while D0 <> NUL
-                unlk    a6              ;Restore stack frame
-                rts                     ;Return
-                end
diff --git a/content/2016/asm/add.go b/content/2016/asm/add.go
deleted file mode 100644
index 4409aa1..0000000
--- a/content/2016/asm/add.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package add
-
-func add(a, b int) int {
-	return a + b
-}
diff --git a/content/2016/asm/amd64.s.txt b/content/2016/asm/amd64.s.txt
deleted file mode 100644
index 117ede8..0000000
--- a/content/2016/asm/amd64.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $0-24
-    MOVQ    b+16(FP), AX
-    MOVQ    a+8(FP), CX
-    ADDQ    CX, AX
-    MOVQ    AX, 24(FP)
-    RET
diff --git a/content/2016/asm/apollo.s.txt b/content/2016/asm/apollo.s.txt
deleted file mode 100644
index 20af5bb..0000000
--- a/content/2016/asm/apollo.s.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# TO ENTER A JOB REQUEST REQUIRING NO VAC AREA:
-
-          COUNT     02/EXEC
-                
-NOVAC     INHINT
-          AD        FAKEPRET     # LOC(MPAC +6) - LOC(QPRET)
-          TS        NEWPRIO      # PRIORITY OF NEW JOB + NOVAC C(FIXLOC)
-
-          EXTEND
-          INDEX     Q            # Q WILL BE UNDISTURBED THROUGHOUT.
-          DCA       0            # 2CADR OF JOB ENTERED.
-          DXCH      NEWLOC
-          CAF       EXECBANK
-          XCH       FBANK
-          TS        EXECTEM1
-          TCF       NOVAC2       # ENTER EXECUTIVE BANK.
diff --git a/content/2016/asm/arch1.png b/content/2016/asm/arch1.png
deleted file mode 100644
index f2d6e6e..0000000
--- a/content/2016/asm/arch1.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/asm/arch2.png b/content/2016/asm/arch2.png
deleted file mode 100644
index 920709d..0000000
--- a/content/2016/asm/arch2.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/asm/arch386._go b/content/2016/asm/arch386._go
deleted file mode 100644
index 9cbdafa..0000000
--- a/content/2016/asm/arch386._go
+++ /dev/null
@@ -1,21 +0,0 @@
-import (
-	"cmd/internal/obj"
-	"cmd/internal/obj/x86"
-)
-
-func archX86(linkArch *obj.LinkArch) *Arch {
-	register := make(map[string]int16)
-	// Create maps for easy lookup of instruction names etc.
-	for i, s := range x86.Register {
-		register[s] = int16(i + x86.REG_AL)
-	}
-	instructions := make(map[string]obj.As)
-	for i, s := range obj.Anames {
-		instructions[s] = x86.As(i)
-	}
-	return &Arch{
-		Instructions:   instructions,
-		Register:       register,
-		...
-	}
-}
diff --git a/content/2016/asm/arm.s.txt b/content/2016/asm/arm.s.txt
deleted file mode 100644
index 41ffc2b..0000000
--- a/content/2016/asm/arm.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $-4-12
-    MOVW    a(FP), R0
-    MOVW    b+4(FP), R1
-    ADD     R1, R0
-    MOVW    R0, 8(FP)
-    RET
diff --git a/content/2016/asm/arm64.s.txt b/content/2016/asm/arm64.s.txt
deleted file mode 100644
index 0881803..0000000
--- a/content/2016/asm/arm64.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $-8-24
-    MOVD    a(FP), R0
-    MOVD    b+8(FP), R1
-    ADD     R1, R0
-    MOVD    R0, 16(FP)
-    RET
diff --git a/content/2016/asm/cray1.s.txt b/content/2016/asm/cray1.s.txt
deleted file mode 100644
index 90c5670..0000000
--- a/content/2016/asm/cray1.s.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-ident slice
-         V6        0               ; initialize S
-         A4        S0              ; initialize *x
-         A5        S1              ; initialize *y
-         A3        S2              ; initialize i
-loop     S0        A3
-         JSZ       exit            ; if S0 == 0 goto exit
-         VL        A3              ; set vector length
-         V11       ,A4,1           ; load slice of x[i], stride 1
-         V12       ,A5,1           ; load slice of y[i], stride 1
-         V13       V11 *F V12      ; slice of x[i] * y[i]
-         V6        V6 +F V13       ; partial sum
-         A14       VL              ; get vector length of this iteration
-         A4        A4 + A14        ; *x = *x + VL
-         A5        A5 + A14        ; *y = *y + VL
-         A3        A3 - A14        ; i = i - VL
-         J        loop
- exit
diff --git a/content/2016/asm/mips64.s.txt b/content/2016/asm/mips64.s.txt
deleted file mode 100644
index 1c2ebea..0000000
--- a/content/2016/asm/mips64.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $-8-24
-    MOVV    a(FP), R1
-    MOVV    b+8(FP), R2
-    ADDVU   R2, R1
-    MOVV    R1, 16(FP)
-    RET
diff --git a/content/2016/asm/pdp10.s.txt b/content/2016/asm/pdp10.s.txt
deleted file mode 100644
index 3dec910..0000000
--- a/content/2016/asm/pdp10.s.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-TITLE   COUNT
- 
-A=1                             ;Define a name for an accumulator.
-
-START:  MOVSI A,-100            ;initialize loop counter.
-                                ;A contains -100,,0
-LOOP:   HRRZM A,TABLE(A)        ;Use right half of A to index.
-        AOBJN A,LOOP            ;Add 1 to both halves (-77,,1 -76,,2 etc.)
-                                ;Jump if still negative.
-        .VALUE                  ;Halt program.
-
-TABLE:  BLOCK 100               ;Assemble space to fill up.
-
-END START                       ;End the assembly.
diff --git a/content/2016/asm/pdp11.s.txt b/content/2016/asm/pdp11.s.txt
deleted file mode 100644
index 1992055..0000000
--- a/content/2016/asm/pdp11.s.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-/ a3 -- pdp-11 assembler pass 1
-
-assem:
-        jsr     pc,readop
-        jsr     pc,checkeos
-        br      ealoop
-        tst     ifflg
-        beq     3f
-        cmp     r4,$200
-        blos    assem
-        cmpb    (r4),$21   /if
-        bne     2f
-        inc     ifflg
-2:
-        cmpb    (r4),$22   /endif
-        bne     assem
-        dec     ifflg
-        br      assem
-
diff --git a/content/2016/asm/ppc64le.s.txt b/content/2016/asm/ppc64le.s.txt
deleted file mode 100644
index 2463e78..0000000
--- a/content/2016/asm/ppc64le.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $0-24
-    MOVD    a(FP), R2
-    MOVD    b+8(FP), R3
-    ADD     R3, R2
-    MOVD    R2, 16(FP)
-    RET
diff --git a/content/2016/asm/s390x.s.txt b/content/2016/asm/s390x.s.txt
deleted file mode 100644
index 8065154..0000000
--- a/content/2016/asm/s390x.s.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-TEXT add(SB), $0-24
-    MOVD    a(FP), R1
-    MOVD    b+8(FP), R2
-    ADD     R2, R1, R1
-    MOVD    R1, 16(FP)
-    RET
diff --git a/content/2016/prototype-your-design.pdf b/content/2016/prototype-your-design.pdf
deleted file mode 100644
index 469ce3e..0000000
--- a/content/2016/prototype-your-design.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2016/prototype-your-design.txt b/content/2016/prototype-your-design.txt
deleted file mode 100644
index 0fd6454..0000000
--- a/content/2016/prototype-your-design.txt
+++ /dev/null
@@ -1,137 +0,0 @@
-Copyright 2016 The Go Authors. All rights reserved.
-Use of this source code is governed by a BSD-style
-license that can be found in the LICENSE file.
-
-Full talk text for https://talks.golang.org/2016/prototype-your-design.pdf.
-
-Prototype your design!
-Robert Griesemer
-dotGo2016, Paris
-
-[2]
-Any professional software setting has some design process in place; and the goal is always the same: One wants to make sure a design is good before implementation starts. The reason is simple: The later mistakes are caught, the more costly they are.
-The approaches are usually quite similar, at least when looking at the broad strokes: There’s some form of a design document, the “specification” of the software to be built. There is feedback from experts and design reviewers; and there is also some form of iteration of the design.
-Often however the design process is a “dry” exercise: The design itself doesn’t involve much if any software being created.
-After all, we are professionals, not hackers anymore (well some of us), and we don’t write code without having thought about the design first. And the bigger the project, the more there is to design first. Or isn’t it?
-
-[3]
-But no matter the approach, a crucial question remains:
-How can we tell that our design is good?
-
-[4]
-Anywhere else, outside of software, designing and prototyping are closely intertwined. There’s virtually no design of anything, clothes, furniture, appliances, cars, even architecture, that is not prototyped before going into production.
-This graphic, taken from the Design School of Stanford University, illustrates the design process in five steps. After learning and defining a problem --- at Google we call this “focus on the user and all else will follow” --- designing is a repeated sequence of idea creation, prototyping, and testing. A designer does not think his way to good design, she builds her way to the design. In other words, designers are doers; we might even call them “hackers”.
-
-[5]
-So let’s shift gears for a bit and look at language design. Specifically, designing Go language support for numerical applications. As some of you may know, there is a concrete proposal, asking for multi-dimensional slice support in Go. The proposal is currently in the design phase.
-Concretely, multi-dimensional slices permit the declaration of say a 2d slice, for instance a matrix. Using make, the 2d slice can be dynamically sized at run-time, and there is indexed access to its elements. This is not currently possible in Go.
-While we do have arrays and slices, and while arrays do allow the definition of a 2d data structure that is laid out contiguously in memory, they are also statically fixed in size. Slices are dynamically sized but inherently one-dimensional.
-
-[6]
-The high level goals of the proposal are simple enough: Improved readability through nice notation such as multi-dimensional indexing, and ideally good performance due to a native implementation.
-But there are still many open questions. The current design doc answers them, but how do we know that they are the right answers?
-
-[7]
-However, we can make some observations: It turns out that we can implement many aspects of multi-dimensional slices in Go already. For instance, we can define slice descriptors for 2d, 3d, 4d slices or matrices - it’s just an abstract data type after all.
-Furthermore, we can define and implement operations on those data types, which is to say define methods on them.
-That is, it’s already possible to write numerical code and play with the design of our API. Which is what the gonum community has been doing for years.
-
-[8]
-Unfortunately, there is a key missing feature, and that is nice notation. For instance, there’s simply no way in existing Go to write 2d index expressions using index operators.
-The current work-around is based on accessor methods, such as At and AtSet, to get and set an element of a matrix, for instance.
-But accessors like these make numerical code look clunky, perhaps even unreadable.
-
-[9]
-So how can we get around this notation problem? There are a few solutions:
-1) We can say it’s not a problem - and some people will be ok with this.
-2) We can actually change the Go language for the experiment; but that is likely way too costly.
-3) Or, we could rewrite the source: Whenever we see say a[i, j], we change it into a method call a.At(i, j). Basically what the gonum folks are doing now, except they don’t start with the nice notation.
-Ideally we want to have a tool, a source-to-source rewriter that does this for us.
-
-[10]
-Given such a rewriter, which is going to be our prototype of a real implementation, we can explore the design space before making any hard decisions.
-
-[11]
-So let’s design our rewriter. Since we want to rewrite index expressions into methods, we are going to allow two special method names, made up of a sequence of index and assignment operators. I’m calling them indexed getters and indexed setters.
-I have also added the binary operator + to this list. We don’t need it for our proposal, but it’s easier to explain the rewriting process using + down the road, which why it’s here.
-We also going to allow more than one index in index expressions.
-This doesn’t make sense for the basic indexable data structures (arrays, slices, maps) we have in Go, of course. But it does make sense for our extended indexing operations.
-And finally, we need to give some new meaning to index expressions. The idea is simple: Whenever we see an index expression where the indexed expression, say x, has a respective getter or setter, then the index expression is interpreted as the respective method call.
-This last part is crucial, it’s the core of the rewriter. We’re going to look at it in more detail.
-
-[12]
-Now that we know what our rewriter is supposed to do, we need to come up with a suitable implementation.
-Remember the goal: Since existing Go doesn’t understand our extended language, we are going to rewrite our extended programs into programs that are understood by current Go.
-It turns out that is pretty straight-forward. First of all, we are going to rewrite our new operator method names into valid Go identifiers. We choose slightly unusual names to avoid any accidental naming conflicts. But the actual names are unimportant.
-Similarly, we are going to rewrite index expressions into method calls as shown.
-Luckily, the Go std library provides all the tools we need: We use the parser to read our source. The parser produces a syntax tree. It’s that tree that we are going to modify. After that we use the go/printer to generate the new source from our modified tree.
-Since we do want to accept new method names and more than one index, we have to modify the parser a bit. But it turns out that is rather trivial, perhaps 20 lines of code or so.
-
-[13]
-Let’s consider this simple example. It’s based on rewriting the + operator so we can concentrate on the essential. But everything we’re doing here applies to indexing operators just as well.
-On the left we see the code that we would like to write in our extended language. There’s a + method defined on Point. We can then use binary addition to add two points, with the effect that the + method is called.
-The right shows the rewritten source. This is now regular Go that will compile and run.
-
-[14]
-Because we need to understand the structure of the source to do the rewriting, and the syntax tree reflects that structure exactly, we rewrite the syntax tree, not the source. Again, for simplicity we’re looking at addition.
-The rewrite of the method name is trivial and not show here: it’s just changing a string.
-The rewrite of binary operations is a bit more tricky: We can’t just rewrite every binary + operation. We can only do it if the left operand’s type implements a + method. Or, after rewriting of the method names, if it implements an ADD__ method.
-
-[15]
-Luckily, the Go std library helps us out again. We can simply invoke go/type on our syntax tree to compute the types for all our operands.
-In a 2nd step we can then rewrite all binary additions where the left operand implements the ADD__ method.
-Again, the same approach works for also indexing operators.
-
-[16]
-Let’s see this in action: Here we have a syntax tree for x + y + z after parsing. We don’t have any types at this point.
-
-[17]
-Now we run the type checker. As expected, it determines the types for our operands x, y, and z. But we also have a couple of types missing.
-This is of course because the type checker didn’t know about + for x and y. After all, this is still a Go type checker. We could change it, but we really don’t want to touch it - it’s a complex beast.
-Instead we simply assume the errors are due to the fact that we haven’t rewritten x + y.
-
-[18]
-So let’s just do the rewrite where we can. In our example, we will end up with a method call instead of the first addition, and the modified syntax tree shown on the right.
-
-[19]
-Now we’re turning the crank again for a second round of type checking. At this point we have more success and only one type is missing.
-
-[20]
-Again, we assume the missing type is due to a missing rewrite, so let’s determine what there is to rewrite...
-
-[21]
-… and rewrite once more. This leaves us with a final tree with all additions replaced by method calls.
-
-[22]
-How do we know we’re done? Well, we type-check again. This time there’s no errors anymore, so we do have a valid Go program that will compile --- maybe not run, but compile. We are in fact done!
-
-[23]
-With a concrete prototype implementation at our disposal, we can actually use it to judge our design: We can play with it and see how it feels. And if we don’t like it we can modify it and thus refine our design.
-
-[24]
-For instance, using our rewriter, we can now define a Matrix type, effectively representing a 2d slice, together with nice indexing accessors.
-
-[25]
-Given this Matrix type, we can implement matrix multiplication. I’m showing the core of the multiplication here: On the left, we have the code that we wish to write, and which current Go doesn’t understand, and on the right we have the rewritten version which is valid Go code.
-
-[26]
-Finally, I want to briefly raise an important point which I haven’t talked about yet: During the implementation of a prototype, one will invariable encounter the unexpected. In other words, questions will come up that we didn’t even know we should be asking.
-Without a prototype, these same questions will come up much later, when it’s perhaps too late.
-
-[27]
-In our example, there was one surprise, at least to me: I found that indexing operators were so effective --- and in fact so cheap, syntactic sugar really! --- in addressing the specific notational problem, that one might indeed be wondering if that’s perhaps all that’s needed.
-But that’s food for thought for another time…
-
-[28]
-I like to conclude with a couple of observations:
-First of all, it turns out, not unexpectedly of course, that Go is a fantastic prototyping language. This is really why people say that Go brought back the fun to programming.
-Secondly, prototyping is really the way to get to a good design: Instead of thinking about it, we can build towards it.
-And finally: If we can prototype even language changes we can prototype anything.
-
-[29]
-Frederick Brooks said it best in his 1975 classic:
-Plan to throw one away --- the prototype --- ; you will (throw one away), anyhow.
-
-[30]
-Thank you.
-For all of you who would like to dig into my prototype a bit more: It’s all on GitHub, and it’s small. Perhaps 200 lines of code or so, scattered across a dozen commits that are fairly easy to digest. Have fun!
diff --git a/content/2016/refactor.article b/content/2016/refactor.article
deleted file mode 100644
index 8cc34ca..0000000
--- a/content/2016/refactor.article
+++ /dev/null
@@ -1,699 +0,0 @@
-Codebase Refactoring (with help from Go)
-
-Russ Cox
-rsc@golang.org
-
-* Abstract
-
-Go should add the ability to create alternate equivalent names for types,
-in order to enable gradual code repair during codebase refactoring.
-This article explains the need for that ability and the implications of not having it
-for today’s large Go codebases.
-This article also examines some potential solutions,
-including the alias feature proposed during the development of
-(but not included in) Go 1.8.
-However, this article is _not_ a proposal of any specific solution.
-Instead, it is intended as the start of a discussion by the Go community
-about what solution should be included in Go 1.9.
-
-This article is an extended version of a talk given at
-GothamGo in New York on November 18, 2016.
-
-* Introduction
-
-Go’s goal is to make it easy to build software that scales.
-There are two kinds of scale that we care about.
-One kind of scale is the size of the systems that you can build with Go,
-meaning how easy it is to use large numbers of computers,
-process large amounts of data, and so on.
-That’s an important focus for Go but not for this article.
-Instead, this article focuses on another kind of scale,
-the size of Go programs,
-meaning how easy it is to work in large codebases
-with large numbers of engineers
-making large numbers of changes independently.
-
-One such codebase is
-[[http://m.cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/pdf][Google’s single repository]]
-that nearly all engineers work in on a daily basis.
-As of January 2015,
-that repository was seeing 40,000 commits per day
-across 9 million source files
-and 2 billion lines of code.
-Of course, there is more in the repository than just Go code.
-
-Another large codebase is the set of all the open source Go code
-that people have made available on GitHub
-and other code hosting sites.
-You might think of this as `go` `get`’s codebase.
-In contrast to Google’s codebase,
-`go` `get`’s codebase is completely decentralized,
-so it’s more difficult to get exact numbers.
-In November 2016, there were 140,000 packages known to [[https://godoc.org/][godoc.org]],
-and over 160,000
-[[https://github.com/search?utf8=%E2%9C%93&q=language%3AGo&type=Repositories&ref=searchresults][GitHub repos written in Go]].
-
-Supporting software development at this scale was in our
-minds from the very beginning of Go.
-We paid a lot of attention to implementing imports efficiently.
-We made sure that it was difficult to import code but forget to use it, to avoid code bloat.
-We made sure that there weren’t unnecessary dependencies
-between packages, both to simplify programs and to make it
-easier to test and refactor them.
-For more detail about these considerations, see Rob Pike’s 2012 article
-“[[https://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]].”
-
-Over the past few years we’ve come to realize that there’s
-more that can and should be done to make it easier
-to refactor whole codebases,
-especially at the broad package structure level,
-to help Go scale to ever-larger programs.
-
-* Codebase refactoring
-
-Most programs start with one package.
-As you add code, occasionally you recognize
-a coherent section of code that could stand on its own,
-so you move that section into its own package.
-Codebase refactoring is the process of rethinking
-and revising decisions about both the grouping of code
-into packages and the relationships between those packages.
-There are a few reasons you might want to change the way
-a codebase is organized into packages.
-
-The first reason is to split a package into more manageable pieces for users.
-For example, most users of [[https://golang.org/pkg/regexp/][package regexp]] don’t need access to the
-regular expression parser, although [[https://godoc.org/github.com/google/codesearch/regexp][advanced uses may]],
-so the parser is exported in [[https://golang.org/pkg/regexp/syntax][a separate regexp/syntax package]].
-
-The second reason is to [[https://blog.golang.org/package-names][improve naming]]. 
-For example, early versions of Go had an `io.ByteBuffer`,
-but we decided `bytes.Buffer` was a better name and package bytes a better place for the code.
-
-The third reason is to lighten dependencies.
-For example, we moved `os.EOF` to `io.EOF` so that code not using the operating system
-can avoid importing the fairly heavyweight [[https://golang.org/pkg/os][package os]].
-
-The fourth reason is to change the dependency graph
-so that one package can import another.
-For example, as part of the preparation for Go 1, we looked at the explicit dependencies
-between packages and how they constrained the APIs.
-Then we changed the dependency graph to make the APIs better.
-
-Before Go 1, the `os.FileInfo` struct contained these fields:
-
-	type FileInfo struct {
-		Dev      uint64 // device number
-		Ino      uint64 // inode number
-		...
-		Atime_ns int64  // access time; ns since epoch
-		Mtime_ns int64  // modified time; ns since epoch
-		Ctime_ns int64  // change time; ns since epoch
-		Name     string // name of file
-	}
-
-Notice the times `Atime_ns`, `Mtime_ns`, `Ctime_ns` have type int64,
-an `_ns` suffix, and are commented as “nanoseconds since epoch.”
-These fields would clearly be nicer using [[https://golang.org/pkg/time/#Time][`time.Time`]],
-but mistakes in the design of the package structure of the codebase
-prevented that.
-To be able to use `time.Time` here, we refactored the codebase.
-
-This graph shows eight packages from the standard library
-before Go 1, with an arrow from P to Q indicating that P imports Q.
-
-.html refactor/import1.html
-
-Nearly every package has to consider errors,
-so nearly every package, including package time, imported package os for `os.Error`.
-To avoid cycles, anything that imports package os cannot itself be used by package os.
-As a result, operating system APIs could not use `time.Time`.
-
-This kind of problem convinced us that
-`os.Error` and its constructor `os.NewError` were so fundamental
-that they should be moved out of package os.
-In the end, we moved `os.Error` into the language as [[https://golang.org/ref/spec/#Errors][`error`]]
-and `os.NewError` into the new 
-[[https://golang.org/pkg/errors][package errors]]
-as `errors.New`.
-After this and other refactoring, the import graph in Go 1 looked like:
-
-.html refactor/import2.html
-
-Package io and package time had few enough dependencies
-to be used by package os, and
-the Go 1 definition of [[https://golang.org/pkg/os/#FileInfo][`os.FileInfo`]] does use `time.Time`.
-
-(As a side note, our first idea was to move `os.Error` and `os.NewError`
-to a new package named error (singular) as `error.Value` and `error.New`.
-Feedback from Roger Peppe and others in the Go community helped us
-see that making the error type predefined in the language would 
-allow its use even in low-level contexts like the specification of 
-[[https://golang.org/ref/spec#Run_time_panics][run-time panics]].
-Since the type was named `error`, the package became errors (plural)
-and the constructor `errors.New`.
-Andrew Gerrand’s 2015 talk
-“[[https://talks.golang.org/2015/how-go-was-made.slide#37][How Go was Made]]” has more detail.)
-
-* Gradual code repair
-
-The benefits of a codebase refactoring apply throughout the codebase.
-Unfortunately, so do the costs:
-often a large number of repairs must be made as a result of the refactoring.
-As codebases grow, it becomes infeasible to do all the repairs at one time.
-The repairs must be done gradually, 
-and the programming language must make that possible.
-
-As a simple example,
-when we moved `io.ByteBuffer` to `bytes.Buffer` in 2009, the [[https://go.googlesource.com/go/+/d3a412a5abf1ee8815b2e70a18ee092154af7672][initial commit]]
-moved two files, adjusted three makefiles, and repaired 43 other Go source files.
-The repairs outweighed the actual API change by a factor of twenty,
-and the entire codebase was only 250 files.
-As codebases grow, so does the repair multiplier.
-Similar changes in large Go codebases, 
-such as Docker, and Juju, and Kubernetes,
-can have repair multipliers ranging from 10X to 100X.
-Inside Google we’ve seen repair multipliers well over 1000X.
-
-The conventional wisdom is that when making a codebase-wide API change,
-the API change and the associated code repairs should be committed
-together in one big commit:
-
-.html refactor/atomic.html
-
-The argument in favor of this approach, 
-which we will call “atomic code repair,”
-is that it is conceptually simple:
-by updating the API and the code repairs in the same commit,
-the codebase transitions in one step from the old API to the new API,
-without ever breaking the codebase.
-The atomic step avoids the need to plan for a transition
-during which both old and new API must coexist.
-In large codebases, however, the conceptual simplicity
-is quickly outweighed by a practical complexity:
-the one big commit can be very big.
-Big commits are hard to prepare, hard to review,
-and are fundamentally racing against other work in the tree.
-It’s easy to start doing a conversion, prepare your one big commit,
-finally get it submitted, and only then find out that another developer added
-a use of the old API while you were working.
-There were no merge conflicts,
-so you missed that use, and despite all your effort
-the one big commit broke the codebase.
-As codebases get larger,
-atomic code repairs become more difficult
-and more likely to break the codebase inadvertently.
-
-In our experience,
-an approach that scales better is to plan for a transition period
-during which the code repair proceeds gradually,
-across as many commits as needed:
-
-.html refactor/gradual.html
-
-Typically this means the overall process runs in three stages.
-First, introduce the new API.
-The old and new API must be _interchangeable_,
-meaning that it must be possible to convert individual uses
-from the old to the new API without changing the overall
-behavior of the program,
-and uses of the old and new APIs must be able to coexist
-in a single program.
-Second, across as many commits as you need,
-convert all the uses of the old API to the new API.
-Third, remove the old API.
-
-“Gradual code repair” is usually more work
-than the atomic code repair,
-but the work itself is easier:
-you don’t have to get everything right in one try.
-Also, the individual commits are much smaller,
-making them easier to review and submit
-and, if needed, roll back.
-Maybe most important of all, a gradual code repair
-works in situations when one big commit would be impossible,
-for example when code that needs repairs
-is spread across multiple repositories.
-
-The `bytes.Buffer` change looks like an atomic code repair, but it wasn’t.
-Even though the commit updated 43 source files,
-the commit message says,
-“left io.ByteBuffer stub around for now, for protocol compiler.”
-That stub was in a new file named `io/xxx.go` that read:
-
-	// This file defines the type io.ByteBuffer
-	// so that the protocol compiler's output
-	// still works. Once the protocol compiler
-	// gets fixed, this goes away.
-	
-	package io
-	
-	import "bytes"
-	
-	type ByteBuffer struct {
-		bytes.Buffer;
-	}
-
-Back then, just like today,
-Go was developed in a separate source repository
-from the rest of Google’s source code.
-The protocol compiler in Google’s main repository was
-responsible for generating Go source files from protocol buffer definitions;
-the generated code used `io.ByteBuffer`.
-This stub was enough to keep the generated code working
-until the protocol compiler could be updated.
-Then [[https://go.googlesource.com/go/+/832e72beff62e4fe4897699e9b40a2b228e8503b][a later commit]] removed `xxx.go`.
-
-Even though there were many fixes included in the original commit,
-this change was still a gradual code repair, not an atomic one,
-because the old API was only removed in a separate stage
-after the existing code was converted.
-
-In this specific case the gradual repair did succeed, but
-the old and new API were not completely interchangeable:
-if there had been a function taking an `*io.ByteBuffer` argument
-and code calling that function with an `*io.ByteBuffer`,
-those two pieces of code could not have been updated independently:
-code that passed an `*io.ByteBuffer` to a function expecting a `*bytes.Buffer`,
-or vice versa, would not compile.
-
-Again, a gradual code repair consists of three stages:
-
-.html refactor/template.html
-
-These stages apply to a gradual code repair for any API change.
-In the specific case of codebase refactoring—moving
-an API from one package to another, changing its full name in the process—making the old and new API
-interchangeable means making the old and new names interchangeable,
-so that code using the old name has exactly the same behavior
-as if it used the new name.
-
-Let’s look at examples of how Go makes that possible (or not).
-
-** Constants
-
-Let’s start with a simple example of moving a constant.
-
-Package io defines the [[https://golang.org/pkg/io/#Seeker][Seeker interface]],
-but the named constants that developers prefer to use
-when invoking the `Seek` method came from package os.
-Go 1.7 moved the constants to package io and gave them more idiomatic names;
-for example, `os.SEEK_SET` is now available as `io.SeekStart`.
-
-For a constant, one name is interchangeable with another
-when the definitions use the same type and value:
-
-	package io
-	const SeekStart int = 0
-	
-	package os
-	const SEEK_SET int = 0
-
-Due to [[https://golang.org/doc/go1compat][Go 1 compatibility]],
-we’re blocked in stage 2 of this gradual code change.
-We can’t delete the old constants,
-but making the new ones available in package io allows
-developers to avoid importing package os in code that
-does not actually depend on operating system functionality.
-
-This is also an example of a gradual code repair being done
-across many repositories.
-Go 1.7 introduced the new API,
-and now it’s up to everyone with Go code to update their code
-as they see fit.
-There’s no rush, no forced breakage of existing code.
-
-** Functions
-
-Now let’s look at moving a function from one package to another.
-
-As mentioned above,
-in 2011 we replaced `os.Error` with the predefined type `error`
-and moved the constructor `os.NewError` to a new package as
-[[https://golang.org/pkg/errors/#New][`errors.New`]].
-
-For a function, one name is interchangeable with another
-when the definitions use the same signature and implementation.
-In this case, we can define the old function as a wrapper calling
-the new function:
-
-	package errors
-	func New(msg string) error { ... }
-	
-	package os
-	func NewError(msg string) os.Error {
-	    return errors.New(msg)
-	}
-
-Since Go does not allow comparing functions for equality,
-there is no way to tell these two functions apart.
-The old and new API are interchangeable,
-so we can proceed to stages 2 and 3.
-
-(We are ignoring a small detail here: the original 
-`os.NewError` returned an `os.Error`, not an `error`,
-and two functions with different signatures _are_ distinguishable.
-To really make these functions indistinguishable,
-we would also need to make `os.Error` and `error` indistinguishable.
-We will return to that detail in the discussion of types below.)
-
-** Variables
-
-Now let’s look at moving a variable from one package to another.
-
-We are discussing exported package-level API, so the variable
-in question must be an exported global variable.
-Such variables are almost always set at init time
-and then only intended to be read from, never written again,
-to avoid races between reading and writing goroutines.
-For exported global variables that follow this pattern,
-one name is nearly interchangeable with another when the two have
-the same type and value.
-The simplest way to arrange that is to initialize one from the other:
-
-	package io
-	var EOF = ...
-	
-	package os
-	var EOF = io.EOF
-
-In this example, io.EOF and os.EOF are the same value. 
-The variable values are completely interchangeable.
-
-There is one small problem.
-Although the variable values are interchangeable,
-the variable addresses are not.
-In this example, `&io.EOF` and `&os.EOF` are different pointers.
-However, it is rare to export a read-only variable
-from a package and expect clients to take its address:
-it would be better for clients if the package exported a variable set to the address instead,
-and then the pattern works.
-
-** Types
-
-Finally let’s look at moving a type from one package to another.
-This is much harder to do in Go today, as the following three examples demonstrate.
-
-*** Go’s os.Error
-
-Consider once more the conversion from `os.Error` to `error`.
-There’s no way in Go to make two names of types interchangeable.
-The closest we can come in Go is to give `os.Error` and `error` the same underlying definition:
-
-	package os
-	type Error error 
-
-Even with this definition, and even though these are interface types,
-Go still considers these two types [[https://golang.org/ref/spec#Type_identity][different]],
-so that a function returning an os.Error
-is not the same as a function returning an error.
-Consider the [[https://golang.org/pkg/io/#Reader][`io.Reader`]] interface:
-	
-	package io
-	type Reader interface {
-	    Read(b []byte) (n int, err error)
-	}
-
-If `io.Reader` is defined using `error`, as above, then a `Read` method 
-returning `os.Error` will not satisfy the interface.
-
-If there’s no way to make two names for a type interchangeable,
-that raises two questions.
-First, how do we enable a gradual code repair for a moved or renamed type?
-Second, what did we do for `os.Error` in 2011?
-
-To answer the second question, we can look at the source control history.
-It turns out that to aid the conversion, we
-[[https://go.googlesource.com/go/+/47f4bf763dcb120d3b005974fec848eefe0858f0][added a temporary hack to the compiler]]
-to make code written using `os.Error` be interpreted as if it had written `error` instead.
-
-*** Kubernetes
-
-This problem with moving types is not limited to fundamental changes like `os.Error`,
-nor is it limited to the Go repository.
-Here’s a change from the [[https://kubernetes.io/][Kubernetes project]].
-Kubernetes has a package util, and at some point the developers
-decided to split out that package’s `IntOrString` type into its own 
-[[https://godoc.org/k8s.io/kubernetes/pkg/util/intstr][package intstr]].
-
-Applying the pattern for a gradual code repair,
-the first stage is to establish a way for the two types to be interchangeable.
-We can’t do that,
-because the `IntOrString` type is used in struct fields,
-and code can’t assign to that field unless the value being
-assigned has the correct type:
-
-	package util
-	type IntOrString intstr.IntOrString
-
-	// Not good enough for:
-	
-	// IngressBackend describes ...
-	type IngressBackend struct {
-	    ServiceName string             `json:"serviceName"`
-	    ServicePort intstr.IntOrString `json:"servicePort"`
-	}
-
-If this use were the only problem, then you could imagine
-writing a getter and setter using the old type
-and doing a gradual code repair to change all existing code
-to use the getter and setter,
-then modifying the field to use the new type
-and doing a gradual code repair to change all existing code
-to access the field directly using the new type,
-then finally deleting the getter and setter that mention the old type.
-That required two gradual code repairs instead of one,
-and there are many uses of the type other than this one struct field.
-
-In practice, the only option here is an atomic code repair,
-or else breaking all code using `IntOrString`.
-
-*** Docker
-
-As another example,
-here’s a change from the [[https://www.docker.com/][Docker project]].
-Docker has a package utils, and at some point the developers
-decided to split out that package’s `JSONError` type into a separate
-[[https://godoc.org/github.com/docker/docker/pkg/jsonmessage#JSONError][jsonmessage package]].
-
-Again we have the problem that the old and new types are not interchangeable,
-but it shows up in a different way, namely [[https://golang.org/ref/spec#Type_assertions][type assertions]]:
-
-	package utils
-	type JSONError jsonmessage.JSONError
-
-	// Not good enough for:
-	
-	jsonError, ok := err.(*jsonmessage.JSONError)
-	if !ok {
-		jsonError = &jsonmessage.JSONError{
-			Message: err.Error(),
-		}
-	}
-
-If the error `err` not already a `JSONError`, this code wraps it in one,
-but during a gradual repair, this code handles `utils.JSONError` and `jsonmessage.JSONError` differently.
-The two types are not interchangeable.
-(A [[https://golang.org/ref/spec#Type_switches][type switch]] would expose the same problem.)
-
-If this line were the only problem, then you could imagine
-adding a type assertion for `*utils.JSONError`,
-then doing a gradual code repair to remove other uses of `utils.JSONError`,
-and finally removing the additional type guard just before removing the old type.
-But this line is not the only problem.
-The type is also used elsewhere in the API and has all the 
-problems of the Kubernetes example.
-
-In practice, again the only option here is an atomic code repair
-or else breaking all code using `JSONError`.
-
-* Solutions?
-
-We’ve now seen examples of how we can and cannot move
-constants, functions, variables, and types from one package to another.
-The patterns for establishing interchangeable old and new API are:
-
-	const OldAPI = NewPackage.API
-
-	func OldAPI() { NewPackage.API() }
-
-	var OldAPI = NewPackage.API
-	
-	type OldAPI ... ??? modify compiler or ... ???
-
-For constants and functions, the setup for a gradual code repair is trivial.
-For variables, the trivial setup is incomplete but only in ways that are not likely to arise often in practice.
-
-For types, there is no way to set up a gradual code repair in essentially any real example.
-The most common option is to force an atomic code repair,
-or else to break all code using the moved type and leave clients
-to fix their code at the next update.
-In the case of moving os.Error, we resorted to modifying the compiler.
-None of these options is reasonable.
-Developers should be able to do refactorings
-that involve moving a type from one package to another
-without needing an atomic code repair,
-without resorting to intermediate code and multiple rounds of repair,
-without forcing all client packages to update their own code immediately,
-and without even thinking about modifying the compiler.
-
-But how? What should these refactorings look like tomorrow?
-
-We don’t know.
-The goal of this article is to define the problem well enough
-to discuss the possible answers.
-
-** Aliases
-
-As explained above, the fundamental problem with moving types is that
-while Go provides ways to create an alternate name
-for a constant or a function or (most of the time) a variable,
-there is no way to create an alternate name for a type.
-
-For Go 1.8 we experimented with introducing first-class support
-for these alternate names, called [[https://golang.org/design/16339-alias-decls][_aliases_]].
-A new declaration syntax, the alias form, would have provided a uniform way
-to create an alternate name for any kind of identifier:
-
-	const OldAPI => NewPackage.API
-	func  OldAPI => NewPackage.API
-	var   OldAPI => NewPackage.API
-	type  OldAPI => NewPackage.API
-
-Instead of four different mechanisms, the refactoring of package os we considered above
-would have used a single mechanism:
-
-	package os
-	const SEEK_SET => io.SeekStart
-	func  NewError => errors.New
-	var   EOF      => io.EOF
-	type  Error    => error
-
-During the Go 1.8 release freeze, we found two small but important unresolved technical details
-in the alias support (issues [[https://golang.org/issue/17746][17746]] and [[https://golang.org/issue/17784][17784]]),
-and we decided that it was not possible to resolve them confidently
-in the time remaining before the Go 1.8 release,
-so we held aliases back from Go 1.8.
-
-** Versioning
-
-An obvious question is whether to rely on versioning and
-dependency management for code repair,
-instead of focusing on strategies that enable gradual code repair.
-
-Versioning and gradual code repair strategies are complementary.
-A versioning system’s job is to identify a compatible set of
-versions of all the packages needed in a program, or else to
-explain why no such set can be constructed.
-Gradual code repair creates additional compatible combinations,
-making it more likely that a versioning system can find a way
-to build a particular program.
-
-Consider again the various updates to Go’s standard library
-that we discussed above.
-Suppose that the old API
-corresponded in a versioning system
-to standard library version 5.1.3.
-In the usual atomic code repair approach,
-the new API would be introduced and the old API removed at the same time,
-resulting in version 6.0.0;
-following [[http://semver.org/][semantic versioning]],
-the major version number is incremented to indicate the incompatibility
-caused by removing the old API.
-
-Now suppose that your larger program depends on two packages, Foo and Bar.
-Foo still uses the old standard library API.
-Bar has been updated to use the new standard library API,
-and there have been important changes since then that your
-program needs: you can’t use an older version of Bar from
-before the standard library changes.
-
-.html refactor/version1.html
-
-There is no compatible set of libraries to build your program:
-you want the latest version of Bar, which requires 
-standard library 6.0.0,
-but you also need Foo, which is incompatible with standard library 6.0.0.
-The best a versioning system can do in this case is report the failure clearly.
-(If you are sufficiently motivated, you might then resort to updating your own copy of Foo.)
-
-In contrast, with better support for gradual code repair,
-we can add the new, interchangeable API in version 5.2.0,
-and then remove the old API in version 6.0.0.
-
-.html refactor/version2.html
-
-The intermediate version 5.2.0 is backwards compatible with 5.1.3,
-indicated by the shared major version number 5.
-However, because the change from 5.2.0 to 6.0.0 only removed API,
-5.2.0 is also, perhaps surprisingly, backwards compatible with 6.0.0.
-Assuming that Bar declares its requirements precisely—it is
-compatible with both 5.2.0 and 6.0.0—a version system can see that
-both Foo and Bar are compatible with 5.2.0 and use that version
-of the standard library to build the program.
-
-Good support for and adoption of gradual code repair reduces incompatibility,
-giving versioning systems a better chance to find a way to build your program.
-
-** Type aliases
-
-To enable gradual code repair during codebase refactorings,
-it must be possible to create alternate names for a 
-constant, function, variable, or type.
-Go already allows introducing alternate names for 
-all constants, all functions, and nearly all variables, but no types.
-Put another way,
-the general alias form is never necessary for constants,
-never necessary for functions,
-only rarely necessary for variables,
-but always necessary for types.
-
-The relative importance to the specific declarations
-suggests that perhaps the Go 1.8 aliases were an overgeneralization,
-and that we should instead focus on a solution limited to types.
-The obvious solution is type-only aliases,
-for which no new operator is required.
-Following 
-[[http://www.freepascal.org/docs-html/ref/refse19.html][Pascal]]
-(or, if you prefer, [[https://doc.rust-lang.org/book/type-aliases.html][Rust]]),
-a Go program could introduce a type alias using the assignment operator:
-
-	type OldAPI = NewPackage.API
-
-The idea of limiting aliases to types was
-[[https://golang.org/issue/16339#issuecomment-233644777][raised during the Go 1.8 alias discussion]],
-but it seemed worth trying the more general approach, which we did, unsuccessfully.
-In retrospect, the fact that `=` and `=>` have identical meanings for constants
-while they have nearly identical but subtly different meanings for variables
-suggests that the general approach is not worth its complications.
-
-In fact, the idea of adding Pascal-style type aliases
-was [[https://golang.org/issue/16339#issuecomment-233759255][considered in the early design of Go]],
-but until now we didn’t have a strong use case for them.
-
-Type aliases seem like a promising approach to explore,
-but, at least to me, generalized aliases seemed equally promising
-before the discussion and experimentation during the Go 1.8 cycle.
-Rather than prejudge the outcome, the goal of this article is to
-explain the problem in detail and examine a few possible solutions,
-to enable a productive discussion and evaluation of ideas for next time.
-
-* Challenge
-
-Go aims to be ideal for large codebases.
-
-In large codebases, it’s important to be able to refactor codebase structure,
-which means moving APIs between packages and updating client code.
-
-In such large refactorings, it’s important to be able to use a gradual transition from the old API to the new API.
-
-Go does not support the specific case of gradual code repair when moving types between packages at all. It should.
-
-I hope we the Go community can fix this together in Go 1.9. Maybe type aliases are a good starting point. Maybe not. Time will tell.
-
-* Acknowledgements
-
-Thanks to the many people who helped us [[https://golang.org/issue/16339][think through the design questions]]
-that got us this far and led to the alias trial during Go 1.8 development.
-I look forward to the Go community helping us again when we revisit this problem for Go 1.9.
-If you’d like to contribute, please see [[https://golang.org/issue/18130][issue 18130]].
diff --git a/content/2016/refactor/atomic.graffle b/content/2016/refactor/atomic.graffle
deleted file mode 100644
index a4d9fa4..0000000
--- a/content/2016/refactor/atomic.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/atomic.html b/content/2016/refactor/atomic.html
deleted file mode 100644
index 7d15ce3..0000000
--- a/content/2016/refactor/atomic.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/atomic.svg" alt="Atomic Code Repair"></img></center></div>
diff --git a/content/2016/refactor/atomic.svg b/content/2016/refactor/atomic.svg
deleted file mode 100644
index 244fe37..0000000
--- a/content/2016/refactor/atomic.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-1 -1 124 82" width="124pt" height="82pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:28:54 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <text transform="translate(17.125 4.411133)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.143555" y="11" textLength="50.033203">Add new </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="58.51465" y="11" textLength="19.341797">API</tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.149414" y="39.39258" textLength="68.70117">Code repairs</tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x=".47753906" y="67.78516" textLength="67.365234">Remove old </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="67.180664" y="67.78516" textLength="19.341797">API</tspan>
-      </text>
-      <path d="M 18.1875 7105427e-21 L 103.0625 7105427e-21 C 113.102 7105427e-21 121.25 17.92 121.25 40 C 121.25 62.08 113.102 80 103.0625 80 L 18.1875 80 C 8.148 80 0 62.08 0 40 C 0 17.92 8.148 7105427e-21 18.1875 7105427e-21" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/refactor/gradual.graffle b/content/2016/refactor/gradual.graffle
deleted file mode 100644
index 65b6e84..0000000
--- a/content/2016/refactor/gradual.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/gradual.html b/content/2016/refactor/gradual.html
deleted file mode 100644
index 24c5612..0000000
--- a/content/2016/refactor/gradual.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/gradual.svg" alt="Gradual Code Repair"></img></center></div>
diff --git a/content/2016/refactor/gradual.svg b/content/2016/refactor/gradual.svg
deleted file mode 100644
index d0caccb..0000000
--- a/content/2016/refactor/gradual.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-2 -1 305 178" width="305pt" height="178pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:27:43 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <font-face font-family="Arial" font-size="10" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <path d="M 107.86806 0 L 192.9375 0 C 203 0 211.16667 5.0524444 211.16667 11.277778 C 211.16667 17.503111 203 22.555556 192.9375 22.555556 L 107.86806 22.555556 C 97.80556 22.555556 89.63889 17.503111 89.63889 11.277778 C 89.63889 5.0524444 97.80556 0 107.86806 0" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 4.0814887)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="9.254666" y="11" textLength="50.033203">Add new </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="58.62576" y="11" textLength="19.341797">API</tspan>
-      </text>
-      <path d="M 107.86806 38.11111 L 192.9375 38.11111 C 203 38.11111 211.16667 43.163556 211.16667 49.38889 C 211.16667 55.61422 203 60.66667 192.9375 60.66667 L 107.86806 60.66667 C 97.80556 60.66667 89.63889 55.61422 89.63889 49.38889 C 89.63889 43.163556 97.80556 38.11111 107.86806 38.11111" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 42.1926)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 184.09028 76.22222 L 269.15972 76.22222 C 279.22222 76.22222 287.3889 81.27467 287.3889 87.5 C 287.3889 93.72533 279.22222 98.77778 269.15972 98.77778 L 184.09028 98.77778 C 174.02778 98.77778 165.86111 93.72533 165.86111 87.5 C 165.86111 81.27467 174.02778 76.22222 184.09028 76.22222" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(183.01389 80.30371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 30.868056 76.22222 L 115.9375 76.22222 C 126 76.22222 134.16667 81.27467 134.16667 87.5 C 134.16667 93.72533 126 98.77778 115.9375 98.77778 L 30.868056 98.77778 C 20.805556 98.77778 12.638889 93.72533 12.638889 87.5 C 12.638889 81.27467 20.805556 76.22222 30.868056 76.22222" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(29.791667 80.30371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 107.86806 114.33333 L 192.9375 114.33333 C 203 114.33333 211.16667 119.38578 211.16667 125.61111 C 211.16667 131.83644 203 136.88889 192.9375 136.88889 L 107.86806 136.88889 C 97.80556 136.88889 89.63889 131.83644 89.63889 125.61111 C 89.63889 119.38578 97.80556 114.33333 107.86806 114.33333" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 118.41482)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 102.67639 152.66667 L 198.12917 152.66667 C 209.41987 152.66667 218.58333 157.71911 218.58333 163.94444 C 218.58333 170.16978 209.41987 175.22222 198.12917 175.22222 L 102.67639 175.22222 C 91.38569 175.22222 82.22222 170.16978 82.22222 163.94444 C 82.22222 157.71911 91.38569 152.66667 102.67639 152.66667" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(100.85833 156.74816)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="6.5219835" y="11" textLength="67.365234">Remove old </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="73.22511" y="11" textLength="19.341797">API</tspan>
-      </text>
-      <line x1="36948222e-20" y1="29.555556" x2="300.41667" y2="29.555556" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="36948222e-20" y1="144.27778" x2="300.41667" y2="144.27778" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 2.8919813)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 1</tspan>
-      </text>
-      <text transform="translate(5 40.225315)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 2</tspan>
-      </text>
-      <text transform="translate(5 155.33643)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 3</tspan>
-      </text>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/refactor/import1.graffle b/content/2016/refactor/import1.graffle
deleted file mode 100644
index 020014a..0000000
--- a/content/2016/refactor/import1.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/import1.html b/content/2016/refactor/import1.html
deleted file mode 100644
index 72177fd..0000000
--- a/content/2016/refactor/import1.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/import1.svg" alt="Import graph before Go 1"></img></center></div>
diff --git a/content/2016/refactor/import1.svg b/content/2016/refactor/import1.svg
deleted file mode 100644
index 5019904..0000000
--- a/content/2016/refactor/import1.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 -1 150 284" width="150pt" height="284pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 04:39:54 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="black">
-      <g>
-        <path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <rect x="30.776487" y="0" width="76" height="23.5" fill="#0432ff" fill-opacity=".29794784"/>
-      <rect x="30.776487" y="0" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 4.553711)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="21.66504" y="11" textLength="22.669922">time</tspan>
-      </text>
-      <rect x="30.776487" y="37" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 41.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="14.323242" y="11" textLength="37.353516">io/ioutil</tspan>
-      </text>
-      <rect x="30.776487" y="74" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 78.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="13.661133" y="11" textLength="38.677734">strconv</tspan>
-      </text>
-      <rect x="30.776487" y="111" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 115.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="18.65918" y="11" textLength="28.68164">bytes</tspan>
-      </text>
-      <rect x="30.776487" y="148" width="76" height="23.5" fill="#ff2600" fill-opacity=".30133143"/>
-      <rect x="30.776487" y="148" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 152.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="28.330078" y="11" textLength="9.339844">io</tspan>
-      </text>
-      <rect x="30.776487" y="185" width="76" height="23.5" fill="#fffc00" fill-opacity=".30303697"/>
-      <rect x="30.776487" y="185" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 189.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="26.663086" y="11" textLength="12.673828">os</tspan>
-      </text>
-      <rect x="30.776487" y="222" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 226.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="14.99707" y="11" textLength="36.00586">syscall</tspan>
-      </text>
-      <rect x="30.776487" y="259" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(35.776487 263.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="19.655273" y="11" textLength="26.689453">utf16</tspan>
-      </text>
-      <line x1="68.77649" y1="23.5" x2="68.77649" y2="31.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="60.5" x2="68.77649" y2="68.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="97.5" x2="68.77649" y2="105.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="134.5" x2="68.77649" y2="142.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="171.5" x2="68.77649" y2="179.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="208.5" x2="68.77649" y2="216.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="68.77649" y1="245.5" x2="68.77649" y2="253.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 93.17678 23.500002 C 105.04188 30.545757 116.77649 40.134275 116.77649 50.5 C 116.77649 58.39145 109.97533 65.336525 101.49318 70.92955" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 103.57523 23.5 C 111.59158 28.577334 118.62773 35.76719 121.54406 45.89844 C 128.6898 70.72245 118.68265 88.35867 106.49728 106.14751" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 106.77649 20.676139 C 117.07421 26.626272 127.1848 36.423313 133.77649 52.5 C 152.33296 97.75797 152.69131 130.63325 134.27649 171.5 C 128.80609 183.64007 120.80561 190.79561 112.26099 194.85676" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 46.69024 60.5 C 32.14596 69.32664 15.776487 81.84894 15.776487 93.5 C 15.776487 99.29801 19.83028 104.12623 25.695615 108.07761" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 44.78756 60.5 C 27.89426 70.32656 8.276487 85.59294 8.276487 103.5 C 8.276487 119.9993 24.931005 134.66971 40.763704 144.88843" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 40.13828 60.499996 C 24.193 69.34241 6.925629 83.65174 3.7764867 105 C -1.1995027 138.73258 18.695969 159.73378 36.18698 180.46417" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 106.77649 94.66501 C 113.31042 98.37008 119.27522 103.60549 123.27649 111 C 137.72504 137.7015 135.21661 155.7066 119.77649 180 C 117.47504 183.62108 114.72658 186.53483 111.71549 188.87164" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 95.43459 134.5 C 107.53044 141.217 119.17688 150.30111 119.17688 160.3789 C 119.17688 168.6678 111.29816 176.08786 101.77084 182.03036" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 96.65663 208.5 C 109.00063 215.10652 120.77649 224.02344 120.77649 234 C 120.77649 242.434 112.36065 250.02977 102.3003 256.09678" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/refactor/import2.graffle b/content/2016/refactor/import2.graffle
deleted file mode 100644
index 16fe79e..0000000
--- a/content/2016/refactor/import2.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/import2.html b/content/2016/refactor/import2.html
deleted file mode 100644
index c88de12..0000000
--- a/content/2016/refactor/import2.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/import2.svg" alt="Import graph for Go 1"></img></center></div>
diff --git a/content/2016/refactor/import2.svg b/content/2016/refactor/import2.svg
deleted file mode 100644
index 9e569fd..0000000
--- a/content/2016/refactor/import2.svg
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-1 -1 250 247" width="250pt" height="247pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 04:34:01 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="black">
-      <g>
-        <path d="M 4 0 L 0 -1.5 L 0 1.5 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <rect x="122.97266" y="148" width="76" height="23.5" fill="#0432ff" fill-opacity=".295307"/>
-      <rect x="122.97266" y="148" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.97266 152.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="21.66504" y="11" textLength="22.669922">time</tspan>
-      </text>
-      <rect x="122.21255" y="0" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.21255 4.553711)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="14.323242" y="11" textLength="37.353516">io/ioutil</tspan>
-      </text>
-      <rect x="122.21255" y="74" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.21255 78.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="13.661133" y="11" textLength="38.677734">strconv</tspan>
-      </text>
-      <rect x="122.21255" y="37" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.21255 41.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="18.65918" y="11" textLength="28.68164">bytes</tspan>
-      </text>
-      <rect x="0" y="185" width="76" height="23.5" fill="#ffc0c0"/>
-      <rect x="0" y="185" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 189.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="28.330078" y="11" textLength="9.339844">io</tspan>
-      </text>
-      <rect x="122.97266" y="111" width="76" height="23.5" fill="#ffffc0"/>
-      <rect x="122.97266" y="111" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.97266 115.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="26.663086" y="11" textLength="12.673828">os</tspan>
-      </text>
-      <rect x="122.97266" y="185" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.97266 189.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="14.99707" y="11" textLength="36.00586">syscall</tspan>
-      </text>
-      <rect x="122.97266" y="222" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(127.97266 226.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="19.655273" y="11" textLength="26.689453">utf16</tspan>
-      </text>
-      <rect x="0" y="222" width="76" height="23.5" stroke="#666" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 226.5537)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="17.332031" y="11" textLength="31.335938">errors</tspan>
-      </text>
-      <line x1="160.21255" y1="23.5" x2="160.21255" y2="31.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 188.37477 23.500003 C 200.08476 29.83677 211 38.35015 211 48.06921 C 211 56.7416 202.30916 64.687 192.11774 71.02284" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 197.74767 23.500009 C 218.19313 31.76049 239.38865 44.239423 239.5 60.5 C 239.6234 78.51898 213.82277 96.32661 191.76642 108.24899" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 198.21255 17.560787 C 216.79686 22.535277 236.5144 31.720686 242.85742 48.63171 C 255.90117 83.4074 229.45227 103.01963 206.2539 134.5 C 203.58735 138.11854 200.93553 141.23882 198.3303 143.92759" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="160.21255" y1="60.5" x2="160.21255" y2="68.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 122.21254 50.13559 C 113.00153 54.213294 102.8189 61.503755 92.5 74 C 67.89765 103.79357 50.741114 153.22393 42.870807 179.34142" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 122.21254 91.98431 C 118.5502 95.44879 114.92645 100.0403 111.5 106.06921 C 90.75852 142.56434 107.82292 178.3966 87 214.5692 C 84.77209 218.43943 82.45999 221.70105 80.10723 224.44" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="38" y1="208.5" x2="38" y2="216.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="160.97266" y1="134.5" x2="160.97266" y2="142.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="160.97266" y1="171.5" x2="160.97266" y2="179.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="160.97266" y1="208.5" x2="160.97266" y2="216.1" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 191.02245 134.5 C 204.52862 141.17393 217.48633 150.19272 217.48633 160.23132 C 217.48633 168.6864 208.29419 176.26144 197.32434 182.29105" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 195.85316 134.50001 C 214.84078 142.7605 234.5 155.23942 234.5 171.5 C 234.5 189.44295 210.56231 207.17633 190.00368 219.09776" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 122.97265 158.83137 C 119.283 160.33365 115.72009 162.50762 112.5 165.56921 C 93.95127 183.20495 116.60622 202.68404 95.5 222 C 91.32614 225.81983 86.55442 228.58839 81.58454 230.57208" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="141.4466" y1="134.5" x2="62.58134" y2="181.95794" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 124.9436 60.5 C 118.85351 66.18221 112.66408 74.35976 107 86.06921 C 84.52826 132.52539 100.44062 170.89066 80.89258 212.72937 C 80.21104 214.18806 79.52489 215.5706 78.83527 216.8805" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/refactor/template.html b/content/2016/refactor/template.html
deleted file mode 100644
index f7d3708..0000000
--- a/content/2016/refactor/template.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<ol>
-<li>Add new API, <i>interchangeable</i> with old API.
-<li>Convert uses of old API to new API.
-<li>Remove old API.
-</ol>
diff --git a/content/2016/refactor/version1.graffle b/content/2016/refactor/version1.graffle
deleted file mode 100644
index d76d813..0000000
--- a/content/2016/refactor/version1.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/version1.html b/content/2016/refactor/version1.html
deleted file mode 100644
index bd290ec..0000000
--- a/content/2016/refactor/version1.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/version1.svg" alt="Standard Library Incompatibility"></img></center></div>
diff --git a/content/2016/refactor/version1.svg b/content/2016/refactor/version1.svg
deleted file mode 100644
index 2e5d5d1..0000000
--- a/content/2016/refactor/version1.svg
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-1 -1 296 187" width="296pt" height="187pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:51:49 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#0432ff">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff2600">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff2600">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.68359" underline-thickness="49.316406" slope="0" x-height="522.9492" cap-height="717.28516" ascent="770.0195" descent="-229.98047" font-weight="500">
-      <font-face-src>
-        <font-face-name name="Helvetica"/>
-      </font-face-src>
-    </font-face>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <rect x="78" y="0" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(83 4.553711)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="19.995117" y="11" textLength="26.009766">Main</tspan>
-      </text>
-      <rect x="0" y="48" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 52.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="22.661133" y="11" textLength="20.677734">Foo</tspan>
-      </text>
-      <rect x="156" y="46" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(161 50.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="23.663086" y="11" textLength="18.673828">Bar</tspan>
-      </text>
-      <line x1="135.92391" y1="23.5" x2="165.54856" y2="40.97095" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="96.90625" y1="23.5" x2="65.52517" y2="42.811435" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <rect x="48" y="117" width="136" height="68" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(53 166.10742)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="21.64746" y="11" textLength="82.70508">standard library</tspan>
-      </text>
-      <rect x="58.5" y="133.5" width="47.5" height="23.5" stroke="#a5a5a5" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(63.5 138.05371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="5.4052734" y="11" textLength="26.689453">5.1.3</tspan>
-      </text>
-      <rect x="126" y="133.5" width="47.5" height="23.5" stroke="#a5a5a5" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(131 138.05371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="5.4052734" y="11" textLength="26.689453">6.0.0</tspan>
-      </text>
-      <line x1="44.08114" y1="71.5" x2="71.618475" y2="124.70773" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="188.05786" y1="69.5" x2="160.1599" y2="124.66546" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="53.357456" y1="71.5" x2="126.5299" y2="127.48429" marker-end="url(#FilledArrow_Marker_3)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="1,3"/>
-      <line x1="178.99357" y1="69.5" x2="105.05126" y2="127.39667" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="1,3"/>
-      <line x1="199.5" y1="130" x2="275.95" y2="130" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width=".75" stroke-dasharray="1,3"/>
-      <text transform="translate(204.5 120)" fill="#ff2600">
-        <tspan font-family="Helvetica" font-size="8" font-weight="500" fill="#ff2600" x="14.542969" y="8" textLength="44.91406">incompatible</tspan>
-      </text>
-      <line x1="199.5" y1="150" x2="275.95" y2="150" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".75"/>
-      <text transform="translate(204.5 140)" fill="#0432ff">
-        <tspan font-family="Helvetica" font-size="8" font-weight="500" fill="#0432ff" x="17.65625" y="8" textLength="38.6875">compatible</tspan>
-      </text>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/refactor/version2.graffle b/content/2016/refactor/version2.graffle
deleted file mode 100644
index 122ec2b..0000000
--- a/content/2016/refactor/version2.graffle
+++ /dev/null
Binary files differ
diff --git a/content/2016/refactor/version2.html b/content/2016/refactor/version2.html
deleted file mode 100644
index ea6442e..0000000
--- a/content/2016/refactor/version2.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="image"><center><img src="refactor/version2.svg" alt="Standard Library Compatibility"></img></center></div>
diff --git a/content/2016/refactor/version2.svg b/content/2016/refactor/version2.svg
deleted file mode 100644
index 698fd14..0000000
--- a/content/2016/refactor/version2.svg
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-1 -1 296 219" width="296pt" height="219pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:54:17 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="black">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_2" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#0432ff">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_3" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff2600">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_4" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#ff2600">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-    <font-face font-family="Helvetica" font-size="8" units-per-em="1000" underline-position="-75.68359" underline-thickness="49.316406" slope="0" x-height="522.9492" cap-height="717.28516" ascent="770.0195" descent="-229.98047" font-weight="500">
-      <font-face-src>
-        <font-face-name name="Helvetica"/>
-      </font-face-src>
-    </font-face>
-    <marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledArrow_Marker_5" viewBox="-1 -4 10 8" markerWidth="10" markerHeight="8" color="#0432ff">
-      <g>
-        <path d="M 8 0 L 0 -3 L 0 3 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/>
-      </g>
-    </marker>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <rect x="78" y="0" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(83 4.553711)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="19.995117" y="11" textLength="26.009766">Main</tspan>
-      </text>
-      <rect x="0" y="48" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 52.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="22.661133" y="11" textLength="20.677734">Foo</tspan>
-      </text>
-      <rect x="156" y="46" width="76" height="23.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(161 50.55371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="23.663086" y="11" textLength="18.673828">Bar</tspan>
-      </text>
-      <line x1="135.92391" y1="23.5" x2="165.54856" y2="40.97095" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="96.90625" y1="23.5" x2="65.52517" y2="42.811435" marker-end="url(#FilledArrow_Marker)" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <rect x="48" y="117" width="136" height="100.5" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(53 198.60742)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="21.64746" y="11" textLength="82.70508">standard library</tspan>
-      </text>
-      <rect x="58.5" y="133.5" width="47.5" height="23.5" stroke="#a5a5a5" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(63.5 138.05371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="5.4052734" y="11" textLength="26.689453">5.1.3</tspan>
-      </text>
-      <rect x="126" y="133.5" width="47.5" height="23.5" stroke="#a5a5a5" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(131 138.05371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="5.4052734" y="11" textLength="26.689453">6.0.0</tspan>
-      </text>
-      <line x1="44.08114" y1="71.5" x2="71.618475" y2="124.70773" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="188.05786" y1="69.5" x2="160.1599" y2="124.66546" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="53.357456" y1="71.5" x2="126.5299" y2="127.48429" marker-end="url(#FilledArrow_Marker_3)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="1,3"/>
-      <line x1="178.99357" y1="69.5" x2="105.05126" y2="127.39667" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="1,3"/>
-      <line x1="199.5" y1="130" x2="275.95" y2="130" marker-end="url(#FilledArrow_Marker_4)" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width=".75" stroke-dasharray="1,3"/>
-      <text transform="translate(204.5 120)" fill="#ff2600">
-        <tspan font-family="Helvetica" font-size="8" font-weight="500" fill="#ff2600" x="14.542969" y="8" textLength="44.91406">incompatible</tspan>
-      </text>
-      <line x1="199.5" y1="150" x2="275.95" y2="150" marker-end="url(#FilledArrow_Marker_2)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".75"/>
-      <text transform="translate(204.5 140)" fill="#0432ff">
-        <tspan font-family="Helvetica" font-size="8" font-weight="500" fill="#0432ff" x="17.65625" y="8" textLength="38.6875">compatible</tspan>
-      </text>
-      <rect x="58.5" y="164.5" width="47.5" height="23.5" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(63.5 169.05371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="5.4052734" y="11" textLength="26.689453">5.2.0</tspan>
-      </text>
-      <path d="M 38.299127 71.49998 C 39.23227 79.43687 41.73237 91.49878 48 108 C 54.4882 125.08193 63.43472 142.76385 70.55697 155.84909" marker-end="url(#FilledArrow_Marker_5)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <path d="M 186.36683 69.5 C 174.03483 88.13288 148.80312 124.81951 126 149 C 121.50411 153.76745 117.40286 157.7304 113.67481 161.0212" marker-end="url(#FilledArrow_Marker_5)" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-    </g>
-  </g>
-</svg>
diff --git a/content/2016/state-of-go.slide b/content/2016/state-of-go.slide
deleted file mode 100644
index f2787e7..0000000
--- a/content/2016/state-of-go.slide
+++ /dev/null
@@ -1,509 +0,0 @@
-The State of Go
-Where we are in February 2016
-
-Francesc Campoy
-Gopher at Google
-@francesc
-campoy@golang.org
-
-* Time flies
-
-Go 1.4 is one year old (happy birthday!)
-
-Go 1.5 is already 6 months old!
-
-Go 1.6 to be released sometime in February.
-
-Go 1.6 Candidate Release 1 was released on January 28th
-
-* Notes
-
-The slides are available on [[https://talks.golang.org/2016/state-of-go.slide]]
-
-Most of the code examples won't run except locally and using Go 1.6.
-
-The playground still runs Go 1.5.
-
-* Agenda
-
-Changes since Go 1.5:
-
-- the language
-- the standard library
-- the runtime
-- the tooling
-- the community
-
-* Changes to the language
-
-* Changes to the language
-
-None.
-
-This is a feature.
-
-* Changes to the standard library
-
-* Changes to the standard library
-
-A couple of new things, in order of excitement.
-
-- net/http
-
-- {text,html}/template
-
-- sort
-
-Also more speed and fewer bugs.
-
-* net/http
-
-If:
-
-- you're using HTTPS
-
-- and Go 1.6
-
-you're using HTTP/2!
-
-* HTTP/2
-
-At a high level, HTTP/2:
-
-- is binary, instead of textual
-- is fully multiplexed, instead of ordered and blocking
-- can therefore use one connection for parallelism
-- uses header compression to reduce overhead
-- allows servers to “push” responses proactively into client caches
-
-.link https://http2.golang.org/gophertiles
-
-* text/template
-
-Imagine that given a slice of strings:
-
-	[]string{"one", "two", "three"}
-
-We want to write a template that will generate:
-
-	<ul>
-	<li>one</li>
-	<li>two</li>
-	<li>three</li>
-	</ul>
-
-What template would you write?
-
-* text/template: first try
-
-Naturally, I write this:
-
-.play state-of-go/template/old.go /`/,/`/
-
-But unfortunately it's not exactly what I want!
-
-* text/template: let's fix it
-
-We need to be careful with the line breaks.
-
-.play state-of-go/template/fixed.go /`/,/`/
-
-This works now, but ... I don't really like my code!
-
-* text/template: meet {{- and -}}
-
-Go 1.6 brings two new delimiters:
-
-- `{{-`
-- `-}}`
-
-Similar to `{{` and `}}`, but _all_ white space on the `-` side will be trimmed.
-
-The template:
-
-	{{23 -}}
-	<
-	{{- 45}}
-
-generates:
-
-	23<45
-
-* text/template: back to our problem
-
-We can now have:
-
-- the result we expected
-- without sacrificing the readability of our templates.
-
-.play state-of-go/template/new.go /`/,/`/
-
-* text/template: the block action
-
-Go 1.6 brings also a new action named `block`.
-
-Let's see what it is useful for.
-
-* Factoring out repetition in templates
-
-Both `<ul>` share the same structure.
-
-	{{define "presentation"}}
-		Authors:
-		<ul>
-		{{range .Authors}}
-			<li>{{.}}</li>
-		{{end}}
-		</ul>
-
-		Topics:
-		<ul>
-		{{range .Topics}}
-			<li>{{.}}</li>
-		{{end}}
-		</ul>
-	{{end}}
-
-Templates can be used to avoid repetition.
-
-* Factoring out repetition with templates (cont.)
-
-We can define a new template:
-
-.code state-of-go/template/define.go /define "list"/,/^{{end}}/
-
-And use it where needed:
-
-.code state-of-go/template/define.go /define "presentation"/,/^{{end}}/
-
-* Factoring out repetition with templates (cont.)
-
-We can parse that template and execute it.
-
-.play state-of-go/template/define.go /func main/,/^}/
-
-* Template redefinition
-
-We made also our template easier to reuse, as we can redefine `list`.
-
-.play state-of-go/template/redefine.go /func main/,/^}/
-
-* Meet the block action
-
-The `block` action defines and executes a template in place.
-
-.code state-of-go/template/blocks.go /define/,/`/
-
-That template defined by `block` can be:
-
-- referenced later by the same template,
-- redefined with `define`.
-
-* Why do we need it?
-
-It is more compact when
-
-- we're not factoring out repetition,
-- but we need to provide an extension point.
-
-We can make the following template more compact with `block`.
-
-	{{define "content" .}}
-		<h1>{{.Heading}}<h1>
-		<p>{{.Content}}</p>
-	{{end}}
-
-	{{define "page"}}
-		<title>{{.Title}}</title>
-		<body>
-		{{template "content" .}}
-		</body>
-	{{end}}
-
-* Why do we need it? (cont.)
-
-We can make the following template more compact with `block`.
-
-	{{define "page"}}
-		<title>{{.Title}}</title>
-		<body>
-		{{block "content" .}}
-			<h1>{{.Heading}}<h1>
-			<p>{{.Content}}</p>
-		{{end}}
-		</body>
-	{{end}}
-
-And still easily redefine `content`.
-
-* sort.Sort is faster
-
-`Sort` sorts your data by calling `Less`, `Swap`, and `Len`.
-
-We reduced the number of comparisons and swaps by about 10%.
-
-Sort `[]int` with Go 1.5
-
-	BenchmarkSort_1-4       20000000              67.2 ns/op
-	BenchmarkSort_10-4      10000000               227 ns/op
-	BenchmarkSort_100-4       500000              3863 ns/op
-	BenchmarkSort_1000-4       30000             52189 ns/op
-
-Sort `[]int` with Go 1.6
-
-	BenchmarkSort_1-4       20000000              64.7 ns/op
-	BenchmarkSort_10-4      10000000               137 ns/op
-	BenchmarkSort_100-4       500000              2849 ns/op
-	BenchmarkSort_1000-4       30000             46949 ns/op
-
-* sort.Sort is faster - plot
-
-.image state-of-go/img/bench-sort.png _ 800
-
-* Sort order and sort.Stable
-
-Reminder: sort.Sort is not a _stable_ sort.
-
-.play state-of-go/sort/unstable.go /byLength/,
-
-Use `sort.Stable`:
-
-.play state-of-go/sort/stable.go /func main/,
-
-* Minor changes
-
-.image state-of-go/img/minorchanges.png _ 900
-.caption too many to discuss: find them [[https://golang.org/doc/go1.6#minor_library_changes][here]]
-
-* Let's just discuss one
-
-`time.Parse` is smarter!
-
-.play state-of-go/time/time.go /func main/,/^}/
-
-
-* Changes to the runtime
-
-* Detection of concurrent map accesses
-
-Detection of unsafe concurrent access to maps.
-
-.play state-of-go/runtime/crash.go /const/,/Wait\(\)/
-
-Outputs:
-
-	fatal error: concurrent map read and map write
-	fatal error: concurrent map writes
-
-* Does it make it slower?
-
-No!
-
-Let's benchmark it - with a correct solution.
-
-.code state-of-go/runtime/good/good.go /func count/,/^}/
-
-* Benchmark results
-
-Go 1.4 - GOMAXPROCS = 4
-
-	BenchmarkCount_1         1000000              1862 ns/op
-	BenchmarkCount_10         100000             21214 ns/op
-	BenchmarkCount_100          1000           1602507 ns/op
-	BenchmarkCount_1000           10         141712948 ns/op
-
-Go 1.5 - GOMAXPROCS = 4
-
-	BenchmarkCount_1-4       2000000               867 ns/op
-	BenchmarkCount_10-4       200000              6909 ns/op
-	BenchmarkCount_100-4        1000           1025092 ns/op
-	BenchmarkCount_1000-4         20          94093719 ns/op
-
-Go 1.6 - GOMAXPROCS = 4
-
-	BenchmarkCount_1-4       2000000               750 ns/op
-	BenchmarkCount_10-4       200000              6582 ns/op
-	BenchmarkCount_100-4        2000           1113790 ns/op
-	BenchmarkCount_1000-4         20          87998054 ns/op
-
-* Benchmark results plot
-
-.image state-of-go/img/bench4.png _ 800
-
-* Benchmark results
-
-Go 1.4 - GOMAXPROCS = 1
-
-	BenchmarkCount_1         100000               1370 ns/op
-	BenchmarkCount_10         20000               8622 ns/op
-	BenchmarkCount_100          500             362725 ns/op
-	BenchmarkCount_1000          50           31378803 ns/op
-
-Go 1.5 - GOMAXPROCS = 1
-
-	BenchmarkCount_1-4      2000000                776 ns/op
-	BenchmarkCount_10-4      200000               6288 ns/op
-	BenchmarkCount_100-4       3000             345037 ns/op
-	BenchmarkCount_1000-4        50           31751625 ns/op
-
-Go 1.6 - GOMAXPROCS = 1
-
-	BenchmarkCount_1-4       2000000               767 ns/op
-	BenchmarkCount_10-4       200000              6041 ns/op
-	BenchmarkCount_100-4        5000            329328 ns/op
-	BenchmarkCount_1000-4         50          30176034 ns/op
-
-* Benchmark results plot
-
-.image state-of-go/img/bench1.png _ 800
-
-* Garbage Collector in Go 1.5
-
-At [[https://www.youtube.com/watch?v=aiv1JOfMjm0][GopherCon 2015 Rick Hudson gave a presentation]] about the Go 1.5 low latency collector
-
-.image state-of-go/img/gc345.png 500 _
-
-* Garbage Collector in Go 1.6
-
-At [[http://www.infoq.com/presentations/go-gc-performance][QCon SF in November Rick Hudson]] gave an updated presentation which showed this comparison of Go 1.5 to the upcoming Go 1.6
-
-.image state-of-go/img/gc56.png 400 _
-
-_Yes,_that_is_gigabytes_on_the_X_axis_
-
-* Garbage Collector on tip
-
-Right now it's even better!
-
-.image state-of-go/img/gcgotip.png _ 600
-
-* People loved it with Go 1.5
-
-.image state-of-go/img/twitter1.png _ 550
-.caption [[https://twitter.com/brianhatfield/status/634166123605331968][original tweet]]
-
-* People love it even more with Go 1.6
-
-.image state-of-go/img/twitter2.png _ 600
-.caption [[https://twitter.com/brianhatfield/status/692778741567721473][original tweet]]
-
-* Oops
-
-.image state-of-go/img/twitter3.png _ 600
-.caption [[https://twitter.com/bradfitz/status/692787593558118400][original tweet]] and [[https://www.youtube.com/watch?v=CduA0TULnow&t=1m29s][video]]
-
-* New ports
-
-Experimental ports to Linux on 64-bit MIPS (linux/mips64 and linux/mips64le).
-
-Experimental port to Android on 32-bit x86 (android/386).
-
-On Linux on little-endian 64-bit PowerPC (linux/ppc64le), Go 1.6 now supports cgo with external linking and is roughly feature complete.
-
-On NaCl, Go 1.5 required SDK version pepper-41. Go 1.6 adds support for later SDK versions.
-
-* Changes to the tooling
-
-* The cgo tool
-
-Go is garbage collected, can C and Go share memory?
-
-In short:
-
-- Go can pass a pointer to C
-- the referenced memory can't have pointers to Go allocated memory
-- C can't keep pointers to the memory after the call returns
-
-In more detail:
-
-- the `cgo` [[https://tip.golang.org/cmd/cgo/#hdr-Passing_pointers][docs]].
-
-This is checked by the runtime at execution.
-
-You could disable the checks, but you probably shouldn't.
-
-* Sharing pointers between Go and C
-
-.code state-of-go/cgo/main.go
-
-Outputs:
-
-	panic: runtime error: cgo argument has Go pointer to Go pointer
-
-* The go tool
-
-GO15VENDOREXPERIMENT is now enabled by default.
-
-How does it work?
-
-	/home/user/gocode/
-	    src/
-	        server-one/
-	            main.go            (import "github.com/gorilla/mux")
-	        server-two/
-	            main.go            (import "github.com/gorilla/mux")
-	            vendor/
-	                github.com/
-	                    gorilla/
-	                        mux/
-	                            ...
-
-`server-one` uses the `mux` package in `$GOPATH/src/github.com/gorilla/mux`.
-
-`server-two` uses the `mux` package in `vendor`.
-
-* Vendoring demo
-
-* go doc
-
-Go 1.5 added the possibility of searching by name
-
-	go doc math Pi
-
-Go 1.6 defines priority of packages with import paths with less elements.
-
-Non vendored packages appear first.
-
-* go vet
-
-Go vet warns if the code prints a function instead of its result.
-
-.play state-of-go/govet/main.go
-
-`go`vet` output:
-
-	main.go:8: arg foo in Println call is a function value, not a function call
-
-The warning can be removed using `%p` in the format string.
-
-* The community
-
-* The community
-
-Code of Conduct announced on November 24th 2015
-
-Go meetups:
-
-- [[http://go-meetups.appspot.com]]
-
-Women Who Go - 7 chapters already!
-
-- [[http://www.womenwhogo.org]]
-
-* Conferences:
-
-- [[http://gophergala.com/][GopherGala]] Jan 22-24th (judging proposals now)
-- [[https://fosdem.org/2016/][FOSDEM]] Right here, right now. Hello!
-- [[http://gophercon.ae][GopherCon Dubai]], Feb 23rd
-- [[http://www.gophercon.in/][GopherCon India]], Feb 19-20th
-- [[https://gophercon.com/][Gophercon Denver]], Jul 11-13th
-- [[http://2016.dotgo.eu/][dotGo]], Nov 9th
-
-* Go 1.6 release party, February 17th
-
-Go 1.6 ships soon!
-
-Go meetups are organising to hold a [[https://github.com/golang/go/wiki/Go-1.6-release-party][release party]] on the 17th of February.
-
-.image state-of-go/img/party-gopher.png _ 300
-.caption Join the party!!!
diff --git a/content/2016/state-of-go/cgo/main.go b/content/2016/state-of-go/cgo/main.go
deleted file mode 100644
index 6660eb7..0000000
--- a/content/2016/state-of-go/cgo/main.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-/*
-int fn(void* arg) { return arg == 0; }
-*/
-import "C"
-import "unsafe"
-
-type T struct{ a, b int }
-type X struct{ t *T }
-
-func main() {
-	t := T{a: 1, b: 2}
-	C.fn(unsafe.Pointer(&t)) // correct // HL
-
-	x := X{t: &t}
-	C.fn(unsafe.Pointer(&x)) // incorrect // HL
-}
diff --git a/content/2016/state-of-go/govet/main.go b/content/2016/state-of-go/govet/main.go
deleted file mode 100644
index d4f49a2..0000000
--- a/content/2016/state-of-go/govet/main.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-func foo() string { return "bar" }
-
-func main() {
-	fmt.Printf("%v", foo)
-}
diff --git a/content/2016/state-of-go/img/bench-sort.png b/content/2016/state-of-go/img/bench-sort.png
deleted file mode 100644
index e42d4a2..0000000
--- a/content/2016/state-of-go/img/bench-sort.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/bench1.png b/content/2016/state-of-go/img/bench1.png
deleted file mode 100644
index 0fee88c..0000000
--- a/content/2016/state-of-go/img/bench1.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/bench4.png b/content/2016/state-of-go/img/bench4.png
deleted file mode 100644
index 88cd3d1..0000000
--- a/content/2016/state-of-go/img/bench4.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/gc345.png b/content/2016/state-of-go/img/gc345.png
deleted file mode 100644
index 3180473..0000000
--- a/content/2016/state-of-go/img/gc345.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/gc56.png b/content/2016/state-of-go/img/gc56.png
deleted file mode 100644
index bc97b2d..0000000
--- a/content/2016/state-of-go/img/gc56.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/gcgotip.png b/content/2016/state-of-go/img/gcgotip.png
deleted file mode 100644
index 7088e1c..0000000
--- a/content/2016/state-of-go/img/gcgotip.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/minorchanges.png b/content/2016/state-of-go/img/minorchanges.png
deleted file mode 100644
index 3a22ee6..0000000
--- a/content/2016/state-of-go/img/minorchanges.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/party-gopher.png b/content/2016/state-of-go/img/party-gopher.png
deleted file mode 100644
index d18690f..0000000
--- a/content/2016/state-of-go/img/party-gopher.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/twitter1.png b/content/2016/state-of-go/img/twitter1.png
deleted file mode 100644
index 1825bb9..0000000
--- a/content/2016/state-of-go/img/twitter1.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/twitter2.png b/content/2016/state-of-go/img/twitter2.png
deleted file mode 100644
index 81ce982..0000000
--- a/content/2016/state-of-go/img/twitter2.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/img/twitter3.png b/content/2016/state-of-go/img/twitter3.png
deleted file mode 100644
index 9368027..0000000
--- a/content/2016/state-of-go/img/twitter3.png
+++ /dev/null
Binary files differ
diff --git a/content/2016/state-of-go/runtime/crash.go b/content/2016/state-of-go/runtime/crash.go
deleted file mode 100644
index d65fb5e..0000000
--- a/content/2016/state-of-go/runtime/crash.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sync"
-)
-
-func main() {
-	const workers = 100 // what if we have 1, 2, 25?
-
-	var wg sync.WaitGroup
-	wg.Add(workers)
-	m := map[int]int{}
-	for i := 1; i <= workers; i++ {
-		go func(i int) {
-			for j := 0; j < i; j++ {
-				m[i]++ // HL
-			}
-			wg.Done()
-		}(i)
-	}
-	wg.Wait()
-	fmt.Println(m)
-}
diff --git a/content/2016/state-of-go/runtime/good/good.go b/content/2016/state-of-go/runtime/good/good.go
deleted file mode 100644
index 677c3a5..0000000
--- a/content/2016/state-of-go/runtime/good/good.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"runtime"
-	"sync"
-)
-
-func main() {
-	runtime.GOMAXPROCS(runtime.NumCPU())
-	count(10000) // what if we have 1, 2, 25?
-}
-
-func count(n int) {
-	var wg sync.WaitGroup
-	wg.Add(n)
-	m := map[int]int{}
-	var mu sync.Mutex // HL
-	for i := 1; i <= n; i++ {
-		go func(i int) {
-			for j := 0; j < i; j++ {
-				mu.Lock() // HL
-				m[i]++
-				mu.Unlock() // HL
-			}
-			wg.Done()
-		}(i)
-	}
-	wg.Wait()
-}
diff --git a/content/2016/state-of-go/sort/stable.go b/content/2016/state-of-go/sort/stable.go
deleted file mode 100644
index ac8e5c2..0000000
--- a/content/2016/state-of-go/sort/stable.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-	"strings"
-)
-
-type byLength []string
-
-func (b byLength) Len() int           { return len(b) }
-func (b byLength) Less(i, j int) bool { return len(b[i]) < len(b[j]) }
-func (b byLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
-
-func main() {
-	values := []string{"ball", "hell", "one", "joke", "fool", "moon", "two"}
-	sort.Stable(byLength(values)) // HL
-	fmt.Println(strings.Join(values, "\n"))
-}
diff --git a/content/2016/state-of-go/sort/unstable.go b/content/2016/state-of-go/sort/unstable.go
deleted file mode 100644
index fa440f3..0000000
--- a/content/2016/state-of-go/sort/unstable.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sort"
-	"strings"
-)
-
-type byLength []string
-
-func (b byLength) Len() int           { return len(b) }
-func (b byLength) Less(i, j int) bool { return len(b[i]) < len(b[j]) }
-func (b byLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
-
-func main() {
-	values := []string{"ball", "hell", "one", "joke", "fool", "moon", "two"}
-	sort.Sort(byLength(values))
-	fmt.Println(strings.Join(values, "\n"))
-}
diff --git a/content/2016/state-of-go/template/blocks.go b/content/2016/state-of-go/template/blocks.go
deleted file mode 100644
index 17fadd4..0000000
--- a/content/2016/state-of-go/template/blocks.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-	"strings"
-)
-
-const tmplText = `
-{{define "presentation"}}
-	Authors:
-	{{block "list" .Authors}} // HL
-	<ul>
-	{{- range .}}
-		<li>{{.}}</li>
-	{{- end}}
-	</ul>
-	{{end}} // HL
-
-	Topics:
-	{{template "list" .Topics}} // HL
-{{end}}
-` // OMIT
-
-type Presentation struct {
-	Authors []string
-	Topics  []string
-}
-
-func main() {
-	p := Presentation{
-		Authors: []string{"one", "two", "three"},
-		Topics:  []string{"go", "templates"},
-	}
-
-	tmpl := template.Must(template.New("presentation").Parse(tmplText))
-
-	tmpl = tmpl.Funcs(template.FuncMap{"join": strings.Join})                       // HL
-	tmpl = template.Must(tmpl.Parse(`{{define "list"}} {{join . " | "}} {{ end}}`)) // HL
-
-	err := tmpl.Execute(os.Stdout, p)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/template/define.go b/content/2016/state-of-go/template/define.go
deleted file mode 100644
index cd4986a..0000000
--- a/content/2016/state-of-go/template/define.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-)
-
-const tmplText = `
-{{define "list"}}
-	<ul>
-	{{range .}}
-		<li>{{.}}</li>
-	{{end}}
-	</ul>
-{{end}}	
-
-{{define "presentation"}}
-	Authors:
-	{{template "list" .Authors}}
-
-	Topics:
-	{{template "list" .Topics}}
-{{end}}
-`
-
-type Presentation struct {
-	Authors []string
-	Topics  []string
-}
-
-func main() {
-	p := Presentation{
-		Authors: []string{"one", "two", "three"},
-		Topics:  []string{"go", "templates"},
-	}
-
-	tmpl := template.Must(template.New("presentation").Parse(tmplText)) // HL
-
-	err := tmpl.Execute(os.Stdout, p)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/template/fixed.go b/content/2016/state-of-go/template/fixed.go
deleted file mode 100644
index 4a4dcb0..0000000
--- a/content/2016/state-of-go/template/fixed.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-)
-
-var tmpl = template.Must(template.New("tmpl").Parse(`
-<ul>
-{{range .}}<li>{{.}}</li>
-{{end}}</ul>
-`))
-
-func main() {
-	err := tmpl.Execute(os.Stdout, []string{"one", "two", "three"})
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/template/new.go b/content/2016/state-of-go/template/new.go
deleted file mode 100644
index eb8f7b1..0000000
--- a/content/2016/state-of-go/template/new.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-)
-
-var tmpl = template.Must(template.New("tmpl").Parse(`
-<ul>
-{{range . -}}
-	<li>{{.}}</li>
-{{end -}}
-</ul>
-`))
-
-func main() {
-	err := tmpl.Execute(os.Stdout, []string{"one", "two", "three"})
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/template/old.go b/content/2016/state-of-go/template/old.go
deleted file mode 100644
index 0bae788..0000000
--- a/content/2016/state-of-go/template/old.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-)
-
-var tmpl = template.Must(template.New("tmpl").Parse(`
-<ul>
-{{range .}}
-	<li>{{.}}</li>
-{{end}}
-</ul>
-`))
-
-func main() {
-	err := tmpl.Execute(os.Stdout, []string{"one", "two", "three"})
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/template/redefine.go b/content/2016/state-of-go/template/redefine.go
deleted file mode 100644
index b4b736d..0000000
--- a/content/2016/state-of-go/template/redefine.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-	"strings"
-)
-
-const tmplText = `
-{{define "list"}}
-	<ul>
-	{{range .}}
-		<li>{{.}}</li>
-	{{end}}
-	</ul>
-{{end}}	
-
-{{define "presentation"}}
-	Authors:
-	{{template "list" .Authors}}
-
-	Topics:
-	{{template "list" .Topics}}
-{{end}}
-`
-
-type Presentation struct {
-	Authors []string
-	Topics  []string
-}
-
-func main() {
-	p := Presentation{
-		Authors: []string{"one", "two", "three"},
-		Topics:  []string{"go", "templates"},
-	}
-
-	tmpl := template.Must(template.New("presentation").Parse(tmplText))
-
-	tmpl = tmpl.Funcs(template.FuncMap{"join": strings.Join})                       // HL
-	tmpl = template.Must(tmpl.Parse(`{{define "list"}} {{join . " | "}} {{ end}}`)) // HL
-
-	err := tmpl.Execute(os.Stdout, p)
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2016/state-of-go/time/time.go b/content/2016/state-of-go/time/time.go
deleted file mode 100644
index 564c062..0000000
--- a/content/2016/state-of-go/time/time.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"time"
-)
-
-func main() {
-	days := []string{"2015 Feb 29", "2016 Feb 29", "2017 Feb 29"}
-
-	fmt.Println("Are these days valid?")
-	for _, day := range days {
-		_, err := time.Parse("2006 Jan 2", day)
-		fmt.Printf("%v -> %v\n", day, err == nil)
-	}
-}
diff --git a/content/2016/token.slide b/content/2016/token.slide
deleted file mode 100644
index 049f3b9..0000000
--- a/content/2016/token.slide
+++ /dev/null
@@ -1,471 +0,0 @@
-Stacks of Tokens
-A study in interfaces
-
-Sydney Go Meetup
-15 September 2016
-
-Rob Pike
-Google
-@rob_pike
-[[http://golang.org/s/plusrob][+RobPikeTheHuman]]
-http://golang.org/
-
-* Background
-
-Spoke at Gophercon this year: [[https://talks.golang.org/2016/asm.slide]]
-
-That talk was about system design and portability.
-
-Today's talk is about its lexer.
-
-Spoke about lexing before: [[https://talks.golang.org/2011/lex.slide]]
-
-That talk showed a way to use concurrency to build a lexer.
-
-Today's talk is about interfaces.
-
-* Lexer
-
-A lexer, also called a scanner, breaks the input stream into distinct "tokens":
-
-- identifiers
-- numbers
-- quoted strings
-- operators
-- miscellaneous characters such as comma, colon.
-
-Each token has a _type_ and a _value_.
-
-* Example
-
-	MOVQ    R0, 4(R1)
-
-The lexer turns this into the stream
-
-- identifier `MOVQ`
-- identifier `R0`
-- character `,`
-- number `4`
-- character `(`
-- identifier `R1`
-- character `)`
-
-Spaces are ignored.
-
-The parser then reads these tokens to parse the input into a _parse_tree_.
-
-* Go's text/scanner package
-
-There is a nice, efficient lexer package in the Go standard library:
-
-- [[https://golang.org/pkg/text/scanner/][`text/scanner`]]
-
-It can do this job just fine.
-
-But.... that is not enough for the assembler because of
-
-* Backwards compatibility
-
-The new Go assembler had to be totally compatible with the ones it replaces, which used YACC and were written in C. (See [[https://talks.golang.org/2015/gogo.slide][]].)
-
-Each assembler (one per architecture) contained these lines at the end of `lex.c`:
-	
-	#include "../cc/lexbody"
-	#include "../cc/macbody"
-
-This gave the assemblers the same lexer as the C compiler.
-The differences between C tokens and Go tokens are minor and can be handled, but....
-
-
-The C lexer brings in something problematic.
- 
-* The C preprocessor
-
-The old assemblers had a C preprocessor built in!
-An old-fashioned one, without `#if` and token pasting, but still:
-
-	#include "file" 
-	#define  MAXBUF 512 
-	#define  MULDIV(a, b, c)  ((a)*(b)/(c)) 
-	#ifdef   MAXBUF
-	#endif
-
-The `text/scanner` package can't handle this.
-But we need to do it to be compatible.
-
-This talk is about how to use Go's interfaces to do it.
-
-* An observation
-
-What is standard input? An input source.
-
-- read the input
-
-What is an included file? An input source.
-
-- read the file
-
-What is a macro invocation? An input source.
-
-- read the macro definition
-
-Sounds a lot like `io.Reader`.
-
-* Token reader
-
-We don't want bytes, we want tokens. (Why?)
-
-Instead of
-
-	type Reader interface {
-		Read(p []byte) (n int, err error)
-	}
-
-we want something like
-
-	type TokenReader interface {
-		ReadToken() (Token, error)
-	}
-
-In practice the parser needs something different from `Read`, but the basic idea works.
-
-We build a lexer around an interface that reads tokens.
-
-* The observation in practice
-
-What is standard input? An input source.
-
-- get tokens from the input
-
-What is an included file? An input source.
-
-- get tokens from the file
-
-What is a macro invocation? An input source.
-
-- get tokens from the macro definition
-
-Each of these implements the `TokenReader` interface.
-
-* TokenReader
-
-	type TokenReader interface {
-		// Next returns the next token.
-		Next() ScanToken
-		// The following methods all refer to the most recent token returned by Next.
-		// Text returns the original string representation of the token.
-		Text() string
-		// File reports the source file name of the token.
-		File() string
-		// Line reports the source line number of the token.
-		Line() int
-		// Col reports the source column number of the token.
-		Col() int
-	}
-
-Parser calls `Next`, then can ask about the token: what is, where it is.
-`ScanToken` is just `text/scanner.Token` with tweaks.
-
-Note: No `Peek`. This has no lookahead.
-
-* Tokenizer
-
-`Tokenizer`, the foundational `TokenReader`, turns a `text/scanner.Scanner` into a `TokenReader`.
-
-	// A Tokenizer is a simple wrapping of text/scanner.Scanner, configured
-	// for our purposes and made a TokenReader. It forms the lowest level,
-	// turning text from readers into tokens.
-	type Tokenizer struct {
-		tok      ScanToken // Most recent token.
-		s        *scanner.Scanner
-		line     int
-		fileName string
-	}
-
-	func NewTokenizer(name string, r io.Reader, file *os.File) *Tokenizer
-
-Either the reader or the file may be nil.
-
-`Tokenizer` implements `TokenReader`
-
-* Tokenizer.Next
-
-To give the flavor:
-
-	func (t *Tokenizer) Next() ScanToken {
-		s := t.s
-		for {
-			t.tok = ScanToken(s.Scan())
-			if t.tok != scanner.Comment {
-				break
-			}
-			length := strings.Count(s.TokenText(), "\n")
-			t.line += length
-			histLine += length
-			// For now, just discard all comments.
-		}
-		// Special processing for '\n' etc. elided.
-		return t.tok
-	}
-
-* Tokenizer.Text
-
-	func (t *Tokenizer) Text() string {
-		switch t.tok {
-		case LSH:  // Special handling of odd tokens used by ARM.
-			return "<<"
-		case RSH:
-			return ">>"
-		case ARR:
-			return "->"
-		case ROT:
-			return "@>"
-		}
-		return t.s.TokenText()
-	}
-
-`LSH` etc. are the reason for `ScanToken`: the set of tokens is a superset of the underlying type `text/scanner.Token`.
-
-* Macro definitions
-
-It's easy to see how files work: `NewTokenizer` can do that.
-
-What about a macro definition?
-
-	#define A(arg) 27+(arg)
-
-Becomes the tokens
-
-	27 + ( arg )
-
-When we encounter `A(x)`, we substitute the argument and get
-
-	27 + ( x )
-
-Use a slice of tokens and store them in a `Macro` struct.
-
-	type Macro struct {
-		name   string   // The #define name.
-		args   []string // Formal arguments.
-		tokens []Token  // Body of macro.
-	}
-
-* Slice
-
-	// A Slice reads from a slice of Tokens.
-	type Slice struct {
-		tokens   []Token
-		fileName string
-		line     int
-		pos      int
-	}
-
-Implements `TokenReader`.
-
-	func (s *Slice) Next() ScanToken {
-		s.pos++
-		if s.pos >= len(s.tokens) {
-			return scanner.EOF
-		}
-		return s.tokens[s.pos].ScanToken
-	}
-
-To invoke a macro, substitute the _actuals_ for the _formals_ and make a `Slice`.
-
-* Command-line flags
-
-A command-line flag `-D` can define a macro before execution:
-
-	go tool asm -D 'macro=value' file.s
-
-That's easy!
-
-	var DFlag MultiFlag
-	flag.Var(&DFlag, "D", "predefined symbol D=identifier...")
-
-	type MultiFlag []string // Implements flag.Value, allows multiple settings.
-
-	predefine(DFlag)
-
-* Predefined macros
-
-	// predefine installs the macros set by the -D flag on the command line.
-	func predefine(defines MultiFlag) map[string]*Macro {
-		macros := make(map[string]*Macro)
-		for _, name := range defines {
-			value := "1"
-			i := strings.IndexRune(name, '=')
-			if i > 0 {
-				name, value = name[:i], name[i+1:]
-			}
-			// Various error checks elided.
-			macros[name] = &Macro{
-				name:   name,
-				args:   nil, // No arguments allowed.
-				tokens: Tokenize(value), // Turn the value into tokens.
-			}
-		}
-		return macros
-	}
-
-The return value is the initial symbol table of macros.
-
-* The big picture
-
-We know how to:
-
-- tokenize an input stream from text or `io.Reader`
-- define a macro
-- invoke a macro
-
-But how does it fit together?
-Which implementation `TokenReader` does the parser see?
-
-Consider
-
-- `#include` names a file to process next
-- macro invocation names a slice of tokens to process next
-
-It's a stack! Push new input, pop at EOF.
-
-* Stack
-
-	// A Stack is a stack of TokenReaders. As the top TokenReader hits EOF,
-	// it resumes reading the next one down.
-	type Stack struct {
-		tr []TokenReader
-	}
-
-	// Push adds tr to the top (end) of the input stack. (Popping happens automatically.)
-	func (s *Stack) Push(tr TokenReader) {
-		s.tr = append(s.tr, tr)
-	}
-
-	func (s *Stack) Next() ScanToken {
-		tos := s.tr[len(s.tr)-1]
-		tok := tos.Next()
-		for tok == scanner.EOF && len(s.tr) > 1 {
-			// Pop the topmost item from the stack and resume with the next one down.
-			s.tr = s.tr[:len(s.tr)-1]
-			tok = s.Next()
-		}
-		return tok
-	}
-
-* The Input type
-
-	// Input is the main input: a stack of readers and some macro definitions.
-	// It also handles #include processing (by pushing onto the input stack)
-	// and parses and instantiates macro definitions.
-	type Input struct {
-		Stack
-		includes        []string  // Directories in which to look for #includes
-		macros          map[string]*Macro
-		text            string // Text of last token returned by Next.
-		...
-	}
-
-Note the embedding of `Stack`: `Input` is a wrapping of the `Stack` implementation of `TokenReader`.
-The parser uses a single instance of `Input` as its `TokenReader`.
-
-* Example: #include processing
-
-Some error handling elided for brevity.
-
-	func (in *Input) include() {
-		// Find and parse file name, which is next token, a string.
-		tok := in.Stack.Next()
-		name, _ := strconv.Unquote(in.Stack.Text())
-		in.expectNewline("#include") // Checks that a newline comes now.
-		// Push tokenizer for file onto stack.
-		fd, err := os.Open(name)
-		if err != nil {
-			for _, dir := range in.includes {
-				fd, err = os.Open(filepath.Join(dir, name))
-				if err == nil {
-					break
-				}
-			}
-		}
-		in.Push(NewTokenizer(name, fd, fd))
-	}
-
-* Macro definition
-
-Macro definition is similar but more complex because of the variety of forms.
-Must deal with constants, empty values, macros with arguments, etc.
-
-The end result is to build a `Macro` value and install it in `Input.macros`.
-
-* The final piece: Input.Next
-
-Here is the implementation of a CPP input stream using these types.
-(Error handling mostly elided for brevity.)
-
-	func (in *Input) Next() ScanToken {
-		// If we cannot generate a token after 100 macro invocations, we're in trouble.
-		for nesting := 0; nesting < 100; {
-			tok := in.Stack.Next()
-			switch tok {
-			case '#':
-				in.hash()
-			case scanner.Ident:
-				// Is it a macro name?
-				name := in.Stack.Text()
-				macro := in.macros[name]
-				if macro != nil {
-					nesting++
-					in.invokeMacro(macro)
-					continue
-				}
-				fallthrough
-			default:
-				// Continued on next slide.
-
-* Input.Next part 2
-
-	func (in *Input) Next() ScanToken {
-				// Continued from previous slide.
-			default:
-				if tok == scanner.EOF && len(in.ifdefStack) > 0 {
-					// We're skipping text but have run out of input with no #endif.
-					in.Error("unclosed #ifdef or #ifndef")
-				}
-				if in.enabled() {
-					in.text = in.Stack.Text()
-					return tok
-				}
-			}
-		}
-		in.Error("recursive macro invocation")
-		return 0
-	}
-
-* Initializing and running the lexer
-
-	// NewInput returns an Input from the given path.
-	func NewInput(name string) *Input {
-		return &Input{
-			// include directories: look in source dir, then -I directories.
-			includes:        append([]string{filepath.Dir(name)}, IFlag...),
-			macros:          predefine(DFlag),
-		}
-	}
-
-To run, call `in.Push` to put the input file (or `os.Stdin`) on the stack.
-
-Then the lexer runs until the `Stack` is empty.
-
-* Summary
-
-Interfaces give programs structure.
-
-Interfaces encourage design by composition.
-
-- We have an interface that is implemented by a stack of itself!
-
-Interfaces enable and enforce clean divisions between components.
-
-- The simple idea of a `TokenReader` let us implement `#include` files, `#define` macros, command-line flags, `#ifdef` and more with one simple interface.
-
-And a final tip of the hat to `text/scanner` under it all.
diff --git a/content/2017/exporting-go.pdf b/content/2017/exporting-go.pdf
deleted file mode 100644
index d8c0b53..0000000
--- a/content/2017/exporting-go.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-aug.pdf b/content/2017/state-of-go-aug.pdf
deleted file mode 100644
index 0894822..0000000
--- a/content/2017/state-of-go-aug.pdf
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may.slide b/content/2017/state-of-go-may.slide
deleted file mode 100644
index fc2738e..0000000
--- a/content/2017/state-of-go-may.slide
+++ /dev/null
@@ -1,305 +0,0 @@
-The State of Go
-Where we are in May 2017
-
-Francesc Campoy
-Google Developer Advocate
-@francesc
-campoy@golang.org
-
-* Recording
-
-A recording of this talk is available [[https://www.youtube.com/watch?v=dyvpF0jF3AY&list=PLtLJO5JKE5YAeVbgwCkgUWyOBsMvZu4UB&index=1][here]].
-
-.image https://img.youtube.com/vi/dyvpF0jF3AY/0.jpg
-
-* Time flies
-
-Go 1.7 is already 9 months old!
-
-Go 1.8 was released on February 16th.
-
-On May 1st we entered the release freeze for Go 1.9
-
-Go 1.9 will be released early August.
-
-.image state-of-go-may/img/flying.png
-
-* Notes
-
-The slides are available on [[https://talks.golang.org/2017/state-of-go-may.slide]]
-
-Most of the code examples won't run except locally and using tip.
-
-The playground runs Go 1.8.
-
-* Agenda
-
-Changes since Go 1.8:
-
-- The Language
-- The Standard Library
-- The Runtime
-- The Tooling
-- The Community
-
-* Changes to the language
-
-* Codebase Refactoring (with help from Go)
-
-Article written by Russ Cox [[https://talks.golang.org/2016/refactor.article][link]]
-
-.image state-of-go-may/img/atomic.svg _ 300
-
-* Gradual Code Repair
-
-In reality, atomically changing all usages of an API is often impossible.
-
-.image state-of-go-may/img/gradual.svg _ 600
-
-* An example
-
-Imagine we created a new package `net/http/status`.
-
-First: create the new API
-
-    package status
-
-    const OK = http.StatusOK
-
-Second: change each usage of `http.StatusOK` by `status.OK`.
-
-    if res.StatusCode != http.StatusOK {
-    
-    if res.StatusCode != status.OK {
-
-Third: remove the old API
-
-* Another example
-
-Let's rename `http.Get` to `http.DoGetPleaseAndThanks`.
-
-First: create the new API
-
-    func DoGetPleaseAndThanks(url string) (*http.Response, error) {
-        return Get(url)
-    }
-
-Second: change each usage of `http.Get` to `http.DoGetPleaseAndThanks`.
-
-    res, err := http.Get("https://golang.org")
-    
-    res, err := http.DoGetPleaseAndThanks("https://golang.org")
-
-Third: remove the old API
-
-* One last example
-
-Let's move `http.Client` to `http.Applicant`.
-
-First: create the new API
-
-    type Applicant Client
-
-- `Applicant` has no methods.
-- Both types are convertible.
-
-    type Applicant struct { Client }
-
-- `Applicant` has all the methods of `Client`
-- The types are not convertible.
-
-* Alias declarations
-
-An alias declaration is a new kind of type declaration.
-
-    type Applicant = http.Client
-
-Both types are equivalent and completely interchangeable.
-
-- type conversion is not needed
-- can't declare methods on the alias declaration
-
-.play state-of-go-may/alias/main.go /type/,
-
-
-* Quaternions
-
-.image state-of-go-may/img/quaternions.png _ 750
-.caption [[https://golang.org/issue/19813][issue #19813]]
-
-* The Standard library
-
-* A Twitter Poll
-
-.image state-of-go-may/img/twitter-poll.png _ 800
-.caption [[https://twitter.com/francesc/status/863514399486623744][twitter poll]]
-
-* math/bits
-
-[[https://tip.golang.org/pkg/math/bits/#Len16][Package bits]] implements bit counting and manipulation functions for the predeclared unsigned integer types.
-
-Added to the standard library with proposal [[https://golang.org/issue/18616][#18616]].
-
-- LenXX, OnesCountXX
-- ReverseXX, ReverseBytesXX
-- RotateLeftXX
-- LeadingZerosXX, TrailingZerosXX
-
-.play state-of-go-may/bits/main.go /START/,/END/
-
-* sync.Map
-
-A new type has been added to the `sync` package with proposal [[https://golang.org/issue/18177][#18177]].
-
-[[https://tip.golang.org/pkg/sync/#Map][sync.Map]] is a concurrent map with amortized-constant-time loads, stores,and deletes.
-
-- the zero map is valid
-- it must not be copied (use pointers)
-
-* sync.Map code sample
-
-.play state-of-go-may/syncmap/main.go /func main/,
-
-* html/template panic on predefined escaper
-
-What do you expect [[https://play.golang.org/p/-z5rZilH1F][this code]] to print?
-
-.play state-of-go-may/html/main.go /Foo/,
-
-Predefined escapers in `html` template create a security concern.
-
-Since 1.9 `Execute` will panic.
-
-* os.Exec
-
-Let's imagine that we have a command `getenv` that prints an environment variable
-using `os.Getenv`.
-
-.code state-of-go-may/exec/getenv/main.go /func main/,
-
-We can run it as follows:
-
-    $ foo=bar getenv foo
-    bar
-
-* os.Exec
-
-What do you expect this code to print?
-
-.code state-of-go-may/exec/main.go /func main/,
-
-bar, or newbar?
-
-* another Twitter poll
-
-.image state-of-go-may/img/exec-poll.png _ 600
-.caption [[https://twitter.com/francesc/status/863791506934472705][Twitter poll]]
-
-* os.Exec
-
-`Cmd.Start` now removes duplicates of environment variables, keeping the last one.
-
-This code does what one expects:
-
-    cmd := exec.Command("prog")
-    cmd.Env = append(os.Environ(), "FOO=bar")
-
-* The Runtime
-
-* Benchmarks
-
-.image state-of-go-may/img/benchmark.png _ 800
-.caption _note_: values over 1.0 mean tip is faster
-.caption _note_: unofficial benchmark ran on my laptop while playing YouTube videos
-
-* More runtime
-
-Garbage Collector
-
-- New algorithm for large object allocation
-- Better performance and increased determinism for large (+50GB) heaps
-
-[[https://en.wikipedia.org/wiki/DWARF][DWARF]]
-
-- Ongoing effort to improve the generated DWARF information.
-- This will help debuggers, among other tools.
-
-* The Tooling
-
-* go compiler: better errors!
-
-Better error messaging for Allman style braces.
-
-    package main
-
-    func main()
-    {
-        fmt.Println("that ain't gonna compile")
-    }
-
-With go 1.8:
-
-    fail/main.go:4: syntax error: unexpected semicolon or newline before {
-
-With go 1.9:
-
-    fail/main.go:3:6: missing function body for "main"
-    fail/main.go:4:1: syntax error: unexpected semicolon or newline before {
-
-* go compiler: more modular and faster
-
-The compiler has been refactored into multiple packages.
-
-    cmd/go/internal/...
-
-Issue [[https://golang.org/issue/17639][#17639]] made parsing concurrent.
-
-The compiler is faster as a result.
-
-* go test
-
-`vendor` directories are ignored by the `go` tool [[https://golang.org/issue/19090][#19090]]:
-
-    go test ./...
-
-You can now list all the tests to be executed, without running them [[https://golang.org/issue/17209][#17209]].
-
-	$ go test -test.list .
-    TestIntegration
-    TestEmbedStreams
-    TestEmbedFiles
-
-* godoc
-
-You can now link to fields in a struct in the documentation [[https://golang.org/issue/16753][#16753]].
-
-.link https://tip.golang.org/pkg/net/http/#Client.Transport
-
-_Note_: This was actually introduced with Go 1.8!
-
-* ... and much more!
-
-* The community
-
-* Go meetups
-
-.image state-of-go-may/img/meetups.png _ 900
-.caption Gophers all around the world! [[http://go-meetups.appspot.com]]
-
-* Women Who Go
-
-.image state-of-go-may/img/wwg.png _ 800
-.caption 19 chapters already! [[http://www.womenwhogo.org]]
-
-* Women Who Go Gophercon Scholarship
-
-WWG is sponsoring minority gophers from all over the world to attend Gophercon
-
-.image state-of-go-may/img/wwg-logo.png _ 700
-
-* Conferences:
-
-- [[http://gophercon.sg][Gophercon Singapore]], May 25-26th
-- [[https://gophercon.com/][Gophercon Denver]], Jul 12-15th
-- [[http://golanguk.com/][Golang UK]], August 16th-18th
-- [[http://2017.dotgo.eu/][dotGo]], Nov 6th
\ No newline at end of file
diff --git a/content/2017/state-of-go-may/alias/main.go b/content/2017/state-of-go-may/alias/main.go
deleted file mode 100644
index 9e93c99..0000000
--- a/content/2017/state-of-go-may/alias/main.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build go1.9
-
-package main
-
-import (
-	"fmt"
-	"net/http"
-)
-
-type Applicant = http.Client
-
-func main() {
-	fmt.Printf("%T", Applicant{})
-}
diff --git a/content/2017/state-of-go-may/bits/main.go b/content/2017/state-of-go-may/bits/main.go
deleted file mode 100644
index e791883..0000000
--- a/content/2017/state-of-go-may/bits/main.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build go1.9
-
-package main
-
-import (
-	"fmt"
-	"math/bits"
-)
-
-func main() {
-	const n = 100
-	// START OMIT
-	fmt.Printf("%d (%b) has %d bits set to one\n", n, n, bits.OnesCount(n))
-
-	fmt.Printf("%d reversed is %d\n", n, bits.Reverse(n))
-
-	fmt.Printf("%d can be encoded in %d bits\n", n, bits.Len(n))
-	// END OMIT
-}
diff --git a/content/2017/state-of-go-may/exec/getenv/main.go b/content/2017/state-of-go-may/exec/getenv/main.go
deleted file mode 100644
index 08e6492..0000000
--- a/content/2017/state-of-go-may/exec/getenv/main.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"os"
-)
-
-func main() {
-	if len(os.Args) != 2 {
-		fmt.Printf("use %s varname\n", os.Args[0])
-		os.Exit(1)
-	}
-	fmt.Println(os.Getenv(os.Args[1]))
-}
diff --git a/content/2017/state-of-go-may/exec/main.go b/content/2017/state-of-go-may/exec/main.go
deleted file mode 100644
index dced1d3..0000000
--- a/content/2017/state-of-go-may/exec/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package main
-
-import (
-	"log"
-	"os"
-	"os/exec"
-)
-
-func main() {
-	cmd := exec.Command("getenv", "foo")
-	cmd.Env = append(os.Environ(), "foo=newbar") // HL
-	cmd.Stdout = os.Stdout
-	cmd.Stderr = os.Stderr
-	if err := cmd.Run(); err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/content/2017/state-of-go-may/html/main.go b/content/2017/state-of-go-may/html/main.go
deleted file mode 100644
index 3668a66..0000000
--- a/content/2017/state-of-go-may/html/main.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package main
-
-import (
-	"html/template"
-	"log"
-	"os"
-)
-
-type Foo struct{ Bar string }
-
-func main() {
-	tmpl, err := template.New("home").Parse(`
-		<a title={{.Bar | html}}>
-	`)
-	if err != nil {
-		log.Fatalf("could not parse: %v", err)
-	}
-
-	foo := Foo{"haha onclick=evil()"}
-	if err := tmpl.Execute(os.Stdout, foo); err != nil {
-		log.Fatalf("could not execute: %v", err)
-	}
-}
diff --git a/content/2017/state-of-go-may/img/atomic.svg b/content/2017/state-of-go-may/img/atomic.svg
deleted file mode 100644
index 244fe37..0000000
--- a/content/2017/state-of-go-may/img/atomic.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-1 -1 124 82" width="124pt" height="82pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:28:54 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <text transform="translate(17.125 4.411133)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.143555" y="11" textLength="50.033203">Add new </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="58.51465" y="11" textLength="19.341797">API</tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.149414" y="39.39258" textLength="68.70117">Code repairs</tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x=".47753906" y="67.78516" textLength="67.365234">Remove old </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="67.180664" y="67.78516" textLength="19.341797">API</tspan>
-      </text>
-      <path d="M 18.1875 7105427e-21 L 103.0625 7105427e-21 C 113.102 7105427e-21 121.25 17.92 121.25 40 C 121.25 62.08 113.102 80 103.0625 80 L 18.1875 80 C 8.148 80 0 62.08 0 40 C 0 17.92 8.148 7105427e-21 18.1875 7105427e-21" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-    </g>
-  </g>
-</svg>
diff --git a/content/2017/state-of-go-may/img/benchmark.png b/content/2017/state-of-go-may/img/benchmark.png
deleted file mode 100644
index a8f4c5d..0000000
--- a/content/2017/state-of-go-may/img/benchmark.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/exec-poll.png b/content/2017/state-of-go-may/img/exec-poll.png
deleted file mode 100644
index 6dc0ef0..0000000
--- a/content/2017/state-of-go-may/img/exec-poll.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/flying.png b/content/2017/state-of-go-may/img/flying.png
deleted file mode 100644
index 7157563..0000000
--- a/content/2017/state-of-go-may/img/flying.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/gradual.svg b/content/2017/state-of-go-may/img/gradual.svg
deleted file mode 100644
index d0caccb..0000000
--- a/content/2017/state-of-go-may/img/gradual.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="-2 -1 305 178" width="305pt" height="178pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
-  <metadata> Produced by OmniGraffle 7.2.1 
-    <dc:date>2016-12-01 03:27:43 +0000</dc:date>
-  </metadata>
-  <defs>
-    <font-face font-family="Arial" font-size="12" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-    <font-face font-family="Arial" font-size="10" panose-1="2 11 6 4 2 2 2 2 2 4" units-per-em="1000" underline-position="-105.95703" underline-thickness="73.24219" slope="0" x-height="518.5547" cap-height="716.3086" ascent="905.2734" descent="-211.91406" font-weight="500">
-      <font-face-src>
-        <font-face-name name="ArialMT"/>
-      </font-face-src>
-    </font-face>
-  </defs>
-  <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
-    <title>Canvas 1</title>
-    <g>
-      <title>Layer 1</title>
-      <path d="M 107.86806 0 L 192.9375 0 C 203 0 211.16667 5.0524444 211.16667 11.277778 C 211.16667 17.503111 203 22.555556 192.9375 22.555556 L 107.86806 22.555556 C 97.80556 22.555556 89.63889 17.503111 89.63889 11.277778 C 89.63889 5.0524444 97.80556 0 107.86806 0" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 4.0814887)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="9.254666" y="11" textLength="50.033203">Add new </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="58.62576" y="11" textLength="19.341797">API</tspan>
-      </text>
-      <path d="M 107.86806 38.11111 L 192.9375 38.11111 C 203 38.11111 211.16667 43.163556 211.16667 49.38889 C 211.16667 55.61422 203 60.66667 192.9375 60.66667 L 107.86806 60.66667 C 97.80556 60.66667 89.63889 55.61422 89.63889 49.38889 C 89.63889 43.163556 97.80556 38.11111 107.86806 38.11111" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 42.1926)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 184.09028 76.22222 L 269.15972 76.22222 C 279.22222 76.22222 287.3889 81.27467 287.3889 87.5 C 287.3889 93.72533 279.22222 98.77778 269.15972 98.77778 L 184.09028 98.77778 C 174.02778 98.77778 165.86111 93.72533 165.86111 87.5 C 165.86111 81.27467 174.02778 76.22222 184.09028 76.22222" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(183.01389 80.30371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 30.868056 76.22222 L 115.9375 76.22222 C 126 76.22222 134.16667 81.27467 134.16667 87.5 C 134.16667 93.72533 126 98.77778 115.9375 98.77778 L 30.868056 98.77778 C 20.805556 98.77778 12.638889 93.72533 12.638889 87.5 C 12.638889 81.27467 20.805556 76.22222 30.868056 76.22222" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(29.791667 80.30371)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 107.86806 114.33333 L 192.9375 114.33333 C 203 114.33333 211.16667 119.38578 211.16667 125.61111 C 211.16667 131.83644 203 136.88889 192.9375 136.88889 L 107.86806 136.88889 C 97.80556 136.88889 89.63889 131.83644 89.63889 125.61111 C 89.63889 119.38578 97.80556 114.33333 107.86806 114.33333" stroke="#0432ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(106.79167 118.41482)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" x="9.260525" y="11" textLength="68.70117">Code repairs</tspan>
-      </text>
-      <path d="M 102.67639 152.66667 L 198.12917 152.66667 C 209.41987 152.66667 218.58333 157.71911 218.58333 163.94444 C 218.58333 170.16978 209.41987 175.22222 198.12917 175.22222 L 102.67639 175.22222 C 91.38569 175.22222 82.22222 170.16978 82.22222 163.94444 C 82.22222 157.71911 91.38569 152.66667 102.67639 152.66667" stroke="#ff2600" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
-      <text transform="translate(100.85833 156.74816)" fill="black">
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="6.5219835" y="11" textLength="67.365234">Remove old </tspan>
-        <tspan font-family="Arial" font-size="12" font-weight="500" fill="black" x="73.22511" y="11" textLength="19.341797">API</tspan>
-      </text>
-      <line x1="36948222e-20" y1="29.555556" x2="300.41667" y2="29.555556" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <line x1="36948222e-20" y1="144.27778" x2="300.41667" y2="144.27778" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
-      <text transform="translate(5 2.8919813)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 1</tspan>
-      </text>
-      <text transform="translate(5 40.225315)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 2</tspan>
-      </text>
-      <text transform="translate(5 155.33643)" fill="black">
-        <tspan font-family="Arial" font-size="10" font-weight="500" x="11.985894" y="9" textLength="34.472656">Stage 3</tspan>
-      </text>
-    </g>
-  </g>
-</svg>
diff --git a/content/2017/state-of-go-may/img/meetups.png b/content/2017/state-of-go-may/img/meetups.png
deleted file mode 100644
index a868c17..0000000
--- a/content/2017/state-of-go-may/img/meetups.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/quaternions.png b/content/2017/state-of-go-may/img/quaternions.png
deleted file mode 100644
index 875ec32..0000000
--- a/content/2017/state-of-go-may/img/quaternions.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/twitter-poll.png b/content/2017/state-of-go-may/img/twitter-poll.png
deleted file mode 100644
index a3cca39..0000000
--- a/content/2017/state-of-go-may/img/twitter-poll.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/wwg-logo.png b/content/2017/state-of-go-may/img/wwg-logo.png
deleted file mode 100644
index 613c1e0..0000000
--- a/content/2017/state-of-go-may/img/wwg-logo.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/img/wwg.png b/content/2017/state-of-go-may/img/wwg.png
deleted file mode 100644
index a86fbd2..0000000
--- a/content/2017/state-of-go-may/img/wwg.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go-may/syncmap/main.go b/content/2017/state-of-go-may/syncmap/main.go
deleted file mode 100644
index c389c62..0000000
--- a/content/2017/state-of-go-may/syncmap/main.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// +build go1.9
-
-package main
-
-import (
-	"fmt"
-	"sync"
-	"time"
-)
-
-func main() {
-	var m sync.Map
-
-	for i := 0; i < 3; i++ {
-		go func(i int) {
-			for j := 0; ; j++ {
-				m.Store(i, j)
-			}
-		}(i)
-	}
-
-	for i := 0; i < 10; i++ {
-		m.Range(func(key, value interface{}) bool {
-			fmt.Printf("%d: %d\t", key, value)
-			return true
-		})
-		fmt.Println()
-		time.Sleep(time.Second)
-	}
-}
diff --git a/content/2017/state-of-go.slide b/content/2017/state-of-go.slide
deleted file mode 100644
index a9633bd..0000000
--- a/content/2017/state-of-go.slide
+++ /dev/null
@@ -1,522 +0,0 @@
-The State of Go
-Where we are in February 2017
-
-Francesc Campoy
-Google Developer Advocate
-@francesc
-campoy@golang.org
-
-* Time flies
-
-Go 1.6 is one year old (Happy Birthday!)
-
-Go 1.7 is already 6 months old!
-
-Go 1.8 was released on February 16th.
-
-.image state-of-go/img/flying.png
-
-* Notes
-
-The slides are available on [[https://talks.golang.org/2017/state-of-go.slide]]
-
-Most of the code examples won't run except locally and using Go 1.8.
-
-The playground still runs Go 1.7.
-
-* Agenda
-
-Changes since Go 1.7:
-
-- The Language
-- The Standard Library
-- The Runtime
-- The Tooling
-- The Community
-
-* Changes to the language
-
-* Conversion rules
-
-How many times have you found yourself with two types that were *almost* equal?
-
-Let's say you define `Person`:
-
-.code state-of-go/stdlib/json_old.go /type Person/,/^}/
-
-And that for some reason, like JSON you also have:
-
-.code state-of-go/stdlib/json_old.go /var aux/,/}/
-
-* Conversion rules
-
-In order to convert `aux` to type `Person` you needed to do:
-
-.code state-of-go/stdlib/json_old.go /type Person/,/}/
-
-    return Person{
-        Name:     aux.Name,
-        AgeYears: aux.AgeYears,
-        SSN:      aux.SSN
-    }
-
-* Conversion rules
-
-Since Go 1.8 you can simply do:
-
-    return Person(aux)
-
-Both types still need to have:
-
-- same *sequence* of fields (the order matters)
-- corresponding fields with same type.
-
-* Conversion rules
-
-A non-constant value x can be converted to type T in any of these cases:
-
-- x is assignable to T.
-- x's type and T have identical underlying types.
-- x's type and T are unnamed pointer types and their pointer base types have identical underlying types.
-- ...
-
-* Conversion rules
-
-A non-constant value x can be converted to type T in any of these cases:
-
-- x is assignable to T.
-- *ignoring*struct*tags*, x's type and T have identical underlying types.
-- *ignoring*struct*tags*, x's type and T are unnamed pointer types and their pointer base types have identical underlying types.
-- ...
-
-* Ports to other platforms
-
-* Ports to other platforms
-
-32-bit MIPS
-
-- big-endian (`linux/mips`)
-- little-endian (`linux/mipsle`) - requires Floating Point Unit
-
-Go on DragonFly BSD now requires DragonFly 4.4.4+.
-
-Go on OpenBSD now requires OpenBSD 5.9+.
-
-Plan 9 is now better!
-
-* Ports to other platforms
-
-Go 1.8 supports OS X 10.8+. Likely last time we support 10.8.
-
-ARM:
-
-- Go 1.8 is the last version to support ARMv5E and ARMv6 processors.
-
-- Go 1.9 will require ARMv6K. Will it work on my platform?
-
-    go tool dist -check-armv6k
-
-* Tools
-
-* Fix
-
-Fixes the import path `"golang.org/x/net/context"` to `"context"`.
-
-.code state-of-go/tools/gofix.go
-
-Simply run the command below:
-
-.play state-of-go/tools/gofix.sh /go tool/
-
-Drop the `-diff` flag to rewrite the files.
-
-* Vet
-
-"Vet is stricter in some ways and looser where it previously caused false positives."
-
-Example of extra check:
-
-.play -edit state-of-go/tools/govet.go /func main/,
-
-`govet` detects the problem statically:
-
-.play state-of-go/tools/govet.sh /go vet/
-
-* SSA everywhere!
-
-The SSA backend:
-
-- generates more compact and efficient code
-- is a better platform for optimizations
-
-For 32-bit ARM systems this means 20-30% speed up!
-
-For others (where SSA was used already) gains are 0-10%.
-
-* SSA everywhere
-
-.image state-of-go/img/benchmark.png _ 800
-
-* Default GOPATH
-
-Yay!
-
-When `GOPATH` is not defined, the tool will use:
-
-- `$HOME/go` on Unix
-- `%USERPROFILE%\go` on Windows
-
-* go bug
-
-Easier way to create bugs including all relevant information.
-
-Example:
-
-.play state-of-go/tools/gobug.sh /go bug/
-
-* Runtime
-
-* Detection of concurrent map accesses
-
-Improvement on Go 1.6.
-
-.play state-of-go/runtime/mapcrash.go /const/,/Wait\(\)/
-
-Outputs:
-
-	fatal error: concurrent map read and map write
-	fatal error: concurrent map writes
-
-* Mutex Contention Profiling
-
-Profile your benchmarks and the contention on your mutexes.
-
-    go test bench=. -mutexprofile=mutex.out
-
-
-Alternatively, activate contention profiling with this new method.
-
-    runtime.SetMutexProfileFraction
-
-_Note_: For now `sync.RWMutex` is not profiled.
-
-* Mutex Contention Profiling
-
-Let's write a program to count how many times each factor appears from 2 to N.
-
-Example N = 10:
-
-    Factorizations:
-
-        2:  2
-        3:  3
-        4:  2 2
-        5:  5
-        6:  2 3
-        7:  7
-        8:  2 2 2
-        9:  3 3
-        10: 2 5
-
-    Count:
-
-        2: 8
-        3: 4
-        5: 2
-        7: 1
-
-* Mutex Contention Profiling
-
-Which option is better?
-
-Wide protected region:
-
-.play state-of-go/runtime/mutex/main.go /WIDE/,/Unlock/
-
-Narrow protected region:
-
-.play state-of-go/runtime/mutex/main.go /NARROW/,/}/
-
-* Benchmark
-
-    $ go test -bench=.
-
-#    BenchmarkNarrowSection/10-8         	  300000	      5085 ns/op
-#    BenchmarkNarrowSection/100-8        	   20000	     77458 ns/op
-#    BenchmarkNarrowSection/1000-8       	    2000	    909658 ns/op
-#    BenchmarkNarrowSection/10000-8      	     100	  21230633 ns/op
-#
-#    BenchmarkWideSection/10-8           	  200000	      5323 ns/op
-#    BenchmarkWideSection/100-8          	   10000	    103228 ns/op
-#    BenchmarkWideSection/1000-8         	    1000	   2131861 ns/op
-#    BenchmarkWideSection/10000-8        	      10	 103575793 ns/op
-
-.image state-of-go/img/mutex_noprofile.png _ 1000
-
-* Benchmarking with Mutex Contention
-
-    $ go test -bench=. -mutexprofile=mutex.out
-
-#    BenchmarkNarrowSection/10-8         	  300000	      5464 ns/op
-#    BenchmarkNarrowSection/100-8        	   10000	    108583 ns/op
-#    BenchmarkNarrowSection/1000-8       	    1000	   1378379 ns/op
-#    BenchmarkNarrowSection/10000-8      	     100	  32828827 ns/op
-#
-#    BenchmarkWideSection/10-8           	  200000	      7155 ns/op
-#    BenchmarkWideSection/100-8          	   10000	    197001 ns/op
-#    BenchmarkWideSection/1000-8         	     300	   4339571 ns/op
-#    BenchmarkWideSection/10000-8        	       5	 303559562 ns/op
-
-.image state-of-go/img/mutex_profile.png _ 1000
-
-* Analyzing the Mutex Contention Profile
-
-    $ go tool pprof runtime.test mutex.out
-    Entering interactive mode (type "help" for commands)
-    (pprof) list
-
-    0      5.38s (flat, cum) 43.97% of Total
-    .          .     34:				mu.Lock()
-    .          .     35:				m[f]++
-    .      5.38s     36:				mu.Unlock()
-
-    0      6.86s (flat, cum) 56.03% of Total
-    .          .     53:			mu.Lock()
-    .          .     54:			for _, f := range factors(i) {
-    .          .     55:				m[f]++
-    .          .     56:			}
-    .      6.86s     57:			mu.Unlock()
-
-* So much contention ...
-
-* Contention by CPU
-
-.image state-of-go/img/mutex_procs.png _ 1000
-
-* Comparing it to sequential algorithm
-
-.image state-of-go/img/mutex_all.png _ 1000
-
-* Comparing it to sequential algorithm (zoom)
-
-.image state-of-go/img/mutex_all_zoom.png _ 1000
-
-* Performance
-
-* GC history in tweets
-
-* go 1.5
-
-.image state-of-go/img/gct1.png _ 900
-
-* go 1.6
-
-.image state-of-go/img/gct2.png _ 900
-
-* go 1.7
-
-.image state-of-go/img/gct4.png _ 900
-
-* go 1.8 (beta 1)
-
-.image state-of-go/img/gct5.png _ 700
-
-* go 1.8 (beta 1) CPU
-
-.image state-of-go/img/gctcpu.png _ 800
-
-* defer is faster
-
-    name         old time/op  new time/op  delta
-    Defer-4       101ns ± 1%    66ns ± 0%  -34.73%  (p=0.000 n=20+20)
-    Defer10-4    93.2ns ± 1%  62.5ns ± 8%  -33.02%  (p=0.000 n=20+20)
-    DeferMany-4   148ns ± 3%   131ns ± 3%  -11.42%  (p=0.000 n=19+19)
-
-.image state-of-go/img/defer.png _ 500
-
-* cgo is also faster!
-
-    name       old time/op  new time/op  delta
-    CgoNoop-8  93.5ns ± 0%  51.1ns ± 1%  -45.34%  (p=0.016 n=4+5)
-
-.image state-of-go/img/cgo.png _ 500
-
-Source: [[https://dave.cheney.net/2016/11/19/go-1-8-toolchain-improvements][dave.cheney.net]]
-
-* Changes to the standard library
-
-* Sorting
-
-Exercise:
-
-Given a slice of `Person`
-
-    var p []Person
-
-Print the slice sorted by name, age, and SSN.
-
-.code state-of-go/stdlib/sort/sort_test.go /sort.Sort/,/bySSN/
-
-Easy, right?
-
-* Sorting
-
-Well, you forgot about this part.
-
-.code state-of-go/stdlib/sort/sort_test.go /byName/,/bySSN\) Swap/
-
-* sort.Slice
-
-Since Go 1.8 you can simply write this:
-
-.code state-of-go/stdlib/sort/sort_test.go /sort\.Slice/,/SSN/
-
-Also new `SliceStable` and `SliceIsSorted`.
-
-* Benchmark
-
-    N=1 go test -bench=.
-        BenchmarkSortSort-8     10000000               145 ns/op
-        BenchmarkSortSlice-8    10000000               190 ns/op
-    N=10 go test -bench=.
-        BenchmarkSortSort-8      2000000               918 ns/op
-        BenchmarkSortSlice-8     1000000              1776 ns/op
-    N=100 go test -bench=.
-        BenchmarkSortSort-8       100000             16588 ns/op
-        BenchmarkSortSlice-8       50000             39035 ns/op
-    N=1000 go test -bench=.
-        BenchmarkSortSort-8         5000            320951 ns/op
-        BenchmarkSortSlice-8        3000            446677 ns/op
-    N=10000 go test -bench=.
-        BenchmarkSortSort-8          500           3644480 ns/op
-        BenchmarkSortSlice-8         300           4962263 ns/op
-    N=100000 go test -bench=.
-        BenchmarkSortSort-8           30          43573572 ns/op
-        BenchmarkSortSlice-8          20          60861706 ns/op
-
-.caption Benchmark ran on my MacBook Pro (8 cores), simply indicative.
-
-* Benchmark
-
-.image state-of-go/img/bench.png _ 800
-
-* Benchmark (log/log)
-
-.image state-of-go/img/bench_log.png _ 800
-
-
-* Plugins
-
-Define a plugin:
-
-.code state-of-go/stdlib/plugin/plugin.go
-
-Then build it:
-
-    go build -buildmode=plugin
-
-_Note_: This currently works only on Linux.
-
-* Plugins
-
-.code state-of-go/stdlib/plugin/main.go /plugin.Open/,/Hello/
-
-* Plugins demo
-
-Demo video: [[https://twitter.com/francesc/status/827851085943566336][twitter.com/francesc]]
-
-Source code: [[https://github.com/campoy/golang-plugins][github.com/campoy/golang-plugins]]
-
-* HTTP shutdown
-
-Added `Shutdown` method to `http.Server`.
-
-Example:
-
-Call `Shutdown` when a signal is received:
-
-.code state-of-go/stdlib/shutdown.go /subscribe/,/}\(\)/
-
-* HTTP shutdown
-
-Check why the server stopped.
-
-.code state-of-go/stdlib/shutdown.go /HandleFunc/,/gracefully/
-
-
-* HTTP/2
-
-`http.Response` now satisfies the `http.Pusher` interface.
-
-    type Pusher interface {
-        Push(target string, opts *PushOptions) error
-    }
-
-A simple example:
-
-.code state-of-go/stdlib/http2/http2.go /func rootHandler/,/^}/
-
-* HTTP/2
-
-.play state-of-go/stdlib/http2/http2.go /func main/,/^}/
-
-HTTP: [[http://localhost:8080]]
-HTTP/2: [[https://localhost:8081]]
-
-* HTTP/2
-
-HTTP
-
-.image state-of-go/img/http.png _ 800
-
-HTTP/2
-
-.image state-of-go/img/http2.png _ 800
-
-* More context support
-
-Since Go 1.7:
-
-- net
-- net/http
-- os/exec
-
-Since Go 1.8:
-
-- http.Server.Shutdown
-- database/sql
-- net.Resolver
-
-* A couple more changes too
-
-.image state-of-go/img/more.png _ 1000
-.caption [[https://beta.golang.org/doc/go1.8][Go 1.8 release notes]]
-
-* The community
-
-* Women Who Go
-
-.image state-of-go/img/wwg.png _ 800
-.caption 16 chapters already! [[http://www.womenwhogo.org]]
-
-* Go meetups
-
-.image state-of-go/img/meetups.png _ 900
-.caption Gophers all around the world! [[http://go-meetups.appspot.com]]
-
-* Conferences:
-
-- [[https://fosdem.org/2017/][FOSDEM]], right here right now!
-- [[http://www.gophercon.in/][GopherCon India]], Feb 25-25th
-- [[https://gophercon.com/][Gophercon Denver]], Jul 12-15th
-- [[http://golanguk.com/][Golang UK]], August 16th-18th
-- [[http://2017.dotgo.eu/][dotGo]], Nov 6th
-
-* Go 1.8 release party, February 16th
-
-Go 1.8 ships soon!
-
-Go meetups are organising to hold a [[https://github.com/golang/go/wiki/Go-1.8-release-party][release party]] on the 16th of February.
-
-.image state-of-go/img/party-gopher.png _ 300
-.caption Join the party!!!
diff --git a/content/2017/state-of-go/img/bench.png b/content/2017/state-of-go/img/bench.png
deleted file mode 100644
index 76d3112..0000000
--- a/content/2017/state-of-go/img/bench.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/bench_log.png b/content/2017/state-of-go/img/bench_log.png
deleted file mode 100644
index b1e2d9c..0000000
--- a/content/2017/state-of-go/img/bench_log.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/benchmark.png b/content/2017/state-of-go/img/benchmark.png
deleted file mode 100644
index 18f7163..0000000
--- a/content/2017/state-of-go/img/benchmark.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/cgo.png b/content/2017/state-of-go/img/cgo.png
deleted file mode 100644
index b05fc8d..0000000
--- a/content/2017/state-of-go/img/cgo.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/defer.png b/content/2017/state-of-go/img/defer.png
deleted file mode 100644
index cf96e09..0000000
--- a/content/2017/state-of-go/img/defer.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/flying.png b/content/2017/state-of-go/img/flying.png
deleted file mode 100644
index 7157563..0000000
--- a/content/2017/state-of-go/img/flying.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gct1.png b/content/2017/state-of-go/img/gct1.png
deleted file mode 100644
index 22dbb67..0000000
--- a/content/2017/state-of-go/img/gct1.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gct2.png b/content/2017/state-of-go/img/gct2.png
deleted file mode 100644
index a3f8a29..0000000
--- a/content/2017/state-of-go/img/gct2.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gct3.png b/content/2017/state-of-go/img/gct3.png
deleted file mode 100644
index e1364f9..0000000
--- a/content/2017/state-of-go/img/gct3.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gct4.png b/content/2017/state-of-go/img/gct4.png
deleted file mode 100644
index d8f0668..0000000
--- a/content/2017/state-of-go/img/gct4.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gct5.png b/content/2017/state-of-go/img/gct5.png
deleted file mode 100644
index f34d6ea..0000000
--- a/content/2017/state-of-go/img/gct5.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/gctcpu.png b/content/2017/state-of-go/img/gctcpu.png
deleted file mode 100644
index 9d57649..0000000
--- a/content/2017/state-of-go/img/gctcpu.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/http.png b/content/2017/state-of-go/img/http.png
deleted file mode 100644
index e89d9bd..0000000
--- a/content/2017/state-of-go/img/http.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/http2.png b/content/2017/state-of-go/img/http2.png
deleted file mode 100644
index 552eb91..0000000
--- a/content/2017/state-of-go/img/http2.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/meetups.png b/content/2017/state-of-go/img/meetups.png
deleted file mode 100644
index 85a508c..0000000
--- a/content/2017/state-of-go/img/meetups.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/more.png b/content/2017/state-of-go/img/more.png
deleted file mode 100644
index 3160004..0000000
--- a/content/2017/state-of-go/img/more.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/mutex_all.png b/content/2017/state-of-go/img/mutex_all.png
deleted file mode 100644
index 8429e77..0000000
--- a/content/2017/state-of-go/img/mutex_all.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/mutex_all_zoom.png b/content/2017/state-of-go/img/mutex_all_zoom.png
deleted file mode 100644
index 7a1246c..0000000
--- a/content/2017/state-of-go/img/mutex_all_zoom.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/mutex_noprofile.png b/content/2017/state-of-go/img/mutex_noprofile.png
deleted file mode 100644
index 42a579e..0000000
--- a/content/2017/state-of-go/img/mutex_noprofile.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/mutex_procs.png b/content/2017/state-of-go/img/mutex_procs.png
deleted file mode 100644
index 340b9c0..0000000
--- a/content/2017/state-of-go/img/mutex_procs.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/mutex_profile.png b/content/2017/state-of-go/img/mutex_profile.png
deleted file mode 100644
index ff7daad..0000000
--- a/content/2017/state-of-go/img/mutex_profile.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/party-gopher.png b/content/2017/state-of-go/img/party-gopher.png
deleted file mode 100644
index d18690f..0000000
--- a/content/2017/state-of-go/img/party-gopher.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/img/wwg.png b/content/2017/state-of-go/img/wwg.png
deleted file mode 100644
index a86fbd2..0000000
--- a/content/2017/state-of-go/img/wwg.png
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/runtime/mapcrash.go b/content/2017/state-of-go/runtime/mapcrash.go
deleted file mode 100644
index d65fb5e..0000000
--- a/content/2017/state-of-go/runtime/mapcrash.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"sync"
-)
-
-func main() {
-	const workers = 100 // what if we have 1, 2, 25?
-
-	var wg sync.WaitGroup
-	wg.Add(workers)
-	m := map[int]int{}
-	for i := 1; i <= workers; i++ {
-		go func(i int) {
-			for j := 0; j < i; j++ {
-				m[i]++ // HL
-			}
-			wg.Done()
-		}(i)
-	}
-	wg.Wait()
-	fmt.Println(m)
-}
diff --git a/content/2017/state-of-go/runtime/mutex/main.go b/content/2017/state-of-go/runtime/mutex/main.go
deleted file mode 100644
index f5a1179..0000000
--- a/content/2017/state-of-go/runtime/mutex/main.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"flag"
-	"fmt"
-	"sort"
-	"sync"
-)
-
-func main() {
-	n := flag.Int("n", 10, "maximum number to consider")
-	flag.Parse()
-
-	type pair struct{ n, c int }
-	var pairs []pair
-	for n, c := range countFactorsWideSection(*n) {
-		pairs = append(pairs, pair{n, c})
-	}
-	sort.Slice(pairs, func(i, j int) bool { return pairs[i].n < pairs[j].n })
-	for _, p := range pairs {
-		fmt.Printf("%3d: %3d\n", p.n, p.c)
-	}
-}
-
-func countFactorsNarrowSection(n int) map[int]int {
-	m := map[int]int{}
-	var mu sync.Mutex
-	var wg sync.WaitGroup
-
-	wg.Add(n - 1)
-	for i := 2; i <= n; i++ {
-		go func(i int) {
-			// NARROW OMIT
-			for _, f := range factors(i) {
-				mu.Lock() // HL
-				m[f]++
-				mu.Unlock() // HL
-			}
-			wg.Done()
-		}(i)
-	}
-	wg.Wait()
-	return m
-}
-
-func countFactorsWideSection(n int) map[int]int {
-	m := map[int]int{}
-	var mu sync.Mutex
-	var wg sync.WaitGroup
-
-	wg.Add(n - 1)
-	for i := 2; i <= n; i++ {
-		go func(i int) {
-			// WIDE OMIT
-			mu.Lock() // HL
-			for _, f := range factors(i) {
-				m[f]++
-			}
-			mu.Unlock() // HL
-			wg.Done()
-		}(i)
-	}
-	wg.Wait()
-	return m
-}
-
-func countFactorsSeq(n int) map[int]int {
-	m := map[int]int{}
-	for i := 2; i <= n; i++ {
-		for _, f := range factors(i) { // HL
-			m[f]++ // HL
-		} // HL
-	}
-	return m
-}
-
-func factors(v int) []int {
-	var fs []int
-	for v > 1 {
-		for f := 2; f <= v; f++ {
-			if v%f == 0 {
-				v = v / f
-				fs = append(fs, f)
-				break
-			}
-		}
-	}
-	return fs
-}
diff --git a/content/2017/state-of-go/runtime/mutex/main_test.go b/content/2017/state-of-go/runtime/mutex/main_test.go
deleted file mode 100644
index a4993c2..0000000
--- a/content/2017/state-of-go/runtime/mutex/main_test.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"testing"
-)
-
-func benchFunc(b *testing.B, f func(int) map[int]int) {
-	for n := 10; n <= 10000; n *= 10 {
-		b.Run(fmt.Sprint(n), func(b *testing.B) {
-			for i := 0; i < b.N; i++ {
-				f(n)
-			}
-		})
-	}
-}
-
-func BenchmarkNarrowSection(b *testing.B) { benchFunc(b, countFactorsNarrowSection) }
-func BenchmarkWideSection(b *testing.B)   { benchFunc(b, countFactorsWideSection) }
-func BenchmarkSq(b *testing.B)            { benchFunc(b, countFactorsSeq) }
diff --git a/content/2017/state-of-go/runtime/mutex/mutex.out b/content/2017/state-of-go/runtime/mutex/mutex.out
deleted file mode 100644
index 59ea5b6..0000000
--- a/content/2017/state-of-go/runtime/mutex/mutex.out
+++ /dev/null
@@ -1,5 +0,0 @@
---- mutex:
-cycles/second=2793570419
-sampling period=1
-19155477440 1345723 @ 0x10575f1 0x10f0266 0x1051c61
-15032825888 1091734 @ 0x10575f1 0x10f0106 0x1051c61
diff --git a/content/2017/state-of-go/runtime/mutex/mutex.test b/content/2017/state-of-go/runtime/mutex/mutex.test
deleted file mode 100755
index 12ef088..0000000
--- a/content/2017/state-of-go/runtime/mutex/mutex.test
+++ /dev/null
Binary files differ
diff --git a/content/2017/state-of-go/stdlib/http2/cert.pem b/content/2017/state-of-go/stdlib/http2/cert.pem
deleted file mode 100644
index 6612f86..0000000
--- a/content/2017/state-of-go/stdlib/http2/cert.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC/jCCAeagAwIBAgIQJmT9thxoUtA2lXTupgK7cDANBgkqhkiG9w0BAQsFADAS
-MRAwDgYDVQQKEwdBY21lIENvMB4XDTE3MDEyOTIwNTUxNVoXDTE4MDEyOTIwNTUx
-NVowEjEQMA4GA1UEChMHQWNtZSBDbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAL4TpHOAUq54uyrGj06xE7TZ0+SPVXWiydYP4hg1QKkhFcwc2NHwnzIf
-wgFTBGXz7TrrWpLHNJLvWKjXeFDQo35BKfWd4u2TKMU43HUdPSgFT8skhbP3FYbJ
-WIYoD2J2BaMxylMYfGGm2azqnuTPc0/Qn98RLDFe9TAykDuel3YWvdlQJGYo+cth
-bUURzTzvQzmnMpQ+CxpU+TdBz4Ngh+e29CEfZGOWXtd/7ydWyK3BznzgPLBTuU9N
-3f0mC40sDayTTBaUiI+GkSEeqK0Ft/gwozM1KOK8l5lfqtOYzqhLjAAzcD5Hf8ZK
-GsnC5ojJkuypLY/uAq/BX+2oL4wZi+UCAwEAAaNQME4wDgYDVR0PAQH/BAQDAgWg
-MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwGQYDVR0RBBIwEIIO
-bG9jYWxob3N0OjgwODAwDQYJKoZIhvcNAQELBQADggEBACqdIJJFcow4WJ0YW6l2
-bjYj0fAf7GZdLP3tRYzxcj1ORoJf9FIN2jwlraEgtXN2hhEK15nVgrxbrWzDMkrx
-e9VhGOSWnixo3rnN2i2vUEaKqZubawhzcU2/5ZnP6Q1JH00WYqavNYhfQIOdNI6e
-s6xqz+MUhYSw3ZhjgFGMAeed0fRIksWRlbioTAOk1TxoChTaa+N+tTf9Niwr1Eaz
-Cy6ygwmlJYhi/iutknG2Fp+MjDPX2hmemgoJYbn8i1C0DQuNlKxeNwY3zfEBxazu
-nLFbDwbyCIO+2q1+eervE1TF5Vw6ODNqRWKgsl9VnGmL369p8H1plU//SnQh4TIW
-nKc=
------END CERTIFICATE-----
\ No newline at end of file
diff --git a/content/2017/state-of-go/stdlib/http2/http2.go b/content/2017/state-of-go/stdlib/http2/http2.go
deleted file mode 100644
index 29a40f5..0000000
--- a/content/2017/state-of-go/stdlib/http2/http2.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"fmt"
-	"go/build"
-	"log"
-	"net/http"
-	"path/filepath"
-)
-
-var cert, key string
-
-func init() {
-	pkg, err := build.Import("golang.org/x/talks/content/2017/state-of-go/stdlib/http2", ".", build.FindOnly)
-	if err != nil {
-		log.Fatal(err)
-	}
-	cert = filepath.Join(pkg.Dir, "cert.pem")
-	key = filepath.Join(pkg.Dir, "key.pem")
-}
-
-func main() {
-	http.HandleFunc("/", rootHandler)
-	http.HandleFunc("/style.css", cssHandler)
-
-	go func() {
-		log.Fatal(http.ListenAndServeTLS("127.0.0.1:8081", cert, key, nil))
-	}()
-	log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil))
-}
-
-func rootHandler(w http.ResponseWriter, r *http.Request) {
-	if p, ok := w.(http.Pusher); ok { // HL
-		err := p.Push("/style.css", nil) // HL
-		if err != nil {
-			log.Printf("could not push: %v", err)
-		}
-	}
-
-	fmt.Fprintln(w, html)
-}
-
-func cssHandler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintln(w, css)
-}
-
-const (
-	html = `
-<html>
-<head>
-	<link rel="stylesheet" href="/style.css">
-	<title>HTTP2 push test</title>
-</head>
-<body>
-	<h1>Hello</h1>
-</body>
-</html>
-`
-	css = `
-h1 {
-    color: red;
-    text-align: center;
-    text-shadow: green 0 0 40px;
-    font-size: 10em;
-}
-`
-)
diff --git a/content/2017/state-of-go/stdlib/http2/key.pem b/content/2017/state-of-go/stdlib/http2/key.pem
deleted file mode 100644
index cd458b0..0000000
--- a/content/2017/state-of-go/stdlib/http2/key.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAvhOkc4BSrni7KsaPTrETtNnT5I9VdaLJ1g/iGDVAqSEVzBzY
-0fCfMh/CAVMEZfPtOutaksc0ku9YqNd4UNCjfkEp9Z3i7ZMoxTjcdR09KAVPyySF
-s/cVhslYhigPYnYFozHKUxh8YabZrOqe5M9zT9Cf3xEsMV71MDKQO56Xdha92VAk
-Zij5y2FtRRHNPO9DOacylD4LGlT5N0HPg2CH57b0IR9kY5Ze13/vJ1bIrcHOfOA8
-sFO5T03d/SYLjSwNrJNMFpSIj4aRIR6orQW3+DCjMzUo4ryXmV+q05jOqEuMADNw
-Pkd/xkoaycLmiMmS7Kktj+4Cr8Ff7agvjBmL5QIDAQABAoIBAFUAe76bWF5l523N
-tjC+x81MzJGd993Pmut71uR0jCIWhaTuEZhxPwAva5ckBQeC+kgrECoro7tCBigb
-k9awNy0y/wy0OtN7x/PK5ewJ01ueZHy4LIK6sInCaTA1oguqNAMzNQPMI3OYJihK
-FBzHGQ5MgfJDv7ukd4nCUvYWii1oYNoNsc/A2uYPonLRJfAnPLAfZ+ikiPdydLum
-4/nLxBKD5Yke/Y8lpxh1RzZz28G2YX9WKTwAZuBo9AJ+4U7bkjgSof5nUOlwvbcg
-Z9d/DMdWkI7yQxhaQzXaFWNmvpt6NvqHUSPYnqQnaCDPCRbUR8u3YU8vwCRN60ss
-dzac+4ECgYEA2+jYj3pllRMaifnAEVg4MS3mpQ9o+XCzQb4H7ecFztXh16Uom0e/
-gnI1cqutMdhcyAoy++RxTXLCca9xd5e8tC3N2kZG9+3vUV0kn43LbVY4sCK150wM
-UHy7TMdoAqg36W3AhTunIZ1sgDM/qc5LcesXeHVDUQF2NmteZnga9m0CgYEA3UVq
-y42mBXMuCqY8GZbTQlZqowqBjNLddhVxXjuuAHcxCTlLmD63L7UWx24dOAeVbEfq
-Aev6tsOiaNB+JPEGYfQf9ESRxbt3ZFArYP6+be94NmETzNVtekwCJqfp7Cjyzj1a
-C00r5L0qOSP0P8lvSrBOwT2Yxq3JVNL3EDj1YFkCgYAG7dpNAw1KWjS+3ji4EzCK
-FCktUEP9gBiV3LgBPgNH1iNsmQ6jfepB4PlgKJqndGrP/spGd5c+WnxX+rA3lXdj
-sgHHe+lmjH+675Vk1aHwSwQ0QJO8uv+0VYnNTIcxdj10xHmJeSy1+XDexT6fShnE
-eCTgLcm2NraT1mQ+FFC9LQKBgC3rtyMxbXAaHEcHgteIrqVIy+60QniYVm+oOZPl
-7NGZ6upQIrkg4uGawnR3DMdRA5iqQA1QDQMbDLyV8Gf4QWvYvzzxchNIOZnu7WG+
-3IRyO0+FzBcpgAPufE/Lb0eco+9bWjGYPXDGNVoQdSM7ycYFWwLNpsQs0uiws6eB
-OqNZAoGBALM48r7mA/3KuFH6CcRcsCGfcCoXkzjGogsxIfN2yKmNUu33koYkzUxc
-ihgXBGwQ5Sqdrqz9BYh1CArXQvVkb+Q0wEAVS1ikbMozTQQelI8FRiToVJF37zoS
-UgA+CE3BSuHa+zMBue+guh/+ssMlKPnpzTgWjkk50GXUAMy/NVf5
------END RSA PRIVATE KEY-----
diff --git a/content/2017/state-of-go/stdlib/json_old.go b/content/2017/state-of-go/stdlib/json_old.go
deleted file mode 100644
index 8ad0b97..0000000
--- a/content/2017/state-of-go/stdlib/json_old.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"log"
-)
-
-func main() {
-	in := []byte(`
-    {
-        "full_name": "Gopher",
-        "age": 7,
-        "social_security": 1234
-    }`)
-
-	var p Person
-	if err := json.Unmarshal(in, &p); err != nil {
-		log.Fatal(err)
-	}
-	fmt.Printf("%+v\n", p)
-}
-
-type Person struct {
-	Name     string
-	AgeYears int
-	SSN      int
-}
-
-func (p *Person) UnmarshalJSON(data []byte) error {
-	var aux struct {
-		Name     string `json:"full_name"`
-		AgeYears int    `json:"age"`
-		SSN      int    `json:"social_security"`
-	}
-	if err := json.Unmarshal(data, &aux); err != nil {
-		return err
-	}
-	*p = Person{
-		Name:     aux.Name,
-		AgeYears: aux.AgeYears,
-		SSN:      aux.SSN,
-	}
-	*p = Person(aux)
-	return nil
-}
diff --git a/content/2017/state-of-go/stdlib/plugin/main.go b/content/2017/state-of-go/stdlib/plugin/main.go
deleted file mode 100644
index 925de05..0000000
--- a/content/2017/state-of-go/stdlib/plugin/main.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "plugin"
-
-func main() {
-	p, err := plugin.Open("plugin_name.so")
-	if err != nil {
-		panic(err)
-	}
-
-	v, err := p.Lookup("V")
-	if err != nil {
-		panic(err)
-	}
-
-	f, err := p.Lookup("F")
-	if err != nil {
-		panic(err)
-	}
-
-	*v.(*int) = 7
-	f.(func())() // prints "Hello, number 7"
-}
diff --git a/content/2017/state-of-go/stdlib/plugin/plugin.go b/content/2017/state-of-go/stdlib/plugin/plugin.go
deleted file mode 100644
index 0fbe41c..0000000
--- a/content/2017/state-of-go/stdlib/plugin/plugin.go
+++ /dev/null
@@ -1,9 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "fmt"
-
-var V int
-
-func F() { fmt.Printf("Hello, number %d\n", V) }
diff --git a/content/2017/state-of-go/stdlib/shutdown.go b/content/2017/state-of-go/stdlib/shutdown.go
deleted file mode 100644
index c35f9f7..0000000
--- a/content/2017/state-of-go/stdlib/shutdown.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"context"
-	"fmt"
-	"log"
-	"net/http"
-	"os"
-	"os/signal"
-)
-
-func main() {
-	// subscribe to SIGINT signals
-	quit := make(chan os.Signal) // HL
-	signal.Notify(quit, os.Interrupt)
-
-	srv := &http.Server{Addr: ":8080", Handler: http.DefaultServeMux}
-	go func() { // HL
-		<-quit // HL
-		log.Println("Shutting down server...")
-		if err := srv.Shutdown(context.Background()); err != nil { // HL
-			log.Fatalf("could not shutdown: %v", err)
-		}
-	}()
-
-	http.HandleFunc("/", handler)
-	err := srv.ListenAndServe()
-	if err != http.ErrServerClosed { // HL
-		log.Fatalf("listen: %s\n", err)
-	}
-	log.Println("Server gracefully stopped")
-}
-
-func handler(w http.ResponseWriter, r *http.Request) {
-	fmt.Fprintln(w, "hello")
-}
diff --git a/content/2017/state-of-go/stdlib/sort/sort_test.go b/content/2017/state-of-go/stdlib/sort/sort_test.go
deleted file mode 100644
index 1cc20fb..0000000
--- a/content/2017/state-of-go/stdlib/sort/sort_test.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// +build go1.8
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-	"os"
-	"sort"
-	"strconv"
-	"testing"
-)
-
-type Person struct {
-	Name     string
-	AgeYears int
-	SSN      int64
-}
-
-type byName []Person
-
-func (b byName) Len() int           { return len(b) }
-func (b byName) Less(i, j int) bool { return b[i].Name < b[j].Name }
-func (b byName) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
-
-type byAge []Person
-
-func (b byAge) Len() int           { return len(b) }
-func (b byAge) Less(i, j int) bool { return b[i].AgeYears < b[j].AgeYears }
-func (b byAge) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
-
-type bySSN []Person
-
-func (b bySSN) Len() int           { return len(b) }
-func (b bySSN) Less(i, j int) bool { return b[i].SSN < b[j].SSN }
-func (b bySSN) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
-
-func BenchmarkSortSort(b *testing.B) {
-	p := manyPeople()
-	for i := 0; i < b.N; i++ {
-		sort.Sort(byName(p))
-		sort.Sort(byAge(p))
-		sort.Sort(bySSN(p))
-	}
-}
-
-func BenchmarkSortSlice(b *testing.B) {
-	p := manyPeople()
-	for i := 0; i < b.N; i++ {
-		sort.Slice(p, func(i, j int) bool { return p[i].Name < p[j].Name })
-		sort.Slice(p, func(i, j int) bool { return p[i].AgeYears < p[j].AgeYears })
-		sort.Slice(p, func(i, j int) bool { return p[i].SSN < p[j].SSN })
-	}
-}
-
-func manyPeople() []Person {
-	n, err := strconv.Atoi(os.Getenv("N"))
-	if err != nil {
-		panic(err)
-	}
-	p := make([]Person, n)
-	for i := range p {
-		p[i].AgeYears = rand.Intn(100)
-		p[i].SSN = rand.Int63n(1000000000)
-		p[i].Name = fmt.Sprintf("Mr or Ms %d", p[i].AgeYears)
-	}
-	return p
-}
diff --git a/content/2017/state-of-go/tools/gobug.sh b/content/2017/state-of-go/tools/gobug.sh
deleted file mode 100644
index 5100fea..0000000
--- a/content/2017/state-of-go/tools/gobug.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /bin/bash
-go bug
\ No newline at end of file
diff --git a/content/2017/state-of-go/tools/gofix.go b/content/2017/state-of-go/tools/gofix.go
deleted file mode 100644
index 1c83ded..0000000
--- a/content/2017/state-of-go/tools/gofix.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import "golang.org/x/net/context" // HL
-
-func main() {
-	ctx := context.Background()
-	doSomething(ctx)
-}
-
-func doSomething(ctx context.Context) {
-	// doing something
-}
diff --git a/content/2017/state-of-go/tools/gofix.sh b/content/2017/state-of-go/tools/gofix.sh
deleted file mode 100644
index f0096e6..0000000
--- a/content/2017/state-of-go/tools/gofix.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-go tool fix -diff -force=context state-of-go/tools/gofix.go
\ No newline at end of file
diff --git a/content/2017/state-of-go/tools/govet.go b/content/2017/state-of-go/tools/govet.go
deleted file mode 100644
index f1eced1..0000000
--- a/content/2017/state-of-go/tools/govet.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// +build ignore,OMIT
-
-package main
-
-import (
-	"io"
-	"log"
-	"net/http"
-	"os"
-)
-
-func main() {
-	res, err := http.Get("https://golang.org")
-	defer res.Body.Close()
-	if err != nil {
-		log.Fatal(err)
-	}
-	io.Copy(os.Stdout, res.Body)
-}
diff --git a/content/2017/state-of-go/tools/govet.sh b/content/2017/state-of-go/tools/govet.sh
deleted file mode 100644
index fd3f847..0000000
--- a/content/2017/state-of-go/tools/govet.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-go vet state-of-go/tools/govet.go
\ No newline at end of file
diff --git a/content/2019/playground-v3/arch.png b/content/2019/playground-v3/arch.png
deleted file mode 100644
index 95fa8f5..0000000
--- a/content/2019/playground-v3/arch.png
+++ /dev/null
Binary files differ
diff --git a/content/2019/playground-v3/cos.png b/content/2019/playground-v3/cos.png
deleted file mode 100644
index 8195ee2..0000000
--- a/content/2019/playground-v3/cos.png
+++ /dev/null
Binary files differ
diff --git a/content/2019/playground-v3/hello.png b/content/2019/playground-v3/hello.png
deleted file mode 100644
index ed25abb..0000000
--- a/content/2019/playground-v3/hello.png
+++ /dev/null
Binary files differ
diff --git a/content/2019/playground-v3/pic.png b/content/2019/playground-v3/pic.png
deleted file mode 100644
index 498a2c4..0000000
--- a/content/2019/playground-v3/pic.png
+++ /dev/null
Binary files differ
diff --git a/content/2019/playground-v3/playground-v3.slide b/content/2019/playground-v3/playground-v3.slide
deleted file mode 100644
index 35d632a..0000000
--- a/content/2019/playground-v3/playground-v3.slide
+++ /dev/null
@@ -1,231 +0,0 @@
-Playground v3
-2019-10-08
-
-Brad Fitzpatrick
-@bradfitz
-bradfitz@golang.org
-
-* Overview
-
-- This is talk about play.golang.org
-- What it does
-- History of implementations
-- Latest incarnation
-
-* What does it does
-
-- Lets users run untrusted code in browser
-- Used by play.golang.org, tour.golang.org, godoc example snippets, etc.
-
-.image hello.png
-
-* Time
-
-- time is faked, cacheable
-- starts in Nov 2009, when Go was announced publicly
-
-.image time.png
-
-* Sleep replays
-
-- sleeps are emulated server-side (special runtime support)
-- stdout/stderr writes prefixed with binary header containing virtual time
-- sandbox parses output, simulates passage of time in browser
-- doesn't tie up server resources
-
-* Fun: clear screen with \f
-
-.link https://play.golang.org/p/lrSX-aXEOMe animation example
-
-  func main() {
-     const x = `.oOo`
-     for i := 0; i < 100; i++ {
-         fmt.Printf("\f%c", x[i%len(x)])
-         time.Sleep(200 * time.Millisecond)
-     }
-  }
-
-* Fun: images
-
-.link https://play.golang.org/p/t9ECgoq0XSD image example
-
-.image pic.png _ 600
-
-* History
-
-Caveat: fake, retroactive version numbers follow for ease of discussion.
-
-In reality, v0.0.0-20141209125517-dba9ba1953c6
-
-* Native Client (NaCl)
-
-- July 2009, four months before Go
-- GOOS=nacl, GOARCH={386,amd64p32,arm}
-- restricted, verifiable subset of {386,amd64,arm}
-- some had ambitions to add it to Chrome, web
-- most people opposed
-- "Portable NativeClient" (PNaCl) later proposed, opposed
-- GOARCH=amd64p32: amd64, but 32-bit pointers
-
-* Playground ~v1
-
-- App Engine frontend, in Python, made RPC calls to pass source to:
-- C++ Borg backend, compiled Go to NaCl, ran under ptrace syscall filter
-- standard two layers of paranoia; either sufficient in theory alone, ptrace layer logs/alerts hard on any violation
-
-* Playground ~v1.1
-
-- GAE frontend rewritten from Python to Go
-- backend still C++ running NaCl on Borg
-
-* Playground ~v2
-
-- move to App Engine Flex, where we can do more stuff
-- unify frontend + backend
-- run Native Client sel_ldr (NaCl runner binary) ourselves
-- no more C++
-- no more Borg
-
-* 2017
-
-- May 30, 2017: Portable Native Client (PNaCl) deprecated
-- Go never even implemented PNaCl (fortunately, in retrospect)
-- Go still implements the doubly deprecated arch-specific NaCl variants
-
-* 2018, 2019...
-
-- WebAssembly rise continues
-- NaCl looking increasingly odd, high maintenance cost relative to its worth
-- maintenance: builder resources
-- maintenance: hoping runtime faketime patches still apply at every release
-- maintenance: amd64p32
-- but play.golang.org still depends on it
-
-* How to sandbox play.golang.org without NaCl?
-
-* Plan: Playground v3
-
-- delete nacl/*
-- move Nacl's funky faketime support to linux/amd64 at least...
-- +build faketime (in master for Go 1.14; thanks, Austin!)
-- run otherwise regular linux/amd64 binaries in some sandbox
-
-* gVisor
-
-- gVisor is a mostly complete re-implementation of the Linux system call interface, in Go
-- runs under various modes ("platforms"): KVM, ptrace
-- everything is hookable: ~FUSE on steroids
-- performance pretty good, especially with KVM, not that we really need performance
-- was Google-internal, open source May 2018
-
-* Who uses gVisor?
-
-- App Engine 2nd gen runtimes (all new ones)
-- Cloud Run
-- Cloud Functions
-- GKE Sandbox (opt-in hardened containers)
-- ...
-
-* How to use gVisor?
-
-- tricky, ~unsupported to use directly
-- comes with a "runsc" wrapper command that team recommends
-
-* runsc woes
-
-- runsc ("run secure container") is an OCI "runc"-compatible frontend to gVisor
-- runc interface itself is tricky
-- kinda gross to use directly
-- syzkaller fuzzer does, though, so Go driver code exists
-- but ...
-
-* root
-
-- runsc requires root
-- without networking and ptrace instead of kvm, it _almost_ doesn't require root, but gvisor team isn't quite done with rootless
-- App Engine, etc doesn't give us real root (uid=0, but fake, not enough caps, under gVisor itself)
-- gvisor can't run nested under gvisor (can't run on Cloud Run, for example)
-
-* Docker
-
-- But Docker supports runsc easily:
-
-    docker run --runtime=runsc ...
-
-- So we can just run a dynamically scaled pool of VMs running Docker + a backend HTTP server driving Docker, with a load balancer in front of the pool of VMs.
-
-* v3 architecture
-
-- existing HTTP frontend takes source, compiles binary (for now)
-- HTTP PUTs compiled binary to backend HTTP server
-
-* v3 architecture
-
-.image arch.png _ 700
-
-* On each VM
-
-- one privileged container that speaks HTTP
-- has bind-mounted /var/run/docker.dock, to control its parent docker
-- creates sibling-but-gvisor'ed containers for each play
-- HTTP server reads PUT'ed binary, pipes into secure container, reads stdout/stderr response & exit status
-- replies over HTTP to frontend
-
-* VM view
-
-.image cos.png _ 900
-
-* Transition plan
-
-* Today
-
-- Frontend compiles to nacl/amd64p32, runs binary
-
-* Today+1
-
-- Frontend compiles to nacl/amd64p32, runs binary
-- opt-in support for using new backend (in either linux/amd64 or nacl/amd64p32 mode)
-- temporary support in new backend to understand how to wrap nacl with sel_ldr binary
-
-* Today+2:
-
-- Frontend compiles to nacl/amd64p2, PUTs all requests to new backend
-- gets us operational experience with backend before Go 1.14 release day chaos
-
-* Go 1.14 release day
-
-- flip a bit in frontend that forces linux/amd64
-- NaCl no longer allowed
-- can delete all its playground code (minimal)
-
-* Future possibilities
-
-- stop shipping compiled binaries around the network?
-- ... minimal win, might not be worth it
-- unify compilation & running in the backend?
-- 0, 1, or 2 sandbox services to update per Go release?
-- 2 is too many
-- 1 is today, acceptable
-- 0 might be too risky
-
-* Alternatives
-
-* Cloud Run?
-
-- Almost perfect
-- but doesn't let you disable network (yet? Cloud Functions has VPC connectors, can route traffic to Linux VM that drops packets)
-- if root-less runsc happens, can run in ptrace mode under Cloud Run
-
-* GKE Sandbox?
-
-- not obviously any simpler, faster than this setup
-- but might be alternative later
-- worry about node pool elasticity latency? COS boots quickly.
-
-* WebAssembly?
-
-- large binaries for users
-- still experimental support, but improving
-- use WebAssembly for x/tools/cmd/present?
-- ... because this Docker runsc contraption is too complicated for casual users giving talks on laptops
-- or just run unsandboxes in cmd/present
diff --git a/content/2019/playground-v3/time.png b/content/2019/playground-v3/time.png
deleted file mode 100644
index 3e7f629..0000000
--- a/content/2019/playground-v3/time.png
+++ /dev/null
Binary files differ
diff --git a/go.mod b/go.mod
deleted file mode 100644
index 63a51b9..0000000
--- a/go.mod
+++ /dev/null
@@ -1,3 +0,0 @@
-module golang.org/x/talks
-
-go 1.11