diff --git a/Gemfile b/Gemfile
index e8a7006386e7ce6b8920b6d6e4283d0d833455d8..c99d6dd1146f031725734b03b147dcc37043f790 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,3 @@
-source 'https://rubygems.org'
+source "https://rubygems.org"
 
-gem 'jekyll'
+gem "jekyll"
diff --git a/Gemfile.lock b/Gemfile.lock
index 44b8aa1236e1598bc9705d8928048105c521533f..1e4cef54867a7064dc04c15510ab927f147da64a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -4,7 +4,7 @@ GEM
     addressable (2.6.0)
       public_suffix (>= 2.0.2, < 4.0)
     colorator (1.1.0)
-    concurrent-ruby (1.1.4)
+    concurrent-ruby (1.1.5)
     em-websocket (0.5.1)
       eventmachine (>= 0.12.9)
       http_parser.rb (~> 0.6.0)
@@ -29,10 +29,10 @@ GEM
       safe_yaml (~> 1.0)
     jekyll-sass-converter (1.5.2)
       sass (~> 3.4)
-    jekyll-watch (2.1.2)
+    jekyll-watch (2.2.1)
       listen (~> 3.0)
     kramdown (1.17.0)
-    liquid (4.0.1)
+    liquid (4.0.3)
     listen (3.1.5)
       rb-fsevent (~> 0.9, >= 0.9.4)
       rb-inotify (~> 0.9, >= 0.9.7)
@@ -46,8 +46,8 @@ GEM
       ffi (~> 1.0)
     rouge (3.3.0)
     ruby_dep (1.5.0)
-    safe_yaml (1.0.4)
-    sass (3.7.3)
+    safe_yaml (1.0.5)
+    sass (3.7.4)
       sass-listen (~> 4.0.0)
     sass-listen (4.0.0)
       rb-fsevent (~> 0.9, >= 0.9.4)
diff --git a/_notes/fourier_examples.md b/_notes/fourier_examples.md
new file mode 100644
index 0000000000000000000000000000000000000000..853bf6ea262a892cfc91bc6de715537b208faee6
--- /dev/null
+++ b/_notes/fourier_examples.md
@@ -0,0 +1,9 @@
+---
+title: Fourier Examples
+---
+
+Working these out by hand helped me debug my CT algorithms.
+
+![page_1](../assets/img/notes_ft_examples_1.jpg)
+![page_2](../assets/img/notes_ft_examples_2.jpg)
+![page_3](../assets/img/notes_ft_examples_3.jpg)
diff --git a/_notes/fourier_series.md b/_notes/fourier_series.md
new file mode 100644
index 0000000000000000000000000000000000000000..e735f693a4a559d4a1b10e918309f7dca2c33ece
--- /dev/null
+++ b/_notes/fourier_series.md
@@ -0,0 +1,164 @@
+---
+title: Fourier Series
+---
+
+## Definition
+
+Let $$f: \mathbb{R} \rightarrow \mathbb{C}$$ be a reasonably well behaved $$L$$-periodic function
+(i.e. $$f(x) = f(x + L)$$ for all $$x$$). Then $$f$$ can be expressed as an infinite series
+
+$$
+f(x) = \sum_{n \in \mathbb{Z}} A_n e^{2 \pi i n x / L}
+$$
+
+The values of the coefficients $$A_n$$ can be found using the orthogonality of basic exponential
+sinusoids. For any $$m \in \mathbb{Z}$$,
+
+$$
+\begin{align*}
+\int_{-L/2}^{L/2} f(x) e^{-2 \pi i m x / L} dx
+&= \int_{-L/2}^{L/2} \sum_{n \in \mathbb{Z}} A_n e^{2 \pi i n x / L} e^{-2 \pi i m x / L} dx \\
+&= \sum_{n \in \mathbb{Z}} A_n \int_{-L/2}^{L/2} e^{2 \pi i (n - m) x / L} dx \\
+&= \sum_{n \in \mathbb{Z}} A_n L \delta_{nm} \\
+&= L A_m
+\end{align*}
+$$
+
+where the second to last line uses [Kronecker delta](https://en.wikipedia.org/wiki/Kronecker_delta)
+notation. Thus by the periodicity of $$f$$ and the exponential function
+
+$$
+\begin{align*}
+A_n &= \frac{1}{L} \int_{-L/2}^{L/2} f(x) e^{-2 \pi i n x / L} dx \\
+&= \frac{1}{L} \int_{0}^{L} f(x) e^{-2 \pi i n x / L} dx
+\end{align*}
+$$
+
+
+## Relation to the Fourier Transform
+
+Now suppose we have a function $$f: \mathbb{R} \rightarrow \mathbb{C}$$, and we construct an
+$$L$$-periodic version
+
+$$
+f_L(x) = \sum_{n \in \mathbb{Z}} f(x + nL)
+$$
+
+The coefficients of the Fourier Series of $$f_L$$ are
+
+$$
+\begin{align*}
+L A_n &= \int_0^L \sum_{m \in \mathbb{Z}} f(x + mL) e^{-2 \pi i n x / L} dx \\
+&= \sum_{m \in \mathbb{Z}} \int_0^L f(x + mL) e^{-2 \pi i n x / L} dx \\
+&= \sum_{m \in \mathbb{Z}} \int_{mL}^{(m + 1)L} f(x) e^{-2 \pi i n (x - mL) / L} dx \\
+&= e^{-2 \pi i n m} \sum_{m \in \mathbb{Z}} \int_{mL}^{(m + 1)L} f(x) e^{-2 \pi i x n / L} dx \\
+&= \int_\mathbb{R} f(x) e^{-2 \pi i x n / L} dx \\
+&= \hat{f}(n/L)
+\end{align*}
+$$
+
+so
+
+$$
+f_L(x) = \frac{1}{L} \sum_{n \in \mathbb{Z}} \hat{f}(n / L) e^{2 \pi i n x / L}
+$$
+
+Thus the periodic summation of $$f$$ is completely determined by discrete samples of $$\hat{f}$$.
+This is remarkable in that an uncountable set of numbers (all the values taken by $$f_L$$ over one
+period) can be determined by a countable one (the samples of $$\hat{f}$$). Even more incredible, if
+$$f$$ has finite bandwidth then only a finite number of the samples will be nonzero. So the
+uncountable set of numbers is determined by a finite one.
+
+
+As an aside, by taking $$x = 0$$ we can derive the
+[Poisson summation formula](https://en.wikipedia.org/wiki/Poisson_summation_formula):
+
+$$
+\sum_{n \in \mathbb{Z}} f(nL) = \frac{1}{L} \sum_{n \in \mathbb{Z}} \hat{f}(n / L)
+$$
+
+
+## Derivation of the Discrete Time Fourier Transform
+
+We can apply the above results to $$\hat{f}$$ as well. Recall that the Fourier transform of
+$$\hat{f}$$ is $$f(-x)$$. Thus the periodic summation of $$\hat{f}$$ is
+
+$$
+\begin{align*}
+\hat{f}_L(x) &= \frac{1}{L} \sum_{n \in \mathbb{Z}} f(-n / L) e^{2 \pi i n x / L} \\
+&= \frac{1}{L} \sum_{n \in \mathbb{Z}} f(n / L) e^{-2 \pi i n x / L}
+\end{align*}
+$$
+
+This is precisely the definition of the discrete time Fourier transform.
+
+If $$f$$ is time-limited, then we'll have only a finite number of nonzero samples. But then
+$$\hat{f}$$ is necessarily not bandwidth limited, so the tails of $$\hat{f}$$ will overlap in the
+periodic summation. On the other hand, if $$f$$ is bandwidth limited, for sufficiently large $$L$$
+we can recover $$\hat{f}$$. To do so perfectly requires an infinite number of samples, but in
+practice reasonably bandwidth limited signals can still be recovered quite well from a finite number
+of samples.
+
+
+## Interpretation of the Discrete Fourier Transform
+
+### Forward DFT
+
+Suppose we take samples of a function $$f$$  at integer multiples of a time $$T$$ (or distance,
+etc.). As we saw above,
+
+$$
+\hat{f}_{1/T}(x) = T \sum_{n \in \mathbb{Z}} f(n T) e^{-2 \pi i n x T}
+$$
+
+So when $$f$$ is time limited such that only the $$N$$ samples $$f(0)$$, $$\ldots$$,
+$$f((N - 1) T)$$ are nonzero,
+
+$$
+\hat{f}_{1/T}(x) = T \sum_{n = 0}^{N - 1} f(n T) e^{-2 \pi i n x T}
+$$
+
+In this case the discrete Fourier transform gives us $$N$$ evenly spaced samples from one period of
+$$\hat{f}_{1/T}$$. Namely, for $$0 \leq k < N$$,
+
+$$
+\hat{f}_{1/T}(k / NT) = T \sum_{n = 0}^{N - 1} f(n T) e^{-2 \pi i n k / N}
+$$
+
+### Backward DFT
+
+Similarly,
+
+$$
+f_{NT}(x) = \frac{1}{NT} \sum_{n \in \mathbb{Z}} \hat{f}(n / NT) e^{2 \pi i n x / (NT)}
+$$
+
+So when $$f$$ is bandwidth limited such that only the $$N$$ samples $$\hat{f}(0)$$, $$\ldots$$,
+$$\hat{f}((N - 1) / NT)$$ are nonzero,
+
+$$
+f_{NT}(x) = \frac{1}{NT} \sum_{n = 0}^{N - 1} \hat{f}(n / NT) e^{2 \pi i n x / (NT)}
+$$
+
+And in this case the inverse discrete Fourier transform gives us $$N$$ evenly spaced samples from
+one period of $$f_{NT}$$. Namely, for $$0 \leq k < N$$,
+
+$$
+f_{NT}(kT) = \frac{1}{NT} \sum_{n = 0}^{N - 1} \hat{f}(n / NT) e^{2 \pi i n k / N}
+$$
+
+### Commentary
+
+If $$f$$ were both time and bandwidth limited as discussed above, then $$f_{NT} = f$$ and
+$$\hat{f}_{1/T} = \hat{f}$$. So the samples of $$\hat{f}$$ we get from the forward DFT could be fed
+into the backward DFT to exactly recover our original samples of $$f$$. Unfortunately no such
+functions exist, but in practice it works pretty well for signals that strike a balance between time
+and bandwidth limits. The penalty for the imprecision is some aliasing caused by overlapping tails
+in the periodic summations. So make sure $$1/T$$ is large enough to avoid significant aliasing in
+the frequency domain, and $$NT$$ is large enough to avoid significant aliasing in the time (or
+space, etc. domain).
+
+We also see why the frequency spectra obtained from the DFT is periodic: we're not getting samples
+of $$\hat{f}$$, but of its periodic summation. If $$\hat{f}$$ is localized near the origin, it
+can be more instructive to view half the samples of $$\hat{f}_{1/T}$$ provided by the DFT as
+representing positive frequencies, and the other half as negative frequencies.
diff --git a/_notes/fourier_transform.md b/_notes/fourier_transform.md
index b6ac0dd08d3f0b2261a9c58bb7557b3f534a03d5..6a569e2c46a9b1ec530d8bb5b421303667ad9dde 100644
--- a/_notes/fourier_transform.md
+++ b/_notes/fourier_transform.md
@@ -2,34 +2,52 @@
 title: Fourier Transforms
 ---
 
-To really make sense of chapter 2 I needed to review the properties of Fourier Transforms. These
-notes are based on my prior knowledge and some helpful websites:
 
-- [Properties of Fourier Transform](http://fourier.eng.hmc.edu/e101/lectures/handout3/node2.html)
-- [symmetry.pdf](https://www.cs.unm.edu/~williams/cs530/symmetry.pdf)
+## Definition
 
-Note: I'm sloppy with the proofs here since all physical functions will have the nice properties
-that make the relevant operations valid, but I don't always call of these properties out when they
-are used.
+For a suitable function $$f : \mathbb{R} \rightarrow \mathbb{C}$$, the Fourier transform and inverse
+Fourier transform are defined to be
 
+$$
+\begin{align*}
+(\mathcal{F} f)(\xi) &= \int_\mathbb{R} f(x) e^{-2 \pi i x \xi} \mathrm{d} x \\
+(\mathcal{F}^{-1} f)(x) &= \int_\mathbb{R} f(\xi) e^{2 \pi i \xi x} \mathrm{d} \xi
+\end{align*}
+$$
 
-## Basics
+The Fourier transform of $$f$$ is frequently written as $$\hat{f}(\xi) = (\mathcal{F} f)(\xi)$$.
 
-For a function $$f : \mathbb{R} \rightarrow \mathbb{C}$$, I use the definitions
+Every function in [$$L^1$$](https://en.wikipedia.org/wiki/Lp_space#Lp_spaces) has a Fourier
+transform and inverse Fourier transform, since
 
 $$
-(\mathcal{F} f)(x) = \int_\mathbb{R} f(x') e^{-2 \pi i x' x} \mathrm{d} x'
+\begin{align*}
+\left \vert \hat{f}(\xi) \right \vert
+&\leq \int_\mathbb{R} \left \vert f(x) e^{-2 \pi i x \xi} \right \vert \mathrm{d} x \\
+&= \int_\mathbb{R} \left \vert f(x) \right \vert \mathrm{d} x
+\end{align*}
 $$
 
-$$
-(\mathcal{F}^{-1} f)(x) = \int_\mathbb{R} f(x') e^{2 \pi i x' x} \mathrm{d} x'
-$$
+Furthermore when $$f$$ is in $$L^1$$, then $$\hat{f}(\xi)$$ is a uniformly continuous function that
+tends to zero as $$|\xi|$$ approaches infinity. However $$\hat{f}$$ need not be in $$L^1$$, and not
+every continuous function that tends to zero is the Fourier transform of a function in $$L^1$$
+(indeed describing $$\mathcal{F}(L^1)$$ is an open problem). As such it can be helpful to restrict
+the definition to the [Schwartz space](https://en.wikipedia.org/wiki/Schwartz_space) over
+$$\mathbb{R}$$, where the Fourier transform is an
+[automorphism](https://en.wikipedia.org/wiki/Automorphism).
+
+On the other hand, we'll also want to talk about the Fourier transforms of functions that aren't
+absolutely integrable, or objects that aren't functions at all (like the [delta
+function](https://en.wikipedia.org/wiki/Dirac_delta_function)). So I will tend to be very liberal
+with my application of the transform.
+
+
+## Basic Properties
 
-The Fourier Inversion Theorem states that $$\mathcal{F} \mathcal{F}^{-1} = \mathcal{F}^{-1}
-\mathcal{F} = \mathcal{I}$$ (where $$\mathcal{I}$$ is the identity operator). This holds for the space
-of functions whose Fourier transforms exist and for which both the function and the transform are
-absolutely integrable and continuous. All claims I make about functions should be interpreted to
-apply only to functions in this space.
+The [Fourier Inversion Theorem](https://en.wikipedia.org/wiki/Fourier_inversion_theorem) states that
+$$\mathcal{F} \mathcal{F}^{-1} = \mathcal{F}^{-1} \mathcal{F} = \mathcal{I}$$ (where $$\mathcal{I}$$
+is the identity operator). This is strictly true for functions in $$L^1$$ whose transforms are also
+in $$L^1$$, but can also be extended to more general spaces as well.
 
 The Fourier transform is linear:
 
@@ -38,24 +56,45 @@ $$
 $$
 
 If you shift everything in the original basis (usually the time or space domain), you pick up a
-phase shift in the transformed (i.e. frequency) basis. This follows from a simple change of
-variables.
+phase shift in the transformed (i.e. frequency) basis. This follows from a change of variables.
+
+$$
+\begin{align*}
+(\mathcal{F} f(x + x_0))(\xi)
+&= \int_\mathbb{R} f(x + x_0) e^{-2 \pi i x \xi} \mathrm{d} x \\
+&= \int_\mathbb{R} f(x) e^{-2 \pi i (x - x_0) \xi} \mathrm{d} x \\
+&= e^{2 \pi i x_0 \xi} \int_\mathbb{R} f(x) e^{-2 \pi i x \xi} \mathrm{d} x \\
+&= e^{2 \pi i x_0 \xi} \hat{f}(\xi)
+\end{align*}
+$$
+
+The reverse is also true (with a sign difference):
+
+$$
+\begin{align*}
+\mathcal{F}(e^{2 \pi i x \xi_0} f(x))(\xi)
+&= \int_\mathbb{R} e^{2 \pi i x \xi_0} f(x) e^{-2 \pi i x \xi} \mathrm{d} x \\
+&= \int_\mathbb{R} f(x) e^{-2 \pi i x (\xi - \xi_0)} \mathrm{d} x \\
+&= \hat{f}(\xi - \xi_0)
+\end{align*}
+$$
+
+If you expand $$f$$ horizontally, you contract $$\hat{f}$$ both horizontally and vertically.
 
 $$
 \begin{align*}
-(\mathcal{F} f(x' + x_0))(x)
-&= \int_\mathbb{R} f(x' + x_0) e^{-2 \pi i x' x} \mathrm{d} x' \\
-&= \int_\mathbb{R} f(x') e^{-2 \pi i (x' - x_0) x} \mathrm{d} x' \\
-&= e^{2 \pi i x_0 x} \int_\mathbb{R} f(x') e^{-2 \pi i x' x} \mathrm{d} x' \\
-&= e^{2 \pi i x_0 x} (\mathcal{F} f(x'))(x)
+\mathcal{F}(f(a x))(\xi)
+&= \int_\mathbb{R} f(a x) e^{-2 \pi i x \xi} \mathrm{d} x \\
+&= \frac{1}{|a|} \int_\mathbb{R} f(x) e^{-2 \pi i x \xi / a} \mathrm{d} x \\
+&= \frac{1}{|a|} \hat{f} \left( \frac{\xi}{a} \right)
 \end{align*}
 $$
 
 
 ## Fourier Flips
 
-The Fourier transform has a number of interesting properties related to the flip operator
-$$(\mathcal{R} f)(x) = f(-x)$$. By definition
+The Fourier transform has a number of interesting properties related to the flip (or reversal)
+operator $$(\mathcal{R} f)(x) = f(-x)$$. By definition
 
 $$
 (\mathcal{F}^{-1} f)(x) = \int_\mathbb{R} f(x') e^{2 \pi i x' x} \mathrm{d} x'
@@ -73,7 +112,8 @@ $$
 \end{align*}
 $$
 
-Thus $$\mathcal{F}^{-1} = \mathcal{F} \mathcal{R} = \mathcal{R} \mathcal{F}$$. This means that
+Thus $$\mathcal{F}^{-1} = \mathcal{F} \mathcal{R} = \mathcal{R} \mathcal{F}$$. (You can also derive
+this using the expansion/contraction formula discussed above). This means that
 
 $$
 \mathcal{I}
@@ -175,9 +215,9 @@ when we're dealing with a real function and only care about the magnitude of the
 for spectral power analysis).
 
 
-## Transforms of Gaussians
+## The Transform of a Gaussian
 
-A Fourier Transform that comes up frequently is that of a Gaussian. It can be calculated by
+A Fourier transform that comes up frequently is that of a Gaussian. It can be calculated by
 completing a square.
 
 $$
@@ -214,5 +254,5 @@ $$
 \end{align*}
 $$
 
-This depends on the variance, which is inverted by the Fourier Transform. So since the power is
+This depends on the variance, which is inverted by the Fourier transform. So since the power is
 invariant, the normalization cannot in general be conserved.
diff --git a/_psets/1.md b/_psets/01.md
similarity index 100%
rename from _psets/1.md
rename to _psets/01.md
diff --git a/_psets/2.md b/_psets/02.md
similarity index 100%
rename from _psets/2.md
rename to _psets/02.md
diff --git a/_psets/3.md b/_psets/03.md
similarity index 100%
rename from _psets/3.md
rename to _psets/03.md
diff --git a/_psets/4.md b/_psets/04.md
similarity index 97%
rename from _psets/4.md
rename to _psets/04.md
index a9fc33c6fbfa0d1335d90cf802527e19aafd9f15..ea8216bc15b22138cdb837114cd3500706797414 100644
--- a/_psets/4.md
+++ b/_psets/04.md
@@ -199,11 +199,11 @@ equal to $$\num{2e-7}$$ newton per metre of length."
 Show that that current at that distance produces that force.
 
 First let's find the magnetic field of an infinitely long straight conductor. Let's use a
-cylindrical coordinate system along this axis. Considering the Biot-Savart Law and the symmetry of
-this problem, the magnetic field must be oriented along $$\hat{\mathrm{d} \theta}$$, with a
-magnitude that depends only on $$r$$. Consider then a circle of radius $$r$$ centered on the wire.
-Amp&egrave;re's Law tells us that the magnitude of the field at any point on this circle is $$I / (2
-\pi r)$$.
+cylindrical coordinate system along this axis. Considering the [Biot-Savart
+Law](https://en.wikipedia.org/wiki/Biot%E2%80%93Savart_law) and the symmetry of this problem, the
+magnetic field must be oriented along $$\hat{\mathrm{d} \theta}$$, with a magnitude that depends
+only on $$r$$. Consider then a circle of radius $$r$$ centered on the wire. Amp&egrave;re's Law
+tells us that the magnitude of the field at any point on this circle is $$I / (2 \pi r)$$.
 
 The differential force exerted by this field on a differential piece of current is $$dF = I (dl
 \times B)$$. In this case the direction of the current and the magnetic field are perpendicular, so
diff --git a/_psets/5.md b/_psets/05.md
similarity index 100%
rename from _psets/5.md
rename to _psets/05.md
diff --git a/_psets/6.md b/_psets/06.md
similarity index 100%
rename from _psets/6.md
rename to _psets/06.md
diff --git a/_psets/7.md b/_psets/07.md
similarity index 100%
rename from _psets/7.md
rename to _psets/07.md
diff --git a/_psets/08.md b/_psets/08.md
new file mode 100644
index 0000000000000000000000000000000000000000..f9a1fc33280054e32daeb18dd31c6b6faba6c13d
--- /dev/null
+++ b/_psets/08.md
@@ -0,0 +1,47 @@
+---
+title: Problem Set 8
+---
+
+![page1](../assets/img/pset8_1.jpg)
+![page2](../assets/img/pset8_2.jpg)
+![page3](../assets/img/pset8_3.jpg)
+
+## (11.1)
+
+### (a)
+
+{:.question}
+Derive equation (11.28) by taking the integral and limit of equation (11.27).
+
+### (b)
+
+{:.question}
+Show that equation (11.29) follows.
+
+## (11.2)
+
+{:.question}
+What is the expected occupancy of a state at the conduction band edge for Ge, Si, and diamond at
+room temperature (300 K)?
+
+## (11.3)
+
+{:.question}
+Consider Si doped with 1017 As atoms/cm3.
+
+### (a)
+
+{:.question}
+What is the equilibrium hole concentration at 300 K?
+
+### (b)
+
+{:.question}
+How much does this move EF relative to its intrinsic value?
+
+## (11.4)
+
+{:.question}
+Design a tristate CMOS inverter by adding a control input to a conventional inverter that can force
+the output to a high impedance (disconnected) state. These are useful for allowing multiple gates to
+share a single wire.
diff --git a/_psets/09.md b/_psets/09.md
new file mode 100644
index 0000000000000000000000000000000000000000..68051bd722df561b9854466f377fe9b7a05fc548
--- /dev/null
+++ b/_psets/09.md
@@ -0,0 +1,130 @@
+---
+title: Problem Set 9
+---
+
+![page_1](../assets/img/pset9_1.jpg)
+![page_2](../assets/img/pset9_2.jpg)
+![page_3](../assets/img/pset9_3.jpg)
+![page_4](../assets/img/pset9_4.jpg)
+![page_5](../assets/img/pset9_5.jpg)
+![page_6](../assets/img/pset9_6.jpg)
+
+## (9.6)
+
+{:.question}
+Solve the periodically forced Lorentz model for the dielectric constant as a function of frequency,
+and plot the real and imaginary parts.
+
+The periodically forced Lorentz model is
+
+$$
+m \left( \ddot{x}(t) + \gamma \dot{x}(t) + \omega_0^2 x(t) \right) = -e E(t)
+$$
+
+It models the motion of a particle of mass $$m$$ and charge $$-e$$ subjected to a time-varying
+electric field $$E(t)$$. Assuming a bulk material composed of such particles, we can use this model
+to find a relation between the dielectric constant and frequency of incoming radiation.
+
+To start, the [polarization density](https://en.wikipedia.org/wiki/Polarization_density) can be
+expressed in terms of the number of particles per unit volume, their charge, and their displacement:
+
+$$
+P = -N e x
+$$
+
+But it can also be expressed using the electric field and dielectric constant:
+
+$$
+P = \epsilon_0 E(\epsilon_r - 1)
+$$
+
+Thus the dielectric constant for this material is
+
+$$
+\epsilon_r = \frac{-N e x}{\epsilon_0 E} + 1
+$$
+
+So now let's solve the model. Let's assume a simple sinusoidal solution.
+
+$$
+\begin{align*}
+x(t) &= A e^{i \omega t} \\
+\dot{x}(t) &= i \omega A e^{i \omega t} \\
+\ddot{x}(t) &= - \omega^2 A e^{i \omega t}
+\end{align*}
+$$
+
+Then the Lorentz model reduces to
+
+$$
+m A e^{i \omega t} \left( - \omega^2  + i \omega \gamma + \omega_0^2 \right) = -e E(t)
+$$
+
+or
+
+$$
+\frac{x(t)}{E(t)} = \frac{-e}{m \left( \omega_0^2 - \omega^2 + i \omega \gamma \right)}
+$$
+
+So this solution is valid for a sinusoidally varying electric field.
+
+Finally we just plug this in to find
+
+$$
+\epsilon_r = \frac{N e^2}{\epsilon_0 m \left( \omega_0^2 - \omega^2 + i \omega \gamma \right)} + 1
+$$
+
+
+## (12.1)
+
+### (a)
+
+{:.question}
+How many watts of power are contained in the light from a 1000 lumen video projector?
+
+### (b)
+
+{:.question}
+What spatial resolution is needed for the printing of a page in a book to match the eye’s limit?
+
+
+## (12.2)
+
+### (a)
+
+{:.question}
+What is the peak wavelength for black-body radiation from a person? From the cosmic background
+radiation at 2.74 K?
+
+### (b)
+
+{:.question}
+Approximately how hot is a material if it is “red-hot”?
+
+### (c)
+
+{:.question}
+Estimate the total power thermally radiated by a person.
+
+
+## (12.3)
+
+### (a)
+
+{:.question}
+Find a thickness and an orientation for a birefringent material that rotates a linearly polarized
+wave by $$90^\circ$$. What is that thickness for calcite with visible light ($$\lambda \approx 600
+\si{nm}$$)?
+
+### (b)
+
+{:.question}
+Find a thickness and an orientation that converts linearly polarized light to circularly polarized
+light, and evaluate the thickness for calcite.
+
+### (c)
+
+{:.question}
+Consider two linear polarizers oriented along the same direction, and a birefringent material
+placed between them. What is the transmitted intensity as a function of the orientation of the
+birefringent material relative to the axis of the polarizers?
diff --git a/_psets/10.md b/_psets/10.md
new file mode 100644
index 0000000000000000000000000000000000000000..bda36db639146a3ca98e1018ce1a7f0e0e926368
--- /dev/null
+++ b/_psets/10.md
@@ -0,0 +1,196 @@
+---
+title: Problem Set 10
+---
+
+![page_1](../assets/img/pset10_1.jpg)
+![page_2](../assets/img/pset10_2.jpg)
+
+## (13.1)
+
+### (a)
+
+{:.question}
+Estimate the diamagnetic susceptibility of a typical solid.
+
+Starting from equation 12.15,
+
+$$
+\begin{align*}
+\chi_m &= -\mu_0 \frac{q^2 Z r^2}{4 m_e V} \\
+&= -\num{1.26e-6} \si{N/A^2} \frac{(\num{1.6e-19} \si{C})^2 \cdot 1 \cdot (10^{-10} \si{m})^2}
+                                  {4 \cdot \num{9.1e-31} \si{kg} \cdot (10^{-10} \si{m})^3} \\
+&= \num{-8.9e-5}
+\end{align*}
+$$
+
+### (b)
+
+{:.question}
+Using this, estimate the field strength needed to levitate a frog, assuming a gradient that drops to
+zero across the frog. Express your answer in teslas.
+
+From 12.7,
+
+$$
+F = -V \mu_0 \chi_m H \frac{d H}{d z}
+$$
+
+I'll assume the frog is 0.1 meters tall, has a mass of 0.1 kg, and a volume of $$10^{-4} \si{m^3}$$
+(this is consistent with the frog being mostly water). I'll also assume the magnetic field gradient
+is constant, so $$dH/dz = H / 0.1$$. Solving for $$H$$,
+
+$$
+\begin{align*}
+H &= \sqrt{-\frac{F z}{V \mu_0 \chi_m}} \\
+&= \sqrt{-\frac{0.1 \si{kg} \cdot 9.8 \si{m/s^2} \cdot 0.1 \si{m}}
+               {10^{-4} \si{m^3} \cdot \num{1.26e-6} \si{N/A^2} \cdot \num{-8.9e-5}}} \\
+&= \num{3e6} \si{A/m} \\
+\end{align*}
+$$
+
+Thus the magnetic field is
+
+$$
+\begin{align*}
+B &= \mu_0 H \\
+&= \num{1.26e-6} \si{N/A^2} \cdot \num{3e6} \si{A/m} \\
+&= 3.7 \si{T}
+\end{align*}
+$$
+
+
+## (13.2)
+
+{:.question}
+Estimate the size of the direct magnetic interaction energy between two adjacent free electrons in a
+solid, and compare this to the size of their electrostatic interaction energy. Remember that the
+field of a magnetic dipole $$\vec{m}$$ is
+
+$$
+\vec{B} = \frac{\mu_0}{4 \pi}
+    \left[ \frac{3 \hat{x} (\vec{m} \cdot \hat{x}) - \vec{m}}{|\vec{x}|^3} \right]
+$$
+
+The force between two magnetic dipoles $$m_1$$ and $$m_2$$ (with associated fields $$B_1$$ and
+$$B_2$$) is $$F = -\nabla (m_1 \cdot B_2)$$, and the characteristic interaction energy is $$m_1
+\cdot B_2$$. This will be maximized when $$m_1$$ and $$B_2$$ are parallel. From the equation above,
+we can see that the field strength will be maximized when $$\hat{x}$$ is antiparallel to $$\vec{m}$$.
+Assuming a separation of 1 angstrom, the total energy is thus
+
+$$
+\begin{align*}
+E_m &= m \cdot \frac{\mu_0}{4 \pi} \left( \frac{4 m}{r^3} \right) \\
+&= \frac{\mu_0 m^2}{\pi r^3} \\
+&= \frac{\num{1.26e-6} \si{N/A^2} (\num{-9.28e-24} \si{J/T})^2}{\pi (10^{-10} \si{m})^3} \\
+&= \num{3.5e-23} \si{J}
+\end{align*}
+$$
+
+Meanwhile their electrostatic potential is
+
+$$
+\begin{align*}
+E_e &= q E \\
+&= q \frac{q}{4 \pi \epsilon_0 r} \\
+&= \frac{q^2}{4 \pi \epsilon_0 r} \\
+&= \frac{(\num{1.6e-19} \si{C})^2}{4 \pi \cdot \num{8.85e-12} \si{F/m} \cdot 10^{-10} \si{m}} \\
+&= \num{2.3e-18} \si{J}
+\end{align*}
+$$
+
+
+## (13.3)
+
+{:.question}
+Using the equation for the energy in a magnetic field, describe why:
+
+### (a)
+
+{:.question}
+A permanent magnet is attracted to an unmagnetized ferromagnet.
+
+The equation of interest for energy density is
+
+$$
+U = \frac{1}{2} (E \cdot D + B \cdot H)
+$$
+
+For this problem I assume the electric field is zero, so the total energy is
+
+$$
+U = \frac{1}{2 \mu} \int B^2 \mathrm{d} V
+$$
+
+An unmagnetized ferromagnet has a very high $$\mu$$, so $$U$$ is reduced by packing more field lines
+into its extent. The permanent magnet's field lines are densest closest to its body, so the gradient
+of the energy describes an attractive force.
+
+### (b)
+
+{:.question}
+The opposite poles of permanent magnets attract each other.
+
+We know that $$B = \mu (H + M)$$, so
+
+$$
+\begin{align*}
+U &= \frac{1}{2 \mu} \int \mu (H + M) \cdot H \mathrm{d} V \\
+&= \frac{1}{2} \int (H^2 + M \cdot H) \mathrm{d} V \\
+\end{align*}
+$$
+
+This is reduced when $$H$$ and $$M$$ are anti-aligned.
+
+
+## (13.4)
+
+{:.question}
+Estimate the saturation magnetization for iron at 0 K.
+
+I looked up the density, molar mass, and number of valence electrons of iron. My answer also uses
+the proton mass and electron magnetic moment.
+
+$$
+\begin{align*}
+7,874 \si{kg/m^3}
+&\cdot \frac{1 \text{ nucleon}}{\num{1.67e-27} \si{kg}}
+\cdot \frac{1 \text{ atom}}{55.845 \text{ nucleons}} \\
+&\cdot \frac{2 \text{ electrons}}{1 \text{ atom}}
+\cdot \frac{\num{9.28e-24} \si{J/T}}{1 \text{ electron}} \\
+&= \num{1.6e6} \si{A/m}
+\end{align*}
+$$
+
+## (13.5)
+
+### (a)
+
+{:.question}
+Show that the area enclosed in a hysteresis loop in the $$(B,H)$$ plane is equal to the energy
+dissipated in going around the loop.
+
+### (b)
+
+{:.question}
+Estimate the power dissipated if 1 kg of iron is cycled through a hysteresis loop at 60 Hz; the
+coercivity of iron is $$\num{4e3} \si{A/m}$$.
+
+
+## (13.6)
+
+{:.question}
+Approximately what current would be required in a straight wire to be able to erase a $$\gamma
+\text{-} Fe_2 O_3$$ recording at a distance of 1 cm?
+
+As found in problem 6.4 in [problem set 4](04.html), the magnitude of the magnetic field a distance
+$$r$$ away from an infinitely long and thin conductor carrying a current $$I$$ is $$I/(2 \pi r)$$.
+To erase information stored on $$Fe_2 O_3$$ we need this field to be about as strong as the
+coercivity $$H_C = 300 \si{Oe}$$. Thus the current needed is
+
+$$
+\begin{align*}
+I &= 2 \pi r H_C \\
+&= 2 \pi \cdot 10^{-2} \si{m} \cdot 300 \si{Oe} \cdot \frac{79.6 \si{A/m}}{1 \si{Oe}} \\
+&= 1500 \si{A}
+\end{align*}
+$$
diff --git a/_psets/11.md b/_psets/11.md
new file mode 100644
index 0000000000000000000000000000000000000000..b567cd88f1c9759d015d2cd6c6f2802043a2e19a
--- /dev/null
+++ b/_psets/11.md
@@ -0,0 +1,391 @@
+---
+title: Problem Set 11
+---
+
+
+## (14.1)
+
+{:.question}
+Do a Taylor expansion of equation (14.6) around V = 0.
+
+Equation 14.6 states
+
+$$
+E \approx 2 E_F - 2 E_C e^{-2/(N_F V)}
+$$
+
+The Taylor expansion of $$e^x$$ about zero is
+
+$$
+e^x = \sum_{n = 0}^\infty \frac{x^n}{n!}
+$$
+
+so
+
+$$
+E \approx 2 E_F - 2 E_C \sum_{n = 0}^\infty \frac{1}{n!} \left( \frac{-2}{N_F V} \right)^n
+$$
+
+But this is an expansion around $$V = \infty$$.
+
+If you really want an expansion about $$V = 0$$, note that
+
+$$
+\frac{d}{dx} e^{x^{-1}} = -x^{-2} e^{x^{-1}}
+$$
+
+As we keep taking higher derivatives we'll get more and more negative powers of $$x$$, but we'll
+never get rid of the $$e^{1/x}$$. So at $$x = 0$$ the latter term dominates, meaning the function
+and all its derivatives are zero. Thus the Taylor expansion about zero is identically zero.
+
+Plugging this into equation 14.6 gives us the rather uninteresting
+
+$$
+E \approx 2 E_F
+$$
+
+
+## (14.2)
+
+{:.question}
+Problem 6.5 showed that for a Kibble balance the current I measured in the dynamic phase and the
+voltage V measured in the static phase are related to the mass m, gravitational constant g, and
+velocity v by $$IV = mgv$$. Using the inverse AC Josephson effect (equation 14.25) to determine the
+voltage, and the quantum Hall effect (equation 13.41) along with the inverse AC Josephson effect to
+determine the current, relate the measurement to fundamental constant(s).
+
+In problem 6.5 in [problem set 4](04.html) we found that
+
+$$
+m = -\frac{I V}{g v}
+$$
+
+The AC Josephson effect gives us a relation between voltage and frequency that only depends on
+fundamental constants (and n, a positive integer).
+
+$$
+V = n \frac{h}{2 e} f
+$$
+
+The quantum Hall effect can give us a resistance that only depends on fundamental constants (and i,
+a positive integer).
+
+$$
+R_H = \frac{h}{i e^2}
+$$
+
+By Ohm's Law $$IV = V^2/R$$, so the Kibble balance equation can be written as
+
+$$
+mgv = -\frac{V^2}{R}
+$$
+
+Plugging in the values above we find
+
+$$
+4mgv = -h i n^2 f^2
+$$
+
+
+## (14.3)
+
+{:.question}
+If a SQUID with an area of $$A = 1 cm^2$$ can detect 1 flux quantum, how far away can it sense the
+field from a wire carrying 1 A?
+
+As found in problem 6.4 in [problem set 4](04.html), the magnitude of the magnetic field a distance
+$$r$$ away from an infinitely long and thin conductor carrying a current $$I$$ is $$I/(2 \pi r)$$.
+One flux quantum is $$\num{2.07e-7} \si{G \cdot cm^2}$$ i.e. $$\num{2.07e-11} \si{T \cdot cm^2}$$.
+So to get one flux quantum over $$1 \si{cm^2}$$, we need a magnetic field of $$\num{2.07e-11}
+\si{T}$$. Thus a one amp current can be detected at a distance of
+
+$$
+\begin{align*}
+r &= \frac{\mu_o I}{2 \pi B} \\
+&= \frac{\num{1.26e-6} \si{T m / A} \cdot 1 \si{A}}{2 \pi \cdot \num{2.07e-11} \si{T}} \\
+&= \num{9.66e3} \si{m}
+\end{align*}
+$$
+
+
+## (14.4)
+
+{:.question}
+Typical parameters for a quartz resonator are $$C_e = 5 \si{pF}$$, $$C_m = 20 \si{fF}$$, $$L_m = 3
+\si{mH}$$, $$R_m = 6 \si{\ohm}$$. Plot, and explain, the dependence of the reactance (imaginary part
+of the impedance), resistance (real part), and the phase angle of the impedance on the frequency.
+
+The circuit in question is depicted in figure 14.4. There's a capacitance $$C_e$$ in parallel with
+a series RLC circuit ($$R_m$$, $$L_m$$, and $$C_m$$). To solve this it's helpful to know the complex
+impedances of the basic electrical components:
+
+$$
+\begin{align*}
+Z_C &= \frac{1}{i \omega C} \\
+Z_L &= i \omega L \\
+Z_R &= R
+\end{align*}
+$$
+
+Then we just combine these, using the sum for series connections, and the inverse of the sum of
+inverses for parallel connections. So the total impedance $$Z$$ is
+
+$$
+\begin{align*}
+\frac{1}{Z} &= \frac{1}{Z_{C_e}} + \frac{1}{Z_{C_m} + Z_{L_m} + Z_{R_m}} \\
+&= i \omega C_e + \frac{1}{1/(i \omega C_m) + i \omega L_m + R_m} \\
+&= i \omega C_e + \frac{\omega C_m}{-i + \omega C_m (R_m + i \omega L_m)} \\
+Z &= \frac{1}{i \omega C_e + \frac{\omega C_m}{\omega C_m (R_m + i \omega L_m) - i}}
+\end{align*}
+$$
+
+Let's see what this looks like with the given values plugged in. All the x axes are in radians per
+second.
+
+The resistance (real part) is very small except for a spike near $$\num{4e6} \si{rad/s}$$.
+
+![resistance vs frequency](../assets/img/pset11_re_full.jpg)
+
+Mathematica tells me the max occurs at
+
+$$
+\begin{align*}
+\omega_\text{max} &= \frac{1}{L_m} \sqrt{\frac{2 C_e L_m + 2 C_m L_m -C_e C_m R_m^2}{2 C_e C_m}} \\
+&\approx \num{4.09e6} \si{rad/s}
+\end{align*}
+$$
+
+But the first term in the numerator is a couple orders of magnitude larger than the others, so we
+can approximate $$\omega_\text{max}$$ by dropping them.
+
+$$
+\begin{align*}
+\omega_\text{max} &\approx \frac{1}{L_m} \sqrt{\frac{2 C_e L_m}{2 C_e C_m}} \\
+&= \frac{1}{\sqrt{C_m L_m}} \\
+&\approx \num{4.08e6} \si{rad/s}
+\end{align*}
+$$
+
+The reactance decreases without bound as $$\omega$$ approaches zero, and tends toward 0 as
+$$\omega$$ increases. It has a kink in about the same place the resistance has a spike.
+
+![reactance vs frequency](../assets/img/pset11_im_full.jpg)
+
+Finally the phase is almost always $$-\pi$$, except where it shoots just above one (radian), again
+near $$\omega = 1/\sqrt{C_m L_m}$$.
+
+![phase vs frequency](../assets/img/pset11_phase_full.jpg)
+
+Let's zoom in on those spikes.
+
+![resistance vs frequency](../assets/img/pset11_re_zoom.jpg)
+![reactance vs frequency](../assets/img/pset11_im_zoom.jpg)
+![phase vs frequency](../assets/img/pset11_phase_zoom.jpg)
+
+
+## (14.5)
+
+{:.question}
+If a ship traveling on the equator uses one of John Harrison’s chronometers to navigate, what is the
+error in its position after one month? What if it uses a cesium beam atomic clock?
+
+To solve this we need to know how many seconds are in a month.
+
+$$
+1 \si{month} \cdot \frac{30 \si{days}}{1 \si{month}} \cdot \frac{86400 \si{s}}{1 \si{day}}
+= \num{2.59e6} \si{s}
+$$
+
+Harrison's chronometer has a relative error of $$10^{-5}$$. So after a month it will be off by
+
+$$
+\begin{align*}
+\Delta t &= 10^{-5} \cdot \num{2.59e6} \si{s} \\
+&= 25.9 \si{s}
+\end{align*}
+$$
+
+In Harrison's time the only reference available to sailors at sea were the stars. Using a sextant
+you can measure the angle between a known astronomical object (say Alpha Andromedae) and the
+horizon. This tells you your angle relative to the stars. You want your angle relative to the Earth
+(i.e. longitude). So the missing information is the angle of the Earth relative to the stars. This
+you can compute if you just know what time it is (and the time of year).
+
+But if your time measurement is off by $$\Delta t$$, your estimate of the Earth's angle will be off
+by $$\Delta t \cdot v$$ where $$v$$ is the speed of the surface of the Earth due to rotation.
+Assuming you did take a really accurate measurement of your own angle relative to the stars, this
+will be the same error in your estimate of your position relative to the Earth.
+
+So first let's find $$v$$ (at the equator).
+
+$$
+\begin{align*}
+v &= r \omega \\
+&= r \cdot \frac{1 \si{rotation}}{1 \si{day}} \cdot \frac{2 \pi \si{rad}}{1 \si{rotation}}
+    \cdot \frac{1 \si{day}}{86400 \si{s}} \\
+&= \frac{2 \pi \cdot \num{6.37e6} \si{m}}{86400 \si{s}} \\
+&= 463.3 \si{m/s}
+\end{align*}
+$$
+
+Then the error in the ship's position measurement is
+
+$$
+\begin{align*}
+\Delta t \cdot v &= 25.9 \si{s} \cdot 463.3 \si{m/s} \\
+&= 12 \si{km}
+\end{align*}
+$$
+
+If we instead use a Cesium clock, with a relative error of $$10^{-12}$$, we'll only be off by
+
+$$
+10^{-12} \cdot \num{2.59e6} \si{s} \cdot 463.3 \si{m/s} = 1.2 \si{mm}
+$$
+
+
+
+
+## (14.6)
+
+{:.question}
+GPS satellites orbit at an altitude of 20,180 km.
+
+### (a)
+
+{:.question}
+How fast do they travel?
+
+We need a relationship between orbital altitude and velocity. Consider a particle moving in a
+circle of radius $$r$$, with angular velocity $$\omega$$. We can model its trajectory as
+
+$$
+\begin{align*}
+x(t) &= r e^{i \omega t} \\
+\dot{x}(t) &= i r \omega e^{i \omega t} \\
+\ddot{x}(t) &= -r \omega^2 e^{i \omega t}
+\end{align*}
+$$
+
+The magnitude of its acceleration is $$r \omega^2$$, so it experiences a force
+
+$$
+\begin{align*}
+F &= ma \\
+&= m r \omega^2 \\
+&= m \frac{v^2}{r}
+\end{align*}
+$$
+
+where the last line follows since $$v = r \omega$$.
+
+In this case we know $$r$$ (recall that the radius of the Earth is $$\num{6.37e6} \si{m}$$), and we
+can assume the only force is gravitational. Thus
+
+$$
+\begin{align*}
+\frac{G M m}{r^2} &= m \frac{v^2}{r} \\
+v &= \sqrt{\frac{GM}{r}} \\
+&= \sqrt{\frac{\num{6.67e-11} \si{m^3 kg^{-1} s^{-2}} \cdot \num{5.97e24} \si{kg}}
+              {\num{6.37e6} \si{m} + \num{2.02e7} \si{m}}} \\
+&= \num{3.87e3} \si{m/s}
+\end{align*}
+$$
+
+### (b)
+
+{:.question}
+What is their orbital period?
+
+$$
+\begin{align*}
+T &= \frac{2 \pi r}{v} \\
+&= \frac{2 \pi \left( \num{6.37e6} \si{m} + \num{2.02e7} \si{m} \right) }{\num{3.87e3} \si{m/s}} \\
+&= \num{4.31e4} \si{s} \\
+&= \num{11.96} \si{hours}
+\end{align*}
+$$
+
+### (c)
+
+{:.question}
+Estimate the special-relativistic correction over one orbit between a clock on a
+GPS satellite and one on the Earth. Which clock goes slower?
+
+We have already found the velocity of the satellite. As we found in the previous problem, the
+velocity of a clock on the surface of the Earth is $$463.3 \si{m/s}$$. Thus the respective [Lorentz
+factors](https://en.wikipedia.org/wiki/Lorentz_factor) are
+
+$$
+\begin{align*}
+\gamma_\text{Earth} &= \frac{1}{\sqrt{1 - (463.3 \si{m/s})^2 / (\num{3e8} \si{m/s})^2}} \\
+&= 1 + \num{1.19e-12} \\
+\gamma_\text{orbit} &= \frac{1}{\sqrt{1 - (\num{3.87e3} \si{m/s})^2 / (\num{3e8} \si{m/s})^2}} \\
+&= 1 + \num{8.33e-11}
+\end{align*}
+$$
+
+So one day on the surface of the Earth is longer than one day at the center of the Earth by
+
+$$
+\begin{align*}
+\Delta t &= (\gamma_\text{Earth} - 1) \cdot 1 \si{day} \\
+&= \num{1.19e-12} \cdot 86400 \si{s} \\
+&= \num{1.03e-7} \si{s}
+\end{align*}
+$$
+
+And one day in orbit is longer than one day at the center of the Earth by
+
+$$
+\begin{align*}
+\Delta t &= (\gamma_\text{orbit} - 1) \cdot 1 \si{day} \\
+&= \num{8.33e-11} \cdot 86400 \si{s} \\
+&= \num{7.20e-6} \si{s}
+\end{align*}
+$$
+
+Similarly one orbital period on the surface of the Earth is longer than one orbital period at the
+center of the Earth by
+
+$$
+\begin{align*}
+\Delta t &= \num{1.19e-12} \cdot \num{4.31e4} \si{s} \\
+&= \num{5.13e-8} \si{s}
+\end{align*}
+$$
+
+And one orbital period in orbit is longer than one orbital period at the center of the Earth by
+
+$$
+\begin{align*}
+\Delta t &= \num{8.33e-11} \cdot \num{4.31e4} \si{s} \\
+&= \num{3.59e-6} \si{s}
+\end{align*}
+$$
+
+The latter is also a good approximation of the difference between a clock in orbit vs the surface of
+the Earth over one orbit. Technically speaking the surface of the Earth isn't an inertial frame of
+reference, but relative to orbit it's close.
+
+### (d)
+
+{:.question}
+What is the general-relativistic correction over one orbit? Which clock goes
+slower?
+
+The general relativistic correction indicates that time passes more quickly in orbit than on Earth
+because the Earth's gravitational field is stronger on the surface than in orbit. The difference
+over one day is
+
+$$
+\begin{align*}
+\Delta t &= \left(\frac{1 - \frac{GM}{rc^2}}{1 - \frac{GM}{r'c^2}} - 1 \right) \cdot 1 \si{day} \\
+&= \left(\frac{1 - \frac{\num{3.99e14} \si{m^3/s^2}}{(\num{6.37e6} \si{m} + \num{2.02e7} \si{m})
+    \cdot (\num{3e8} \si{m/s^2})^2}}{1 - \frac{\num{3.99e14} \si{m^3/s^2}}{\num{6.37e6} \si{m}
+    \cdot (\num{3e8} \si{m/s^2})^2}} - 1\right) \cdot 86400 \si{s} \\
+&= \num{4.57e-5} \si{s}
+\end{align*}
+$$
+
+Similarly the difference over one orbital period is $$\Delta t = \num{2.28e-5} \si{s}$$.
diff --git a/_psets/12.md b/_psets/12.md
new file mode 100644
index 0000000000000000000000000000000000000000..c05aeb9f0e1517ff7ea537c71b2bab0ce7c602bd
--- /dev/null
+++ b/_psets/12.md
@@ -0,0 +1,489 @@
+---
+title: Problem Set 12
+---
+
+## (15.1)
+
+### (a)
+
+{:.question}
+Show that the circuits in Figures 15.1 and 15.2 differentiate, integrate, sum, and difference.
+
+I'll take as given that op amps with negative feedback keep their two input terminals at the same
+voltage. I also assume ideal op-amps that draw no current from their inputs. All the proofs follow
+from [Kirchhoff's current law](https://en.wikipedia.org/wiki/Kirchhoff%27s_circuit_laws) (aka
+conservation of charge). I write $$R_f$$ to refer to the resistor in the feedback path. All
+schematics are from Wikimedia Commons.
+
+#### Integrator
+
+![circuit](../assets/img/pset12_integrator.svg)
+
+For the integrator, current through the resistor must equal current through the capacitor.
+
+$$
+\begin{align*}
+\frac{V_i}{R} &= - C \frac{dV_o}{dt} \\
+\frac{dV_o}{dt} &= \frac{-V_i}{R C} \\
+V_o &= - \frac{1}{RC} \int V_i \mathrm{d}t
+\end{align*}
+$$
+
+#### Differentiator
+
+![circuit](../assets/img/pset12_differentiator.svg)
+
+For the differentiator, current through the capacitor must equal current through the resistor.
+
+$$
+\begin{align*}
+C \frac{dV_i}{dt} &= \frac{-V_o}{R} \\
+V_o &= -RC \frac{dV_i}{dt}
+\end{align*}
+$$
+
+#### Summing Amplifier
+
+![circuit](../assets/img/pset12_summing_amplifier.svg)
+
+For the summing amplifier, the sum of the currents through the input resistors must equal the
+current through the feedback resistor.
+
+$$
+\begin{align*}
+\frac{V_1 + \cdots + V_n}{R_i} &= -\frac{V_o}{R_f} \\
+V_o &= -\frac{R_f}{R_i} (V_1 + \cdots + V_n)
+\end{align*}
+$$
+
+#### Differential Amplifier
+
+![circuit](../assets/img/pset12_differential_amplifier.svg)
+
+For the difference amplifier, neither input terminal is grounded, so we can't assume they're at zero
+volts. Call their voltage $$V_i$$. I'll also assume both resistors $$R_1$$ and $$R_2$$ in the above
+schematic are the same, which I'll call $$R_i$$. Applying Kirchhoff's current law to the
+non-inverting input,
+
+$$
+\begin{align*}
+\frac{V_2 - V_i}{R_i} &= \frac{V_i}{R_f} \\
+\frac{V_2}{R_i} &= V_i \left( \frac{1}{R_i} + \frac{1}{R_f} \right)
+\end{align*}
+$$
+
+Then looking at the inverting input,
+
+$$
+\begin{align*}
+\frac{V_1 - V_i}{R_i} &= \frac{V_i - V_o}{R_f} \\
+\frac{V_1}{R_i} - \frac{V_o}{R_f} &= V_i \left( \frac{1}{R_i} + \frac{1}{R_f} \right) \\
+\frac{V_1}{R_i} - \frac{V_o}{R_f} &= \frac{V_2}{R_i} \\
+V_o &= \frac{R_f}{R_i} (V_2 - V_1)
+\end{align*}
+$$
+
+### (b)
+
+{:.question}
+Design a non-inverting op-amp amplifier. Why are they used less commonly than inverting ones?
+
+![circuit](../assets/img/pset12_non-inverting_amplifier.svg)
+
+Connect the signal you want to amplify to the non-inverting input. Then create a voltage divider,
+connected to ground on one end, the inverting input in the middle, and the output on the other end.
+I'll call the resistor connected to ground $$R_g$$, and the feedback resistor $$R_f$$ as before.
+
+$$
+\begin{align*}
+\frac{V_o - V_i}{R_f} &= \frac{V_i}{R_g} \\
+\frac{V_o}{R_f} &= V_i \frac{R_f + R_g}{R_f R_g} \\
+V_o &= V_i \left( 1 + \frac{R_f}{R_g} \right)
+\end{align*}
+$$
+
+A potential downside is that the gain must be at least unity. Additionally the nodes aren't tied to
+ground, so if the op-amp has imperfect common-mode rejection we'll see it in the output. A potential
+upside is that the input impedance is very high. And, of course, the output isn't inverted.
+
+### (c)
+
+{:.question}
+Design a transimpedance (voltage out proportional to current in) and a transconductance (current out
+proportional to voltage in) op-amp circuit.
+
+![circuit](../assets/img/pset12_transimpedance_amplifier.svg)
+
+For a transimpedance amplifier, replace the input resistor in an inverting amplifier with a wire.
+Then the current flowing through the feedback resistor is equal to the current at the input. So $$I
+= V_o / R_f$$, and $$V_o = R_f I$$.
+
+For a transconductance amplifier, replace the feedback resistor with a wire. Then the current out
+is $$I = -V_i / R_i$$. If you want a non-inverting transconductance amplifier, connect the input
+straight to the non-inverting terminal and connect the inverting terminal to ground via a resistor
+$$R_g$$. Then $$I = V_i / R_g$$.
+
+### (d)
+
+{:.question}
+Derive equation (15.16).
+
+The currents flowing through $$R_1$$, $$R_o$$, and $$C$$ must be equal. Call this current $$I$$
+(I'll take left to right to be positive for all currents). Because of the negative feedback, the
+inverting input of the op-amp is a virtual ground. Recall that $$Q = CV$$, so $$dQ/dt = I = C
+dV/dt$$. Thus we can express $$I$$ three ways:
+
+$$
+\begin{align*}
+I &= \frac{V_{PD}}{R_1} \\
+&= -\frac{V_{RC}}{R_0} \\
+&= C \left( \frac{dV_{RC}}{dt} - \frac{dV_F}{dt} \right)
+\end{align*}
+$$
+
+I'm using $$V_{RC}$$ to denote the voltage at the junction between $$R_O$$ and $$C$$.
+Differentiating the first two lines yields
+
+$$
+\begin{align*}
+\frac{dI}{dt} &= \frac{1}{R_1} \frac{dV_{PD}}{dt} \\
+&= -\frac{1}{R_0} \frac{dV_{RC}}{dt}
+\end{align*}
+$$
+
+Thus
+
+$$
+\frac{dV_{RC}}{dt} = -\frac{R_0}{R_1} \frac{dV_{PD}}{dt}
+$$
+
+As such we can write the current through the capacitor as
+
+$$
+I = C \left( -\frac{R_0}{R_1} \frac{dV_{PD}}{dt} - \frac{dV_F}{dt} \right)
+$$
+
+This can still be equated
+
+$$
+C \left( -\frac{R_0}{R_1} \frac{dV_{PD}}{dt} - \frac{dV_F}{dt} \right) = \frac{V_{PD}}{R_1}
+$$
+
+So all that remains is to solve for $$dV_F/dt$$.
+
+$$
+\frac{dV_F}{dt} = \frac{V_{PD}}{R_1 C} + \frac{R_0}{R_1} \frac{dV_{PD}}{dt}
+$$
+
+This differs in sign from (15.16) because the book makes the positive current direction right to
+left.
+
+
+## (15.2)
+
+{:.question}
+If an op-amp with a gain–bandwidth product of 10 MHz and an open-loop DC gain of 100 dB is
+configured as an inverting amplifier, plot the magnitude and phase of the gain as a function of
+frequency as $$R_\text{out}/R_\text{in}$$ is varied.
+
+
+## (15.3)
+
+{:.question}
+A lock-in has an oscillator frequency of 100 kHz, a bandpass filter Q of 50 (re- member that the Q
+or quality factor is the ratio of the center frequency to the width between the frequencies at which
+the power is reduced by a factor of 2), an input detector that has a flat response up to 1 MHz, and
+an output filter time constant of 1 s. For simplicity, assume that both filters are flat in their
+passbands and have sharp cutoffs. Estimate the amount of noise reduction at each stage for a signal
+corrupted by additive uncorrelated white noise.
+
+## (15.4)
+
+### (a)
+
+{:.question}
+For an order 4 maximal LFSR work out the bit sequence.
+
+Table (13.1) indicates that a maximal LFSR of order 4 is $$x_n = x_{n-1} + x_{n-4}$$. The bit
+sequence has to repeat in a cycle of length $$2^4 - 1 = 15$$. The bits are 1, 1, 1, 1, 0, 1, 0, 1,
+1, 0, 0, 1, 0, 0, 0.
+
+### (b)
+
+{:.question}
+If an LFSR has a chip rate of 1GHz, how long must it be for the time between repeats to be the age
+of the universe?
+
+The age of the universe is 13.7 billion years, which is about $$\num{43e16}$$ seconds.
+
+$$
+\begin{align*}
+(2^N - 1) \cdot 10^{-9} \si{s} = \num{43e16} \si{s} \\
+(2^N - 1) = \num{43e25}
+N = 88.5
+\end{align*}
+$$
+
+### (c)
+
+{:.question}
+Assuming a flat noise power spectrum, what is the coding gain if the entire sequence is used to send
+one bit?
+
+I think the coding gain works out like the SNR I derive in the next problem... but could be wrong.
+
+$$
+10 \log_{10} \left( 2^{88.5} \right) = 266 \si{dB}
+$$
+
+
+## (15.5)
+
+{:.question}
+What is the SNR due to quantization noise in an 8-bit A/D? 16-bit? How much must the former be
+averaged to match the latter?
+
+This depends on the characteristics of the signal. Assuming that it uses the full range of the A/D
+converter (but no more), and over time is equally likely to be any voltage in that range, then the
+SNR in decibels is
+
+$$
+\text{SNR} = 20 \log_{10}(2^n)
+$$
+
+where $$n$$ is the number of bits used.
+
+So we have
+
+$$
+\begin{align*}
+\text{8-bit SNR} &= 20 \log_{10}(2^8) \\ &= 48.2 \si{dB} \\
+\text{16-bit SNR} &= 20 \log_{10}(2^{16}) \\ &= 96.3 \si{dB}
+\end{align*}
+$$
+
+But where does this come from? Recall that the definition of the SNR is the ratio of the power in
+the signal to the power in the noise. Let's say we have an analog signal $$f(t)$$ within the range
+$$[-A, A]$$. Let its time-averaged distribution be $$p(x)$$. Then the power in the signal is
+
+$$
+P_\text{signal} = \int_{-A}^A x^2 p(x) \mathrm{d} x
+$$
+
+Let's assume that the signal is equally likely to take on any value in its range, so $$p(x) =
+1/(2A)$$. This is completely true of triangle waves and sawtooth waves, relatively true for sin waves, but not
+true at all for square waves. So this approximation may or may not be very accurate. Then its power
+is
+
+$$
+\begin{align*}
+P_\text{signal} &= \frac{1}{2A} \int_{-A}^A x^2 \mathrm{d} x \\
+&= \frac{1}{2A} \frac{1}{3} \left[ x^3 \right]_ {-A}^A \\
+&= \frac{1}{2A} \frac{1}{3} 2A^3 \\
+&= \frac{A^2}{3}
+\end{align*}
+$$
+
+When the signal is quantized, each measurement $$f(t)$$ is replaced with a quantized version. The
+most significant bit tells us which half of the signal range we're in. In this case that means
+whether we're in the range [-A, 0] or [0, A]. Note that each interval is $$A$$ long. The next bit
+tells us which half of that half we're in. Each interval is $$A/2$$ long. So finally the least
+significant bit will tell us which half of a half etc. we're in, and each interval will be
+$$A/2^{n - 1}$$ long (or equivalently $$2A/2^n$$), where $$n$$ is the number of bits.
+
+The uncertainty we have about the original value is thus plus or minus half the least significant
+bit. So the quantization error will be in the range $$[-A/2^n, A/2^n]$$. Since we're assuming our
+signal is equally likely to take any value, the quantization error is equally likely to fall
+anywhere in this range. Thus the power in the quantization noise is
+
+$$
+\begin{align*}
+P_\text{noise} &= \frac{2^n}{2A} \int_{-A/2^n}^{A/2^n} x^2 \mathrm{d} x \\
+&= \frac{2^n}{2A} \frac{1}{3} \left[ x^3 \right]_ {-A/2^n}^{A/2^n} \\
+&= \frac{2^n}{2A} \frac{1}{3} \frac{2 A^3}{2^{3n}} \\
+&= \frac{A^2}{3} \frac{1}{2^{2n}}
+\end{align*}
+$$
+
+Putting it together,
+
+$$
+\begin{align*}
+\text{SNR} &= 10 \log_{10} \left( \frac{P_\text{signal}}{P_\text{noise}} \right) \\
+&= 10 \log_{10} \left( \frac{A^2}{3} \cdot \frac{3}{A^2} \frac{2^{2n}}{1} \right) \\
+&= 10 \log_{10} \left( 2^{2n} \right) \\
+&= 20 \log_{10} \left( 2^n \right)
+\end{align*}
+$$
+
+
+## (15.6)
+
+{:.question}
+The message 00 10 01 11 00 ($$c_1$$, $$c_2$$) was received from a noisy channel. If it was sent by
+the convolutional encoder in Figure 15.20, what data were transmitted?
+
+
+## (15.7)
+
+{:.question}
+This problem is harder than the others.
+
+My code for all sections of this problem is
+[here](https://gitlab.cba.mit.edu/erik/compressed_sensing). All the sampling and gradient descent is
+done in C++ using [Eigen](http://eigen.tuxfamily.org) for vector and matrix operations. I use Python
+and [matplotlib](https://matplotlib.org/) to generate the plots.
+
+### (a)
+
+{:.question}
+Generate and plot a periodically sampled time series {$$t_j$$} of N points for the sum of two sine
+waves at 697 and 1209 Hz, which is the DTMF tone for the number 1 key.
+
+Here's a plot of 250 samples taken over one tenth of a second.
+
+![samples](../assets/img/pset12_fig_a.png)
+
+### (b)
+
+{:.question}
+Calculate and plot the Discrete Cosine Transform (DCT) coefficients {$$f_i$$} for these data,
+defined by their multiplication by the matrix $$f_i = \sum_{j = 0}^{N - 1} D_{ij} t_j$$, where
+
+$$
+\begin{align*}
+D_{ij} =
+\begin{cases}
+\sqrt{\frac{1}{N}} &(i = 0)\\
+\sqrt{\frac{2}{N}} \cos \left( \frac{\pi (2j + 1) i}{2 N} \right) &(1 \leq i \leq N - 1)
+\end{cases}
+\end{align*}
+$$
+
+![dct](../assets/img/pset12_fig_b.png)
+
+### (c)
+
+{:.question}
+Plot the inverse transform of the {$$f_i$$} by multiplying them by the inverse of the DCT matrix
+(which is equal to its transpose) and verify that it matches the time series.
+
+The original samples are recovered.
+
+![recovered samples](../assets/img/pset12_fig_c.png)
+
+### (d)
+
+{:.question}
+Randomly sample and plot a subset of M points {$$t^\prime_k$$} of the {$$t_j$$}; you’ll later
+investigate the dependence on the sample size.
+
+Here I've selected 100 samples from the original 250. The plot is recognizable but very distorted.
+
+![subset samples](../assets/img/pset12_fig_d.png)
+
+### (e)
+
+{:.question}
+Starting with a random guess for the DCT coefficients {$$f^\prime_i$$}, use gradient descent to
+minimize the error at the sample points
+
+$$
+\min_{\{f^\prime_i\}} \sum_{k = 0}^{M - 1}
+\left( t^\prime_k - \sum_{j = 0}^{N - 1} D_{ij} f^\prime_i \right)^2
+$$
+
+{:.question}
+and plot the resulting estimated coefficients.
+
+Gradient descent very quickly drives the loss function to zero. However it's not reconstructing the
+true DCT coefficients.
+
+![recovered dct (unregularized)](../assets/img/pset12_fig_e.png)
+
+To make sure I don't have a bug in my code, I plotted the samples we get by performing the inverse
+DCT on the estimated coefficients.
+
+![recovered samples (unregularized)](../assets/img/pset12_fig_e_2.png)
+
+Sure enough all samples in the subset are matched exactly. But the others are way off the mark.
+We've added a lot of high frequency content, and are obviously overfitting.
+
+### (f)
+
+{:.question}
+The preceding minimization is under-constrained; it becomes well-posed if a norm of the DCT
+coefficients is minimized subject to a constraint of agreeing with the sampled points. One of the
+simplest (but not best [Gershenfeld, 1999]) ways to do this is by adding a penalty term to the
+minimization. Repeat the gradient descent minimization using the L2 norm:
+
+$$
+\min_{\{f^\prime_i\}} \sum_{k = 0}^{M - 1}
+\left( t^\prime_k - \sum_{j = 0}^{N - 1} D_{ij} f^\prime_i \right)^2
++ \sum_{i = 0}^{N - 1} f^{\prime 2}_i
+$$
+
+{:.question}
+and plot the resulting estimated coefficients.
+
+With L2 regularization, we remove some of the high frequency content. This makes the real peaks a
+little more prominent.
+
+![recovered dct (L2 regularized)](../assets/img/pset12_fig_f.png)
+
+However it comes at a cost: gradient descent no longer drive the loss to zero. As such the loss
+itself isn't a good termination condition. In its place I terminate when the squared norm of the
+gradient is less than $$\num{1e-6}$$. The final loss for the coefficients in the plot above is
+around 50.
+
+You can easily see that the loss is nonzero from the reconstructed samples.
+
+![recovered samples (L2 regularized)](../assets/img/pset12_fig_f_2.png)
+
+### (g)
+
+{:.question}
+Repeat the gradient descent minimization using the L1 norm:
+
+$$
+\min_{\{f^\prime_i\}} \sum_{k = 0}^{M - 1}
+\left( t^\prime_k - \sum_{j = 0}^{N - 1} D_{ij} f^\prime_i \right)^2
++ \sum_{i = 0}^{N - 1} \vert f^{\prime}_i \vert
+$$
+
+{:.question}
+Plot the resulting estimated coefficients, compare to the L2 norm estimate, and compare the
+dependence of the results on M to the Nyquist sampling limit of twice the highest frequency.
+
+With L1 regularization the DCT coefficients are recovered pretty well. There is no added high
+frequency noise.
+
+![recovered dct (L1 regularized)](../assets/img/pset12_fig_g.png)
+
+It still can't drive the loss to zero. Additionally it's hard to drive the squared norm of the
+gradient to zero, since the gradient of the absolute values shows up as 1 or -1. (Though to help
+prevent oscillation I actually drop this contribution if the absolute value of the coefficient in
+question is less than $$\num{1e-3}$$.) So here I terminate when the relative change in the loss
+falls below $$\num{1e-9}$$. I also decay the learning rate during optimization. It starts at 0.1 and
+is multiplied by 0.99 every 64 iterations.
+
+The final loss is around 40, so better than we found with L2 regularization. However it did take
+longer to converge: this version stopped after 21,060 iterations, as opposed to 44 (for L2) or 42
+(for unregularized). If I stop it after 50 samples it's a bit worse than the L2 version (loss of 55
+instead of 50). It's not until roughly 2500 iterations that it's unequivocally pulled ahead. I
+played with learning rates and decay schedules a bit, but there might be more room for improvement.
+
+The recovered samples are also much more visually recognizable. The amplitude of our waveform seems
+overall a bit diminished, but unlike our previous attempts it looks similar to the original.
+
+![recovered samples (L1 regularized)](../assets/img/pset12_fig_g_2.png)
+
+This technique can recover the signal substantially below the Nyquist limit. The highest frequency
+signal is 1209 Hz, so with traditional techniques we'd have to sample at 2418 Hz or faster to avoid
+artifacts. Since I'm only plotting over one hundreth of a second, I thus need at least 242 samples.
+So my original 250 is (not coicidentally) near here. But even with a subset of only 50 samples, the
+L1 regularized gradient descent does an admirable job at recovering the DCT coefficients and
+samples:
+
+![recovered dct (from 50)](../assets/img/pset12_fig_g_3.png)
+![recovered samples (from 50)](../assets/img/pset12_fig_g_4.png)
diff --git a/_sass/main.scss b/_sass/main.scss
index 504e66300de0fda0793e34104310bce0dc6dc471..0dc99a8e1f09154553fa02853567d020a832cb2d 100644
--- a/_sass/main.scss
+++ b/_sass/main.scss
@@ -46,3 +46,7 @@ table, th, td {
 th, td {
     padding: 5px 10px;
 }
+
+img {
+    width: 100%;
+}
diff --git a/assets/img/notes_ft_examples_1.jpg b/assets/img/notes_ft_examples_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..616909573b09b55ad770b0a1503af8c7bb0f4825
Binary files /dev/null and b/assets/img/notes_ft_examples_1.jpg differ
diff --git a/assets/img/notes_ft_examples_2.jpg b/assets/img/notes_ft_examples_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b74ef8cf7cc13a0f16a9039332cc27391bc898f3
Binary files /dev/null and b/assets/img/notes_ft_examples_2.jpg differ
diff --git a/assets/img/notes_ft_examples_3.jpg b/assets/img/notes_ft_examples_3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fa2662ec4f95abee1355ac98fdfda41634ba6bd4
Binary files /dev/null and b/assets/img/notes_ft_examples_3.jpg differ
diff --git a/assets/img/project_3d_print.jpg b/assets/img/project_3d_print.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3f5cae2e7e898736e3221100ec1d480a964b44b4
Binary files /dev/null and b/assets/img/project_3d_print.jpg differ
diff --git a/assets/img/project_3d_print_reconstruction.jpg b/assets/img/project_3d_print_reconstruction.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f63cb2779c9a5716cffbe713281ea3fa9644994a
Binary files /dev/null and b/assets/img/project_3d_print_reconstruction.jpg differ
diff --git a/assets/img/project_brain.png b/assets/img/project_brain.png
new file mode 100644
index 0000000000000000000000000000000000000000..59eb3c3e87e7e77150e248f7de3f31ee488638ac
Binary files /dev/null and b/assets/img/project_brain.png differ
diff --git a/assets/img/project_cool_1.png b/assets/img/project_cool_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..87b7c7e79f84469ecee36a650fa653c59f9d1d82
Binary files /dev/null and b/assets/img/project_cool_1.png differ
diff --git a/assets/img/project_cool_2.png b/assets/img/project_cool_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..335b7627d3db77a5461784b04917c715571b3fea
Binary files /dev/null and b/assets/img/project_cool_2.png differ
diff --git a/assets/img/project_cool_3.png b/assets/img/project_cool_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6c4d7a37daf7f76539987d934e04953bf793468
Binary files /dev/null and b/assets/img/project_cool_3.png differ
diff --git a/assets/img/project_cool_4.png b/assets/img/project_cool_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..103c646b5768dff20da12808feeb49adec204fcd
Binary files /dev/null and b/assets/img/project_cool_4.png differ
diff --git a/assets/img/project_fbp_reconstruction.png b/assets/img/project_fbp_reconstruction.png
new file mode 100644
index 0000000000000000000000000000000000000000..d444e9f0a2d89243030a803ea5ff91cd55b3bbfe
Binary files /dev/null and b/assets/img/project_fbp_reconstruction.png differ
diff --git a/assets/img/project_fourier_reconstruction.png b/assets/img/project_fourier_reconstruction.png
new file mode 100644
index 0000000000000000000000000000000000000000..059d29c5b63cbce3f8f8b768d7320d7f5d45f07d
Binary files /dev/null and b/assets/img/project_fourier_reconstruction.png differ
diff --git a/assets/img/project_matrix_dft_im.png b/assets/img/project_matrix_dft_im.png
new file mode 100644
index 0000000000000000000000000000000000000000..af5034f54d07b2fafdbf9a3fe5002c2c37518b37
Binary files /dev/null and b/assets/img/project_matrix_dft_im.png differ
diff --git a/assets/img/project_matrix_dft_re.png b/assets/img/project_matrix_dft_re.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed86e8e69dba31cd49e76aa0249f12aa5a0c5b2e
Binary files /dev/null and b/assets/img/project_matrix_dft_re.png differ
diff --git a/assets/img/project_matrix_polar_im.png b/assets/img/project_matrix_polar_im.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c414fdc8bb3dfd6cf08d2367fa7655ea8d02fc1
Binary files /dev/null and b/assets/img/project_matrix_polar_im.png differ
diff --git a/assets/img/project_matrix_polar_re.png b/assets/img/project_matrix_polar_re.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc0df4ee39bd79bb743c9f3e4040d22beaee1e37
Binary files /dev/null and b/assets/img/project_matrix_polar_re.png differ
diff --git a/assets/img/project_matrix_sinogram.png b/assets/img/project_matrix_sinogram.png
new file mode 100644
index 0000000000000000000000000000000000000000..99e6f2783cae54a063db65b94d56f8816145b7f6
Binary files /dev/null and b/assets/img/project_matrix_sinogram.png differ
diff --git a/assets/img/project_sinogram.png b/assets/img/project_sinogram.png
new file mode 100644
index 0000000000000000000000000000000000000000..906b7c28f3ca9e29c4e9346039bca951e7dff82c
Binary files /dev/null and b/assets/img/project_sinogram.png differ
diff --git a/assets/img/project_tiny_brain.png b/assets/img/project_tiny_brain.png
new file mode 100644
index 0000000000000000000000000000000000000000..2cf2e9a230271c2a29e37f556201c5bbac1b2bf5
Binary files /dev/null and b/assets/img/project_tiny_brain.png differ
diff --git a/assets/img/project_transform_im.png b/assets/img/project_transform_im.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4dfd5da216d46f229bdfdb76be231a500e9b9ef
Binary files /dev/null and b/assets/img/project_transform_im.png differ
diff --git a/assets/img/project_transform_re.png b/assets/img/project_transform_re.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c342169e4dfc7be4505e9ccfce4d320a00d280e
Binary files /dev/null and b/assets/img/project_transform_re.png differ
diff --git a/assets/img/project_transform_swapped_im.png b/assets/img/project_transform_swapped_im.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0ceb4bf439e1f142a9d3c70d5b9db743cc70172
Binary files /dev/null and b/assets/img/project_transform_swapped_im.png differ
diff --git a/assets/img/project_transform_swapped_re.png b/assets/img/project_transform_swapped_re.png
new file mode 100644
index 0000000000000000000000000000000000000000..912edca951bfb541519250f54f755dedba8dbcd2
Binary files /dev/null and b/assets/img/project_transform_swapped_re.png differ
diff --git a/assets/img/pset10_1.jpg b/assets/img/pset10_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f699efe7f5fb220a0f26442bc7282a86fef397d3
Binary files /dev/null and b/assets/img/pset10_1.jpg differ
diff --git a/assets/img/pset10_2.jpg b/assets/img/pset10_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5874f6bf9be1fcf63c4ccd507ce2b91ecd18e512
Binary files /dev/null and b/assets/img/pset10_2.jpg differ
diff --git a/assets/img/pset11_im_full.jpg b/assets/img/pset11_im_full.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..dbbb893241a92bee71ab0cedd9f8edfc850eb434
Binary files /dev/null and b/assets/img/pset11_im_full.jpg differ
diff --git a/assets/img/pset11_im_zoom.jpg b/assets/img/pset11_im_zoom.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8fb821716faa778ff9435230646647de006d6970
Binary files /dev/null and b/assets/img/pset11_im_zoom.jpg differ
diff --git a/assets/img/pset11_phase_full.jpg b/assets/img/pset11_phase_full.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..74604b027c2e43bd53efa98927d2678826c8f17e
Binary files /dev/null and b/assets/img/pset11_phase_full.jpg differ
diff --git a/assets/img/pset11_phase_zoom.jpg b/assets/img/pset11_phase_zoom.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..72c975a5011a6c452c040f037b6fe93082ae95dc
Binary files /dev/null and b/assets/img/pset11_phase_zoom.jpg differ
diff --git a/assets/img/pset11_re_full.jpg b/assets/img/pset11_re_full.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..305d9874a8a3afce63f74e5d63d5ca094d22e6cf
Binary files /dev/null and b/assets/img/pset11_re_full.jpg differ
diff --git a/assets/img/pset11_re_zoom.jpg b/assets/img/pset11_re_zoom.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..39eec70c0d5d3dcd256c2ee80a13b842d34c592e
Binary files /dev/null and b/assets/img/pset11_re_zoom.jpg differ
diff --git a/assets/img/pset12_differential_amplifier.svg b/assets/img/pset12_differential_amplifier.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b03ca074015a179e2159217731d70c261397493e
--- /dev/null
+++ b/assets/img/pset12_differential_amplifier.svg
@@ -0,0 +1,705 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="300"
+   height="200"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="Op-Amp Differential Amplifier.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective5533"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2827"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6195" />
+    <inkscape:perspective
+       id="perspective6211"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3053"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 10 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3840"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7019"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4148" />
+    <inkscape:perspective
+       id="perspective4175"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6151" />
+    <inkscape:perspective
+       id="perspective6168"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7294" />
+    <inkscape:perspective
+       id="perspective7292"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2806" />
+    <inkscape:perspective
+       id="perspective2819"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7782"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7851" />
+    <inkscape:perspective
+       id="perspective7849"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7935" />
+    <inkscape:perspective
+       id="perspective7933"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3195"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3275"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 50 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3806"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3941"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4211"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4402" />
+    <inkscape:perspective
+       id="perspective4400"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4254"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="40.007247"
+     inkscape:cy="80.947031"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1399"
+     inkscape:window-height="874"
+     inkscape:window-x="33"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2650"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.985975,83.359375)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="145.02725"
+       y="-83.148415"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="145.02725"
+         y="-83.148415" /></text>
+    <path
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7059"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(33.98065,-85.859375)" />
+    <g
+       transform="translate(13.48065,-135.72186)"
+       id="g7474"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4873"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3529"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(259.33597,-50.859375)" />
+    <g
+       transform="translate(182.10835,101.52969)"
+       id="g4139">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4141"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4143"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4145" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4147"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4149"
+           x="-155"
+           y="-69">2 </tspan></text>
+    </g>
+    <g
+       transform="translate(-182.91159,34.527519)"
+       id="g4151">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="199.89223"
+         y="-52.886894"
+         id="text4153"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4155"
+           x="199.89223"
+           y="-52.886894">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4157" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="208.52013"
+         y="-46.997822"
+         id="text4159"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4161"
+           x="208.52013"
+           y="-46.997822">1</tspan></text>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 43.98065,-23.359375 L 68.980645,-23.359375"
+       id="path4262" />
+    <g
+       transform="translate(152.57221,-29.761656)"
+       id="g3808"
+       inkscape:label="Layer 1">
+      <path
+         id="path3810"
+         d="M 22.90842,16.402281 L 22.90842,67.107856 L 72.04592,41.755066 L 22.90842,16.402281 z"
+         style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="46.77729"
+         x="30.408421"
+         height="10"
+         width="2"
+         id="rect4468"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="50.77729"
+         height="10"
+         width="2"
+         id="rect4470"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="30.777281"
+         height="10"
+         width="2"
+         id="rect4472"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path4266"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(33.980475,-40.859375)" />
+    <g
+       transform="translate(13.167975,-90.721865)"
+       id="g4268"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4270"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 43.980475,21.640625 L 68.98047,21.640625"
+       id="path4272" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 111.37475,21.640625 L 173.30332,21.640625"
+       id="path4274"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(123.16813,-160.72186)"
+       id="g4276"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4278"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 179.23064,-48.359375 L 148.98064,-48.359375 L 148.98064,1.640625 L 173.98064,1.640625"
+       id="path4280"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 148.98064,-23.359375 L 112.98064,-23.359375"
+       id="path4282"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 223.63257,11.640625 L 264.07125,11.640625"
+       id="path4284" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 221.48064,-48.359375 L 248.98064,-48.359375 L 248.98064,11.640625"
+       id="path4286"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path4288"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="matrix(0,-1,1,0,36.618295,142.56032)"
+       id="g4290"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4292"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4404"
+       transform="translate(113.98046,55.640625)">
+      <path
+         sodipodi:nodetypes="cc"
+         id="path9220"
+         d="M 35,47 L 35,29"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         y="46"
+         x="23"
+         height="3"
+         width="24"
+         id="rect4702"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <rect
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="rect4704"
+         width="18"
+         height="3"
+         x="26"
+         y="51" />
+      <rect
+         y="56"
+         x="29"
+         height="3"
+         width="12"
+         id="rect4719"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+    </g>
+    <g
+       transform="translate(438.08597,90.64063)"
+       id="g4410">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4412"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4414"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4416" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4418"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4420"
+           x="-155"
+           y="-69">out</tspan></text>
+    </g>
+    <g
+       id="g4422"
+       transform="translate(-161.37746,-130)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4424"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4426"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4428"
+         y="67.529701"
+         x="369.73599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="369.73599"
+           id="tspan4430"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <g
+       id="g4432"
+       transform="translate(-191.37764,8)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4434"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4436"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4438"
+         y="67.529701"
+         x="368.23599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="368.23599"
+           id="tspan4440"
+           sodipodi:role="line">g</tspan></text>
+    </g>
+    <g
+       id="g4442"
+       transform="translate(-274.37764,-10)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4444"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4446"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4448"
+         y="67.529701"
+         x="368.48599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="368.48599"
+           id="tspan4450"
+           sodipodi:role="line">2</tspan></text>
+    </g>
+    <g
+       id="g4452"
+       transform="translate(-274.25536,-105.88908)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4454"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4456"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4458"
+         y="67.529701"
+         x="368.48599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="368.48599"
+           id="tspan4460"
+           sodipodi:role="line">1</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4530"
+       transform="translate(141.48063,-37.859376)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g10127">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4260"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4534"
+       transform="translate(141.48045,7.140624)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4536">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4538"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4540"
+       transform="translate(241.48064,-2.859376)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4542">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4544"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 148.9858,44.140625 L 148.9858,21.640625"
+       id="path4863"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/assets/img/pset12_differentiator.svg b/assets/img/pset12_differentiator.svg
new file mode 100644
index 0000000000000000000000000000000000000000..146c3c1e6c0b0cae50d468c2f6e77afd0e124840
--- /dev/null
+++ b/assets/img/pset12_differentiator.svg
@@ -0,0 +1,556 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="300"
+   height="150"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="Op-Amp Differentiating Amplifier.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective5533"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2827"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6195" />
+    <inkscape:perspective
+       id="perspective6211"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3053"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 10 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3840"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7019"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4148" />
+    <inkscape:perspective
+       id="perspective4175"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6151" />
+    <inkscape:perspective
+       id="perspective6168"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7294" />
+    <inkscape:perspective
+       id="perspective7292"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2806" />
+    <inkscape:perspective
+       id="perspective2819"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7782"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7851" />
+    <inkscape:perspective
+       id="perspective7849"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7935" />
+    <inkscape:perspective
+       id="perspective7933"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3195"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3275"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 50 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3806"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3941"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4211"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4402" />
+    <inkscape:perspective
+       id="perspective4400"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4254"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5779"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="91.521475"
+     inkscape:cy="14.518021"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1399"
+     inkscape:window-height="874"
+     inkscape:window-x="33"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2650"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.985975,83.359375)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="145.02725"
+       y="-83.148415"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="145.02725"
+         y="-83.148415" /></text>
+    <path
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7059"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(34.156205,-69.85907)" />
+    <g
+       transform="translate(126.04847,-169.72186)"
+       id="g7474"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4873"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3529"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(259.33597,-59.859375)" />
+    <g
+       transform="translate(-186.73603,50.52782)"
+       id="g4151">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="199.89223"
+         y="-52.886894"
+         id="text4153"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4155"
+           x="199.89223"
+           y="-52.886894">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4157" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="209.27013"
+         y="-46.997822"
+         id="text4159"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4161"
+           x="209.27013"
+           y="-46.997822">in</tspan></text>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 44.156205,-7.35907 L 84.735975,-7.359375"
+       id="path4262"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(152.57221,-38.761656)"
+       id="g3808"
+       inkscape:label="Layer 1">
+      <path
+         id="path3810"
+         d="M 22.90842,16.402281 L 22.90842,67.107856 L 72.04592,41.755066 L 22.90842,16.402281 z"
+         style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="46.77729"
+         x="30.408421"
+         height="10"
+         width="2"
+         id="rect4468"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="50.77729"
+         height="10"
+         width="2"
+         id="rect4470"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="30.777281"
+         height="10"
+         width="2"
+         id="rect4472"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 182.98597,-57.359375 L 148.98064,-57.359375 L 148.98064,-7.35938 L 173.98064,-7.35938"
+       id="path4280"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 149.15619,-7.35907 L 98.235975,-7.359375"
+       id="path4282"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 223.63257,2.64062 L 264.07125,2.64062"
+       id="path4284" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 223.98597,-57.359375 L 248.98064,-57.359375 L 248.98064,2.64062"
+       id="path4286"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path4288"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 148.98597,50.64062 L 148.98597,12.64062 L 173.98597,12.64062"
+       id="path9220"
+       sodipodi:nodetypes="ccc" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4702"
+       width="24"
+       height="3"
+       x="136.98598"
+       y="49.640617" />
+    <rect
+       y="54.640617"
+       x="139.98598"
+       height="3"
+       width="18"
+       id="rect4704"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4719"
+       width="12"
+       height="3"
+       x="142.98598"
+       y="59.640617" />
+    <g
+       transform="translate(438.08597,81.64063)"
+       id="g4410">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4412"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4414"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4416" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4418"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4420"
+           x="-155"
+           y="-69">out</tspan></text>
+    </g>
+    <g
+       id="g4442"
+       transform="translate(-274.50002,-135.88908)" />
+    <g
+       id="g5691"
+       transform="translate(0.5,-7)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4454"
+         y="-22.859375"
+         x="83.985977"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-22.859375"
+           x="83.985977"
+           id="tspan4456"
+           sodipodi:role="line">C</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4530"
+       transform="translate(141.65618,-21.859071)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g10127">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4260"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4540"
+       transform="translate(241.48064,-11.859376)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4542">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4544"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g5781"
+       transform="matrix(0,1,-1,0,120.98597,-37.359375)">
+      <rect
+         y="23"
+         x="13"
+         height="4"
+         width="34"
+         id="rect2838"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="33"
+         x="13"
+         height="4"
+         width="34"
+         id="rect2840"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5785"
+       transform="translate(128.48495,-62.55019)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5787"
+         y="-6.309185"
+         x="68.751022"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-6.309185"
+           x="68.751022"
+           id="tspan5789"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/assets/img/pset12_fig_a.png b/assets/img/pset12_fig_a.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a732c8a7b3f6de4fbab9a098287dcb545387981
Binary files /dev/null and b/assets/img/pset12_fig_a.png differ
diff --git a/assets/img/pset12_fig_b.png b/assets/img/pset12_fig_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..430727e7d8177f5c35a65cfe70009534735ef275
Binary files /dev/null and b/assets/img/pset12_fig_b.png differ
diff --git a/assets/img/pset12_fig_c.png b/assets/img/pset12_fig_c.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ab51bbe4e1070fe56621106e7e0f145dbcc6a9b
Binary files /dev/null and b/assets/img/pset12_fig_c.png differ
diff --git a/assets/img/pset12_fig_d.png b/assets/img/pset12_fig_d.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef37320e97e761f81c2cc1c38a660ad4fc1bd3f7
Binary files /dev/null and b/assets/img/pset12_fig_d.png differ
diff --git a/assets/img/pset12_fig_e.png b/assets/img/pset12_fig_e.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7d0e4ed9ab67096d407361efb1bd782ed630ff6
Binary files /dev/null and b/assets/img/pset12_fig_e.png differ
diff --git a/assets/img/pset12_fig_e_2.png b/assets/img/pset12_fig_e_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..af87ba881cc9e14be2ab36ae3962dd0cb2ec28b4
Binary files /dev/null and b/assets/img/pset12_fig_e_2.png differ
diff --git a/assets/img/pset12_fig_f.png b/assets/img/pset12_fig_f.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8abd0990175f5242c669c4005ab6bc57ef33f01
Binary files /dev/null and b/assets/img/pset12_fig_f.png differ
diff --git a/assets/img/pset12_fig_f_2.png b/assets/img/pset12_fig_f_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc8f7854097ebf4c741d926c80045c205f7ee9cb
Binary files /dev/null and b/assets/img/pset12_fig_f_2.png differ
diff --git a/assets/img/pset12_fig_g.png b/assets/img/pset12_fig_g.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ff1a21f6ec7d278180fca9f0293643e82993063
Binary files /dev/null and b/assets/img/pset12_fig_g.png differ
diff --git a/assets/img/pset12_fig_g_2.png b/assets/img/pset12_fig_g_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..3dc73ce49fafeb8338bc0d3a58bdbb8942a1b789
Binary files /dev/null and b/assets/img/pset12_fig_g_2.png differ
diff --git a/assets/img/pset12_fig_g_3.png b/assets/img/pset12_fig_g_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..15e35844d56bcdaa22258fb5c9076589b0f8e644
Binary files /dev/null and b/assets/img/pset12_fig_g_3.png differ
diff --git a/assets/img/pset12_fig_g_4.png b/assets/img/pset12_fig_g_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e94e446a2771d1c89f27426358ace0cd89b65ac
Binary files /dev/null and b/assets/img/pset12_fig_g_4.png differ
diff --git a/assets/img/pset12_integrator.svg b/assets/img/pset12_integrator.svg
new file mode 100644
index 0000000000000000000000000000000000000000..91d256a29c397cca37c94fa6621def322d997223
--- /dev/null
+++ b/assets/img/pset12_integrator.svg
@@ -0,0 +1,555 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="300"
+   height="150"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="Op-Amp Integrating Amplifier.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective5533"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2827"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6195" />
+    <inkscape:perspective
+       id="perspective6211"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3053"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 10 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3840"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7019"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4148" />
+    <inkscape:perspective
+       id="perspective4175"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6151" />
+    <inkscape:perspective
+       id="perspective6168"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7294" />
+    <inkscape:perspective
+       id="perspective7292"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2806" />
+    <inkscape:perspective
+       id="perspective2819"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7782"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7851" />
+    <inkscape:perspective
+       id="perspective7849"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7935" />
+    <inkscape:perspective
+       id="perspective7933"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3195"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3275"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 50 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3806"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3941"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4211"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4402" />
+    <inkscape:perspective
+       id="perspective4400"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4254"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5779"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="66.286591"
+     inkscape:cy="148.93023"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1399"
+     inkscape:window-height="874"
+     inkscape:window-x="33"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2650"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.985975,83.359375)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="145.02725"
+       y="-83.148415"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="145.02725"
+         y="-83.148415" /></text>
+    <path
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7059"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(34.156205,-70.85907)" />
+    <g
+       transform="translate(13.656205,-120.72155)"
+       id="g7474"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4873"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3529"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(259.33597,-60.859375)" />
+    <g
+       transform="translate(-186.73603,49.52782)"
+       id="g4151">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="199.89223"
+         y="-52.886894"
+         id="text4153"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4155"
+           x="199.89223"
+           y="-52.886894">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4157" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="209.27013"
+         y="-46.997822"
+         id="text4159"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4161"
+           x="209.27013"
+           y="-46.997822">in</tspan></text>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 44.156205,-8.35907 L 69.1562,-8.35907"
+       id="path4262" />
+    <g
+       transform="translate(152.57221,-39.761656)"
+       id="g3808"
+       inkscape:label="Layer 1">
+      <path
+         id="path3810"
+         d="M 22.90842,16.402281 L 22.90842,67.107856 L 72.04592,41.755066 L 22.90842,16.402281 z"
+         style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="46.77729"
+         x="30.408421"
+         height="10"
+         width="2"
+         id="rect4468"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="50.77729"
+         height="10"
+         width="2"
+         id="rect4470"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="30.777281"
+         height="10"
+         width="2"
+         id="rect4472"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 194.98597,-58.359375 L 148.98064,-58.359375 L 148.98064,-8.35938 L 173.98064,-8.35938"
+       id="path4280"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 149.15619,-8.35907 L 113.15619,-8.35907"
+       id="path4282"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 223.63257,1.64062 L 264.07125,1.64062"
+       id="path4284" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 207.98597,-58.359375 L 248.98064,-58.359375 L 248.98064,1.64062"
+       id="path4286"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path4288"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 148.98597,49.64062 L 148.98597,11.64062 L 173.98597,11.64062"
+       id="path9220"
+       sodipodi:nodetypes="ccc" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4702"
+       width="24"
+       height="3"
+       x="136.98598"
+       y="48.640617" />
+    <rect
+       y="53.640617"
+       x="139.98598"
+       height="3"
+       width="18"
+       id="rect4704"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4719"
+       width="12"
+       height="3"
+       x="142.98598"
+       y="58.640617" />
+    <g
+       transform="translate(438.08597,80.64063)"
+       id="g4410">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4412"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4414"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4416" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4418"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4420"
+           x="-155"
+           y="-69">out</tspan></text>
+    </g>
+    <g
+       id="g4442"
+       transform="translate(-274.50002,-135.88908)" />
+    <g
+       id="g5691"
+       transform="translate(0,-8)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4454"
+         y="-19.24815"
+         x="85.690483"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-19.24815"
+           x="85.690483"
+           id="tspan4456"
+           sodipodi:role="line">R</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4530"
+       transform="translate(141.65618,-22.859071)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g10127">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4260"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4540"
+       transform="translate(241.48064,-12.859376)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4542">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4544"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g5781"
+       transform="matrix(0,1,-1,0,231.98597,-88.359375)">
+      <rect
+         y="23"
+         x="13"
+         height="4"
+         width="34"
+         id="rect2838"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="33"
+         x="13"
+         height="4"
+         width="34"
+         id="rect2840"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5785"
+       transform="translate(128.48495,-63.55019)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5787"
+         y="-4.809185"
+         x="85.501022"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-4.809185"
+           x="85.501022"
+           id="tspan5789"
+           sodipodi:role="line">C</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/assets/img/pset12_non-inverting_amplifier.svg b/assets/img/pset12_non-inverting_amplifier.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0fbe3245523c25183bd80afb57a8a1ec2741287d
--- /dev/null
+++ b/assets/img/pset12_non-inverting_amplifier.svg
@@ -0,0 +1,566 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="300"
+   height="125"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="Op-Amp Non-Inverting Amplifier.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective5533"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2827"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6195" />
+    <inkscape:perspective
+       id="perspective6211"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3053"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 10 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3840"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7019"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4148" />
+    <inkscape:perspective
+       id="perspective4175"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6151" />
+    <inkscape:perspective
+       id="perspective6168"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7294" />
+    <inkscape:perspective
+       id="perspective7292"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2806" />
+    <inkscape:perspective
+       id="perspective2819"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7782"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7851" />
+    <inkscape:perspective
+       id="perspective7849"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7935" />
+    <inkscape:perspective
+       id="perspective7933"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3195"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3275"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 50 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3806"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3941"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4211"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4402" />
+    <inkscape:perspective
+       id="perspective4400"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4254"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="94.382011"
+     inkscape:cy="-5.1336545"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1399"
+     inkscape:window-height="874"
+     inkscape:window-x="33"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2650"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.985975,83.359375)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="144.88225"
+       y="-83.359375"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="144.88225"
+         y="-83.359375" /></text>
+    <path
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7059"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(103.98597,-120.85938)" />
+    <g
+       transform="translate(7.548475,-110.72186)"
+       id="g7474"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4873"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3529"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(254.23597,-110.85938)" />
+    <g
+       transform="translate(-117.39156,-0.4724908)"
+       id="g4151">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="199.89223"
+         y="-52.886894"
+         id="text4153"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4155"
+           x="199.89223"
+           y="-52.886894">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4157" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="209.77013"
+         y="-46.997822"
+         id="text4159"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4161"
+           x="209.77013"
+           y="-46.997822">in</tspan></text>
+    </g>
+    <g
+       transform="matrix(1,0,0,-1,147.47221,-6.2515248)"
+       id="g3808"
+       inkscape:label="Layer 1">
+      <path
+         id="path3810"
+         d="M 22.90842,16.402281 L 22.90842,67.107856 L 72.04592,41.755066 L 22.90842,16.402281 z"
+         style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="46.77729"
+         x="30.408421"
+         height="10"
+         width="2"
+         id="rect4468"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="50.77729"
+         height="10"
+         width="2"
+         id="rect4470"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="30.777281"
+         height="10"
+         width="2"
+         id="rect4472"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       transform="translate(110.16223,-110.78382)"
+       id="g4276"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4278"
+         d="M 58.046325,111.42444 L 54.886245,111.42444 L 58.823745,122.42444 L 61.636245,122.42444 L 67.104995,107.27575 L 72.573745,122.42475 L 75.386245,122.42475 L 80.854995,107.27575 L 86.323745,122.42475 L 89.136245,122.42475 L 94.604995,107.27575 L 96.805945,113.42444 L 99.966015,113.42444 L 96.011245,102.42475 L 93.198745,102.42475 L 87.729995,117.57376 L 82.261245,102.42475 L 79.448745,102.42475 L 73.979995,117.57376 L 68.511245,102.42475 L 65.698745,102.42475 L 60.229995,117.57376 L 58.046325,111.42444 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 169.88097,-58.35938 L 113.98597,-58.359375"
+       id="path4282"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 218.53258,-48.35938 L 258.97125,-48.35938"
+       id="path4284" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 208.98597,1.640625 L 243.98597,1.640625 L 243.98597,-48.359375"
+       id="path4286"
+       sodipodi:nodetypes="ccc" />
+    <g
+       inkscape:label="Layer 1"
+       id="g4404"
+       transform="translate(3.985975,2.4296646)">
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path9220"
+         d="M 35.000005,22.25 L 35,-0.7890396 L 60,-0.7890396"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         y="21"
+         x="23"
+         height="3"
+         width="24"
+         id="rect4702"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+      <rect
+         style="fill:#000000;fill-opacity:1;stroke:none"
+         id="rect4704"
+         width="18"
+         height="3"
+         x="26"
+         y="26" />
+      <rect
+         y="31"
+         x="29"
+         height="3"
+         width="12"
+         id="rect4719"
+         style="fill:#000000;fill-opacity:1;stroke:none" />
+    </g>
+    <g
+       transform="translate(432.98597,30.640625)"
+       id="g4410">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4412"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4414"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4416" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4418"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4420"
+           x="-155"
+           y="-69">out</tspan></text>
+    </g>
+    <g
+       id="g4452"
+       transform="translate(-277.85502,-31.100036)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4454"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4456"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4458"
+         y="67.529701"
+         x="368.48599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="368.48599"
+           id="tspan4460"
+           sodipodi:role="line">1</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4530"
+       transform="translate(141.49096,-8.0703404)" />
+    <g
+       inkscape:label="Layer 1"
+       id="g4534"
+       transform="translate(141.33563,16.929664)" />
+    <g
+       inkscape:label="Layer 1"
+       id="g4540"
+       transform="translate(236.38064,-62.859381)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4542">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4544"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 164.98597,1.640625 L 105.68473,1.640625"
+       id="path4865"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 168.98597,-38.359375 L 133.98597,-38.359374 L 133.98597,1.640625"
+       id="path4867"
+       sodipodi:nodetypes="ccc" />
+    <g
+       id="g4869"
+       transform="translate(-177.105,-31.100036)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4871"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4873"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4875"
+         y="67.529701"
+         x="368.48599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="368.48599"
+           id="tspan4877"
+           sodipodi:role="line">2</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4879"
+       transform="translate(126.48597,-12.859376)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4881">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4883"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/assets/img/pset12_summing_amplifier.svg b/assets/img/pset12_summing_amplifier.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aefc90478c67c629f8414b65388ffbfef3600909
--- /dev/null
+++ b/assets/img/pset12_summing_amplifier.svg
@@ -0,0 +1,813 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="300"
+   height="260"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="Op-Amp Summing Amplifier.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <inkscape:perspective
+       id="perspective5533"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective2827"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6195" />
+    <inkscape:perspective
+       id="perspective6211"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3053"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 10 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3840"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7019"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4148" />
+    <inkscape:perspective
+       id="perspective4175"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective6151" />
+    <inkscape:perspective
+       id="perspective6168"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7294" />
+    <inkscape:perspective
+       id="perspective7292"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective2806" />
+    <inkscape:perspective
+       id="perspective2819"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective7782"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7851" />
+    <inkscape:perspective
+       id="perspective7849"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective7935" />
+    <inkscape:perspective
+       id="perspective7933"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3195"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3275"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 50 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3806"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3941"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4211"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective4402" />
+    <inkscape:perspective
+       id="perspective4400"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 32 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4254"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 16 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="168.93554"
+     inkscape:cy="69.261401"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1399"
+     inkscape:window-height="874"
+     inkscape:window-x="33"
+     inkscape:window-y="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2650"
+       visible="true"
+       enabled="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8.985975,83.359375)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="145.02725"
+       y="-83.148415"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="145.02725"
+         y="-83.148415" /></text>
+    <path
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7059"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(34.156205,39.14093)" />
+    <g
+       transform="translate(13.656205,-10.72155)"
+       id="g7474"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4873"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3529"
+       sodipodi:cx="7.5"
+       sodipodi:cy="62.5"
+       sodipodi:rx="2.5"
+       sodipodi:ry="2.5"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       transform="translate(259.33597,49.140625)" />
+    <g
+       transform="translate(-182.98603,159.52782)"
+       id="g4151">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="199.89223"
+         y="-52.886894"
+         id="text4153"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4155"
+           x="199.89223"
+           y="-52.886894">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4157" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="209.27013"
+         y="-46.997822"
+         id="text4159"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4161"
+           x="209.27013"
+           y="-46.997822">1</tspan></text>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 44.156205,101.64093 L 69.1562,101.64093"
+       id="path4262" />
+    <g
+       transform="translate(152.57755,69.863335)"
+       id="g3808"
+       inkscape:label="Layer 1">
+      <path
+         id="path3810"
+         d="M 22.90842,16.402281 L 22.90842,67.107856 L 72.04592,41.755066 L 22.90842,16.402281 z"
+         style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="46.77729"
+         x="30.408421"
+         height="10"
+         width="2"
+         id="rect4468"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="50.77729"
+         height="10"
+         width="2"
+         id="rect4470"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-36.408421"
+         x="30.777281"
+         height="10"
+         width="2"
+         id="rect4472"
+         style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <g
+       transform="translate(123.16813,-60.72186)"
+       id="g4276"
+       inkscape:label="Layer 1">
+      <path
+         sodipodi:nodetypes="ccccccccccccccccccccccc"
+         id="path4278"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" />
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 179.23064,51.640625 L 148.98064,51.640625 L 148.98064,101.64062 L 173.98064,101.64062"
+       id="path4280"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 149.15619,101.64093 L 113.15619,101.64093"
+       id="path4282"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 223.63257,111.64062 L 264.07125,111.64062"
+       id="path4284" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 221.48064,51.640625 L 248.98064,51.640625 L 248.98064,111.64062"
+       id="path4286"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path4288"
+       sodipodi:nodetypes="cc"
+       d="" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 148.98597,159.64062 L 148.98597,121.64062 L 173.98597,121.64062"
+       id="path9220"
+       sodipodi:nodetypes="ccc" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4702"
+       width="24"
+       height="3"
+       x="136.98598"
+       y="158.64062" />
+    <rect
+       y="163.64062"
+       x="139.98598"
+       height="3"
+       width="18"
+       id="rect4704"
+       style="fill:#000000;fill-opacity:1;stroke:none" />
+    <rect
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       id="rect4719"
+       width="12"
+       height="3"
+       x="142.98598"
+       y="168.64062" />
+    <path
+       transform="translate(33.98598,-10.85938)"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       sodipodi:ry="2.5"
+       sodipodi:rx="2.5"
+       sodipodi:cy="62.5"
+       sodipodi:cx="7.5"
+       id="path5559"
+       style="fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <g
+       inkscape:label="Layer 1"
+       id="g5561"
+       transform="translate(13.48598,-60.72186)">
+      <path
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         id="path5563"
+         sodipodi:nodetypes="ccccccccccccccccccccccc" />
+    </g>
+    <g
+       id="g5565"
+       transform="translate(-182.75,109.37851)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5567"
+         y="-52.886894"
+         x="199.89223"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-52.886894"
+           x="199.89223"
+           id="tspan5569"
+           sodipodi:role="line">V<tspan
+   id="tspan5571"
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic" /></tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5573"
+         y="-46.997822"
+         x="209.27013"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-46.997822"
+           x="209.27013"
+           id="tspan5575"
+           sodipodi:role="line">2</tspan></text>
+    </g>
+    <path
+       id="path5577"
+       d="M 43.98598,51.640625 L 68.985975,51.640625"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <g
+       transform="translate(-274.33843,-29.03809)"
+       id="g5579">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="355.35809"
+         y="61.640625"
+         id="text5581"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan5583"
+           x="355.35809"
+           y="61.640625">R</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="368.48599"
+         y="67.529701"
+         id="text5585"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan5587"
+           x="368.48599"
+           y="67.529701">2</tspan></text>
+    </g>
+    <path
+       transform="translate(33.98597,-60.85937)"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       sodipodi:ry="2.5"
+       sodipodi:rx="2.5"
+       sodipodi:cy="62.5"
+       sodipodi:cx="7.5"
+       id="path5589"
+       style="fill:#888a85;fill-opacity:0.11764706;stroke:#888a85;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <g
+       inkscape:label="Layer 1"
+       id="g5591"
+       transform="translate(13.485967,-110.72186)"
+       style="fill:#888a85">
+      <path
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#888a85;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         id="path5593"
+         sodipodi:nodetypes="ccccccccccccccccccccccc" />
+    </g>
+    <path
+       id="path5607"
+       d="M 43.985975,1.640625 L 68.98597,1.640625"
+       style="fill:#888a85;fill-opacity:1;stroke:#888a85;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       transform="translate(33.67348,-110.85938)"
+       d="M 10,62.5 A 2.5,2.5 0 1 1 5,62.5 A 2.5,2.5 0 1 1 10,62.5 z"
+       sodipodi:ry="2.5"
+       sodipodi:rx="2.5"
+       sodipodi:cy="62.5"
+       sodipodi:cx="7.5"
+       id="path5619"
+       style="fill:none;fill-opacity:0.11764706;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       sodipodi:type="arc" />
+    <g
+       inkscape:label="Layer 1"
+       id="g5621"
+       transform="translate(13.173475,-160.72186)">
+      <path
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+         d="M 58.16008,111.36218 L 55,111.36218 L 58.9375,122.36218 L 61.75,122.36218 L 67.21875,107.21348 L 72.6875,122.36249 L 75.5,122.36249 L 80.96875,107.21348 L 86.4375,122.36249 L 89.25,122.36249 L 94.71875,107.21348 L 96.9197,113.36218 L 100.07977,113.36218 L 96.125,102.36249 L 93.3125,102.36249 L 87.84375,117.5115 L 82.375,102.36249 L 79.5625,102.36249 L 74.09375,117.5115 L 68.625,102.36249 L 65.8125,102.36249 L 60.34375,117.5115 L 58.16008,111.36218 z"
+         id="path5623"
+         sodipodi:nodetypes="ccccccccccccccccccccccc" />
+    </g>
+    <g
+       id="g5625"
+       transform="translate(-182.90624,9.527515)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5627"
+         y="-52.886894"
+         x="199.89223"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-52.886894"
+           x="199.89223"
+           id="tspan5629"
+           sodipodi:role="line">V<tspan
+   id="tspan5631"
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic" /></tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5633"
+         y="-46.997822"
+         x="209.27013"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-46.997822"
+           x="209.27013"
+           id="tspan5635"
+           sodipodi:role="line">n</tspan></text>
+    </g>
+    <path
+       id="path5637"
+       d="M 43.67349,-48.35938 L 68.673485,-48.35938"
+       style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <g
+       transform="translate(-274.4947,-128.88908)"
+       id="g5639">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="355.35809"
+         y="61.640625"
+         id="text5641"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan5643"
+           x="355.35809"
+           y="61.640625">R</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="368.48599"
+         y="67.529701"
+         id="text5645"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan5647"
+           x="368.48599"
+           y="67.529701">n</tspan></text>
+    </g>
+    <g
+       transform="translate(438.08597,190.64063)"
+       id="g4410">
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-165.1279"
+         y="-74.889069"
+         id="text4412"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4414"
+           x="-165.1279"
+           y="-74.889069">V<tspan
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+   id="tspan4416" /></tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         x="-155"
+         y="-69"
+         id="text4418"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4420"
+           x="-155"
+           y="-69">out</tspan></text>
+    </g>
+    <g
+       id="g4422"
+       transform="translate(-161.37746,-30)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4424"
+         y="61.640625"
+         x="355.35809"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="61.640625"
+           x="355.35809"
+           id="tspan4426"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4428"
+         y="67.529701"
+         x="369.73599"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="67.529701"
+           x="369.73599"
+           id="tspan4430"
+           sodipodi:role="line">f</tspan></text>
+    </g>
+    <g
+       id="g4442"
+       transform="translate(-274.50002,-135.88908)" />
+    <g
+       id="g5691"
+       transform="translate(0,102)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text4454"
+         y="-19.24815"
+         x="81.03363"
+         style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-19.24815"
+           x="81.03363"
+           id="tspan4456"
+           sodipodi:role="line">R</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text4458"
+         y="-13.359074"
+         x="94.16153"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+         xml:space="preserve"><tspan
+           y="-13.359074"
+           x="94.16153"
+           id="tspan4460"
+           sodipodi:role="line">1</tspan></text>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4530"
+       transform="translate(141.65618,87.140929)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g10127">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4260"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g4540"
+       transform="translate(241.48064,97.140624)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g4542">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path4544"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 112.48597,-48.35938 L 133.98597,-48.35938 L 133.98597,101.64062"
+       id="path5697"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="opacity:1;fill:#888a85;fill-opacity:1;stroke:#888a85;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 112.98597,1.640625 L 132.98597,1.640625"
+       id="path5699" />
+    <path
+       style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 112.98597,51.640625 L 133.98597,51.640625"
+       id="path5701"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(126.48598,87.140929)"
+       id="g5703"
+       inkscape:label="Layer 1">
+      <g
+         id="g5705"
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)">
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="path5707"
+           sodipodi:cx="7.5"
+           sodipodi:cy="14.5"
+           sodipodi:rx="2.5"
+           sodipodi:ry="2.5"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)" />
+      </g>
+    </g>
+    <g
+       inkscape:label="Layer 1"
+       id="g5709"
+       transform="translate(126.48598,37.140624)">
+      <g
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)"
+         id="g5711">
+        <path
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           sodipodi:ry="2.5"
+           sodipodi:rx="2.5"
+           sodipodi:cy="14.5"
+           sodipodi:cx="7.5"
+           id="path5713"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           sodipodi:type="arc" />
+      </g>
+    </g>
+    <g
+       transform="translate(126.48598,-12.85938)"
+       id="g5715"
+       inkscape:label="Layer 1">
+      <g
+         id="g5717"
+         transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)">
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="path5719"
+           sodipodi:cx="7.5"
+           sodipodi:cy="14.5"
+           sodipodi:rx="2.5"
+           sodipodi:ry="2.5"
+           d="M 10,14.5 A 2.5,2.5 0 1 1 5,14.5 A 2.5,2.5 0 1 1 10,14.5 z"
+           transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/assets/img/pset12_transimpedance_amplifier.svg b/assets/img/pset12_transimpedance_amplifier.svg
new file mode 100644
index 0000000000000000000000000000000000000000..13d79fb4bd7f1bed516292a1dc6ca130094e63de
--- /dev/null
+++ b/assets/img/pset12_transimpedance_amplifier.svg
@@ -0,0 +1,527 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="297.0976"
+   height="167.12207"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Transimpedance_amplifier%2C_simple[1].svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective4254" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective4400" />
+    <inkscape:perspective
+       id="perspective4402"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective4211" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3941" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3806" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 50 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="100 : 50 : 1"
+       inkscape:persp3d-origin="50 : 33.333333 : 1"
+       id="perspective3275" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 16 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="32 : 16 : 1"
+       inkscape:persp3d-origin="16 : 10.666667 : 1"
+       id="perspective3195" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective7933" />
+    <inkscape:perspective
+       id="perspective7935"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective7849" />
+    <inkscape:perspective
+       id="perspective7851"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective7782" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2819" />
+    <inkscape:perspective
+       id="perspective2806"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective7292" />
+    <inkscape:perspective
+       id="perspective7294"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective6168" />
+    <inkscape:perspective
+       id="perspective6151"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective4175" />
+    <inkscape:perspective
+       id="perspective4148"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective7019" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3840" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 10 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="90 : 10 : 1"
+       inkscape:persp3d-origin="45 : 6.6666667 : 1"
+       id="perspective3053" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective6211" />
+    <inkscape:perspective
+       id="perspective6195"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective2827" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective5533" />
+    <inkscape:perspective
+       id="perspective10"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="116.07934"
+     inkscape:cy="-189.22337"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="968"
+     inkscape:window-x="-4"
+     inkscape:window-y="-4"
+     inkscape:window-maximized="1"
+     fit-margin-top="2"
+     fit-margin-left="2"
+     fit-margin-bottom="2"
+     fit-margin-right="2" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-0.87951967,-1.0473147)">
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="354.80646"
+       y="330.66605"
+       id="text6075"
+       sodipodi:linespacing="100%"><tspan
+         sodipodi:role="line"
+         id="tspan6077"
+         x="354.80646"
+         y="330.66605" /></text>
+    <path
+       inkscape:connector-curvature="0"
+       d=""
+       style="fill:none;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path7055"
+       sodipodi:nodetypes="cc" />
+    <g
+       inkscape:label="Layer 1"
+       id="g4534"
+       transform="translate(351.25985,430.95509)" />
+    <g
+       id="g4156"
+       transform="translate(-220,-334.28571)">
+      <path
+         transform="translate(243.91521,357.95509)"
+         d="M 10,62.5 C 10,63.880712 8.8807119,65 7.5,65 6.1192881,65 5,63.880712 5,62.5 5,61.119288 6.1192881,60 7.5,60 8.8807119,60 10,61.119288 10,62.5 z"
+         sodipodi:ry="2.5"
+         sodipodi:rx="2.5"
+         sodipodi:cy="62.5"
+         sodipodi:cx="7.5"
+         id="path7059"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(469.26519,367.95509)"
+         d="M 10,62.5 C 10,63.880712 8.8807119,65 7.5,65 6.1192881,65 5,63.880712 5,62.5 5,61.119288 6.1192881,60 7.5,60 8.8807119,60 10,61.119288 10,62.5 z"
+         sodipodi:ry="2.5"
+         sodipodi:rx="2.5"
+         sodipodi:cy="62.5"
+         sodipodi:cx="7.5"
+         id="path3529"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         sodipodi:type="arc" />
+      <g
+         id="g4151"
+         transform="translate(22.07323,478.34198)">
+        <text
+           sodipodi:linespacing="125%"
+           id="text4153"
+           y="-52.886894"
+           x="199.89223"
+           style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           xml:space="preserve"><tspan
+             y="-52.886894"
+             x="199.89223"
+             id="tspan4155"
+             sodipodi:role="line">V<tspan
+   id="tspan4157"
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic" /></tspan></text>
+        <text
+           sodipodi:linespacing="125%"
+           id="text4159"
+           y="-46.997822"
+           x="209.77013"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           xml:space="preserve"><tspan
+             y="-46.997822"
+             x="209.77013"
+             id="tspan4161"
+             sodipodi:role="line">in</tspan></text>
+      </g>
+      <g
+         inkscape:label="Layer 1"
+         id="g3808"
+         transform="translate(362.50144,389.05281)">
+        <path
+           style="fill:#e1f0f0;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           d="m 22.90842,16.402281 0,50.705575 49.1375,-25.35279 -49.1375,-25.352785 z"
+           id="path3810"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="rect4468"
+           width="2"
+           height="10"
+           x="30.408421"
+           y="46.77729" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="rect4470"
+           width="2"
+           height="10"
+           x="50.77729"
+           y="-36.408421"
+           transform="matrix(0,1,-1,0,0,0)" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="rect4472"
+           width="2"
+           height="10"
+           x="30.777281"
+           y="-36.408421"
+           transform="matrix(0,1,-1,0,0,0)" />
+      </g>
+      <g
+         inkscape:label="Layer 1"
+         id="g4276"
+         transform="translate(333.09736,258.09261)">
+        <path
+           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+           d="m 58.16008,111.36218 -3.16008,0 3.9375,11 2.8125,0 5.46875,-15.1487 5.46875,15.14901 2.8125,0 5.46875,-15.14901 5.46875,15.14901 2.8125,0 5.46875,-15.14901 2.20095,6.1487 3.16007,0 -3.95477,-10.99969 -2.8125,0 -5.46875,15.14901 -5.46875,-15.14901 -2.8125,0 -5.46875,15.14901 -5.46875,-15.14901 -2.8125,0 -5.46875,15.14901 -2.18367,-6.14932 z"
+           id="path4278"
+           sodipodi:nodetypes="ccccccccccccccccccccccc"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path4280"
+         d="m 389.15987,370.45509 -30.25,0 0,50 25,0"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path4284"
+         d="m 433.5618,430.45509 40.43868,0"
+         style="fill:none;stroke:#000000;stroke-width:2.00000024;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path4286"
+         d="m 431.40987,370.45509 27.5,0 0,60"
+         style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         inkscape:connector-curvature="0" />
+      <g
+         transform="translate(323.9152,441.45509)"
+         id="g4404"
+         inkscape:label="Layer 1">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+           d="m 35,47 5e-6,-48 27.25,0"
+           id="path9220"
+           sodipodi:nodetypes="ccc"
+           inkscape:connector-curvature="0" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="rect4702"
+           width="24"
+           height="3"
+           x="23"
+           y="46" />
+        <rect
+           y="51"
+           x="26"
+           height="3"
+           width="18"
+           id="rect4704"
+           style="fill:#000000;fill-opacity:1;stroke:none" />
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           id="rect4719"
+           width="12"
+           height="3"
+           x="29"
+           y="56" />
+      </g>
+      <g
+         id="g4410"
+         transform="translate(648.01519,509.4551)">
+        <text
+           sodipodi:linespacing="125%"
+           id="text4412"
+           y="-74.889069"
+           x="-165.1279"
+           style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           xml:space="preserve"><tspan
+             y="-74.889069"
+             x="-165.1279"
+             id="tspan4414"
+             sodipodi:role="line">V<tspan
+   id="tspan4416"
+   style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic" /></tspan></text>
+        <text
+           sodipodi:linespacing="125%"
+           id="text4418"
+           y="-69"
+           x="-155"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           xml:space="preserve"><tspan
+             y="-69"
+             x="-155"
+             id="tspan4420"
+             sodipodi:role="line">out</tspan></text>
+      </g>
+      <g
+         transform="translate(48.55177,288.81447)"
+         id="g4422">
+        <text
+           xml:space="preserve"
+           style="font-size:18px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           x="355.35809"
+           y="61.640625"
+           id="text4424"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan4426"
+             x="355.35809"
+             y="61.640625">R</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif Italic"
+           x="369.73599"
+           y="67.529701"
+           id="text4428"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan4430"
+             x="369.73599"
+             y="67.529701">f</tspan></text>
+      </g>
+      <g
+         transform="translate(351.41518,405.95509)"
+         id="g4530"
+         inkscape:label="Layer 1">
+        <g
+           id="g10127"
+           transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)">
+          <path
+             sodipodi:type="arc"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="path4260"
+             sodipodi:cx="7.5"
+             sodipodi:cy="14.5"
+             sodipodi:rx="2.5"
+             sodipodi:ry="2.5"
+             d="M 10,14.5 C 10,15.880712 8.8807119,17 7.5,17 6.1192881,17 5,15.880712 5,14.5 5,13.119288 6.1192881,12 7.5,12 8.8807119,12 10,13.119288 10,14.5 z"
+             transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)" />
+        </g>
+      </g>
+      <g
+         transform="translate(451.40987,415.95509)"
+         id="g4540"
+         inkscape:label="Layer 1">
+        <g
+           id="g4542"
+           transform="matrix(1.5,0,0,1.5,-37.10156,-119.8521)">
+          <path
+             sodipodi:type="arc"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="path4544"
+             sodipodi:cx="7.5"
+             sodipodi:cy="14.5"
+             sodipodi:rx="2.5"
+             sodipodi:ry="2.5"
+             d="M 10,14.5 C 10,15.880712 8.8807119,17 7.5,17 6.1192881,17 5,15.880712 5,14.5 5,13.119288 6.1192881,12 7.5,12 8.8807119,12 10,13.119288 10,14.5 z"
+             transform="matrix(0.6666667,0,0,0.6666667,24.734373,79.9014)" />
+        </g>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         id="path4154"
+         d="m 362.67857,420.3979 -108.79464,0.0446"
+         style="fill:none;stroke:#000000;stroke-width:1.89999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/assets/img/pset8_1.jpg b/assets/img/pset8_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8d479de3a88c2f5517a078c2a019d67fdf500f22
Binary files /dev/null and b/assets/img/pset8_1.jpg differ
diff --git a/assets/img/pset8_2.jpg b/assets/img/pset8_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c93835ba2f004f059eaaa847ee4fbc72dc20c9e3
Binary files /dev/null and b/assets/img/pset8_2.jpg differ
diff --git a/assets/img/pset8_3.jpg b/assets/img/pset8_3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..040b6d1988a2cdf575ddeaa46b711e36949fe963
Binary files /dev/null and b/assets/img/pset8_3.jpg differ
diff --git a/assets/img/pset9_1.jpg b/assets/img/pset9_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..36e3d24273cdbfce3391f45c31c3f4ac6664fba7
Binary files /dev/null and b/assets/img/pset9_1.jpg differ
diff --git a/assets/img/pset9_2.jpg b/assets/img/pset9_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3c3a60bcbff3a484798f4c4c259638998a2abbcd
Binary files /dev/null and b/assets/img/pset9_2.jpg differ
diff --git a/assets/img/pset9_3.jpg b/assets/img/pset9_3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4699a9a9592988c1fdc49c6c6cd3e65e57aa8d54
Binary files /dev/null and b/assets/img/pset9_3.jpg differ
diff --git a/assets/img/pset9_4.jpg b/assets/img/pset9_4.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..45286fcfe5d4f0258c9ce1dcd510187e285cd338
Binary files /dev/null and b/assets/img/pset9_4.jpg differ
diff --git a/assets/img/pset9_5.jpg b/assets/img/pset9_5.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8d5351e1ac6c18fb6ec146608a704144bb7bd3ef
Binary files /dev/null and b/assets/img/pset9_5.jpg differ
diff --git a/assets/img/pset9_6.jpg b/assets/img/pset9_6.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..45d86811f455d171364122d55a5246a7671983e5
Binary files /dev/null and b/assets/img/pset9_6.jpg differ
diff --git a/assets/pdf/2004_Candes_Romberg_Tao.pdf b/assets/pdf/2004_Candes_Romberg_Tao.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..ac416666b8cdd0b1e2faa75a9aa8d27aae16a7b3
Binary files /dev/null and b/assets/pdf/2004_Candes_Romberg_Tao.pdf differ
diff --git a/assets/pdf/2011_Hansen_Jorgensen.pdf b/assets/pdf/2011_Hansen_Jorgensen.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..7619a71655f2c4ceabbf96e66bd039b66798d626
Binary files /dev/null and b/assets/pdf/2011_Hansen_Jorgensen.pdf differ
diff --git a/index.md b/index.md
index 1b2818fa137a1735ccdeb75db9ec2ef98c3bf061..63ffbefc211284f2aba2ea35772c9fbcd689ce63 100644
--- a/index.md
+++ b/index.md
@@ -2,7 +2,7 @@
 title: Home
 ---
 
-# MAS 6.244
+# MAS.862
 
 _Physics of Information Technology_  
 _Erik Strand_  
diff --git a/notes.html b/notes.html
index ff57d2ebd4bc33ef9fc032bc1c24a32d2afd6410..bbae9be72978284fdd5c8ed77651dc5a7ea8d532 100644
--- a/notes.html
+++ b/notes.html
@@ -6,7 +6,7 @@ title: Notes
 <ul>
   {% for note in site.notes %}
     <li>
-      <h2><a href="{{ note.url | real_relative_url }}">{{ note.title }}</a></h2>
+      <a href="{{ note.url | real_relative_url }}">{{ note.title }}</a>
     </li>
   {% endfor %}
 </ul>
diff --git a/project.md b/project.md
index b5e1052ade132a20668944e632010bf98f6fa4a3..ec55d9e5e04953a65c4bf05456ef7f4ef1c5b651 100644
--- a/project.md
+++ b/project.md
@@ -2,6 +2,342 @@
 title: Final Project
 ---
 
-# CT Imaging from Scratch
+# Computed Tomography
 
-Welcome to my skeletal tracking page.
+
+## Reading
+
+- [Radon Transform](http://www-math.mit.edu/~helgason/Radonbook.pdf) by Sigurdur Helgason
+- [Robust Uncertainty Principles: Exact Signal Reconstruction from Highly Incomplete Frequency
+  Information](assets/pdf/2004_Candes_Romberg_Tao.pdf) by Candes, Romberg, and Tao
+- [Total Variation and Tomographic Imaging from Projections](assets/pdf/2011_Hansen_Jorgensen.pdf)
+  by Hansen and J&oslash;rgensen
+
+## Code
+
+All my code is in this [repo](https://gitlab.cba.mit.edu/erik/funky_ct/tree/develop), named in honor
+of the [Radon transform](https://en.wikipedia.org/wiki/Radon_transform)'s more eccentric
+[cousin](https://en.wikipedia.org/wiki/Funk_transform). Building requires a modern C++ compiler and
+cmake. [Libpng](http://www.libpng.org/pub/png/libpng.html) must be installed as well. All told it's
+about 1,800 lines (excluding third party code), but there's some unnecessary duplication in there
+since I've been favoring velocity over hygiene.
+
+
+## Fourier Reconstruction
+
+
+### Fourier Slice Theorem
+
+Let $$f : \mathbb{R}^2 \rightarrow \mathbb{R}$$ be a density function. If we map density to
+brightness we can view $$f$$ as describing an image. We'll assume that this function is defined
+everywhere, but is always zero outside some finite neighborhood of the origin (say, the bounds of
+the image).
+
+The projection of $$f$$ to the x axis is obtained by integrating along y:
+
+$$
+p(x) = \int_\mathbb{R} f(x, y) dy
+$$
+
+Meanwhile, the [Fourier transform](notes/fourier_transform.html) of $$f$$ is
+
+$$
+\hat{f}(u, v)
+= \int_\mathbb{R} \int_\mathbb{R} f(x, y) e^{-2 \pi i (u x + v y)} dx dy
+$$
+
+Now comes the key insight. The slice along the $$u$$ axis in frequency space is
+
+$$
+\begin{align*}
+\hat{f}(u, 0)
+&= \int_\mathbb{R} \int_\mathbb{R} f(x, y) e^{-2 \pi i u x} dx dy \\
+&= \int_\mathbb{R} \left( \int_\mathbb{R} f(x, y) dy \right) e^{-2 \pi i u x} dx \\
+&= \int_\mathbb{R} p(x) e^{-2 \pi i u x} dx \\
+&= \hat{p}(u)
+\end{align*}
+$$
+
+So the Fourier transform of the 1d projection is a 1d slice through the 2d Fourier transform of the
+image. This result is known as the Fourier Slice Theorem, and is the foundation of most
+reconstruction techniques.
+
+Since the x axis is arbitrary (we can rotate the image however we want), this works for other
+angles as well:
+
+$$
+\hat{p}_\theta (\omega) = \hat{f} (\omega \cos \theta, \omega \sin \theta)
+$$
+
+where $$p_\theta (r)$$ is the projection of $$f$$ onto the line that forms an angle $$\theta$$ with
+the x axis. In other words, the Fourier transform of the 1D x-ray projection at angle $$\theta$$ is
+the slice through the 2D Fourier transform of the image at angle $$\theta$$.
+
+Conceptually this tells us everything we need to know about the reconstruction. First we take the 1D
+Fourier transform of each projection. Then we combine them by arranging them radially. Finally we
+take the inverse Fourier transform of the resulting 2d function. We'll end up with the reconstructed
+image.
+
+It also tells us how to generate the projections, given that we don't have a 1d x-ray machine. First
+we take the Fourier transform of the image. Then we extract radial slices from it. Finally we take
+the inverse Fourier transform of each slice. These are the projections. This will come in handy for
+generating testing data.
+
+
+### Discretization
+
+Naturally the clean math of the theory has be modified a bit to make room for reality. In
+particular, we only have discrete samples of $$f$$ (i.e. pixel values) rather than the full
+continuous function (which in our current formalism may contain infinite information). This has two
+important implications.
+
+First, we'll want our Fourier transforms to be discrete Fourier transforms (DFTs). Luckily the
+continuous and discrete Fourier transforms are effectively interchangeable, as long as the functions
+we work with are mostly spatially and bandwidth limited, and we take an appropriate number of
+appropriately spaced samples. You can read more about these requirements
+[here](notes/fourier_series.html).
+
+Second, since we combine the DFTs of the projections radially, we'll end up with samples (of the 2D
+Fourier transform of our image) on a polar grid rather than a cartesian one. So we'll have to
+interpolate. This step is tricky and tends to introduce a lot of error. , but there are better
+algorithms out there that come closer to the theoretically ideal
+[sinc interpolation](https://en.wikipedia.org/wiki/Whittaker%E2%80%93Shannon_interpolation_formula).
+The popular [gridrec](https://www.ncbi.nlm.nih.gov/pubmed/23093766) method is one.
+
+
+### Results
+
+I used [FFTW](http://www.fftw.org/) to compute Fourier transforms. It's written in C and is very
+[fast](http://www.fftw.org/benchfft/). I implemented my own polar resampling routine. It uses a
+[Catmull-Rom interpolation](http://entropymine.com/imageworsener/bicubic/) kernel.
+
+I started with this image of a
+[brain](https://commons.wikimedia.org/wiki/File:FMRI_coronal_scan.jpg) from Wikimedia Commons.
+
+![brain](assets/img/project_brain.png)
+
+Fourier reconstruction produces a nice [sinogram](https://en.wikipedia.org/wiki/Radon_transform).
+Each row is one projection, with angle going from 0 at the top to $$\pi$$ at the bottom, and $$r =
+0$$ down the middle column. You can clearly see the skull (a roughly circular feature) unwrapped to
+a line on the left side of the sinogram.
+
+![sinogram](assets/img/project_sinogram.png)
+
+The reconstruction, however, isn't so clean.
+
+![brain](assets/img/project_fourier_reconstruction.png)
+
+The Fourier library I'm using is solid (and indeed it reproduces images very well even after
+repeated applications), so the error must be coming from my interpolation code. Indeed, the high
+frequency content looks ok, but there's a lot of error in low frequency content. This is encoded in
+the middle of the Fourier transform, which is what is most distorted by the polar resampling. I
+could implement a resampling routine specifically designed for polar resampling, or indeed
+specifically for polar resampling for CT reconstruction, but there are better algorithms out there
+anyway so I'll move on.
+
+
+### Outtakes
+
+I got a number of interesting failures before getting my code to work correctly.
+
+![outtake](assets/img/project_cool_1.png)
+![outtake](assets/img/project_cool_2.png)
+![outtake](assets/img/project_cool_3.png)
+![outtake](assets/img/project_cool_4.png)
+
+These all started as attempts to project and reconstruct a [disk](notes/fourier_examples.html),
+though I did experiment once interesting mistakes started happening. They mostly result from
+indexing errors and an issue with my integration with FFTW. The latter problem relates to the
+periodicity of discrete Fourier transforms and the resulting ambiguity in frequency interpretation.
+In a nutshell, the DFT doesn't give you samples of the continuous Fourier transform; it gives you
+samples of the periodic summation of the continuous Fourier transform. So each sample isn't
+representative of one frequency, it's representative of a whole equivalence class of frequencies.
+
+For this application it's very important that the center of the polar coordinate system used for
+resampling is right at the DC sample. So though the raw Fourier transform of the image looks like
+this (real and imaginary parts shown separately),
+
+![transform](assets/img/project_transform_swapped_re.png)
+![transform](assets/img/project_transform_swapped_im.png)
+
+we want to permute the quadrants so that it looks like this:
+
+![transform](assets/img/project_transform_re.png)
+![transform](assets/img/project_transform_im.png)
+
+Then the center of the image can be the center of the polar coordinate system. (Note: to make these
+I linearly mapped the full range of each image to [1, e], then applied the natural logarithm. So
+though they aren't the same color, both tend toward zero away from the center.) This is akin to
+viewing the sample frequencies not as $$0$$, $$1/N$$, $$\ldots$$, $$(N - 1)/N$$, but as $$0$$,
+$$1/N$$, $$\ldots$$, $$(N/2 - 1)/N$$, $$-1/2$$, $$\ldots$$, $$-1/N$$.
+
+Interestingly, you can do this by literally swapping quadrants of the image, or by multiplying the
+results element-wise by a checker board of 1s and -1s. This seems like magic until you just write
+out the math.
+
+
+## Filtered Back Projection
+
+It would be nice if we could avoid the interpolation required for Fourier reconstruction. The
+simplest way of doing so, and still the most popular method of performing image reconstruction, is
+called filtered back projection.
+
+
+### Theory
+
+Let's hop back to the continuous theory for a moment. The Fourier reconstruction technique is based
+on the fact that $$f$$ can be represented in terms of its projections $$p_\theta$$ in polar
+coordinates.
+
+$$
+\begin{align*}
+f(x, y)
+&= \int_\mathbb{R} \int_\mathbb{R} \hat{f}(u, v) e^{2 \pi i (ux + vy)} \mathrm{d}u \mathrm{d}v \\
+&= \int_0^\pi \int_\mathbb{R} \hat{f}(\omega \cos \theta, \omega \sin \theta)
+    e^{2 \pi i \omega (x \cos \theta + y \sin \theta)}
+    \vert \omega \vert \mathrm{d} \omega \mathrm{d} \theta \\
+&= \int_0^\pi \int_\mathbb{R} \hat{p}_\theta(\omega)
+    e^{2 \pi i \omega (x \cos \theta + y \sin \theta)}
+    \vert \omega \vert \mathrm{d} \omega \mathrm{d} \theta \\
+\end{align*}
+$$
+
+Instead of using interpolation to transform the problem back to cartesian coordinates where we can
+apply the usual (inverse) DFT, we can directly evaluate the above integral.
+
+To simplify things a bit, note that the integral over $$\omega$$ is itself a one dimensional inverse
+Fourier transform. In particular if we define
+
+$$
+q_\theta(\omega) = \hat{p}_\theta(\omega) \vert \omega \vert
+$$
+
+then the inner integral is just
+
+$$
+\mathcal{F}^{-1}[q_\theta](x \cos \theta + y \sin \theta)
+$$
+
+So overall
+
+$$
+f(x, y) = \int_0^\pi \mathcal{F}^{-1}[q_\theta](x \cos \theta + y \sin \theta) \mathrm{d} \theta
+$$
+
+Since multiplication in the frequency domain is equivalent to convolution in the spatial domain,
+$$\mathcal{F}^{-1}[q_\theta]$$ is simply a filtered version of $$p_\theta$$. Hence the name filtered
+back projection.
+
+
+### Discretization
+
+We'll replace the continuous Fourier transforms with DFTs as before.
+
+The only remaining integral (i.e. that's not stuffed inside a Fourier transform) is over $$\theta$$,
+so most quadrature techniques will want samples of the integrand that are evenly spaced in
+$$\theta$$. We want the pixels in our resulting image to lie on a cartesian grid, so our integrand
+samples should be evenly spaced in $$x$$ and $$y$$ as well.
+
+How do we compute $$\mathcal{F}^{-1}[q_\theta]$$? We are given samples of $$p_\theta(r)$$ on a polar
+grid. Using the DFT, we can get samples of $$\hat{p}_\theta(\omega)$$. They will be for the same
+$$\theta$$ values, and evenly spaced frequency values $$\omega$$. So if we just multiply by $$\vert
+\omega \vert$$, we get the corresponding samples of $$q_\theta(\omega)$$. Finally we just take the
+inverse DFT and we have samples of $$\mathcal{F}^{-1}[q_\theta]$$ on a polar grid -- namely at the
+same $$(r, \theta)$$ points we started out with.
+
+This works out perfectly for $$\theta$$: we can take the samples we naturally end up with and use
+them directly for quadrature. For $$r$$, on the other hand, the regular samples we end up with won't
+line up with the values $$x \cos \theta + y \sin \theta$$ that we want. So we'll still have to do
+some interpolation. But now it's a simple 1D interpolation problem that's much easier to do without
+introducing as much error. In particular, we only have to do interpolation in the spatial domain, so
+errors will only accumulate locally.
+
+
+### Results
+
+I again use [FFTW](http://www.fftw.org/) for Fourier transforms. For interpolation I just take the
+sample to the left of the desired location, and for integration I just use a left Riemann sum. Even
+with these lazy techniques, the reconstruction looks quite good.
+
+![brain](assets/img/project_fbp_reconstruction.png)
+
+
+## Total Variation / Compressed Sensing
+
+Unfortunately this is still a work in progress. I started implementing a [modern
+approach](assets/pdf/2011_hansen_jorgensen.pdf), but found I didn't have enough background to
+make it work. They gloss over some details that I tried to get around with brute force, only to find
+that the resulting problem was computationally intractable. So yesterday I started over,
+re-implementing results from one of the original compressed sensing
+[papers](assets/pdf/2004_Candes_Romberg_Tao.pdf). However I did learn some things from my failed
+attempts...
+
+
+## Matrix Formulation
+
+Both techniques I've fully implemented so far involve only three types of operations: DFTs,
+interpolation, and multiplication (for the $$\vert \omega \vert$$ filter). All these operations are
+linear, so we can express them as matrices and reformulate each technique as a single matrix
+multiplication with a vector. In practice this fact alone is useless, since the resulting matrix
+ends up being enormous. (In fact if your image and sinogram are n by n pixels, the matrix will have
+n^4 entries.) But this formulation is used to derive the theory of many total variation versions.
+
+In the process of my first failed total variation implementation, I ended up with most of the parts
+of the Fourier and filtered back projection algorithms implemented as matrices. So let's use them
+and create a sinogram with a single matrix multiplication. As mentioned the matrices are huge, so
+here I'll work with a 32 by 32 brain image.
+
+![dft](assets/img/project_tiny_brain.png)
+
+The DFTs were easy. Very similar to the cosine transform we used in the last problem set.
+
+![dft](assets/img/project_matrix_dft_re.png)
+![dft](assets/img/project_matrix_dft_im.png)
+
+To construct the polar interpolation matrix, I rewrote my interpolation routine to drop the weights
+it calculated in the appropriate entries in a matrix rather than summing things up as it goes. These
+weights depend on the type of interpolation used and the sizes of the images involved.
+
+![dft](assets/img/project_matrix_polar_re.png)
+![dft](assets/img/project_matrix_polar_im.png)
+
+Finally it's just some (inverse) DFTs to get the sinogram. They can all be expressed simultaneously
+in one matrix.
+
+![dft](assets/img/project_matrix_sinogram.png)
+
+I bump up the pixel count for the polar projections so that the resampling doesn't lose as much
+information. Thus the final matrix that performs all three of these operations at once has
+$$2 \cdot 64^2$$ rows and $$32^2$$ columns, for a total of 8,388,608 entries. (I could chop this in
+half if I didn't bother computing the imaginary part of the sinogram. It should be zero but it's a
+nice sanity check.)
+
+
+## TomoPy
+
+Ultimately there are a lot more algorithms out there than I care to implement myself. Thanks to the
+people behind [TomoPy](https://tomopy.readthedocs.io/en/latest/), I don't have to. It's a library of
+tomographic imaging algorithms exposed through Python. It's decently documented, and the
+[code](https://github.com/tomopy/tomopy) is open source. It also integrates with
+[ASTRA](https://www.astra-toolbox.com/) which has some blazing fast GPU implementations.
+
+I scanned a 3d print that I made in [How to Make (almost)
+Anything](http://fab.cba.mit.edu/classes/863.18/CBA/people/erik/04_3d_printing_scanning/) last
+semester.
+
+![3d print](assets/img/project_3d_print.jpg)
+
+I reconstructed it using TomoPy's gridrec implementation.
+
+![3d print](assets/img/project_3d_print_reconstruction.jpg)
+
+The results aren't that great, so evidently the settings will require some tweaking. Ultimately I'd
+like to set up an easy to use TomoPy/ASTRA toolchain to use with CBA's CT scanner; this is just a
+first test.
+
+In particular, TomoPy is designed for parallel beam scans, not cone beam scans. In 2D it's not hard
+to manipulate fan beam data into a format that parallel beam algorithms can understand, since every
+line in a fan beam is a line in some other parallel beam. But this doesn't work in 3D since there's
+only one horizontal plane in which the cone beam rays are aligned with the parallel beam rays.
+Luckily ASTRA supports cone beams, so once I have that integration figured out we should be able to
+get proper reconstructions.
diff --git a/psets.html b/psets.html
index 1efc5d6ebcbb054db8dbf2c66b0448886400cb8e..218a26b16903433207cf94b5360fed1c45d76c95 100644
--- a/psets.html
+++ b/psets.html
@@ -6,7 +6,7 @@ title: Problem Sets
 <ul>
   {% for pset in site.psets %}
     <li>
-      <h2><a href="{{ pset.url | real_relative_url }}">{{ pset.title }}</a></h2>
+      <a href="{{ pset.url | real_relative_url }}">{{ pset.title }}</a>
     </li>
   {% endfor %}
 </ul>