Index: frontend/node_modules/hoopy/README.md
===================================================================
--- frontend/node_modules/hoopy/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/hoopy/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,165 @@
+# hoopy
+
+[![Build status](https://gitlab.com/philbooth/hoopy/badges/master/pipeline.svg)](https://gitlab.com/philbooth/hoopy/pipelines)
+[![Package status](https://img.shields.io/npm/v/hoopy.svg)](https://www.npmjs.com/package/hoopy)
+[![Downloads](https://img.shields.io/npm/dm/hoopy.svg)](https://www.npmjs.com/package/hoopy)
+[![License](https://img.shields.io/npm/l/hoopy.svg)](https://opensource.org/licenses/MIT)
+
+
+Like an array, but rounder.
+
+* [Huh?](#huh)
+* [What's it useful for?](#whats-it-useful-for)
+* [How do I install it?](#how-do-i-install-it)
+* [How do I use it?](#how-do-i-use-it)
+  * [Loading the library](#loading-the-library)
+  * [Creating arrays](#creating-arrays)
+  * [Accessing array items](#accessing-array-items)
+  * [Growing the array](#growing-the-array)
+* [Is there a change log?](#is-there-a-change-log)
+* [How do I set up the dev environment?](#how-do-i-set-up-the-dev-environment)
+* [What license is it released under?](#what-license-is-it-released-under)
+
+## Huh?
+
+Hoopy is a circular array
+data type.
+It extends `Array`
+so that out-of-bounds indices
+wrap back round
+to the start of the array
+(or if they're negative indices,
+they wrap back round
+to the end of the array).
+
+## What's it useful for?
+
+If you want a fixed-length buffer
+for streamed I/O,
+Hoopy can do that for you.
+
+## How do I install it?
+
+Via `npm`:
+
+```
+npm i hoopy --save
+```
+
+Or if you just want the git repo:
+
+```
+git clone git@gitlab.com:philbooth/hoopy.git
+```
+
+## How do I use it?
+
+### Loading the library
+
+```js
+const Hoopy = require('hoopy');
+```
+
+### Creating arrays
+
+```js
+const hoopy = new Hoopy(10);
+assert(Array.isArray(hoopy));
+```
+
+You must pass
+a `size` argument
+to the `Hoopy` constructor,
+otherwise it will throw.
+
+### Accessing array items
+
+```js
+for (let i = 0; i < hoopy.length; ++i) {
+  hoopy[i] = i;
+  console.log(hoopy[i]);
+}
+```
+
+You can read and write array items
+using square brackets for indexing
+as you would with a normal array.
+However, if you write to
+an out-of-bounds index,
+it will not increase
+the length of the array.
+Instead the index is applied
+modulo the array length,
+wrapping back round to the start.
+Negative indices work in reverse,
+wrapping back round to the end
+of the array.
+
+The methods
+`push`, `pop`, `shift` and `unshift`
+will throw if called.
+Future versions of the library
+may implement sane behaviour
+for them.
+All of the other `Array` methods
+work normally.
+
+### Growing the array
+
+```js
+hoopy.grow(50);
+```
+
+The `grow` method
+adds items to the array.
+It takes one argument,
+which is the number
+of items to grow the array by.
+The new length of the array
+will be the old length
+plus the number you pass to `grow`.
+
+If the current state of the array
+includes overflowed indices,
+`grow` will take care
+to move those items
+in to the freshly-created
+available space,
+so that the correct order is maintained
+for your data.
+
+The caller is responsible
+for ensuring they don't overwrite
+unprocessed items.
+If you need to increase
+the size of the array,
+you must call `grow`.
+
+## Is there a change log?
+
+[Yes](CHANGELOG.md).
+
+## How do I set up the dev environment?
+
+To install the dependencies:
+
+```
+npm i
+```
+
+To run the tests:
+
+```
+npm t
+```
+
+To lint the code:
+
+```
+npm run lint
+```
+
+## What license is it released under?
+
+[MIT](LICENSE).
+
