Index: frontend/node_modules/es-abstract/2016/AbstractEqualityComparison.js
===================================================================
--- frontend/node_modules/es-abstract/2016/AbstractEqualityComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/AbstractEqualityComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+
+var isSameType = require('../helpers/isSameType');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+	if (isSameType(x, y)) {
+		return x === y; // ES6+ specified this shortcut anyways.
+	}
+	if (x == null && y == null) {
+		return true;
+	}
+	if (typeof x === 'number' && typeof y === 'string') {
+		return AbstractEqualityComparison(x, ToNumber(y));
+	}
+	if (typeof x === 'string' && typeof y === 'number') {
+		return AbstractEqualityComparison(ToNumber(x), y);
+	}
+	if (typeof x === 'boolean') {
+		return AbstractEqualityComparison(ToNumber(x), y);
+	}
+	if (typeof y === 'boolean') {
+		return AbstractEqualityComparison(x, ToNumber(y));
+	}
+	if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) {
+		return AbstractEqualityComparison(x, ToPrimitive(y));
+	}
+	if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) {
+		return AbstractEqualityComparison(ToPrimitive(x), y);
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/2016/AbstractRelationalComparison.js
===================================================================
--- frontend/node_modules/es-abstract/2016/AbstractRelationalComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/AbstractRelationalComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,62 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = require('es-errors/type');
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+
+// https://262.ecma-international.org/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+	if (typeof LeftFirst !== 'boolean') {
+		throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+	}
+	var px;
+	var py;
+	if (LeftFirst) {
+		px = ToPrimitive(x, $Number);
+		py = ToPrimitive(y, $Number);
+	} else {
+		py = ToPrimitive(y, $Number);
+		px = ToPrimitive(x, $Number);
+	}
+	var bothStrings = typeof px === 'string' && typeof py === 'string';
+	if (!bothStrings) {
+		var nx = ToNumber(px);
+		var ny = ToNumber(py);
+		if ($isNaN(nx) || $isNaN(ny)) {
+			return void undefined;
+		}
+		if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+			return false;
+		}
+		if (nx === Infinity) {
+			return false;
+		}
+		if (ny === Infinity) {
+			return true;
+		}
+		if (ny === -Infinity) {
+			return false;
+		}
+		if (nx === -Infinity) {
+			return true;
+		}
+		return nx < ny; // by now, these are both nonzero, finite, and not equal
+	}
+	if (isPrefixOf(py, px)) {
+		return false;
+	}
+	if (isPrefixOf(px, py)) {
+		return true;
+	}
+	return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
Index: frontend/node_modules/es-abstract/2016/AdvanceStringIndex.js
===================================================================
--- frontend/node_modules/es-abstract/2016/AdvanceStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/AdvanceStringIndex.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,44 @@
+'use strict';
+
+var isInteger = require('math-intrinsics/isInteger');
+var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger');
+
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+var $TypeError = require('es-errors/type');
+
+var $charCodeAt = require('call-bound')('String.prototype.charCodeAt');
+
+// https://262.ecma-international.org/6.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+		throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+	}
+	if (typeof unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+	}
+	if (!unicode) {
+		return index + 1;
+	}
+	var length = S.length;
+	if ((index + 1) >= length) {
+		return index + 1;
+	}
+
+	var first = $charCodeAt(S, index);
+	if (!isLeadingSurrogate(first)) {
+		return index + 1;
+	}
+
+	var second = $charCodeAt(S, index + 1);
+	if (!isTrailingSurrogate(second)) {
+		return index + 1;
+	}
+
+	return index + 2;
+};
Index: frontend/node_modules/es-abstract/2016/ArrayCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = require('es-errors/range');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength');
+var $setProto = require('set-proto');
+
+// https://262.ecma-international.org/6.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+	if (!isInteger(length) || length < 0) {
+		throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+	}
+	if (length > MAX_ARRAY_LENGTH) {
+		throw new $RangeError('length is greater than (2**32 - 1)');
+	}
+	var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+	var A = []; // steps 5 - 7, and 9
+	if (proto !== $ArrayPrototype) { // step 8
+		if (!$setProto) {
+			throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+		}
+		$setProto(A, proto);
+	}
+	if (length !== 0) { // bypasses the need for step 2
+		A.length = length;
+	}
+	/* step 10, the above as a shortcut for the below
+	OrdinaryDefineOwnProperty(A, 'length', {
+		'[[Configurable]]': false,
+		'[[Enumerable]]': false,
+		'[[Value]]': length,
+		'[[Writable]]': true
+	});
+	*/
+	return A;
+};
Index: frontend/node_modules/es-abstract/2016/ArraySetLength.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ArraySetLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ArraySetLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,77 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+var $TypeError = require('es-errors/type');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+var IsArray = require('./IsArray');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+
+// https://262.ecma-international.org/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+	if (!IsArray(A)) {
+		throw new $TypeError('Assertion failed: A must be an Array');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (!('[[Value]]' in Desc)) {
+		return OrdinaryDefineOwnProperty(A, 'length', Desc);
+	}
+	var newLenDesc = assign({}, Desc);
+	var newLen = ToUint32(Desc['[[Value]]']);
+	var numberLen = ToNumber(Desc['[[Value]]']);
+	if (newLen !== numberLen) {
+		throw new $RangeError('Invalid array length');
+	}
+	newLenDesc['[[Value]]'] = newLen;
+	var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+	if (!IsDataDescriptor(oldLenDesc)) {
+		throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+	}
+	var oldLen = oldLenDesc['[[Value]]'];
+	if (newLen >= oldLen) {
+		return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+	}
+	if (!oldLenDesc['[[Writable]]']) {
+		return false;
+	}
+	var newWritable;
+	if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+		newWritable = true;
+	} else {
+		newWritable = false;
+		newLenDesc['[[Writable]]'] = true;
+	}
+	var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+	if (!succeeded) {
+		return false;
+	}
+	while (newLen < oldLen) {
+		oldLen -= 1;
+		// eslint-disable-next-line no-param-reassign
+		var deleteSucceeded = delete A[ToString(oldLen)];
+		if (!deleteSucceeded) {
+			newLenDesc['[[Value]]'] = oldLen + 1;
+			if (!newWritable) {
+				newLenDesc['[[Writable]]'] = false;
+				OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+				return false;
+			}
+		}
+	}
+	if (!newWritable) {
+		return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/ArraySpeciesCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/6.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+	if (!isInteger(length) || length < 0) {
+		throw new $TypeError('Assertion failed: length must be an integer >= 0');
+	}
+	var len = length === 0 ? 0 : length;
+	var C;
+	var isArray = IsArray(originalArray);
+	if (isArray) {
+		C = Get(originalArray, 'constructor');
+		// TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+		// if (IsConstructor(C)) {
+		// 	if C is another realm's Array, C = undefined
+		// 	Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+		// }
+		if ($species && isObject(C)) {
+			C = Get(C, $species);
+			if (C === null) {
+				C = void 0;
+			}
+		}
+	}
+	if (typeof C === 'undefined') {
+		return $Array(len);
+	}
+	if (!IsConstructor(C)) {
+		throw new $TypeError('C must be a constructor');
+	}
+	return new C(len); // Construct(C, len);
+};
+
Index: frontend/node_modules/es-abstract/2016/Call.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Call.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+
+var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply');
+
+// https://262.ecma-international.org/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+	var argumentsList = arguments.length > 2 ? arguments[2] : [];
+	if (!IsArray(argumentsList)) {
+		throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+	}
+	return $apply(F, V, argumentsList);
+};
Index: frontend/node_modules/es-abstract/2016/CanonicalNumericIndexString.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CanonicalNumericIndexString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CanonicalNumericIndexString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+	if (typeof argument !== 'string') {
+		throw new $TypeError('Assertion failed: `argument` must be a String');
+	}
+	if (argument === '-0') { return -0; }
+	var n = ToNumber(argument);
+	if (SameValue(ToString(n), argument)) { return n; }
+	return void 0;
+};
Index: frontend/node_modules/es-abstract/2016/Canonicalize.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Canonicalize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Canonicalize.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+var hasOwn = require('hasown');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $toUpperCase = callBound('String.prototype.toUpperCase');
+
+var caseFolding = require('../helpers/caseFolding.json');
+
+// https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch
+
+module.exports = function Canonicalize(ch, IgnoreCase, Unicode) {
+	if (typeof ch !== 'string') {
+		throw new $TypeError('Assertion failed: `ch` must be a character');
+	}
+
+	if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') {
+		throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans');
+	}
+
+	if (!IgnoreCase) {
+		return ch; // step 1
+	}
+
+	if (Unicode) { // step 2
+		if (hasOwn(caseFolding.C, ch)) {
+			return caseFolding.C[ch];
+		}
+		if (hasOwn(caseFolding.S, ch)) {
+			return caseFolding.S[ch];
+		}
+		return ch; // step 2.b
+	}
+
+	var u = $toUpperCase(ch); // step 2
+
+	if (u.length !== 1) {
+		return ch; // step 3
+	}
+
+	var cu = u; // step 4
+
+	if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) {
+		return ch; // step 5
+	}
+
+	return cu;
+};
Index: frontend/node_modules/es-abstract/2016/CharacterRange.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CharacterRange.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CharacterRange.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = require('es-errors/type');
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+
+var CharSet = require('../helpers/CharSet').CharSet;
+
+module.exports = function CharacterRange(A, B) {
+	var a;
+	var b;
+
+	if (A instanceof CharSet || B instanceof CharSet) {
+		if (!(A instanceof CharSet) || !(B instanceof CharSet)) {
+			throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets');
+		}
+
+		A.yield(function (c) {
+			if (typeof a !== 'undefined') {
+				throw new $TypeError('Assertion failed: CharSet A has more than one character');
+			}
+			a = c;
+		});
+		B.yield(function (c) {
+			if (typeof b !== 'undefined') {
+				throw new $TypeError('Assertion failed: CharSet B has more than one character');
+			}
+			b = c;
+		});
+	} else {
+		if (A.length !== 1 || B.length !== 1) {
+			throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+		}
+		a = A[0];
+		b = B[0];
+	}
+
+	var i = $charCodeAt(a, 0);
+	var j = $charCodeAt(b, 0);
+
+	if (!(i <= j)) {
+		throw new $TypeError('Assertion failed: i is not <= j');
+	}
+
+	var arr = [];
+	for (var k = i; k <= j; k += 1) {
+		arr[arr.length] = $fromCharCode(k);
+	}
+	return arr;
+};
Index: frontend/node_modules/es-abstract/2016/CompletePropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CompletePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CompletePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	/* eslint no-param-reassign: 0 */
+
+	if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+		if (!hasOwn(Desc, '[[Value]]')) {
+			Desc['[[Value]]'] = void 0;
+		}
+		if (!hasOwn(Desc, '[[Writable]]')) {
+			Desc['[[Writable]]'] = false;
+		}
+	} else {
+		if (!hasOwn(Desc, '[[Get]]')) {
+			Desc['[[Get]]'] = void 0;
+		}
+		if (!hasOwn(Desc, '[[Set]]')) {
+			Desc['[[Set]]'] = void 0;
+		}
+	}
+	if (!hasOwn(Desc, '[[Enumerable]]')) {
+		Desc['[[Enumerable]]'] = false;
+	}
+	if (!hasOwn(Desc, '[[Configurable]]')) {
+		Desc['[[Configurable]]'] = false;
+	}
+	return Desc;
+};
Index: frontend/node_modules/es-abstract/2016/CompletionRecord.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CompletionRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CompletionRecord.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+
+var SLOT = require('internal-slot');
+
+// https://262.ecma-international.org/7.0/#sec-completion-record-specification-type
+
+var CompletionRecord = function CompletionRecord(type, value) {
+	if (!(this instanceof CompletionRecord)) {
+		return new CompletionRecord(type, value);
+	}
+	if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') {
+		throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"');
+	}
+	SLOT.set(this, '[[Type]]', type);
+	SLOT.set(this, '[[Value]]', value);
+	// [[Target]] slot?
+};
+
+CompletionRecord.prototype.type = function Type() {
+	return SLOT.get(this, '[[Type]]');
+};
+
+CompletionRecord.prototype.value = function Value() {
+	return SLOT.get(this, '[[Value]]');
+};
+
+CompletionRecord.prototype['?'] = function ReturnIfAbrupt() {
+	var type = SLOT.get(this, '[[Type]]');
+	var value = SLOT.get(this, '[[Value]]');
+
+	if (type === 'throw') {
+		throw value;
+	}
+	return value;
+};
+
+CompletionRecord.prototype['!'] = function assert() {
+	var type = SLOT.get(this, '[[Type]]');
+
+	if (type !== 'normal') {
+		throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"');
+	}
+	return SLOT.get(this, '[[Value]]');
+};
+
+module.exports = CompletionRecord;
Index: frontend/node_modules/es-abstract/2016/CreateDataProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateDataProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateDataProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+
+// https://262.ecma-international.org/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+	var newDesc = {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': true,
+		'[[Value]]': V,
+		'[[Writable]]': true
+	};
+	return OrdinaryDefineOwnProperty(O, P, newDesc);
+};
Index: frontend/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateDataPropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var CreateDataProperty = require('./CreateDataProperty');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+	var success = CreateDataProperty(O, P, V);
+	if (!success) {
+		throw new $TypeError('unable to create data property');
+	}
+	return success;
+};
Index: frontend/node_modules/es-abstract/2016/CreateHTML.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateHTML.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateHTML.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+	if (typeof tag !== 'string' || typeof attribute !== 'string') {
+		throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+	}
+	var str = RequireObjectCoercible(string);
+	var S = ToString(str);
+	var p1 = '<' + tag;
+	if (attribute !== '') {
+		var V = ToString(value);
+		var escapedV = $replace(V, /\x22/g, '&quot;');
+		p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+	}
+	return p1 + '>' + S + '</' + tag + '>';
+};
Index: frontend/node_modules/es-abstract/2016/CreateIterResultObject.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateIterResultObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateIterResultObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+	if (typeof done !== 'boolean') {
+		throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+	}
+	return {
+		value: value,
+		done: done
+	};
+};
Index: frontend/node_modules/es-abstract/2016/CreateListFromArrayLike.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateListFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateListFromArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,43 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+// https://262.ecma-international.org/6.0/#sec-createlistfromarraylike
+module.exports = function CreateListFromArrayLike(obj) {
+	var elementTypes = arguments.length > 1
+		? arguments[1]
+		: defaultElementTypes;
+
+	if (!isObject(obj)) {
+		throw new $TypeError('Assertion failed: `obj` must be an Object');
+	}
+	if (!IsArray(elementTypes)) {
+		throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+	}
+	var len = ToLength(Get(obj, 'length'));
+	var list = [];
+	var index = 0;
+	while (index < len) {
+		var indexName = ToString(index);
+		var next = Get(obj, indexName);
+		var nextType = Type(next);
+		if ($indexOf(elementTypes, nextType) < 0) {
+			throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+		}
+		list[list.length] = next;
+		index += 1;
+	}
+	return list;
+};
Index: frontend/node_modules/es-abstract/2016/CreateMethodProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/CreateMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/CreateMethodProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	var newDesc = {
+		'[[Configurable]]': true,
+		'[[Enumerable]]': false,
+		'[[Value]]': V,
+		'[[Writable]]': true
+	};
+	return DefineOwnProperty(
+		IsDataDescriptor,
+		SameValue,
+		FromPropertyDescriptor,
+		O,
+		P,
+		newDesc
+	);
+};
Index: frontend/node_modules/es-abstract/2016/DateFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DateFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DateFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,52 @@
+'use strict';
+
+var $EvalError = require('es-errors/eval');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+	var m = MonthFromTime(t);
+	var d = DayWithinYear(t);
+	if (m === 0) {
+		return d + 1;
+	}
+	if (m === 1) {
+		return d - 30;
+	}
+	var leap = InLeapYear(t);
+	if (m === 2) {
+		return d - 58 - leap;
+	}
+	if (m === 3) {
+		return d - 89 - leap;
+	}
+	if (m === 4) {
+		return d - 119 - leap;
+	}
+	if (m === 5) {
+		return d - 150 - leap;
+	}
+	if (m === 6) {
+		return d - 180 - leap;
+	}
+	if (m === 7) {
+		return d - 211 - leap;
+	}
+	if (m === 8) {
+		return d - 242 - leap;
+	}
+	if (m === 9) {
+		return d - 272 - leap;
+	}
+	if (m === 10) {
+		return d - 303 - leap;
+	}
+	if (m === 11) {
+		return d - 333 - leap;
+	}
+	throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
Index: frontend/node_modules/es-abstract/2016/Day.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Day.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Day.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var floor = require('./floor');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+	return floor(t / msPerDay);
+};
Index: frontend/node_modules/es-abstract/2016/DayFromYear.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DayFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DayFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var floor = require('./floor');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+	return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400);
+};
+
Index: frontend/node_modules/es-abstract/2016/DayWithinYear.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DayWithinYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DayWithinYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+	return Day(t) - DayFromYear(YearFromTime(t));
+};
Index: frontend/node_modules/es-abstract/2016/DaysInYear.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DaysInYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DaysInYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+	if (modulo(y, 4) !== 0) {
+		return 365;
+	}
+	if (modulo(y, 100) !== 0) {
+		return 366;
+	}
+	if (modulo(y, 400) !== 0) {
+		return 365;
+	}
+	return 366;
+};
Index: frontend/node_modules/es-abstract/2016/DefinePropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DefinePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DefinePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,39 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc);
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+	}
+
+	return DefineOwnProperty(
+		IsDataDescriptor,
+		SameValue,
+		FromPropertyDescriptor,
+		O,
+		P,
+		Desc
+	);
+};
Index: frontend/node_modules/es-abstract/2016/DeletePropertyOrThrow.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DeletePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DeletePropertyOrThrow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	// eslint-disable-next-line no-param-reassign
+	var success = delete O[P];
+	if (!success) {
+		throw new $TypeError('Attempt to delete property failed.');
+	}
+	return success;
+};
Index: frontend/node_modules/es-abstract/2016/DetachArrayBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2016/DetachArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/DetachArrayBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var isArrayBuffer = require('is-array-buffer');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var MessageChannel;
+try {
+	// eslint-disable-next-line global-require
+	MessageChannel = require('worker_threads').MessageChannel; // node 11.7+
+} catch (e) { /**/ }
+
+// https://262.ecma-international.org/6.0/#sec-detacharraybuffer
+
+/* globals postMessage */
+
+module.exports = function DetachArrayBuffer(arrayBuffer) {
+	if (!isArrayBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot');
+	}
+
+	if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer
+		if (typeof structuredClone === 'function') {
+			structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
+		} else if (typeof postMessage === 'function') {
+			postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners
+		} else if (MessageChannel) {
+			(new MessageChannel()).port1.postMessage(null, [arrayBuffer]);
+		} else {
+			throw new $SyntaxError('DetachArrayBuffer is not supported in this environment');
+		}
+	}
+
+	return null;
+};
Index: frontend/node_modules/es-abstract/2016/EnumerableOwnNames.js
===================================================================
--- frontend/node_modules/es-abstract/2016/EnumerableOwnNames.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/EnumerableOwnNames.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var keys = require('object-keys');
+
+// https://262.ecma-international.org/6.0/#sec-enumerableownnames
+
+module.exports = function EnumerableOwnNames(O) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+
+	return keys(O);
+};
Index: frontend/node_modules/es-abstract/2016/FromPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/FromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/FromPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+	if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	return fromPropertyDescriptor(Desc);
+};
Index: frontend/node_modules/es-abstract/2016/Get.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Get.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Get.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var inspect = require('object-inspect');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-get-o-p
+
+module.exports = function Get(O, P) {
+	// 7.3.1.1
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	// 7.3.1.2
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P));
+	}
+	// 7.3.1.3
+	return O[P];
+};
Index: frontend/node_modules/es-abstract/2016/GetGlobalObject.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetGlobalObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetGlobalObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var getGlobal = require('globalthis/polyfill');
+
+// https://262.ecma-international.org/6.0/#sec-getglobalobject
+
+module.exports = function GetGlobalObject() {
+	return getGlobal();
+};
Index: frontend/node_modules/es-abstract/2016/GetIterator.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetIterator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+
+var isObject = require('es-object-atoms/isObject');
+
+var ES = {
+	AdvanceStringIndex: AdvanceStringIndex,
+	GetMethod: GetMethod
+};
+
+// https://262.ecma-international.org/6.0/#sec-getiterator
+
+module.exports = function GetIterator(obj, method) {
+	var actualMethod = method;
+	if (arguments.length < 2) {
+		actualMethod = getIteratorMethod(ES, obj);
+	}
+	var iterator = Call(actualMethod, obj);
+	if (!isObject(iterator)) {
+		throw new $TypeError('iterator must return an object');
+	}
+
+	return iterator;
+};
Index: frontend/node_modules/es-abstract/2016/GetMethod.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetMethod.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/6.0/#sec-getmethod
+
+module.exports = function GetMethod(O, P) {
+	// 7.3.9.1
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key');
+	}
+
+	// 7.3.9.2
+	var func = GetV(O, P);
+
+	// 7.3.9.4
+	if (func == null) {
+		return void 0;
+	}
+
+	// 7.3.9.5
+	if (!IsCallable(func)) {
+		throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func));
+	}
+
+	// 7.3.9.6
+	return func;
+};
Index: frontend/node_modules/es-abstract/2016/GetOwnPropertyKeys.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetOwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetOwnPropertyKeys.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true);
+var keys = require('object-keys');
+
+// https://262.ecma-international.org/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (Type === 'Symbol') {
+		return $gOPS ? $gOPS(O) : [];
+	}
+	if (Type === 'String') {
+		if (!$gOPN) {
+			return keys(O);
+		}
+		return $gOPN(O);
+	}
+	throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
Index: frontend/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetPrototypeFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+	var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+	if (!isObject(intrinsic)) {
+		throw new $TypeError('intrinsicDefaultProto must be an object');
+	}
+	if (!IsConstructor(constructor)) {
+		throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+	}
+	var proto = Get(constructor, 'prototype');
+	if (!isObject(proto)) {
+		if (!(constructor instanceof $Function)) {
+			// ignore other realms, for now
+			throw new $SyntaxError('cross-realm constructors not currently supported');
+		}
+		proto = intrinsic;
+	}
+	return proto;
+};
Index: frontend/node_modules/es-abstract/2016/GetSubstitution.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetSubstitution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetSubstitution.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,98 @@
+
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $parseInt = GetIntrinsic('%parseInt%');
+
+var inspect = require('object-inspect');
+var isInteger = require('math-intrinsics/isInteger');
+var regexTester = require('safe-regex-test');
+var callBound = require('call-bound');
+var every = require('../helpers/every');
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+
+var IsArray = require('./IsArray');
+
+var isStringOrUndefined = require('../helpers/isStringOrUndefined');
+
+// https://262.ecma-international.org/6.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, replacement) {
+	if (typeof matched !== 'string') {
+		throw new $TypeError('Assertion failed: `matched` must be a String');
+	}
+	var matchLength = matched.length;
+
+	if (typeof str !== 'string') {
+		throw new $TypeError('Assertion failed: `str` must be a String');
+	}
+	var stringLength = str.length;
+
+	if (!isInteger(position) || position < 0 || position > stringLength) {
+		throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+	}
+
+	if (!IsArray(captures) || !every(captures, isStringOrUndefined)) {
+		throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures));
+	}
+
+	if (typeof replacement !== 'string') {
+		throw new $TypeError('Assertion failed: `replacement` must be a String');
+	}
+
+	var tailPos = position + matchLength;
+	var m = captures.length;
+
+	var result = '';
+	for (var i = 0; i < replacement.length; i += 1) {
+		// if this is a $, and it's not the end of the replacement
+		var current = $charAt(replacement, i);
+		var isLast = (i + 1) >= replacement.length;
+		var nextIsLast = (i + 2) >= replacement.length;
+		if (current === '$' && !isLast) {
+			var next = $charAt(replacement, i + 1);
+			if (next === '$') {
+				result += '$';
+				i += 1;
+			} else if (next === '&') {
+				result += matched;
+				i += 1;
+			} else if (next === '`') {
+				result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+				i += 1;
+			} else if (next === "'") {
+				result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+				i += 1;
+			} else {
+				var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+				if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+					// $1 through $9, and not followed by a digit
+					var n = $parseInt(next, 10);
+					// if (n > m, impl-defined)
+					result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1];
+					i += 1;
+				} else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+					// $00 through $99
+					var nn = next + nextNext;
+					var nnI = $parseInt(nn, 10) - 1;
+					// if nn === '00' or nn > m, impl-defined
+					result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI];
+					i += 2;
+				} else {
+					result += '$';
+				}
+			}
+		} else {
+			// the final $, or else not a $
+			result += $charAt(replacement, i);
+		}
+	}
+	return result;
+};
Index: frontend/node_modules/es-abstract/2016/GetV.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetV.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetV.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var inspect = require('object-inspect');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+// var ToObject = require('./ToObject');
+
+// https://262.ecma-international.org/6.0/#sec-getv
+
+module.exports = function GetV(V, P) {
+	// 7.3.2.1
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P));
+	}
+
+	// 7.3.2.2-3
+	// var O = ToObject(V);
+
+	// 7.3.2.4
+	return V[P];
+};
Index: frontend/node_modules/es-abstract/2016/GetValueFromBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2016/GetValueFromBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/GetValueFromBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,86 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
+
+var isInteger = require('math-intrinsics/isInteger');
+var callBound = require('call-bound');
+
+var $charAt = callBound('String.prototype.charAt');
+var $reverse = callBound('Array.prototype.reverse');
+var $slice = callBound('Array.prototype.slice');
+
+var bytesAsFloat32 = require('../helpers/bytesAsFloat32');
+var bytesAsFloat64 = require('../helpers/bytesAsFloat64');
+var bytesAsInteger = require('../helpers/bytesAsInteger');
+var defaultEndianness = require('../helpers/defaultEndianness');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var isArrayBuffer = require('is-array-buffer');
+var safeConcat = require('safe-array-concat');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+var isUnsignedElementType = function isUnsignedElementType(type) { return $charAt(type, 0) === 'U'; };
+
+// https://262.ecma-international.org/6.0/#sec-getvaluefrombuffer
+
+module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type) {
+	if (!isArrayBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer');
+	}
+
+	if (!isInteger(byteIndex)) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be an integer');
+	}
+
+	if (typeof type !== 'string') {
+		throw new $TypeError('Assertion failed: `type` must be a string');
+	}
+
+	if (arguments.length > 3 && typeof arguments[3] !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
+	}
+
+	if (IsDetachedBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1
+	}
+
+	// 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type.
+
+	if (byteIndex < 0) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3
+	}
+
+	// 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot.
+
+	var elementSize = tableTAO.size['$' + type]; // step 5
+	if (!elementSize) {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	// 6. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex].
+	var rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6
+
+	// 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation.
+	var isLittleEndian = arguments.length > 3 ? arguments[3] : defaultEndianness === 'little'; // step 7
+
+	if (!isLittleEndian) {
+		$reverse(rawValue); // step 8
+	}
+
+	var bytes = $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize);
+
+	if (type === 'Float32') { // step 3
+		return bytesAsFloat32(bytes);
+	}
+
+	if (type === 'Float64') { // step 4
+		return bytesAsFloat64(bytes);
+	}
+
+	return bytesAsInteger(bytes, elementSize, isUnsignedElementType(type), false);
+};
Index: frontend/node_modules/es-abstract/2016/HasOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/HasOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/HasOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	return hasOwn(O, P);
+};
Index: frontend/node_modules/es-abstract/2016/HasProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/HasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/HasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	return P in O;
+};
Index: frontend/node_modules/es-abstract/2016/HourFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/HourFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/HourFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+	return modulo(floor(t / msPerHour), HoursPerDay);
+};
Index: frontend/node_modules/es-abstract/2016/InLeapYear.js
===================================================================
--- frontend/node_modules/es-abstract/2016/InLeapYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/InLeapYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var $EvalError = require('es-errors/eval');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+	var days = DaysInYear(YearFromTime(t));
+	if (days === 365) {
+		return 0;
+	}
+	if (days === 366) {
+		return 1;
+	}
+	throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
Index: frontend/node_modules/es-abstract/2016/InstanceofOperator.js
===================================================================
--- frontend/node_modules/es-abstract/2016/InstanceofOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/InstanceofOperator.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+	if (typeof instOfHandler !== 'undefined') {
+		return ToBoolean(Call(instOfHandler, C, [O]));
+	}
+	if (!IsCallable(C)) {
+		throw new $TypeError('`C` is not Callable');
+	}
+	return OrdinaryHasInstance(C, O);
+};
Index: frontend/node_modules/es-abstract/2016/IntegerIndexedElementGet.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IntegerIndexedElementGet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IntegerIndexedElementGet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+
+var GetValueFromBuffer = require('./GetValueFromBuffer');
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var IsInteger = require('./IsInteger');
+
+var typedArrayLength = require('typed-array-length');
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var whichTypedArray = require('which-typed-array');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+// https://262.ecma-international.org/6.0/#sec-integerindexedelementget
+
+module.exports = function IntegerIndexedElementGet(O, index) {
+	if (typeof index !== 'number') {
+		throw new $TypeError('`index` must be a Number'); // step 1
+	}
+	var arrayTypeName = whichTypedArray(O); // step 10
+	if (!arrayTypeName) {
+		throw new $TypeError('`O` must be a TypedArray'); // step 2
+	}
+	if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') {
+		throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020');
+	}
+
+	var buffer = typedArrayBuffer(O); // step 3
+
+	if (IsDetachedBuffer(buffer)) {
+		throw new $TypeError('`O` has a detached buffer'); // step 4
+	}
+
+	if (!IsInteger(index) || isNegativeZero(index)) {
+		return void undefined; // steps 5 - 6
+	}
+
+	var length = typedArrayLength(O); // step 7
+
+	if (index < 0 || index >= length) {
+		return void undefined; // step 8
+	}
+
+	var offset = typedArrayByteOffset(O); // step 9
+
+	var elementType = tableTAO.name['$' + arrayTypeName]; // step 13
+
+	var elementSize = tableTAO.size['$' + elementType]; // step 11
+
+	var indexedPosition = (index * elementSize) + offset; // step 12
+
+	return GetValueFromBuffer(buffer, indexedPosition, elementType); // step 14
+};
Index: frontend/node_modules/es-abstract/2016/IntegerIndexedElementSet.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IntegerIndexedElementSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IntegerIndexedElementSet.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,62 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var IsInteger = require('./IsInteger');
+var SetValueInBuffer = require('./SetValueInBuffer');
+var ToNumber = require('./ToNumber');
+
+var isNegativeZero = require('math-intrinsics/isNegativeZero');
+var typedArrayBuffer = require('typed-array-buffer');
+var typedArrayByteOffset = require('typed-array-byte-offset');
+var typedArrayLength = require('typed-array-length');
+var whichTypedArray = require('which-typed-array');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+// https://262.ecma-international.org/6.0/#sec-integerindexedelementset
+
+module.exports = function IntegerIndexedElementSet(O, index, value) {
+	if (typeof index !== 'number') {
+		throw new $TypeError('`index` must be a Number'); // step 1
+	}
+	var arrayTypeName = whichTypedArray(O); // step 12
+	if (!arrayTypeName) {
+		throw new $TypeError('`O` must be a TypedArray'); // step 2
+	}
+	if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') {
+		throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2
+	}
+
+	var numValue = ToNumber(value); // step 3
+
+	var buffer = typedArrayBuffer(O); // step 5
+
+	if (IsDetachedBuffer(buffer)) {
+		throw new $TypeError('`O` has a detached buffer'); // step 6
+	}
+
+	if (!IsInteger(index) || isNegativeZero(index)) {
+		return false; // steps 7 - 8
+	}
+
+	var length = typedArrayLength(O); // step 9
+
+	if (index < 0 || index >= length) {
+		return false; // step 10
+	}
+
+	var offset = typedArrayByteOffset(O); // step 11
+
+	var elementType = tableTAO.name['$' + arrayTypeName]; // step 15
+
+	var elementSize = tableTAO.size['$' + elementType]; // step 13
+
+	var indexedPosition = (index * elementSize) + offset; // step 14
+
+	SetValueInBuffer(buffer, indexedPosition, elementType, numValue); // step 16
+
+	return true; // step 17
+};
Index: frontend/node_modules/es-abstract/2016/InternalizeJSONProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/InternalizeJSONProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/InternalizeJSONProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,68 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Call = require('./Call');
+var CreateDataProperty = require('./CreateDataProperty');
+var EnumerableOwnNames = require('./EnumerableOwnNames');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+
+var forEach = require('../helpers/forEach');
+
+// https://262.ecma-international.org/6.0/#sec-internalizejsonproperty
+
+// note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument
+
+module.exports = function InternalizeJSONProperty(holder, name, reviver) {
+	if (!isObject(holder)) {
+		throw new $TypeError('Assertion failed: `holder` is not an Object');
+	}
+	if (typeof name !== 'string') {
+		throw new $TypeError('Assertion failed: `name` is not a String');
+	}
+	if (typeof reviver !== 'function') {
+		throw new $TypeError('Assertion failed: `reviver` is not a Function');
+	}
+
+	var val = Get(holder, name); // step 1
+
+	if (isObject(val)) { // step 3
+		var isArray = IsArray(val); // step 3.a
+		if (isArray) { // step 3.c
+			var I = 0; // step 3.c.i
+
+			var len = ToLength(Get(val, 'length')); // step 3.b.ii
+
+			while (I < len) { // step 3.b.iv
+				var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 3.b.iv.1
+
+				if (typeof newElement === 'undefined') { // step 3.b.iv.3
+					delete val[ToString(I)]; // step 3.b.iv.3.a
+				} else { // step 3.b.iv.4
+					CreateDataProperty(val, ToString(I), newElement); // step 3.b.iv.4.a
+				}
+
+				I += 1; // step 3.b.iv.6
+			}
+		} else {
+			var keys = EnumerableOwnNames(val); // step 3.d.i
+
+			forEach(keys, function (P) { // step 3.d.iii
+				// eslint-disable-next-line no-shadow
+				var newElement = InternalizeJSONProperty(val, P, reviver); // step 3.d.iii.1
+
+				if (typeof newElement === 'undefined') { // step 3.d.iii.3
+					delete val[P]; // step 3.d.iii.3.a
+				} else { // step 3.d.iii.4
+					CreateDataProperty(val, P, newElement); // step 3.d.iii.4.a
+				}
+			});
+		}
+	}
+
+	return Call(reviver, holder, [name, val]); // step 4
+};
Index: frontend/node_modules/es-abstract/2016/Invoke.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Invoke.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Invoke.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var Call = require('./Call');
+var IsArray = require('./IsArray');
+var GetV = require('./GetV');
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	var argumentsList = arguments.length > 2 ? arguments[2] : [];
+	if (!IsArray(argumentsList)) {
+		throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+	}
+	var func = GetV(O, P);
+	return Call(func, O, argumentsList);
+};
Index: frontend/node_modules/es-abstract/2016/IsAccessorDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsAccessorDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsAccessorDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.1
+
+module.exports = function IsAccessorDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) {
+		return false;
+	}
+
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/IsArray.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-isarray
+module.exports = require('../helpers/IsArray');
Index: frontend/node_modules/es-abstract/2016/IsCallable.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsCallable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsCallable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.11
+
+module.exports = require('is-callable');
Index: frontend/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+	return ValidateAndApplyPropertyDescriptor(
+		void undefined,
+		void undefined,
+		Extensible,
+		Desc,
+		Current
+	);
+};
Index: frontend/node_modules/es-abstract/2016/IsConcatSpreadable.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsConcatSpreadable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsConcatSpreadable.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+	if (!isObject(O)) {
+		return false;
+	}
+	if ($isConcatSpreadable) {
+		var spreadable = Get(O, $isConcatSpreadable);
+		if (typeof spreadable !== 'undefined') {
+			return ToBoolean(spreadable);
+		}
+	}
+	return IsArray(O);
+};
Index: frontend/node_modules/es-abstract/2016/IsConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic.js');
+
+var $construct = GetIntrinsic('%Reflect.construct%', true);
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+try {
+	DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });
+} catch (e) {
+	// Accessor properties aren't supported
+	DefinePropertyOrThrow = null;
+}
+
+// https://262.ecma-international.org/6.0/#sec-isconstructor
+
+if (DefinePropertyOrThrow && $construct) {
+	var isConstructorMarker = {};
+	var badArrayLike = {};
+	DefinePropertyOrThrow(badArrayLike, 'length', {
+		'[[Get]]': function () {
+			throw isConstructorMarker;
+		},
+		'[[Enumerable]]': true
+	});
+
+	module.exports = function IsConstructor(argument) {
+		try {
+			// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:
+			$construct(argument, badArrayLike);
+		} catch (err) {
+			return err === isConstructorMarker;
+		}
+	};
+} else {
+	module.exports = function IsConstructor(argument) {
+		// unfortunately there's no way to truly check this without try/catch `new argument` in old environments
+		return typeof argument === 'function' && !!argument.prototype;
+	};
+}
Index: frontend/node_modules/es-abstract/2016/IsDataDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsDataDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsDataDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var hasOwn = require('hasown');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.2
+
+module.exports = function IsDataDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) {
+		return false;
+	}
+
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/IsDetachedBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsDetachedBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsDetachedBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var $byteLength = require('array-buffer-byte-length');
+
+var isArrayBuffer = require('is-array-buffer');
+
+var availableTypedArrays = require('available-typed-arrays')();
+
+// https://262.ecma-international.org/6.0/#sec-isdetachedbuffer
+
+module.exports = function IsDetachedBuffer(arrayBuffer) {
+	if (!isArrayBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot');
+	}
+	if ($byteLength(arrayBuffer) === 0) {
+		try {
+			new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new
+		} catch (error) {
+			return !!error && error.name === 'TypeError';
+		}
+	}
+	return false;
+};
Index: frontend/node_modules/es-abstract/2016/IsExtensible.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsExtensible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsExtensible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
+var $isExtensible = GetIntrinsic('%Object.isExtensible%', true);
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+// https://262.ecma-international.org/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+	? function IsExtensible(obj) {
+		return !isPrimitive(obj) && $isExtensible(obj);
+	}
+	: function IsExtensible(obj) {
+		return !isPrimitive(obj);
+	};
Index: frontend/node_modules/es-abstract/2016/IsGenericDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsGenericDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsGenericDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+	if (typeof Desc === 'undefined') {
+		return false;
+	}
+
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
+	}
+
+	if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+		return true;
+	}
+
+	return false;
+};
Index: frontend/node_modules/es-abstract/2016/IsInteger.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var isInteger = require('math-intrinsics/isInteger');
+
+// https://262.ecma-international.org/6.0/#sec-isinteger
+
+module.exports = function IsInteger(argument) {
+	return isInteger(argument);
+};
Index: frontend/node_modules/es-abstract/2016/IsPromise.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsPromise.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsPromise.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var isObject = require('es-object-atoms/isObject');
+
+// https://262.ecma-international.org/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+	if (!isObject(x)) {
+		return false;
+	}
+	if (!$PromiseThen) { // Promises are not supported
+		return false;
+	}
+	try {
+		$PromiseThen(x); // throws if not a promise
+	} catch (e) {
+		return false;
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/IsPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+// TODO, semver-major: delete this
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+	return isPropertyDescriptor(Desc);
+};
Index: frontend/node_modules/es-abstract/2016/IsPropertyKey.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+	return isPropertyKey(argument);
+};
Index: frontend/node_modules/es-abstract/2016/IsRegExp.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsRegExp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsRegExp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+var isObject = require('es-object-atoms/isObject');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+	if (!isObject(argument)) {
+		return false;
+	}
+	if ($match) {
+		var isRegExp = argument[$match];
+		if (typeof isRegExp !== 'undefined') {
+			return ToBoolean(isRegExp);
+		}
+	}
+	return hasRegExpMatcher(argument);
+};
Index: frontend/node_modules/es-abstract/2016/IsWordChar.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IsWordChar.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IsWordChar.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+var IsInteger = require('./IsInteger');
+
+var every = require('../helpers/every');
+var regexTester = require('safe-regex-test');
+
+var isChar = function isChar(c) {
+	return typeof c === 'string' && c.length === 1;
+};
+
+var isWordCharacter = regexTester(/^[a-zA-Z0-9_]$/);
+
+// https://262.ecma-international.org/6.0/#sec-runtime-semantics-iswordchar-abstract-operation
+
+// note: prior to ES2023, this AO erroneously omitted the latter of its arguments.
+module.exports = function IsWordChar(e, InputLength, Input) {
+	if (!IsInteger(e)) {
+		throw new $TypeError('Assertion failed: `e` must be an integer');
+	}
+	if (!IsInteger(InputLength)) {
+		throw new $TypeError('Assertion failed: `InputLength` must be an integer');
+	}
+	if (!IsArray(Input) || !every(Input, isChar)) {
+		throw new $TypeError('Assertion failed: `Input` must be a List of characters');
+	}
+	if (e === -1 || e === InputLength) {
+		return false; // step 1
+	}
+
+	var c = Input[e]; // step 2
+
+	return isWordCharacter(c); // steps 3-4
+};
Index: frontend/node_modules/es-abstract/2016/IterableToArrayLike.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IterableToArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IterableToArrayLike.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var GetIterator = require('./GetIterator');
+var GetMethod = require('./GetMethod');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+var ToObject = require('./ToObject');
+var ES = {
+	AdvanceStringIndex: AdvanceStringIndex,
+	GetMethod: GetMethod
+};
+
+// https://262.ecma-international.org/7.0/#sec-iterabletoarraylike
+
+module.exports = function IterableToArrayLike(items) {
+	var usingIterator = getIteratorMethod(ES, items);
+	if (typeof usingIterator !== 'undefined') {
+		var iterator = GetIterator(items, usingIterator);
+		var values = [];
+		var next = true;
+		while (next) {
+			next = IteratorStep(iterator);
+			if (next) {
+				var nextValue = IteratorValue(next);
+				values[values.length] = nextValue;
+			}
+		}
+		return values;
+	}
+
+	return ToObject(items);
+};
Index: frontend/node_modules/es-abstract/2016/IteratorClose.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IteratorClose.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Call = require('./Call');
+var CompletionRecord = require('./CompletionRecord');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+	if (!isObject(iterator)) {
+		throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+	}
+	if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) {
+		throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance');
+	}
+	var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion;
+
+	var iteratorReturn = GetMethod(iterator, 'return');
+
+	if (typeof iteratorReturn === 'undefined') {
+		return completionThunk();
+	}
+
+	var completionRecord;
+	try {
+		var innerResult = Call(iteratorReturn, iterator, []);
+	} catch (e) {
+		// if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+		// if the completion is of type "throw", this will throw.
+		completionThunk();
+		// eslint-disable-next-line no-useless-assignment
+		completionThunk = null; // ensure it's not called twice.
+
+		// if not, then return the innerResult completion
+		throw e;
+	}
+	completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+	// eslint-disable-next-line no-useless-assignment
+	completionThunk = null; // ensure it's not called twice.
+
+	if (!isObject(innerResult)) {
+		throw new $TypeError('iterator .return must return an object');
+	}
+
+	return completionRecord;
+};
Index: frontend/node_modules/es-abstract/2016/IteratorComplete.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IteratorComplete.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IteratorComplete.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+	if (!isObject(iterResult)) {
+		throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+	}
+	return ToBoolean(Get(iterResult, 'done'));
+};
Index: frontend/node_modules/es-abstract/2016/IteratorNext.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IteratorNext.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IteratorNext.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Invoke = require('./Invoke');
+
+// https://262.ecma-international.org/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+	var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+	if (!isObject(result)) {
+		throw new $TypeError('iterator next must return an object');
+	}
+	return result;
+};
Index: frontend/node_modules/es-abstract/2016/IteratorStep.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IteratorStep.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IteratorStep.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+	var result = IteratorNext(iterator);
+	var done = IteratorComplete(result);
+	return done === true ? false : result;
+};
+
Index: frontend/node_modules/es-abstract/2016/IteratorValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/IteratorValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/IteratorValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+
+// https://262.ecma-international.org/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+	if (!isObject(iterResult)) {
+		throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+	}
+	return Get(iterResult, 'value');
+};
+
Index: frontend/node_modules/es-abstract/2016/MakeDate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/MakeDate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/MakeDate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $isFinite = require('math-intrinsics/isFinite');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+	if (!$isFinite(day) || !$isFinite(time)) {
+		return NaN;
+	}
+	return (day * msPerDay) + time;
+};
Index: frontend/node_modules/es-abstract/2016/MakeDay.js
===================================================================
--- frontend/node_modules/es-abstract/2016/MakeDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/MakeDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var $isFinite = require('math-intrinsics/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+	if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+		return NaN;
+	}
+	var y = ToInteger(year);
+	var m = ToInteger(month);
+	var dt = ToInteger(date);
+	var ym = y + floor(m / 12);
+	var mn = modulo(m, 12);
+	var t = $DateUTC(ym, mn, 1);
+	if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+		return NaN;
+	}
+	return Day(t) + dt - 1;
+};
Index: frontend/node_modules/es-abstract/2016/MakeTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/MakeTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/MakeTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+'use strict';
+
+var $isFinite = require('math-intrinsics/isFinite');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+	if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+		return NaN;
+	}
+	var h = ToInteger(hour);
+	var m = ToInteger(min);
+	var s = ToInteger(sec);
+	var milli = ToInteger(ms);
+	var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+	return t;
+};
Index: frontend/node_modules/es-abstract/2016/MinFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/MinFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/MinFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+	return modulo(floor(t / msPerMinute), MinutesPerHour);
+};
Index: frontend/node_modules/es-abstract/2016/MonthFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/MonthFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/MonthFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,51 @@
+'use strict';
+
+var $RangeError = require('es-errors/range');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+	var day = DayWithinYear(t);
+	if (0 <= day && day < 31) {
+		return 0;
+	}
+	var leap = InLeapYear(t);
+	if (31 <= day && day < (59 + leap)) {
+		return 1;
+	}
+	if ((59 + leap) <= day && day < (90 + leap)) {
+		return 2;
+	}
+	if ((90 + leap) <= day && day < (120 + leap)) {
+		return 3;
+	}
+	if ((120 + leap) <= day && day < (151 + leap)) {
+		return 4;
+	}
+	if ((151 + leap) <= day && day < (181 + leap)) {
+		return 5;
+	}
+	if ((181 + leap) <= day && day < (212 + leap)) {
+		return 6;
+	}
+	if ((212 + leap) <= day && day < (243 + leap)) {
+		return 7;
+	}
+	if ((243 + leap) <= day && day < (273 + leap)) {
+		return 8;
+	}
+	if ((273 + leap) <= day && day < (304 + leap)) {
+		return 9;
+	}
+	if ((304 + leap) <= day && day < (334 + leap)) {
+		return 10;
+	}
+	if ((334 + leap) <= day && day < (365 + leap)) {
+		return 11;
+	}
+
+	throw new $RangeError('Assertion failed: `day` is out of range');
+};
Index: frontend/node_modules/es-abstract/2016/NewPromiseCapability.js
===================================================================
--- frontend/node_modules/es-abstract/2016/NewPromiseCapability.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/NewPromiseCapability.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var IsCallable = require('./IsCallable');
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/6.0/#sec-newpromisecapability
+
+module.exports = function NewPromiseCapability(C) {
+	if (!IsConstructor(C)) {
+		throw new $TypeError('C must be a constructor'); // step 1
+	}
+
+	var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3
+
+	var promise = new C(function (resolve, reject) { // steps 4-5
+		if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') {
+			throw new $TypeError('executor has already been called'); // step 4.a, 4.b
+		}
+		resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c
+		resolvingFunctions['[[Reject]]'] = reject; // step 4.d
+	}); // step 4-6
+
+	if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) {
+		throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8
+	}
+
+	return {
+		'[[Promise]]': promise,
+		'[[Resolve]]': resolvingFunctions['[[Resolve]]'],
+		'[[Reject]]': resolvingFunctions['[[Reject]]']
+	}; // step 9
+};
Index: frontend/node_modules/es-abstract/2016/NormalCompletion.js
===================================================================
--- frontend/node_modules/es-abstract/2016/NormalCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/NormalCompletion.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var CompletionRecord = require('./CompletionRecord');
+
+// https://262.ecma-international.org/6.0/#sec-normalcompletion
+
+module.exports = function NormalCompletion(value) {
+	return new CompletionRecord('normal', value);
+};
Index: frontend/node_modules/es-abstract/2016/ObjectCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ObjectCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ObjectCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = require('es-errors/type');
+var $SyntaxError = require('es-errors/syntax');
+var isObject = require('es-object-atoms/isObject');
+
+var IsArray = require('./IsArray');
+
+var forEach = require('../helpers/forEach');
+
+var SLOT = require('internal-slot');
+
+var hasProto = require('has-proto')();
+
+// https://262.ecma-international.org/6.0/#sec-objectcreate
+
+module.exports = function ObjectCreate(proto, internalSlotsList) {
+	if (proto !== null && !isObject(proto)) {
+		throw new $TypeError('Assertion failed: `proto` must be null or an object');
+	}
+	var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1
+	if (arguments.length >= 2 && !IsArray(slots)) {
+		throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array');
+	}
+
+	var O;
+	if (hasProto) {
+		O = { __proto__: proto };
+	} else if ($ObjectCreate) {
+		O = $ObjectCreate(proto);
+	} else {
+		if (proto === null) {
+			throw new $SyntaxError('native Object.create support is required to create null objects');
+		}
+		var T = function T() {};
+		T.prototype = proto;
+		O = new T();
+	}
+
+	if (slots.length > 0) {
+		forEach(slots, function (slot) {
+			SLOT.set(O, slot, void undefined);
+		});
+	}
+
+	return O; // step 6
+};
Index: frontend/node_modules/es-abstract/2016/ObjectDefineProperties.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ObjectDefineProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ObjectDefineProperties.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var Get = require('./Get');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToObject = require('./ToObject');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+var forEach = require('../helpers/forEach');
+var OwnPropertyKeys = require('own-keys');
+
+// https://262.ecma-international.org/6.0/#sec-objectdefineproperties
+
+/** @type {<T extends Record<PropertyKey, unknown> = {}>(O: T, Properties: object) => T} */
+module.exports = function ObjectDefineProperties(O, Properties) {
+	var props = ToObject(Properties); // step 1
+	var keys = OwnPropertyKeys(props); // step 2
+	/** @type {[string | symbol, import('../types').Descriptor][]} */
+	var descriptors = []; // step 3
+
+	forEach(keys, function (nextKey) { // step 4
+		var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a
+		if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b
+			var descObj = Get(props, nextKey); // step 4.b.i
+			var desc = ToPropertyDescriptor(descObj); // step 4.b.ii
+			descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii
+		}
+	});
+
+	forEach(descriptors, function (pair) { // step 5
+		var P = pair[0]; // step 5.a
+		var desc = pair[1]; // step 5.b
+		DefinePropertyOrThrow(O, P, desc); // step 5.c
+	});
+
+	return O; // step 6
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryCreateFromConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var $TypeError = require('es-errors/type');
+
+var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor');
+var IsArray = require('./IsArray');
+var ObjectCreate = require('./ObjectCreate');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor
+
+module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) {
+	GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+	var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto);
+	var slots = arguments.length < 3 ? [] : arguments[2];
+	if (!IsArray(slots)) {
+		throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List');
+	}
+	return ObjectCreate(proto, slots);
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryDefineOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,54 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsExtensible = require('./IsExtensible');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (!$gOPD) {
+		// ES3/IE 8 fallback
+		if (IsAccessorDescriptor(Desc)) {
+			throw new $SyntaxError('This environment does not support accessor property descriptors.');
+		}
+		var creatingNormalDataProperty = !(P in O)
+			&& Desc['[[Writable]]']
+			&& Desc['[[Enumerable]]']
+			&& Desc['[[Configurable]]']
+			&& '[[Value]]' in Desc;
+		var settingExistingDataProperty = (P in O)
+			&& (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+			&& (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+			&& (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+			&& '[[Value]]' in Desc;
+		if (creatingNormalDataProperty || settingExistingDataProperty) {
+			O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+			return SameValue(O[P], Desc['[[Value]]']);
+		}
+		throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+	}
+	var desc = $gOPD(O, P);
+	var current = desc && ToPropertyDescriptor(desc);
+	var extensible = IsExtensible(O);
+	return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryGetOwnProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var hasOwn = require('hasown');
+var callBound = require('call-bound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var IsArray = require('./IsArray');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	if (!hasOwn(O, P)) {
+		return void 0;
+	}
+	if (!$gOPD) {
+		// ES3 / IE 8 fallback
+		var arrayLength = IsArray(O) && P === 'length';
+		var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+		return {
+			'[[Configurable]]': !(arrayLength || regexLastIndex),
+			'[[Enumerable]]': $isEnumerable(O, P),
+			'[[Value]]': O[P],
+			'[[Writable]]': true
+		};
+	}
+	return ToPropertyDescriptor($gOPD(O, P));
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryGetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var $getProto = require('get-proto');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be an Object');
+	}
+	if (!$getProto) {
+		throw new $TypeError('This environment does not support fetching prototypes.');
+	}
+	return $getProto(O);
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryHasInstance.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryHasInstance.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryHasInstance.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+	if (!IsCallable(C)) {
+		return false;
+	}
+	if (!isObject(O)) {
+		return false;
+	}
+	var P = Get(C, 'prototype');
+	if (!isObject(P)) {
+		throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+	}
+	return O instanceof C;
+};
Index: frontend/node_modules/es-abstract/2016/OrdinaryHasProperty.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinaryHasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinaryHasProperty.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+
+// https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: P must be a Property Key');
+	}
+	return P in O;
+};
Index: frontend/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js
===================================================================
--- frontend/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/OrdinarySetPrototypeOf.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var $setProto = require('set-proto');
+var isObject = require('es-object-atoms/isObject');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+	if (V !== null && !isObject(V)) {
+		throw new $TypeError('Assertion failed: V must be Object or Null');
+	}
+	/*
+	var extensible = IsExtensible(O);
+	var current = OrdinaryGetPrototypeOf(O);
+	if (SameValue(V, current)) {
+		return true;
+	}
+	if (!extensible) {
+		return false;
+	}
+	*/
+	try {
+		$setProto(O, V);
+	} catch (e) {
+		return false;
+	}
+	return OrdinaryGetPrototypeOf(O) === V;
+	/*
+	var p = V;
+	var done = false;
+	while (!done) {
+		if (p === null) {
+			done = true;
+		} else if (SameValue(p, O)) {
+			return false;
+		} else {
+			if (wat) {
+				done = true;
+			} else {
+				p = p.[[Prototype]];
+			}
+		}
+	}
+	O.[[Prototype]] = V;
+	return true;
+	*/
+};
Index: frontend/node_modules/es-abstract/2016/QuoteJSONString.js
===================================================================
--- frontend/node_modules/es-abstract/2016/QuoteJSONString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/QuoteJSONString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+var forEach = require('../helpers/forEach');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $numberToString = callBound('Number.prototype.toString');
+var $toLowerCase = callBound('String.prototype.toLowerCase');
+var $strSlice = callBound('String.prototype.slice');
+var $strSplit = callBound('String.prototype.split');
+
+// https://262.ecma-international.org/6.0/#sec-quotejsonstring
+
+var escapes = {
+	'\u0008': 'b',
+	'\u000C': 'f',
+	'\u000A': 'n',
+	'\u000D': 'r',
+	'\u0009': 't'
+};
+
+module.exports = function QuoteJSONString(value) {
+	if (typeof value !== 'string') {
+		throw new $TypeError('Assertion failed: `value` must be a String');
+	}
+	var product = '"';
+	if (value) {
+		forEach($strSplit(value, ''), function (C) {
+			if (C === '"' || C === '\\') {
+				product += '\u005C' + C;
+			} else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') {
+				var abbrev = escapes[C];
+				product += '\u005C' + abbrev;
+			} else {
+				var cCharCode = $charCodeAt(C, 0);
+				if (cCharCode < 0x20) {
+					product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4));
+				} else {
+					product += C;
+				}
+			}
+		});
+	}
+	product += '"';
+	return product;
+};
Index: frontend/node_modules/es-abstract/2016/RegExpCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/RegExpCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/RegExpCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RegExp = GetIntrinsic('%RegExp%');
+
+// var RegExpAlloc = require('./RegExpAlloc');
+// var RegExpInitialize = require('./RegExpInitialize');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-regexpcreate
+
+module.exports = function RegExpCreate(P, F) {
+	// var obj = RegExpAlloc($RegExp);
+	// return RegExpInitialize(obj, P, F);
+
+	// covers spec mechanics; bypass regex brand checking
+	var pattern = typeof P === 'undefined' ? '' : ToString(P);
+	var flags = typeof F === 'undefined' ? '' : ToString(F);
+	return new $RegExp(pattern, flags);
+};
Index: frontend/node_modules/es-abstract/2016/RegExpExec.js
===================================================================
--- frontend/node_modules/es-abstract/2016/RegExpExec.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/RegExpExec.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var regexExec = require('call-bound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+	if (!isObject(R)) {
+		throw new $TypeError('Assertion failed: `R` must be an Object');
+	}
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	var exec = Get(R, 'exec');
+	if (IsCallable(exec)) {
+		var result = Call(exec, R, [S]);
+		if (result === null || isObject(result)) {
+			return result;
+		}
+		throw new $TypeError('"exec" method must return `null` or an Object');
+	}
+	return regexExec(R, S);
+};
Index: frontend/node_modules/es-abstract/2016/RequireObjectCoercible.js
===================================================================
--- frontend/node_modules/es-abstract/2016/RequireObjectCoercible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/RequireObjectCoercible.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('es-object-atoms/RequireObjectCoercible');
Index: frontend/node_modules/es-abstract/2016/SameValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SameValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// http://262.ecma-international.org/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+	if (x === y) { // 0 === -0, but they are not identical.
+		if (x === 0) { return 1 / x === 1 / y; }
+		return true;
+	}
+	return $isNaN(x) && $isNaN(y);
+};
Index: frontend/node_modules/es-abstract/2016/SameValueNonNumber.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SameValueNonNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SameValueNonNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/7.0/#sec-samevaluenonnumber
+
+module.exports = function SameValueNonNumber(x, y) {
+	if (typeof x === 'number' || typeof x !== typeof y) {
+		throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.');
+	}
+	return SameValue(x, y);
+};
Index: frontend/node_modules/es-abstract/2016/SameValueZero.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SameValueZero.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+	return (x === y) || ($isNaN(x) && $isNaN(y));
+};
Index: frontend/node_modules/es-abstract/2016/SecFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SecFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SecFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+	return modulo(floor(t / msPerSecond), SecondsPerMinute);
+};
Index: frontend/node_modules/es-abstract/2016/Set.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Set.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,45 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated
+var noThrowOnStrictViolation = (function () {
+	try {
+		delete [].length;
+		return true;
+	} catch (e) {
+		return false;
+	}
+}());
+
+// https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object');
+	}
+	if (!isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: `P` must be a Property Key');
+	}
+	if (typeof Throw !== 'boolean') {
+		throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+	}
+	if (Throw) {
+		O[P] = V; // eslint-disable-line no-param-reassign
+		if (noThrowOnStrictViolation && !SameValue(O[P], V)) {
+			throw new $TypeError('Attempted to assign to readonly property.');
+		}
+		return true;
+	}
+	try {
+		O[P] = V; // eslint-disable-line no-param-reassign
+		return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+	} catch (e) {
+		return false;
+	}
+
+};
Index: frontend/node_modules/es-abstract/2016/SetFunctionName.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SetFunctionName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SetFunctionName.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var $TypeError = require('es-errors/type');
+
+var getSymbolDescription = require('get-symbol-description');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+
+// https://262.ecma-international.org/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+	if (typeof F !== 'function') {
+		throw new $TypeError('Assertion failed: `F` must be a function');
+	}
+	if (!IsExtensible(F) || hasOwn(F, 'name')) {
+		throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+	}
+	if (typeof name !== 'symbol' && typeof name !== 'string') {
+		throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+	}
+	if (typeof name === 'symbol') {
+		var description = getSymbolDescription(name);
+		// eslint-disable-next-line no-param-reassign
+		name = typeof description === 'undefined' ? '' : '[' + description + ']';
+	}
+	if (arguments.length > 2) {
+		var prefix = arguments[2];
+		// eslint-disable-next-line no-param-reassign
+		name = prefix + ' ' + name;
+	}
+	return DefinePropertyOrThrow(F, 'name', {
+		'[[Value]]': name,
+		'[[Writable]]': false,
+		'[[Enumerable]]': false,
+		'[[Configurable]]': true
+	});
+};
Index: frontend/node_modules/es-abstract/2016/SetIntegrityLevel.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SetIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SetIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+var $gOPD = require('gopd');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true);
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true);
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (level !== 'sealed' && level !== 'frozen') {
+		throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+	}
+	if (!$preventExtensions) {
+		throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+	}
+	var status = $preventExtensions(O);
+	if (!status) {
+		return false;
+	}
+	if (!$gOPN) {
+		throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+	}
+	var theKeys = $gOPN(O);
+	if (level === 'sealed') {
+		forEach(theKeys, function (k) {
+			DefinePropertyOrThrow(O, k, { configurable: false });
+		});
+	} else if (level === 'frozen') {
+		forEach(theKeys, function (k) {
+			var currentDesc = $gOPD(O, k);
+			if (typeof currentDesc !== 'undefined') {
+				var desc;
+				if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+					desc = { configurable: false };
+				} else {
+					desc = { configurable: false, writable: false };
+				}
+				DefinePropertyOrThrow(O, k, desc);
+			}
+		});
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/SetValueInBuffer.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SetValueInBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SetValueInBuffer.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,110 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Uint8Array = GetIntrinsic('%Uint8Array%', true);
+
+var isInteger = require('math-intrinsics/isInteger');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+var ToInt16 = require('./ToInt16');
+var ToInt32 = require('./ToInt32');
+var ToInt8 = require('./ToInt8');
+var ToUint16 = require('./ToUint16');
+var ToUint32 = require('./ToUint32');
+var ToUint8 = require('./ToUint8');
+var ToUint8Clamp = require('./ToUint8Clamp');
+
+var isArrayBuffer = require('is-array-buffer');
+var hasOwn = require('hasown');
+
+var tableTAO = require('./tables/typed-array-objects');
+
+var TypeToAO = {
+	__proto__: null,
+	$Int8: ToInt8,
+	$Uint8: ToUint8,
+	$Uint8C: ToUint8Clamp,
+	$Int16: ToInt16,
+	$Uint16: ToUint16,
+	$Int32: ToInt32,
+	$Uint32: ToUint32
+};
+
+var defaultEndianness = require('../helpers/defaultEndianness');
+var forEach = require('../helpers/forEach');
+var integerToNBytes = require('../helpers/integerToNBytes');
+var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes');
+var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes');
+
+// https://262.ecma-international.org/6.0/#sec-setvalueinbuffer
+
+module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value) {
+	if (!isArrayBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer');
+	}
+
+	if (!isInteger(byteIndex)) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be an integer');
+	}
+
+	if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	if (typeof value !== 'number') {
+		throw new $TypeError('Assertion failed: `value` must be a number');
+	}
+
+	if (arguments.length > 4 && typeof arguments[4] !== 'boolean') {
+		throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present');
+	}
+
+	if (IsDetachedBuffer(arrayBuffer)) {
+		throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1
+	}
+
+	// 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type.
+
+	if (byteIndex < 0) {
+		throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3
+	}
+
+	// 4. Assert: Type(value) is Number.
+
+	// 5. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot.
+
+	// 6. Assert: block is not undefined.
+
+	var elementSize = tableTAO.size['$' + type]; // step 7
+	if (!elementSize) {
+		throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices);
+	}
+
+	// 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation.
+	var isLittleEndian = arguments.length > 4 ? arguments[4] : defaultEndianness === 'little'; // step 8
+
+	var rawBytes;
+	if (type === 'Float32') { // step 1
+		rawBytes = valueToFloat32Bytes(value, isLittleEndian);
+	} else if (type === 'Float64') { // step 2
+		rawBytes = valueToFloat64Bytes(value, isLittleEndian);
+	} else {
+		var n = elementSize; // step 3.a
+
+		var convOp = TypeToAO['$' + type]; // step 3.b
+
+		var intValue = convOp(value); // step 3.c
+
+		rawBytes = integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4
+	}
+
+	// 12. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex].
+	var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize);
+	forEach(rawBytes, function (rawByte, i) {
+		arr[i] = rawByte;
+	});
+
+	// 13. Return NormalCompletion(undefined).
+};
Index: frontend/node_modules/es-abstract/2016/SpeciesConstructor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SpeciesConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SpeciesConstructor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsConstructor = require('./IsConstructor');
+
+// https://262.ecma-international.org/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	var C = O.constructor;
+	if (typeof C === 'undefined') {
+		return defaultConstructor;
+	}
+	if (!isObject(C)) {
+		throw new $TypeError('O.constructor is not an Object');
+	}
+	var S = $species ? C[$species] : void 0;
+	if (S == null) {
+		return defaultConstructor;
+	}
+	if (IsConstructor(S)) {
+		return S;
+	}
+	throw new $TypeError('no constructor found');
+};
Index: frontend/node_modules/es-abstract/2016/SplitMatch.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SplitMatch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SplitMatch.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,35 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $TypeError = require('es-errors/type');
+var isInteger = require('math-intrinsics/isInteger');
+
+var $charAt = callBound('String.prototype.charAt');
+
+// https://262.ecma-international.org/6.0/#sec-splitmatch
+
+module.exports = function SplitMatch(S, q, R) {
+	if (typeof S !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+	if (!isInteger(q)) {
+		throw new $TypeError('Assertion failed: `q` must be an integer');
+	}
+	if (typeof R !== 'string') {
+		throw new $TypeError('Assertion failed: `R` must be a String');
+	}
+	var r = R.length;
+	var s = S.length;
+	if (q + r > s) {
+		return false;
+	}
+
+	for (var i = 0; i < r; i += 1) {
+		if ($charAt(S, q + i) !== $charAt(R, i)) {
+			return false;
+		}
+	}
+
+	return q + r;
+};
Index: frontend/node_modules/es-abstract/2016/StrictEqualityComparison.js
===================================================================
--- frontend/node_modules/es-abstract/2016/StrictEqualityComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/StrictEqualityComparison.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+	if (Type(x) !== Type(y)) {
+		return false;
+	}
+	if (typeof x === 'undefined' || x === null) {
+		return true;
+	}
+	return x === y; // shortcut for steps 4-7
+};
Index: frontend/node_modules/es-abstract/2016/StringCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/StringCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/StringCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Object = require('es-object-atoms');
+var $StringPrototype = GetIntrinsic('%String.prototype%');
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+var setProto = require('set-proto');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+
+// https://262.ecma-international.org/6.0/#sec-stringcreate
+
+module.exports = function StringCreate(value, prototype) {
+	if (typeof value !== 'string') {
+		throw new $TypeError('Assertion failed: `S` must be a String');
+	}
+
+	var S = $Object(value);
+	if (prototype !== $StringPrototype) {
+		if (setProto) {
+			setProto(S, prototype);
+		} else {
+			throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+		}
+	}
+
+	var length = value.length;
+	DefinePropertyOrThrow(S, 'length', {
+		'[[Configurable]]': false,
+		'[[Enumerable]]': false,
+		'[[Value]]': length,
+		'[[Writable]]': false
+	});
+
+	return S;
+};
Index: frontend/node_modules/es-abstract/2016/SymbolDescriptiveString.js
===================================================================
--- frontend/node_modules/es-abstract/2016/SymbolDescriptiveString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/SymbolDescriptiveString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+
+var callBound = require('call-bound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+// https://262.ecma-international.org/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+	if (typeof sym !== 'symbol') {
+		throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+	}
+	return $SymbolToString(sym);
+};
Index: frontend/node_modules/es-abstract/2016/TestIntegrityLevel.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TestIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TestIntegrityLevel.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+'use strict';
+
+var $gOPD = require('gopd');
+var $TypeError = require('es-errors/type');
+
+var every = require('../helpers/every');
+var OwnPropertyKeys = require('own-keys');
+var isObject = require('es-object-atoms/isObject');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: Type(O) is not Object');
+	}
+	if (level !== 'sealed' && level !== 'frozen') {
+		throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+	}
+	var status = IsExtensible(O);
+	if (status || !$gOPD) {
+		return false;
+	}
+	var theKeys = OwnPropertyKeys(O);
+	return theKeys.length === 0 || every(theKeys, function (k) {
+		var currentDesc = $gOPD(O, k);
+		if (typeof currentDesc !== 'undefined') {
+			if (currentDesc.configurable) {
+				return false;
+			}
+			if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+				return false;
+			}
+		}
+		return true;
+	});
+};
Index: frontend/node_modules/es-abstract/2016/TimeClip.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TimeClip.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TimeClip.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var $isFinite = require('math-intrinsics/isFinite');
+var abs = require('math-intrinsics/abs');
+
+var ToNumber = require('./ToNumber');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+	if (!$isFinite(time) || abs(time) > 8.64e15) {
+		return NaN;
+	}
+	return +new $Date(ToNumber(time));
+};
+
Index: frontend/node_modules/es-abstract/2016/TimeFromYear.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TimeFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TimeFromYear.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+	return msPerDay * DayFromYear(y);
+};
Index: frontend/node_modules/es-abstract/2016/TimeWithinDay.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TimeWithinDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TimeWithinDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+	return modulo(t, msPerDay);
+};
+
Index: frontend/node_modules/es-abstract/2016/ToBoolean.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToBoolean.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToBoolean.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
Index: frontend/node_modules/es-abstract/2016/ToDateString.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToDateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToDateString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Date = GetIntrinsic('%Date%');
+var $String = GetIntrinsic('%String%');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+	if (typeof tv !== 'number') {
+		throw new $TypeError('Assertion failed: `tv` must be a Number');
+	}
+	if ($isNaN(tv)) {
+		return 'Invalid Date';
+	}
+	return $String(new $Date(tv));
+};
Index: frontend/node_modules/es-abstract/2016/ToInt16.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToInt16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToInt16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://262.ecma-international.org/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+	var int16bit = ToUint16(argument);
+	return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
Index: frontend/node_modules/es-abstract/2016/ToInt32.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToInt32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToInt32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+	return ToNumber(x) >> 0;
+};
Index: frontend/node_modules/es-abstract/2016/ToInt8.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToInt8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToInt8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://262.ecma-international.org/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+	var int8bit = ToUint8(argument);
+	return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
Index: frontend/node_modules/es-abstract/2016/ToInteger.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToInteger.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://262.ecma-international.org/6.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+	var number = ToNumber(value);
+	return ES5ToInteger(number);
+};
Index: frontend/node_modules/es-abstract/2016/ToLength.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToLength.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger');
+
+var ToInteger = require('./ToInteger');
+
+// https://262.ecma-international.org/6.0/#sec-tolength
+
+module.exports = function ToLength(argument) {
+	var len = ToInteger(argument);
+	if (len <= 0) { return 0; } // includes converting -0 to +0
+	if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+	return len;
+};
Index: frontend/node_modules/es-abstract/2016/ToNumber.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToNumber.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,48 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('call-bound');
+var regexTester = require('safe-regex-test');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+var $trim = require('string.prototype.trim');
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://262.ecma-international.org/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+	var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+	if (typeof value === 'symbol') {
+		throw new $TypeError('Cannot convert a Symbol value to a number');
+	}
+	if (typeof value === 'string') {
+		if (isBinary(value)) {
+			return ToNumber($parseInteger($strSlice(value, 2), 2));
+		} else if (isOctal(value)) {
+			return ToNumber($parseInteger($strSlice(value, 2), 8));
+		} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+			return NaN;
+		}
+		var trimmed = $trim(value);
+		if (trimmed !== value) {
+			return ToNumber(trimmed);
+		}
+
+	}
+	return +value;
+};
Index: frontend/node_modules/es-abstract/2016/ToObject.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToObject.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-toobject
+
+module.exports = require('es-object-atoms/ToObject');
Index: frontend/node_modules/es-abstract/2016/ToPrimitive.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToPrimitive.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://262.ecma-international.org/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+	if (arguments.length > 1) {
+		return toPrimitive(input, arguments[1]);
+	}
+	return toPrimitive(input);
+};
Index: frontend/node_modules/es-abstract/2016/ToPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+'use strict';
+
+var hasOwn = require('hasown');
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsCallable = require('./IsCallable');
+var ToBoolean = require('./ToBoolean');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+	if (!isObject(Obj)) {
+		throw new $TypeError('ToPropertyDescriptor requires an object');
+	}
+
+	var desc = {};
+	if (hasOwn(Obj, 'enumerable')) {
+		desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+	}
+	if (hasOwn(Obj, 'configurable')) {
+		desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+	}
+	if (hasOwn(Obj, 'value')) {
+		desc['[[Value]]'] = Obj.value;
+	}
+	if (hasOwn(Obj, 'writable')) {
+		desc['[[Writable]]'] = ToBoolean(Obj.writable);
+	}
+	if (hasOwn(Obj, 'get')) {
+		var getter = Obj.get;
+		if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+			throw new $TypeError('getter must be a function');
+		}
+		desc['[[Get]]'] = getter;
+	}
+	if (hasOwn(Obj, 'set')) {
+		var setter = Obj.set;
+		if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+			throw new $TypeError('setter must be a function');
+		}
+		desc['[[Set]]'] = setter;
+	}
+
+	if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) {
+		throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+	}
+	return desc;
+};
Index: frontend/node_modules/es-abstract/2016/ToPropertyKey.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToPropertyKey.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+	var key = ToPrimitive(argument, $String);
+	return typeof key === 'symbol' ? key : ToString(key);
+};
Index: frontend/node_modules/es-abstract/2016/ToString.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToString.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = require('es-errors/type');
+
+// https://262.ecma-international.org/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+	if (typeof argument === 'symbol') {
+		throw new $TypeError('Cannot convert a Symbol value to a string');
+	}
+	return $String(argument);
+};
Index: frontend/node_modules/es-abstract/2016/ToUint16.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToUint16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToUint16.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var modulo = require('./modulo');
+var ToNumber = require('./ToNumber');
+
+var abs = require('math-intrinsics/abs');
+var floor = require('math-intrinsics/floor');
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+var $sign = require('math-intrinsics/sign');
+
+// http://262.ecma-international.org/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+	var number = ToNumber(value);
+	if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+	var posInt = $sign(number) * floor(abs(number));
+	return modulo(posInt, 0x10000);
+};
Index: frontend/node_modules/es-abstract/2016/ToUint32.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToUint32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToUint32.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+	return ToNumber(x) >>> 0;
+};
Index: frontend/node_modules/es-abstract/2016/ToUint8.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToUint8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToUint8.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('math-intrinsics/isNaN');
+var $isFinite = require('math-intrinsics/isFinite');
+var $sign = require('math-intrinsics/sign');
+var abs = require('math-intrinsics/abs');
+var floor = require('math-intrinsics/floor');
+var modulo = require('math-intrinsics/mod');
+
+// https://262.ecma-international.org/6.0/#sec-touint8
+
+module.exports = function ToUint8(argument) {
+	var number = ToNumber(argument);
+	if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+	var posInt = $sign(number) * floor(abs(number));
+	return modulo(posInt, 0x100);
+};
Index: frontend/node_modules/es-abstract/2016/ToUint8Clamp.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ToUint8Clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ToUint8Clamp.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var floor = require('./floor');
+
+var $isNaN = require('math-intrinsics/isNaN');
+
+// https://262.ecma-international.org/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+	var number = ToNumber(argument);
+	if ($isNaN(number) || number <= 0) { return 0; }
+	if (number >= 0xFF) { return 0xFF; }
+	var f = floor(number);
+	if (f + 0.5 < number) { return f + 1; }
+	if (number < f + 0.5) { return f; }
+	if (f % 2 !== 0) { return f + 1; }
+	return f;
+};
Index: frontend/node_modules/es-abstract/2016/Type.js
===================================================================
--- frontend/node_modules/es-abstract/2016/Type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/Type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values
+
+module.exports = function Type(x) {
+	if (typeof x === 'symbol') {
+		return 'Symbol';
+	}
+	return ES5Type(x);
+};
Index: frontend/node_modules/es-abstract/2016/TypedArrayCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TypedArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TypedArrayCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,47 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var ValidateTypedArray = require('./ValidateTypedArray');
+
+var availableTypedArrays = require('available-typed-arrays')();
+var typedArrayLength = require('typed-array-length');
+
+// https://262.ecma-international.org/7.0/#typedarray-create
+
+module.exports = function TypedArrayCreate(constructor, argumentList) {
+	if (!IsConstructor(constructor)) {
+		throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+	}
+	if (!IsArray(argumentList)) {
+		throw new $TypeError('Assertion failed: `argumentList` must be a List');
+	}
+	if (availableTypedArrays.length === 0) {
+		throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment');
+	}
+
+	// var newTypedArray = Construct(constructor, argumentList); // step 1
+	var newTypedArray;
+	if (argumentList.length === 0) {
+		newTypedArray = new constructor();
+	} else if (argumentList.length === 1) {
+		newTypedArray = new constructor(argumentList[0]);
+	} else if (argumentList.length === 2) {
+		newTypedArray = new constructor(argumentList[0], argumentList[1]);
+	} else {
+		newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]);
+	}
+
+	ValidateTypedArray(newTypedArray); // step 2
+
+	if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3
+		if (typedArrayLength(newTypedArray) < argumentList[0]) {
+			throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a
+		}
+	}
+
+	return newTypedArray; // step 4
+};
Index: frontend/node_modules/es-abstract/2016/TypedArraySpeciesCreate.js
===================================================================
--- frontend/node_modules/es-abstract/2016/TypedArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/TypedArraySpeciesCreate.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,37 @@
+'use strict';
+
+var $SyntaxError = require('es-errors/syntax');
+var $TypeError = require('es-errors/type');
+
+var whichTypedArray = require('which-typed-array');
+var availableTypedArrays = require('available-typed-arrays')();
+
+var IsArray = require('./IsArray');
+var SpeciesConstructor = require('./SpeciesConstructor');
+var TypedArrayCreate = require('./TypedArrayCreate');
+
+var getConstructor = require('../helpers/typedArrayConstructors');
+
+// https://262.ecma-international.org/7.0/#typedarray-species-create
+
+module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) {
+	if (availableTypedArrays.length === 0) {
+		throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment');
+	}
+
+	var kind = whichTypedArray(exemplar);
+	if (!kind) {
+		throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1
+	}
+	if (!IsArray(argumentList)) {
+		throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1
+	}
+
+	var defaultConstructor = getConstructor(kind); // step 2
+	if (typeof defaultConstructor !== 'function') {
+		throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!');
+	}
+	var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3
+
+	return TypedArrayCreate(constructor, argumentList); // step 4
+};
Index: frontend/node_modules/es-abstract/2016/UTF16Decode.js
===================================================================
--- frontend/node_modules/es-abstract/2016/UTF16Decode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/UTF16Decode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+// https://262.ecma-international.org/7.0/#sec-utf16decode
+
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+// https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair
+
+module.exports = function UTF16Decode(lead, trail) {
+	if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {
+		throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');
+	}
+	// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
+	return $fromCharCode(lead) + $fromCharCode(trail);
+};
Index: frontend/node_modules/es-abstract/2016/UTF16Encoding.js
===================================================================
--- frontend/node_modules/es-abstract/2016/UTF16Encoding.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/UTF16Encoding.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = require('es-errors/type');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var isCodePoint = require('../helpers/isCodePoint');
+
+// https://262.ecma-international.org/7.0/#sec-utf16encoding
+
+module.exports = function UTF16Encoding(cp) {
+	if (!isCodePoint(cp)) {
+		throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF');
+	}
+	if (cp <= 65535) {
+		return $fromCharCode(cp);
+	}
+	var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800);
+	var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00);
+	return cu1 + cu2;
+};
Index: frontend/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ValidateAndApplyPropertyDescriptor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,159 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/records/property-descriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var isPropertyKey = require('../helpers/isPropertyKey');
+var SameValue = require('./SameValue');
+
+// https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor
+// https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+	// this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+	if (typeof O !== 'undefined' && !isObject(O)) {
+		throw new $TypeError('Assertion failed: O must be undefined or an Object');
+	}
+	if (typeof extensible !== 'boolean') {
+		throw new $TypeError('Assertion failed: extensible must be a Boolean');
+	}
+	if (!isPropertyDescriptor(Desc)) {
+		throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+	}
+	if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) {
+		throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+	}
+	if (typeof O !== 'undefined' && !isPropertyKey(P)) {
+		throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+	}
+	if (typeof current === 'undefined') {
+		if (!extensible) {
+			return false;
+		}
+		if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+			if (typeof O !== 'undefined') {
+				DefineOwnProperty(
+					IsDataDescriptor,
+					SameValue,
+					FromPropertyDescriptor,
+					O,
+					P,
+					{
+						'[[Configurable]]': Desc['[[Configurable]]'],
+						'[[Enumerable]]': Desc['[[Enumerable]]'],
+						'[[Value]]': Desc['[[Value]]'],
+						'[[Writable]]': Desc['[[Writable]]']
+					}
+				);
+			}
+		} else {
+			if (!IsAccessorDescriptor(Desc)) {
+				throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+			}
+			if (typeof O !== 'undefined') {
+				return DefineOwnProperty(
+					IsDataDescriptor,
+					SameValue,
+					FromPropertyDescriptor,
+					O,
+					P,
+					Desc
+				);
+			}
+		}
+		return true;
+	}
+	if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+		return true;
+	}
+	if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+		return true; // removed by ES2017, but should still be correct
+	}
+	// "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+	if (!current['[[Configurable]]']) {
+		if (Desc['[[Configurable]]']) {
+			return false;
+		}
+		if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+			return false;
+		}
+	}
+	if (IsGenericDescriptor(Desc)) {
+		// no further validation is required.
+	} else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+		if (!current['[[Configurable]]']) {
+			return false;
+		}
+		if (IsDataDescriptor(current)) {
+			if (typeof O !== 'undefined') {
+				DefineOwnProperty(
+					IsDataDescriptor,
+					SameValue,
+					FromPropertyDescriptor,
+					O,
+					P,
+					{
+						'[[Configurable]]': current['[[Configurable]]'],
+						'[[Enumerable]]': current['[[Enumerable]]'],
+						'[[Get]]': void undefined
+					}
+				);
+			}
+		} else if (typeof O !== 'undefined') {
+			DefineOwnProperty(
+				IsDataDescriptor,
+				SameValue,
+				FromPropertyDescriptor,
+				O,
+				P,
+				{
+					'[[Configurable]]': current['[[Configurable]]'],
+					'[[Enumerable]]': current['[[Enumerable]]'],
+					'[[Value]]': void undefined
+				}
+			);
+		}
+	} else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+		if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+			if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+				return false;
+			}
+			if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+				return false;
+			}
+			return true;
+		}
+	} else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+		if (!current['[[Configurable]]']) {
+			if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+				return false;
+			}
+			if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+				return false;
+			}
+			return true;
+		}
+	} else {
+		throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+	}
+	if (typeof O !== 'undefined') {
+		return DefineOwnProperty(
+			IsDataDescriptor,
+			SameValue,
+			FromPropertyDescriptor,
+			O,
+			P,
+			Desc
+		);
+	}
+	return true;
+};
Index: frontend/node_modules/es-abstract/2016/ValidateTypedArray.js
===================================================================
--- frontend/node_modules/es-abstract/2016/ValidateTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/ValidateTypedArray.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+'use strict';
+
+var $TypeError = require('es-errors/type');
+var isObject = require('es-object-atoms/isObject');
+
+var IsDetachedBuffer = require('./IsDetachedBuffer');
+
+var isTypedArray = require('is-typed-array');
+var typedArrayBuffer = require('typed-array-buffer');
+
+// https://262.ecma-international.org/6.0/#sec-validatetypedarray
+
+module.exports = function ValidateTypedArray(O) {
+	if (!isObject(O)) {
+		throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1
+	}
+	if (!isTypedArray(O)) {
+		throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3
+	}
+
+	var buffer = typedArrayBuffer(O); // step 4
+
+	if (IsDetachedBuffer(buffer)) {
+		throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5
+	}
+
+	return buffer; // step 6
+};
Index: frontend/node_modules/es-abstract/2016/WeekDay.js
===================================================================
--- frontend/node_modules/es-abstract/2016/WeekDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/WeekDay.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+'use strict';
+
+var Day = require('./Day');
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+	return modulo(Day(t) + 4, 7);
+};
Index: frontend/node_modules/es-abstract/2016/YearFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/YearFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/YearFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('call-bound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+	// largest y such that this.TimeFromYear(y) <= t
+	return $getUTCFullYear(new $Date(t));
+};
Index: frontend/node_modules/es-abstract/2016/abs.js
===================================================================
--- frontend/node_modules/es-abstract/2016/abs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/abs.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var $abs = require('math-intrinsics/abs');
+
+// https://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function abs(x) {
+	return $abs(x);
+};
Index: frontend/node_modules/es-abstract/2016/floor.js
===================================================================
--- frontend/node_modules/es-abstract/2016/floor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/floor.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+// var modulo = require('./modulo');
+var $floor = require('math-intrinsics/floor');
+
+// http://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function floor(x) {
+	// return x - modulo(x, 1);
+	return $floor(x);
+};
Index: frontend/node_modules/es-abstract/2016/max.js
===================================================================
--- frontend/node_modules/es-abstract/2016/max.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/max.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-algorithm-conventions
+
+module.exports = require('math-intrinsics/max');
Index: frontend/node_modules/es-abstract/2016/min.js
===================================================================
--- frontend/node_modules/es-abstract/2016/min.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/min.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#sec-algorithm-conventions
+
+module.exports = require('math-intrinsics/min');
Index: frontend/node_modules/es-abstract/2016/modulo.js
===================================================================
--- frontend/node_modules/es-abstract/2016/modulo.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/modulo.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+	return mod(x, y);
+};
Index: frontend/node_modules/es-abstract/2016/msFromTime.js
===================================================================
--- frontend/node_modules/es-abstract/2016/msFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/msFromTime.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+	return modulo(t, msPerSecond);
+};
Index: frontend/node_modules/es-abstract/2016/tables/typed-array-objects.js
===================================================================
--- frontend/node_modules/es-abstract/2016/tables/typed-array-objects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/tables/typed-array-objects.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,32 @@
+'use strict';
+
+// https://262.ecma-international.org/6.0/#table-49
+
+module.exports = {
+	__proto__: null,
+	name: {
+		__proto__: null,
+		$Int8Array: 'Int8',
+		$Uint8Array: 'Uint8',
+		$Uint8ClampedArray: 'Uint8C',
+		$Int16Array: 'Int16',
+		$Uint16Array: 'Uint16',
+		$Int32Array: 'Int32',
+		$Uint32Array: 'Uint32',
+		$Float32Array: 'Float32',
+		$Float64Array: 'Float64'
+	},
+	size: {
+		__proto__: null,
+		$Int8: 1,
+		$Uint8: 1,
+		$Uint8C: 1,
+		$Int16: 2,
+		$Uint16: 2,
+		$Int32: 4,
+		$Uint32: 4,
+		$Float32: 4,
+		$Float64: 8
+	},
+	choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"'
+};
Index: frontend/node_modules/es-abstract/2016/thisBooleanValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/thisBooleanValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/thisBooleanValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+	if (typeof value === 'boolean') {
+		return value;
+	}
+
+	return $BooleanValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2016/thisNumberValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/thisNumberValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/thisNumberValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+'use strict';
+
+var callBound = require('call-bound');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+	if (typeof value === 'number') {
+		return value;
+	}
+
+	return $NumberValueOf(value);
+};
+
Index: frontend/node_modules/es-abstract/2016/thisStringValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/thisStringValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/thisStringValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,13 @@
+'use strict';
+
+var $StringValueOf = require('call-bound')('String.prototype.valueOf');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+	if (typeof value === 'string') {
+		return value;
+	}
+
+	return $StringValueOf(value);
+};
Index: frontend/node_modules/es-abstract/2016/thisTimeValue.js
===================================================================
--- frontend/node_modules/es-abstract/2016/thisTimeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/es-abstract/2016/thisTimeValue.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+'use strict';
+
+var timeValue = require('../helpers/timeValue');
+
+// https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object
+
+module.exports = function thisTimeValue(value) {
+	return timeValue(value);
+};
