;
- /**
- * Creates an error with additional properties.
- *
- * @param props - An object whose properties will be added to the returned error
- */
- (props: P): T & P & OnoError;
- /**
- * Creates an error with a formatted message and additional properties.
- *
- * @param props - An object whose properties will be added to the returned error
- * @param message - The new error message, possibly including argument placeholders
- * @param params - Optional arguments to replace the corresponding placeholders in the message
- */
- (props: P, message: string, ...params: unknown[]): T & P & OnoError;
-}
-/**
- * All error objects returned by Ono have these properties.
- */
-export interface OnoError extends ErrorPOJO {
- /**
- * Returns a JSON representation of the error, including all built-in error properties,
- * as well as properties that were dynamically added.
- */
- toJSON(): ErrorPOJO & T;
- /**
- * Returns a representation of the error for Node's `util.inspect()` method.
- *
- * @see https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects
- */
- [inspect.custom](): ErrorPOJO & T;
-}
-/**
- * An error object that doesn't inherit from the `Error` class, such as `DOMError`, `DOMException`,
- * and some third-party error types.
- */
-export interface ErrorPOJO {
- message?: string;
- stack?: string;
- name?: string;
-}
-/**
- * Any object that "looks like" an `Error` object.
- */
-export declare type ErrorLike = Error | ErrorPOJO;
-/**
- * A constructor for `ErrorLike` objects.
- */
-export declare type ErrorLikeConstructor = ErrorLikeConstructorFunction | ErrorLikeConstructorClass;
-/**
- * A constructor function for `ErrorLike` objects.
- * Constructor functions can be called without the `new` keyword.
- *
- * @example
- * throw TypeError();
- */
-export interface ErrorLikeConstructorFunction {
- readonly prototype: T;
- (): T;
-}
-/**
- * A constructor class for `ErrorLike` objects.
- * Constructor classes must be called with the `new` keyword.
- *
- * @example
- * throw new TypeError();
- */
-export interface ErrorLikeConstructorClass {
- readonly prototype: T;
- new (...args: unknown[]): T;
-}
-/**
- * Options that determine the behavior of an `Ono` instance.
- */
-export interface OnoOptions {
- /**
- * When `Ono` is used to wrap an error, this setting determines whether the inner error's message
- * is appended to the new error message.
- *
- * Defaults to `true`.
- */
- concatMessages?: boolean;
- /**
- * A function that replaces placeholders like "%s" or "%d" in error messages with values.
- * If set to `false`, then error messages will be treated as literals and no placeholder replacement will occur.
- *
- * Defaults to `utils.inspect()` in Node.js. Defaults to `Array.join()` in browsers.
- */
- format?: MessageFormatter | false;
-}
-/**
- * A function that accepts a message template and arguments to replace template parameters.
- *
- * @example
- * format("Hello, %s! You have %d unread messages.", "John", 5);
- */
-export declare type MessageFormatter = (message: string, ...args: unknown[]) => string;
diff --git a/node_modules/@jsdevtools/ono/cjs/types.js b/node_modules/@jsdevtools/ono/cjs/types.js
deleted file mode 100644
index 85670e7..0000000
--- a/node_modules/@jsdevtools/ono/cjs/types.js
+++ /dev/null
@@ -1,4 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const util_1 = require("util");
-//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/cjs/types.js.map b/node_modules/@jsdevtools/ono/cjs/types.js.map
deleted file mode 100644
index 9441ac2..0000000
--- a/node_modules/@jsdevtools/ono/cjs/types.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAAA,+BAA+B"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/constructor.d.ts b/node_modules/@jsdevtools/ono/esm/constructor.d.ts
deleted file mode 100644
index 74ae3c1..0000000
--- a/node_modules/@jsdevtools/ono/esm/constructor.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { OnoConstructor } from "./types";
-declare const constructor: OnoConstructor;
-export { constructor as Ono };
diff --git a/node_modules/@jsdevtools/ono/esm/constructor.js b/node_modules/@jsdevtools/ono/esm/constructor.js
deleted file mode 100644
index bd57bf0..0000000
--- a/node_modules/@jsdevtools/ono/esm/constructor.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import { extendError } from "./extend-error";
-import { normalizeArgs, normalizeOptions } from "./normalize";
-import { toJSON as errorToJSON } from "./to-json";
-const constructor = Ono;
-export { constructor as Ono };
-/**
- * Creates an `Ono` instance for a specifc error type.
- */
-// eslint-disable-next-line @typescript-eslint/naming-convention
-function Ono(ErrorConstructor, options) {
- options = normalizeOptions(options);
- function ono(...args) {
- let { originalError, props, message } = normalizeArgs(args, options);
- // Create a new error of the specified type
- let newError = new ErrorConstructor(message);
- // Extend the error with the properties of the original error and the `props` object
- return extendError(newError, originalError, props);
- }
- ono[Symbol.species] = ErrorConstructor;
- return ono;
-}
-/**
- * Returns an object containing all properties of the given Error object,
- * which can be used with `JSON.stringify()`.
- */
-Ono.toJSON = function toJSON(error) {
- return errorToJSON.call(error);
-};
-/**
- * Extends the given Error object with enhanced Ono functionality, such as nested stack traces,
- * additional properties, and improved support for `JSON.stringify()`.
- */
-Ono.extend = function extend(error, originalError, props) {
- if (props || originalError instanceof Error) {
- return extendError(error, originalError, props);
- }
- else if (originalError) {
- return extendError(error, undefined, originalError);
- }
- else {
- return extendError(error);
- }
-};
-//# sourceMappingURL=constructor.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/constructor.js.map b/node_modules/@jsdevtools/ono/esm/constructor.js.map
deleted file mode 100644
index 167f010..0000000
--- a/node_modules/@jsdevtools/ono/esm/constructor.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"constructor.js","sourceRoot":"","sources":["../src/constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAGlD,MAAM,WAAW,GAAG,GAAqB,CAAC;AAC1C,OAAO,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC;AAE9B;;GAEG;AACH,gEAAgE;AAChE,SAAS,GAAG,CAAsB,gBAAyC,EAAE,OAAoB;IAC/F,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEpC,SAAS,GAAG,CAAwC,GAAG,IAAe;QACpE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,aAAa,CAAO,IAAI,EAAE,OAAQ,CAAC,CAAC;QAE5E,2CAA2C;QAC3C,IAAI,QAAQ,GAAG,IAAK,gBAAiD,CAAC,OAAO,CAAC,CAAC;QAE/E,oFAAoF;QACpF,OAAO,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAgB;IAC3C,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,GAAG,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAgB,EAAE,aAAyB,EAAE,KAAc;IACtF,IAAI,KAAK,IAAI,aAAa,YAAY,KAAK,EAAE;QAC3C,OAAO,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;KACjD;SACI,IAAI,aAAa,EAAE;QACtB,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;KACrD;SACI;QACH,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B;AACH,CAAC,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/extend-error.d.ts b/node_modules/@jsdevtools/ono/esm/extend-error.d.ts
deleted file mode 100644
index a627b69..0000000
--- a/node_modules/@jsdevtools/ono/esm/extend-error.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ErrorLike, OnoError } from "./types";
-/**
- * Extends the new error with the properties of the original error and the `props` object.
- *
- * @param newError - The error object to extend
- * @param originalError - The original error object, if any
- * @param props - Additional properties to add, if any
- */
-export declare function extendError(error: T, originalError?: E, props?: P): T & E & P & OnoError;
diff --git a/node_modules/@jsdevtools/ono/esm/extend-error.js b/node_modules/@jsdevtools/ono/esm/extend-error.js
deleted file mode 100644
index 651a91d..0000000
--- a/node_modules/@jsdevtools/ono/esm/extend-error.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import { addInspectMethod } from "./isomorphic.node";
-import { isLazyStack, isWritableStack, joinStacks, lazyJoinStacks } from "./stack";
-import { getDeepKeys, toJSON } from "./to-json";
-const protectedProps = ["name", "message", "stack"];
-/**
- * Extends the new error with the properties of the original error and the `props` object.
- *
- * @param newError - The error object to extend
- * @param originalError - The original error object, if any
- * @param props - Additional properties to add, if any
- */
-export function extendError(error, originalError, props) {
- let onoError = error;
- extendStack(onoError, originalError);
- // Copy properties from the original error
- if (originalError && typeof originalError === "object") {
- mergeErrors(onoError, originalError);
- }
- // The default `toJSON` method doesn't output props like `name`, `message`, `stack`, etc.
- // So replace it with one that outputs every property of the error.
- onoError.toJSON = toJSON;
- // On Node.js, add support for the `util.inspect()` method
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
- if (addInspectMethod) {
- addInspectMethod(onoError);
- }
- // Finally, copy custom properties that were specified by the user.
- // These props OVERWRITE any previous props
- if (props && typeof props === "object") {
- Object.assign(onoError, props);
- }
- return onoError;
-}
-/**
- * Extend the error stack to include its cause
- */
-function extendStack(newError, originalError) {
- let stackProp = Object.getOwnPropertyDescriptor(newError, "stack");
- if (isLazyStack(stackProp)) {
- lazyJoinStacks(stackProp, newError, originalError);
- }
- else if (isWritableStack(stackProp)) {
- newError.stack = joinStacks(newError, originalError);
- }
-}
-/**
- * Merges properties of the original error with the new error.
- *
- * @param newError - The error object to extend
- * @param originalError - The original error object, if any
- */
-function mergeErrors(newError, originalError) {
- // Get the original error's keys
- // NOTE: We specifically exclude properties that we have already set on the new error.
- // This is _especially_ important for the `stack` property, because this property has
- // a lazy getter in some environments
- let keys = getDeepKeys(originalError, protectedProps);
- // HACK: We have to cast the errors to `any` so we can use symbol indexers.
- // see https://github.com/Microsoft/TypeScript/issues/1863
- let _newError = newError;
- let _originalError = originalError;
- for (let key of keys) {
- if (_newError[key] === undefined) {
- try {
- _newError[key] = _originalError[key];
- }
- catch (e) {
- // This property is read-only, so it can't be copied
- }
- }
- }
-}
-//# sourceMappingURL=extend-error.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/extend-error.js.map b/node_modules/@jsdevtools/ono/esm/extend-error.js.map
deleted file mode 100644
index 29b53ad..0000000
--- a/node_modules/@jsdevtools/ono/esm/extend-error.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"extend-error.js","sourceRoot":"","sources":["../src/extend-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,cAAc,GAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAA6D,KAAQ,EAAE,aAAiB,EAAE,KAAS;IAC5H,IAAI,QAAQ,GAAG,KAAmD,CAAC;IAEnE,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAErC,0CAA0C;IAC1C,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;QACtD,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;KACtC;IAED,yFAAyF;IACzF,mEAAmE;IACnE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IAEzB,0DAA0D;IAC1D,uEAAuE;IACvE,IAAI,gBAAgB,EAAE;QACpB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAC5B;IAED,mEAAmE;IACnE,2CAA2C;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACtC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAChC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAAmB,EAAE,aAAyB;IACjE,IAAI,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE;QAC1B,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;KACpD;SACI,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE;QACnC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;KACtD;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,QAAmB,EAAE,aAAwB;IAChE,gCAAgC;IAChC,sFAAsF;IACtF,qFAAqF;IACrF,qCAAqC;IACrC,IAAI,IAAI,GAAG,WAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAEtD,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,SAAS,GAAG,QAAe,CAAC;IAChC,IAAI,cAAc,GAAG,aAAoB,CAAC;IAE1C,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;QACpB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAChC,IAAI;gBACF,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;aACtC;YACD,OAAO,CAAC,EAAE;gBACR,oDAAoD;aACrD;SACF;KACF;AACH,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/index.d.ts b/node_modules/@jsdevtools/ono/esm/index.d.ts
deleted file mode 100644
index e7279db..0000000
--- a/node_modules/@jsdevtools/ono/esm/index.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ono } from "./singleton";
-export { Ono } from "./constructor";
-export * from "./types";
-export { ono };
-export default ono;
diff --git a/node_modules/@jsdevtools/ono/esm/index.js b/node_modules/@jsdevtools/ono/esm/index.js
deleted file mode 100644
index 7e6b469..0000000
--- a/node_modules/@jsdevtools/ono/esm/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* eslint-env commonjs */
-import { ono } from "./singleton";
-export { Ono } from "./constructor";
-export * from "./types";
-export { ono };
-export default ono;
-// CommonJS default export hack
-if (typeof module === "object" && typeof module.exports === "object") {
- module.exports = Object.assign(module.exports.default, module.exports);
-}
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/index.js.map b/node_modules/@jsdevtools/ono/esm/index.js.map
deleted file mode 100644
index 3865f8b..0000000
--- a/node_modules/@jsdevtools/ono/esm/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,CAAC;AAEf,eAAe,GAAG,CAAC;AAEnB,+BAA+B;AAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;IACpE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;CACxE"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.d.ts b/node_modules/@jsdevtools/ono/esm/isomorphic.browser.d.ts
deleted file mode 100644
index e5d7776..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.d.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Ono supports custom formatters for error messages. In Node.js, it defaults
- * to the `util.format()` function. In browsers, it defaults to `Array.join()`.
- *
- * The Node.js functionality can be used in a web browser via a polyfill,
- * such as "format-util".
- *
- * @see https://github.com/tmpfs/format-util
- */
-export declare const format = false;
-/**
- * The `util.inspect()` functionality only applies to Node.js.
- * We return the constant `false` here so that the Node-specific code gets removed by tree-shaking.
- */
-export declare const addInspectMethod = false;
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js b/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js
deleted file mode 100644
index c863c87..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Ono supports custom formatters for error messages. In Node.js, it defaults
- * to the `util.format()` function. In browsers, it defaults to `Array.join()`.
- *
- * The Node.js functionality can be used in a web browser via a polyfill,
- * such as "format-util".
- *
- * @see https://github.com/tmpfs/format-util
- */
-export const format = false;
-/**
- * The `util.inspect()` functionality only applies to Node.js.
- * We return the constant `false` here so that the Node-specific code gets removed by tree-shaking.
- */
-export const addInspectMethod = false;
-//# sourceMappingURL=isomorphic.browser.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js.map b/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js.map
deleted file mode 100644
index 6433a63..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.browser.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"isomorphic.browser.js","sourceRoot":"","sources":["../src/isomorphic.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.node.d.ts b/node_modules/@jsdevtools/ono/esm/isomorphic.node.d.ts
deleted file mode 100644
index e0ea2c6..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.node.d.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-///
-import * as util from "util";
-import { OnoError } from "./types";
-/**
- * Ono supports Node's `util.format()` formatting for error messages.
- *
- * @see https://nodejs.org/api/util.html#util_util_format_format_args
- */
-export declare const format: typeof util.format;
-/**
- * Adds an `inspect()` method to support Node's `util.inspect()` function.
- *
- * @see https://nodejs.org/api/util.html#util_util_inspect_custom
- */
-export declare function addInspectMethod(newError: OnoError): void;
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.node.js b/node_modules/@jsdevtools/ono/esm/isomorphic.node.js
deleted file mode 100644
index 718f1f4..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.node.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import * as util from "util";
-import { getDeepKeys } from "./to-json";
-// The `inspect()` method is actually a Symbol, not a string key.
-// https://nodejs.org/api/util.html#util_util_inspect_custom
-const inspectMethod = util.inspect.custom || Symbol.for("nodejs.util.inspect.custom");
-/**
- * Ono supports Node's `util.format()` formatting for error messages.
- *
- * @see https://nodejs.org/api/util.html#util_util_format_format_args
- */
-export const format = util.format;
-/**
- * Adds an `inspect()` method to support Node's `util.inspect()` function.
- *
- * @see https://nodejs.org/api/util.html#util_util_inspect_custom
- */
-export function addInspectMethod(newError) {
- // @ts-expect-error - TypeScript doesn't support symbol indexers
- newError[inspectMethod] = inspect;
-}
-/**
- * Returns a representation of the error for Node's `util.inspect()` method.
- *
- * @see https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects
- */
-function inspect() {
- // HACK: We have to cast the objects to `any` so we can use symbol indexers.
- // see https://github.com/Microsoft/TypeScript/issues/1863
- let pojo = {};
- let error = this;
- for (let key of getDeepKeys(error)) {
- let value = error[key];
- pojo[key] = value;
- }
- // Don't include the `inspect()` method on the output object,
- // otherwise it will cause `util.inspect()` to go into an infinite loop
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
- delete pojo[inspectMethod];
- return pojo;
-}
-//# sourceMappingURL=isomorphic.node.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/isomorphic.node.js.map b/node_modules/@jsdevtools/ono/esm/isomorphic.node.js.map
deleted file mode 100644
index b26cfa2..0000000
--- a/node_modules/@jsdevtools/ono/esm/isomorphic.node.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"isomorphic.node.js","sourceRoot":"","sources":["../src/isomorphic.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,iEAAiE;AACjE,4DAA4D;AAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAEtF;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAI,QAAqB;IACvD,gEAAgE;IAChE,QAAQ,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO;IACd,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,IAAI,GAAQ,EAAE,CAAC;IACnB,IAAI,KAAK,GAAG,IAAW,CAAC;IAExB,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QAClC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACnB;IAED,6DAA6D;IAC7D,uEAAuE;IACvE,gEAAgE;IAChE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3B,OAAO,IAAqB,CAAC;AAC/B,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/normalize.d.ts b/node_modules/@jsdevtools/ono/esm/normalize.d.ts
deleted file mode 100644
index e5d14d8..0000000
--- a/node_modules/@jsdevtools/ono/esm/normalize.d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { ErrorLike, OnoOptions } from "./types";
-/**
- * Normalizes Ono options, accounting for defaults and optional options.
- */
-export declare function normalizeOptions(options?: OnoOptions): OnoOptions;
-/**
- * Normalizes the Ono arguments, accounting for defaults, options, and optional arguments.
- */
-export declare function normalizeArgs(args: unknown[], options: OnoOptions): {
- originalError: E | undefined;
- props: P | undefined;
- message: string;
-};
diff --git a/node_modules/@jsdevtools/ono/esm/normalize.js b/node_modules/@jsdevtools/ono/esm/normalize.js
deleted file mode 100644
index 5ac45f3..0000000
--- a/node_modules/@jsdevtools/ono/esm/normalize.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import { format } from "./isomorphic.node";
-/**
- * Normalizes Ono options, accounting for defaults and optional options.
- */
-export function normalizeOptions(options) {
- options = options || {};
- return {
- concatMessages: options.concatMessages === undefined ? true : Boolean(options.concatMessages),
- format: options.format === undefined ? format
- : (typeof options.format === "function" ? options.format : false),
- };
-}
-/**
- * Normalizes the Ono arguments, accounting for defaults, options, and optional arguments.
- */
-export function normalizeArgs(args, options) {
- let originalError;
- let props;
- let formatArgs;
- let message = "";
- // Determine which arguments were actually specified
- if (typeof args[0] === "string") {
- formatArgs = args;
- }
- else if (typeof args[1] === "string") {
- if (args[0] instanceof Error) {
- originalError = args[0];
- }
- else {
- props = args[0];
- }
- formatArgs = args.slice(1);
- }
- else {
- originalError = args[0];
- props = args[1];
- formatArgs = args.slice(2);
- }
- // If there are any format arguments, then format the error message
- if (formatArgs.length > 0) {
- if (options.format) {
- message = options.format.apply(undefined, formatArgs);
- }
- else {
- message = formatArgs.join(" ");
- }
- }
- if (options.concatMessages && originalError && originalError.message) {
- // The inner-error's message will be added to the new message
- message += (message ? " \n" : "") + originalError.message;
- }
- return { originalError, props, message };
-}
-//# sourceMappingURL=normalize.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/normalize.js.map b/node_modules/@jsdevtools/ono/esm/normalize.js.map
deleted file mode 100644
index d66e58e..0000000
--- a/node_modules/@jsdevtools/ono/esm/normalize.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IACxB,OAAO;QACL,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7F,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM;YAC3C,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAwC,IAAe,EAAE,OAAmB;IACvG,IAAI,aAA4B,CAAC;IACjC,IAAI,KAAoB,CAAC;IACzB,IAAI,UAAqB,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,oDAAoD;IACpD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QAC/B,UAAU,GAAG,IAAI,CAAC;KACnB;SACI,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QACpC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;YAC5B,aAAa,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;SAC9B;aACI;YACH,KAAK,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;SACtB;QACD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5B;SACI;QACH,aAAa,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;QAC7B,KAAK,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;QACrB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC5B;IAED,mEAAmE;IACnE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QACzB,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SACvD;aACI;YACH,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChC;KACF;IAED,IAAI,OAAO,CAAC,cAAc,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,EAAE;QACpE,6DAA6D;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;KAC3D;IAED,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/singleton.d.ts b/node_modules/@jsdevtools/ono/esm/singleton.d.ts
deleted file mode 100644
index f9ed53d..0000000
--- a/node_modules/@jsdevtools/ono/esm/singleton.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { OnoSingleton } from "./types";
-declare const singleton: OnoSingleton;
-export { singleton as ono };
diff --git a/node_modules/@jsdevtools/ono/esm/singleton.js b/node_modules/@jsdevtools/ono/esm/singleton.js
deleted file mode 100644
index 950db9d..0000000
--- a/node_modules/@jsdevtools/ono/esm/singleton.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Ono as OnoConstructor } from "./constructor";
-const singleton = ono;
-export { singleton as ono };
-ono.error = new OnoConstructor(Error);
-ono.eval = new OnoConstructor(EvalError);
-ono.range = new OnoConstructor(RangeError);
-ono.reference = new OnoConstructor(ReferenceError);
-ono.syntax = new OnoConstructor(SyntaxError);
-ono.type = new OnoConstructor(TypeError);
-ono.uri = new OnoConstructor(URIError);
-const onoMap = ono;
-/**
- * Creates a new error with the specified message, properties, and/or inner error.
- * If an inner error is provided, then the new error will match its type, if possible.
- */
-function ono(...args) {
- let originalError = args[0];
- // Is the first argument an Error-like object?
- if (typeof originalError === "object" && typeof originalError.name === "string") {
- // Try to find an Ono singleton method that matches this error type
- for (let typedOno of Object.values(onoMap)) {
- if (typeof typedOno === "function" && typedOno.name === "ono") {
- let species = typedOno[Symbol.species];
- if (species && species !== Error && (originalError instanceof species || originalError.name === species.name)) {
- // Create an error of the same type
- return typedOno.apply(undefined, args);
- }
- }
- }
- }
- // By default, create a base Error object
- return ono.error.apply(undefined, args);
-}
-//# sourceMappingURL=singleton.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/singleton.js.map b/node_modules/@jsdevtools/ono/esm/singleton.js.map
deleted file mode 100644
index 751dba1..0000000
--- a/node_modules/@jsdevtools/ono/esm/singleton.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"singleton.js","sourceRoot":"","sources":["../src/singleton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,SAAS,GAAG,GAAmB,CAAC;AACtC,OAAO,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC;AAE5B,GAAG,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AACtC,GAAG,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACzC,GAAG,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;AAC3C,GAAG,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;AACnD,GAAG,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;AAC7C,GAAG,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACzC,GAAG,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEvC,MAAM,MAAM,GAAG,GAA4C,CAAC;AAE5D;;;GAGG;AACH,SAAS,GAAG,CAAwC,GAAG,IAAe;IACpE,IAAI,aAAa,GAAG,IAAI,CAAC,CAAC,CAA0B,CAAC;IAErD,8CAA8C;IAC9C,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE;QAE/E,mEAAmE;QACnE,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC1C,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC7D,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEvC,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,aAAa,YAAY,OAAO,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC7G,mCAAmC;oBACnC,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBACxC;aACF;SACF;KACF;IAED,yCAAyC;IACzC,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/stack.d.ts b/node_modules/@jsdevtools/ono/esm/stack.d.ts
deleted file mode 100644
index 2448780..0000000
--- a/node_modules/@jsdevtools/ono/esm/stack.d.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { ErrorLike } from "./types";
-/**
- * The Property Descriptor of a lazily-computed `stack` property.
- */
-interface LazyStack {
- configurable: true;
- /**
- * Lazily computes the error's stack trace.
- */
- get(): string | undefined;
-}
-/**
- * Is the property lazily computed?
- */
-export declare function isLazyStack(stackProp: PropertyDescriptor | undefined): stackProp is LazyStack;
-/**
- * Is the stack property writable?
- */
-export declare function isWritableStack(stackProp: PropertyDescriptor | undefined): boolean;
-/**
- * Appends the original `Error.stack` property to the new Error's stack.
- */
-export declare function joinStacks(newError: ErrorLike, originalError?: ErrorLike): string | undefined;
-/**
- * Calls `joinStacks` lazily, when the `Error.stack` property is accessed.
- */
-export declare function lazyJoinStacks(lazyStack: LazyStack, newError: ErrorLike, originalError?: ErrorLike): void;
-export {};
diff --git a/node_modules/@jsdevtools/ono/esm/stack.js b/node_modules/@jsdevtools/ono/esm/stack.js
deleted file mode 100644
index 6f1a6b7..0000000
--- a/node_modules/@jsdevtools/ono/esm/stack.js
+++ /dev/null
@@ -1,95 +0,0 @@
-const newline = /\r?\n/;
-const onoCall = /\bono[ @]/;
-/**
- * Is the property lazily computed?
- */
-export function isLazyStack(stackProp) {
- return Boolean(stackProp &&
- stackProp.configurable &&
- typeof stackProp.get === "function");
-}
-/**
- * Is the stack property writable?
- */
-export function isWritableStack(stackProp) {
- return Boolean(
- // If there is no stack property, then it's writable, since assigning it will create it
- !stackProp ||
- stackProp.writable ||
- typeof stackProp.set === "function");
-}
-/**
- * Appends the original `Error.stack` property to the new Error's stack.
- */
-export function joinStacks(newError, originalError) {
- let newStack = popStack(newError.stack);
- let originalStack = originalError ? originalError.stack : undefined;
- if (newStack && originalStack) {
- return newStack + "\n\n" + originalStack;
- }
- else {
- return newStack || originalStack;
- }
-}
-/**
- * Calls `joinStacks` lazily, when the `Error.stack` property is accessed.
- */
-export function lazyJoinStacks(lazyStack, newError, originalError) {
- if (originalError) {
- Object.defineProperty(newError, "stack", {
- get: () => {
- let newStack = lazyStack.get.apply(newError);
- return joinStacks({ stack: newStack }, originalError);
- },
- enumerable: false,
- configurable: true
- });
- }
- else {
- lazyPopStack(newError, lazyStack);
- }
-}
-/**
- * Removes Ono from the stack, so that the stack starts at the original error location
- */
-function popStack(stack) {
- if (stack) {
- let lines = stack.split(newline);
- // Find the Ono call(s) in the stack, and remove them
- let onoStart;
- for (let i = 0; i < lines.length; i++) {
- let line = lines[i];
- if (onoCall.test(line)) {
- if (onoStart === undefined) {
- // We found the first Ono call in the stack trace.
- // There may be other subsequent Ono calls as well.
- onoStart = i;
- }
- }
- else if (onoStart !== undefined) {
- // We found the first non-Ono call after one or more Ono calls.
- // So remove the Ono call lines from the stack trace
- lines.splice(onoStart, i - onoStart);
- break;
- }
- }
- if (lines.length > 0) {
- return lines.join("\n");
- }
- }
- // If we get here, then the stack doesn't contain a call to `ono`.
- // This may be due to minification or some optimization of the JS engine.
- // So just return the stack as-is.
- return stack;
-}
-/**
- * Calls `popStack` lazily, when the `Error.stack` property is accessed.
- */
-function lazyPopStack(error, lazyStack) {
- Object.defineProperty(error, "stack", {
- get: () => popStack(lazyStack.get.apply(error)),
- enumerable: false,
- configurable: true
- });
-}
-//# sourceMappingURL=stack.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/stack.js.map b/node_modules/@jsdevtools/ono/esm/stack.js.map
deleted file mode 100644
index fabf4aa..0000000
--- a/node_modules/@jsdevtools/ono/esm/stack.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/to-json.d.ts b/node_modules/@jsdevtools/ono/esm/to-json.d.ts
deleted file mode 100644
index 5c06567..0000000
--- a/node_modules/@jsdevtools/ono/esm/to-json.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { ErrorLike, ErrorPOJO } from "./types";
-/**
- * Custom JSON serializer for Error objects.
- * Returns all built-in error properties, as well as extended properties.
- */
-export declare function toJSON(this: E): ErrorPOJO & E;
-/**
- * Returns own, inherited, enumerable, non-enumerable, string, and symbol keys of `obj`.
- * Does NOT return members of the base Object prototype, or the specified omitted keys.
- */
-export declare function getDeepKeys(obj: object, omit?: Array): Set;
diff --git a/node_modules/@jsdevtools/ono/esm/to-json.js b/node_modules/@jsdevtools/ono/esm/to-json.js
deleted file mode 100644
index 5ebf0e8..0000000
--- a/node_modules/@jsdevtools/ono/esm/to-json.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const nonJsonTypes = ["function", "symbol", "undefined"];
-const protectedProps = ["constructor", "prototype", "__proto__"];
-const objectPrototype = Object.getPrototypeOf({});
-/**
- * Custom JSON serializer for Error objects.
- * Returns all built-in error properties, as well as extended properties.
- */
-export function toJSON() {
- // HACK: We have to cast the objects to `any` so we can use symbol indexers.
- // see https://github.com/Microsoft/TypeScript/issues/1863
- let pojo = {};
- let error = this;
- for (let key of getDeepKeys(error)) {
- if (typeof key === "string") {
- let value = error[key];
- let type = typeof value;
- if (!nonJsonTypes.includes(type)) {
- pojo[key] = value;
- }
- }
- }
- return pojo;
-}
-/**
- * Returns own, inherited, enumerable, non-enumerable, string, and symbol keys of `obj`.
- * Does NOT return members of the base Object prototype, or the specified omitted keys.
- */
-export function getDeepKeys(obj, omit = []) {
- let keys = [];
- // Crawl the prototype chain, finding all the string and symbol keys
- while (obj && obj !== objectPrototype) {
- keys = keys.concat(Object.getOwnPropertyNames(obj), Object.getOwnPropertySymbols(obj));
- obj = Object.getPrototypeOf(obj);
- }
- // De-duplicate the list of keys
- let uniqueKeys = new Set(keys);
- // Remove any omitted keys
- for (let key of omit.concat(protectedProps)) {
- uniqueKeys.delete(key);
- }
- return uniqueKeys;
-}
-//# sourceMappingURL=to-json.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/to-json.js.map b/node_modules/@jsdevtools/ono/esm/to-json.js.map
deleted file mode 100644
index f5dcdc1..0000000
--- a/node_modules/@jsdevtools/ono/esm/to-json.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"to-json.js","sourceRoot":"","sources":["../src/to-json.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AACzD,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACjE,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,IAAI,GAAQ,EAAE,CAAC;IACnB,IAAI,KAAK,GAAG,IAAW,CAAC;IAExB,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,IAAI,GAAG,OAAO,KAAK,CAAC;YAExB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACnB;SACF;KACF;IAED,OAAO,IAAqB,CAAC;AAC/B,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAA+B,EAAE;IACxE,IAAI,IAAI,GAA2B,EAAE,CAAC;IAEtC,oEAAoE;IACpE,OAAO,GAAG,IAAI,GAAG,KAAK,eAAe,EAAE;QACrC,IAAI,GAAG,IAAI,CAAC,MAAM,CAChB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAC/B,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAClC,CAAC;QACF,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAW,CAAC;KAC5C;IAED,gCAAgC;IAChC,IAAI,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAE/B,0BAA0B;IAC1B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;QAC3C,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/types.d.ts b/node_modules/@jsdevtools/ono/esm/types.d.ts
deleted file mode 100644
index d5ce8e0..0000000
--- a/node_modules/@jsdevtools/ono/esm/types.d.ts
+++ /dev/null
@@ -1,201 +0,0 @@
-///
-import { inspect } from "util";
-/**
- * The default export of the "ono" module.
- */
-export interface OnoSingleton extends Ono {
- error: Ono;
- eval: Ono;
- range: Ono;
- reference: Ono;
- syntax: Ono;
- type: Ono;
- uri: Ono;
-}
-/**
- * Creates an `Ono` instance for a specifc error type.
- */
-export interface OnoConstructor {
- (constructor: ErrorLikeConstructor, options?: OnoOptions): Ono;
- new (constructor: ErrorLikeConstructor, options?: OnoOptions): Ono;
- /**
- * Returns an object containing all properties of the given Error object,
- * which can be used with `JSON.stringify()`.
- */
- toJSON(error: E): ErrorPOJO & E;
- /**
- * Extends the given Error object with enhanced Ono functionality, such as improved support for
- * `JSON.stringify()`.
- *
- * @param error - The error object to extend. This object instance will be modified and returned.
- */
- extend(error: T): T & OnoError;
- /**
- * Extends the given Error object with enhanced Ono functionality, such as additional properties
- * and improved support for `JSON.stringify()`.
- *
- * @param error - The error object to extend. This object instance will be modified and returned.
- * @param props - An object whose properties will be added to the error
- */
- extend(error: T, props?: P): T & P & OnoError;
- /**
- * Extends the given Error object with enhanced Ono functionality, such as nested stack traces
- * and improved support for `JSON.stringify()`.
- *
- * @param error - The error object to extend. This object instance will be modified and returned.
- * @param originalError - The original error. This error's stack trace will be added to the error's stack trace.
- */
- extend(error: T, originalError?: E): T & E & OnoError;
- /**
- * Extends the given Error object with enhanced Ono functionality, such as nested stack traces,
- * additional properties, and improved support for `JSON.stringify()`.
- *
- * @param error - The error object to extend. This object instance will be modified and returned.
- * @param originalError - The original error. This error's stack trace will be added to the error's stack trace.
- * @param props - An object whose properties will be added to the error
- */
- extend(error: T, originalError?: E, props?: P): T & E & P & OnoError;
-}
-/**
- * An `Ono` is a function that creates errors of a specific type.
- */
-export interface Ono {
- /**
- * The type of Error that this `Ono` function produces.
- */
- readonly [Symbol.species]: ErrorLikeConstructor;
- /**
- * Creates a new error with the message, stack trace, and properties of another error.
- *
- * @param error - The original error
- */
- (error: E): T & E & OnoError;
- /**
- * Creates a new error with the message, stack trace, and properties of another error,
- * as well as aditional properties.
- *
- * @param error - The original error
- * @param props - An object whose properties will be added to the returned error
- */
- (error: E, props: P): T & E & P & OnoError;
- /**
- * Creates a new error with a formatted message and the stack trace and properties of another error.
- *
- * @param error - The original error
- * @param message - The new error message, possibly including argument placeholders
- * @param params - Optional arguments to replace the corresponding placeholders in the message
- */
- (error: E, message: string, ...params: unknown[]): T & E & OnoError;
- /**
- * Creates a new error with a formatted message and the stack trace and properties of another error,
- * as well as additional properties.
- *
- * @param error - The original error
- * @param props - An object whose properties will be added to the returned error
- * @param message - The new error message, possibly including argument placeholders
- * @param params - Optional arguments to replace the corresponding placeholders in the message
- */
- (error: E, props: P, message: string, ...params: unknown[]): T & E & P & OnoError;
- /**
- * Creates an error with a formatted message.
- *
- * @param message - The new error message, possibly including argument placeholders
- * @param params - Optional arguments to replace the corresponding placeholders in the message
- */
- (message: string, ...params: unknown[]): T & OnoError;
- /**
- * Creates an error with additional properties.
- *
- * @param props - An object whose properties will be added to the returned error
- */
- (props: P): T & P & OnoError;
- /**
- * Creates an error with a formatted message and additional properties.
- *
- * @param props - An object whose properties will be added to the returned error
- * @param message - The new error message, possibly including argument placeholders
- * @param params - Optional arguments to replace the corresponding placeholders in the message
- */
- (props: P, message: string, ...params: unknown[]): T & P & OnoError;
-}
-/**
- * All error objects returned by Ono have these properties.
- */
-export interface OnoError extends ErrorPOJO {
- /**
- * Returns a JSON representation of the error, including all built-in error properties,
- * as well as properties that were dynamically added.
- */
- toJSON(): ErrorPOJO & T;
- /**
- * Returns a representation of the error for Node's `util.inspect()` method.
- *
- * @see https://nodejs.org/api/util.html#util_custom_inspection_functions_on_objects
- */
- [inspect.custom](): ErrorPOJO & T;
-}
-/**
- * An error object that doesn't inherit from the `Error` class, such as `DOMError`, `DOMException`,
- * and some third-party error types.
- */
-export interface ErrorPOJO {
- message?: string;
- stack?: string;
- name?: string;
-}
-/**
- * Any object that "looks like" an `Error` object.
- */
-export declare type ErrorLike = Error | ErrorPOJO;
-/**
- * A constructor for `ErrorLike` objects.
- */
-export declare type ErrorLikeConstructor = ErrorLikeConstructorFunction | ErrorLikeConstructorClass;
-/**
- * A constructor function for `ErrorLike` objects.
- * Constructor functions can be called without the `new` keyword.
- *
- * @example
- * throw TypeError();
- */
-export interface ErrorLikeConstructorFunction {
- readonly prototype: T;
- (): T;
-}
-/**
- * A constructor class for `ErrorLike` objects.
- * Constructor classes must be called with the `new` keyword.
- *
- * @example
- * throw new TypeError();
- */
-export interface ErrorLikeConstructorClass {
- readonly prototype: T;
- new (...args: unknown[]): T;
-}
-/**
- * Options that determine the behavior of an `Ono` instance.
- */
-export interface OnoOptions {
- /**
- * When `Ono` is used to wrap an error, this setting determines whether the inner error's message
- * is appended to the new error message.
- *
- * Defaults to `true`.
- */
- concatMessages?: boolean;
- /**
- * A function that replaces placeholders like "%s" or "%d" in error messages with values.
- * If set to `false`, then error messages will be treated as literals and no placeholder replacement will occur.
- *
- * Defaults to `utils.inspect()` in Node.js. Defaults to `Array.join()` in browsers.
- */
- format?: MessageFormatter | false;
-}
-/**
- * A function that accepts a message template and arguments to replace template parameters.
- *
- * @example
- * format("Hello, %s! You have %d unread messages.", "John", 5);
- */
-export declare type MessageFormatter = (message: string, ...args: unknown[]) => string;
diff --git a/node_modules/@jsdevtools/ono/esm/types.js b/node_modules/@jsdevtools/ono/esm/types.js
deleted file mode 100644
index e37d5cd..0000000
--- a/node_modules/@jsdevtools/ono/esm/types.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import { inspect } from "util";
-//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/esm/types.js.map b/node_modules/@jsdevtools/ono/esm/types.js.map
deleted file mode 100644
index 1dbee15..0000000
--- a/node_modules/@jsdevtools/ono/esm/types.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC"}
\ No newline at end of file
diff --git a/node_modules/@jsdevtools/ono/package.json b/node_modules/@jsdevtools/ono/package.json
deleted file mode 100644
index a5db860..0000000
--- a/node_modules/@jsdevtools/ono/package.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "name": "@jsdevtools/ono",
- "version": "7.1.3",
- "description": "Throw better errors.",
- "keywords": [
- "throw",
- "error",
- "errors",
- "exception",
- "printf",
- "format",
- "wrap",
- "inner",
- "original",
- "stack",
- "properties"
- ],
- "author": {
- "name": "James Messinger",
- "url": "https://jamesmessinger.com"
- },
- "license": "MIT",
- "homepage": "https://jstools.dev/ono",
- "repository": {
- "type": "git",
- "url": "https://github.com/JS-DevTools/ono.git"
- },
- "main": "cjs/index.js",
- "module": "esm/index.js",
- "typings": "esm/index.d.ts",
- "browser": {
- "./cjs/isomorphic.node.js": "./cjs/isomorphic.browser.js",
- "./esm/isomorphic.node.js": "./esm/isomorphic.browser.js"
- },
- "files": [
- "cjs",
- "esm"
- ],
- "scripts": {
- "clean": "shx rm -rf .nyc_output coverage cjs esm",
- "lint": "eslint src test",
- "build": "npm run build:cjs && npm run build:esm",
- "build:esm": "tsc",
- "build:cjs": "tsc --module commonjs --outDir cjs",
- "test": "npm run test:node && npm run test:typescript && npm run test:browser && npm run lint",
- "test:node": "mocha",
- "test:browser": "karma start --single-run",
- "test:typescript": "tsc --noEmit test/specs/typescript.spec.ts",
- "coverage": "npm run coverage:node && npm run coverage:browser",
- "coverage:node": "nyc node_modules/mocha/bin/mocha",
- "coverage:browser": "npm run test:browser -- --coverage",
- "upgrade": "npm-check -u && npm audit fix",
- "bump": "bump --tag --push --all",
- "release": "npm run upgrade && npm run clean && npm run build && npm test && npm run bump"
- },
- "devDependencies": {
- "@babel/polyfill": "^7.10.4",
- "@jsdevtools/eslint-config": "^1.0.0",
- "@jsdevtools/host-environment": "^2.0.3",
- "@jsdevtools/karma-config": "^3.1.6",
- "@jsdevtools/version-bump-prompt": "^6.0.3",
- "@types/node": "^14.0.19",
- "chai": "^4.2.0",
- "eslint": "^7.4.0",
- "karma": "^5.1.0",
- "karma-cli": "^2.0.0",
- "mocha": "^8.0.1",
- "npm-check": "^5.9.2",
- "nyc": "^15.1.0",
- "shx": "^0.3.2",
- "typescript": "^3.9.6"
- },
- "dependencies": {}
-}
diff --git a/node_modules/@scarf/scarf/LICENSE b/node_modules/@scarf/scarf/LICENSE
deleted file mode 100644
index 584253b..0000000
--- a/node_modules/@scarf/scarf/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2020 Scarf Systems, Inc.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/node_modules/@scarf/scarf/README.md b/node_modules/@scarf/scarf/README.md
deleted file mode 100644
index 3dda84f..0000000
--- a/node_modules/@scarf/scarf/README.md
+++ /dev/null
@@ -1,198 +0,0 @@
-# scarf-js
-
-
-[](https://badge.fury.io/js/%40scarf%2Fscarf)
-
-
-
-
-
-Scarf is like Google Analytics for your npm packages. By sending some basic
-details after installation, this package can help you can gain insight into how
-your packages are used and by which companies. Scarf aims to help open-source developers
-fund their work when it is used commercially.
-
-To read more about why we wrote this library, check out [this post](https://github.com/scarf-sh/scarf-js/blob/master/WHY.org) on the topic.
-
-### Features
-
-- No dependencies.
-- Fully transparent to the user. Scarf will log its behavior to the console
- during installation. It will never silently report analytics for someone that
- hasn't explictly given permission to do so.
-- Never interrupts your package installation. Reporting is done on a best effort basis.
-
-### Installing
-
-You'll first need to create a library entry on [Scarf](https://scarf.sh). Once
-created, add a dependency on this library to your own:
-
-```bash
-npm i --save @scarf/scarf
-```
-
-Once your library is published to npm with this change, Scarf will automatically
-collect stats on install, no additional code is required!
-
-Head to your package's dashboard on Scarf to see your reports when available.
-
-### Configuring
-
-Users of your package will be opted in by default and can opt out by setting the
-`SCARF_ANALYTICS=false` environment variable. If you'd like Scarf analytics to
-instead be opt-in, you can set this by adding an entry to your `package.json`
-
-
-```json5
-// your-package/package.json
-
-{
- // ...
- "scarfSettings": {
- "defaultOptIn": false
- }
- // ...
-}
-```
-
-Scarf will now be opt-out by default, and users can set `SCARF_ANALYTICS=true`
-to opt in.
-
-Regardless of the default state, Scarf will log what it is doing to users who
-haven't explictly opted in or out.
-
-By default, scarf-js will only trigger analytics when your package is installed as a dependency of another package, or is being installed globally. This ensures that scarf-js analytics will not be triggered on `npm install` being run _within your project_. To change this, you can add:
-
-```json5
-// your-package/package.json
-
-{
- // ...
- "scarfSettings": {
- "allowTopLevel": true
- }
- // ...
-}
-```
-
-
-#### Full Configuration Example
-
-```json5
-// your-package/package.json
-
-{
- // ...
- "scarfSettings": {
- // Toggles whether Scarf is enabled for this package
- "enabled": true,
- // Enables Scarf when users run npm install directly in your repository
- // Scarf will try to report the Git commit SHA of your repository if it can
- // be obtained.
- "allowTopLevel": true,
- // Users will be opted into analytics by default
- "defaultOptIn": true,
- // By default, Scarf searches for its own location in your build's dependency
- // graph to ensure reporting can be done for all packages using Scarf.
- // For large projects with lots of dependencies, generating that dependency
- // graph takes more time than Scarf allots for its entire process, so Scarf
- // will always time out. `skipTraversal` is an optional flag for large
- // applications to skip that traversal entirely. Use this flag with caution and
- // care, as it will break Scarf analytics for all other packages you depend
- // on in your build.
- "skipTraversal": false
- }
- // ...
-}
-```
-
-### FAQ
-
-#### What information does scarf-js provide me as a package author?
-
-- Understanding your user-base
- - Which companies are using your package?
- - Is your project growing or shrinking? Where? On which platforms?
-- Which versions of your package are being used?
-
-#### As a user of a package using scarf-js, what information does scarf-js send about me?
-
-*Scarf does not store personally identifying information.* Scarf aims to collect information that is helpful for:
-- Open Source package maintainence
-- Open Source commercialization
-
-Specifically, scarf-js sends:
-
-- The operating system you are using
-- Your IP address will be used to look up any available company information. _Scarf does not store the actual IP address_
-- Limited dependency tree information. Scarf sends the name and version of the package(s) that directly depend on scarf-js. Additionally, scarf-js will send SHA256-hashed name and version for the following packages in the dependency tree:
- - Packages that depend on a package that depends on scarf-js.
- - The root package of the dependency tree.
-This allows Scarf to provide information for maintainers about which public packages are using their own, without exposing identifying details of non-public packages.
-
-You can have scarf-js print the exact JSON payload it sends by setting `SCARF_VERBOSE=true` in your environment.
-
-#### As a user of a package using scarf-js, how can I opt out of analytics?
-
-Scarf's analytics help support developers of the open source packages you are
-using, so enabling analytics is appreciated. However, if you'd like to opt out,
-you can add your preference to your project's `package.json`:
-
-
-```json5
-// your-package/package.json
-
-{
- // ...
- "scarfSettings": {
- "enabled": false
- }
- // ...
-}
-```
-
-Alternatively, you can set this variable in your environment:
-
-```shell
-export SCARF_ANALYTICS=false
-```
-
-You can also set this variable in accordance to the [Console Do Not Track](https://consoledonottrack.com/) standard:
-```shell
-export DO_NOT_TRACK=1
-```
-
-Either route will disable Scarf for all packages.
-
-#### I distribute a package on npm, and scarf-js is in our dependency tree. Can I disable the analytics for my downstream dependents?
-
-Yes. By opting out of analytics via `package.json`, any package upstream will have analytics disbabled.
-
-```json5
-// your-package/package.json
-
-{
- // ...
- "scarfSettings": {
- "enabled": false
- }
- // ...
-}
-```
-
-Installers of your packages will have scarf-js disabled for all dependencies upstream from yours.
-
-
-### Developing
-
-Setting the environment variable `SCARF_LOCAL_PORT=8080` will configure Scarf to
-use http://localhost:8080 as the analytics endpoint host.
-
-### Future work
-
-Future releases of scarf-js will provide a module of utility functions to
-collect usage analytics in addition to the current installation analytics.
-
-### Community
-
-Join the [Scarf-Community workspace](https://tinyurl.com/scarf-community-slack) on Slack and find us in the #scarf-js channel. We'll keep an eye out for your questions and concerns.
diff --git a/node_modules/@scarf/scarf/package.json b/node_modules/@scarf/scarf/package.json
deleted file mode 100644
index 8e691fe..0000000
--- a/node_modules/@scarf/scarf/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "@scarf/scarf",
- "version": "1.4.0",
- "description": "Scarf is like Google Analytics for your npm packages. Gain insights into how your packages are installed and used, and by which companies.",
- "main": "report.js",
- "homepage": "https://github.com/scarf-sh/scarf-js",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/scarf-sh/scarf-js.git"
- },
- "files": [
- "report.js"
- ],
- "scripts": {
- "postinstall": "node ./report.js",
- "test": "jest --verbose"
- },
- "author": "Scarf Systems",
- "license": "Apache-2.0",
- "devDependencies": {
- "jest": "^25.3.0",
- "minimist": "^1.2.2",
- "standard": "^14.3.1"
- },
- "standard": {
- "globals": [
- "expect",
- "test",
- "jest",
- "beforeAll",
- "afterAll",
- "fail",
- "describe"
- ]
- }
-}
diff --git a/node_modules/@scarf/scarf/report.js b/node_modules/@scarf/scarf/report.js
deleted file mode 100644
index 9b1c487..0000000
--- a/node_modules/@scarf/scarf/report.js
+++ /dev/null
@@ -1,574 +0,0 @@
-const path = require('path')
-const os = require('os')
-const exec = require('child_process').exec
-const localDevPort = process.env.SCARF_LOCAL_PORT
-const https = localDevPort ? require('http') : require('https')
-const fs = require('fs')
-const fsAsync = fs.promises
-const util = require('util')
-
-const scarfHost = localDevPort ? 'localhost' : 'scarf.sh'
-const scarfLibName = '@scarf/scarf'
-const privatePackageRewrite = '@private/private'
-const privateVersionRewrite = '0'
-
-const rootPath = process.env.INIT_CWD
-
-// Pulled into a function for test mocking
-function tmpFileName () {
- // throttle per user
- const username = os.userInfo().username
- return path.join(os.tmpdir(), `scarf-js-history-${username}.log`)
-}
-
-// Pulled into a function for test mocking
-function dirName () {
- return __dirname
-}
-
-function npmExecPath () {
- return process.env.npm_execpath
-}
-
-const userMessageThrottleTime = 1000 * 60 // 1 minute
-
-const execTimeout = 3000
-
-// In general, these keys should never change to remain backwards compatible
-// with previous versions of Scarf. If we need to update them, we'll need to
-// make sure we can read the previous values as well
-const optedInLogRateLimitKey = 'optedInLastLog'
-const optedOutLogRateLimitKey = 'optedOutLastLog'
-
-const makeDefaultSettings = () => {
- return {
- defaultOptIn: true
- }
-}
-
-function logIfVerbose (toLog, stream) {
- if (process.env.SCARF_VERBOSE === 'true') {
- (stream || console.log)(toLog)
- }
-}
-
-// SCARF_NO_ANALYTICS was the original variable, we'll get rid of it eventually
-const userHasOptedOut = (rootPackage) => {
- return (rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.enabled === false) ||
- (process.env.SCARF_ANALYTICS === 'false' || process.env.SCARF_NO_ANALYTICS === 'true' || process.env.DO_NOT_TRACK === '1')
-}
-
-const userHasOptedIn = (rootPackage) => {
- return (rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.enabled) || process.env.SCARF_ANALYTICS === 'true'
-}
-
-// Packages that depend on Scarf can configure whether to should fire when
-// `npm install` is being run directly from within the package, rather than from a
-// dependent package
-function allowTopLevel (rootPackage) {
- return rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.allowTopLevel
-}
-
-function skipTraversal (rootPackage) {
- return rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.skipTraversal
-}
-
-function parentIsRoot (dependencyToReport) {
- const parent = dependencyToReport.parent
- const rootPackage = dependencyToReport.rootPackage
-
- return parent && rootPackage && parent.name === rootPackage.name && parent.version === rootPackage.version
-}
-
-function isTopLevel (dependencyToReport) {
- return parentIsRoot(dependencyToReport) && !process.env.npm_config_global
-}
-
-function isGlobal (dependencyToReport) {
- return parentIsRoot(dependencyToReport) && !!process.env.npm_config_global
-}
-
-function hashWithDefault (toHash, defaultReturn) {
- let crypto
- try {
- crypto = require('crypto')
- } catch (err) {
- logIfVerbose('node crypto module unavailable')
- }
-
- if (crypto && toHash) {
- return crypto.createHash('sha256').update(toHash, 'utf-8').digest('hex')
- } else {
- return defaultReturn
- }
-}
-
-// We don't send any paths, hash package names and versions
-function redactSensitivePackageInfo (dependencyInfo) {
- if (dependencyInfo.grandparent && dependencyInfo.grandparent.name) {
- dependencyInfo.grandparent.nameHash = hashWithDefault(dependencyInfo.grandparent.name, privatePackageRewrite)
- dependencyInfo.grandparent.versionHash = hashWithDefault(dependencyInfo.grandparent.version, privateVersionRewrite)
- }
-
- if (dependencyInfo.rootPackage && dependencyInfo.rootPackage.name) {
- dependencyInfo.rootPackage.nameHash = hashWithDefault(dependencyInfo.rootPackage.name, privatePackageRewrite)
- dependencyInfo.rootPackage.versionHash = hashWithDefault(dependencyInfo.rootPackage.version, privateVersionRewrite)
- }
-
- delete (dependencyInfo.rootPackage.packageJsonPath)
- delete (dependencyInfo.rootPackage.path)
- delete (dependencyInfo.rootPackage.name)
- delete (dependencyInfo.rootPackage.version)
- delete (dependencyInfo.parent.path)
- delete (dependencyInfo.scarf.path)
- if (dependencyInfo.grandparent) {
- delete (dependencyInfo.grandparent.path)
- delete (dependencyInfo.grandparent.name)
- delete (dependencyInfo.grandparent.version)
- }
- return dependencyInfo
-}
-
-/*
- Scarf-js is automatically disabled when being run inside of a yarn install.
- The `npm_execpath` environment variable tells us which package manager is
- running our install
- */
-function isYarn () {
- const execPath = module.exports.npmExecPath() || ''
- return ['yarn', 'yarn.js', 'yarnpkg', 'yarn.cmd', 'yarnpkg.cmd']
- .some(packageManBinName => execPath.endsWith(packageManBinName))
-}
-
-function processDependencyTreeOutput (resolve, reject) {
- return function (error, stdout, stderr) {
- if (error && !stdout) {
- return reject(new Error(`Scarf received an error from npm -ls: ${error} | ${stderr}`))
- }
-
- try {
- const output = JSON.parse(stdout)
-
- const depsToScarf = findScarfInFullDependencyTree(output).filter(depChain => depChain.length >= 2)
- if (!depsToScarf.length) {
- return reject(new Error('No Scarf parent package found'))
- }
- const rootPackageDetails = rootPackageDepInfo(output)
-
- const dependencyInfo = depsToScarf.map(depChain => {
- return {
- scarf: depChain[depChain.length - 1],
- parent: depChain[depChain.length - 2],
- grandparent: depChain[depChain.length - 3],
- rootPackage: rootPackageDetails,
- anyInChainDisabled: depChain.some(dep => {
- return (dep.scarfSettings || {}).enabled === false
- })
- }
- })
-
- dependencyInfo.forEach(d => {
- d.parent.scarfSettings = Object.assign(makeDefaultSettings(), d.parent.scarfSettings || {})
- })
-
- // Here, we find the dependency chain that corresponds to the scarf package we're currently in
- const dependencyToReport = dependencyInfo.find(dep => (dep.scarf.path === module.exports.dirName())) || dependencyInfo[0]
- if (!dependencyToReport) {
- return reject(new Error(`Couldn't find dependency info for path ${module.exports.dirName()}`))
- }
-
- // If any intermediate dependency in the chain of deps that leads to scarf
- // has disabled Scarf, we must respect that setting unless the user overrides it.
- if (dependencyToReport.anyInChainDisabled && !userHasOptedIn(dependencyToReport.rootPackage)) {
- return reject(new Error('Scarf has been disabled via a package.json in the dependency chain.'))
- }
-
- if (isTopLevel(dependencyToReport) && !isGlobal(dependencyToReport) && !allowTopLevel(rootPackageDetails)) {
- return reject(new Error('The package depending on Scarf is the root package being installed, but Scarf is not configured to run in this case. To enable it, set `scarfSettings.allowTopLevel = true` in your package.json'))
- }
-
- return resolve(dependencyToReport)
- } catch (err) {
- logIfVerbose(err, console.error)
- return reject(err)
- }
- }
-}
-
-function processGitRevParseOutput (resolve, reject) {
- return function (error, stdout, stderr) {
- if (error && !stdout) {
- return reject(new Error(`Scarf received an error from git rev-parse: ${error} | ${stderr}`))
- }
-
- const output = String(stdout).trim()
-
- if (output.length > 0) {
- return resolve(output)
- } else {
- return reject(new Error('Scarf did not receive usable output from git rev-parse'))
- }
- }
-}
-
-// packageJSONOverride: a test convenience to set a packageJSON explicitly.
-// Leave empty to use the actual root package.json.
-async function getDependencyInfo (packageJSONOverride) {
- try {
- const rootPackageJSON = require(packageJSONOverride || path.join(rootPath, 'package.json'))
- const scarfPackageJSON = require(path.join(dirName(), 'package.json'))
-
- if (skipTraversal(rootPackageJSON)) {
- logIfVerbose('skipping dependency tree traversal')
- const rootInfoToReport = {
- name: rootPackageJSON.name,
- version: rootPackageJSON.version,
- scarfSettings: { ...makeDefaultSettings(), ...rootPackageJSON.scarfSettings }
- }
- const shallowDepInfo = {
- scarf: { name: '@scarf/scarf', version: scarfPackageJSON.version },
- parent: { ...rootInfoToReport },
- rootPackage: { ...rootInfoToReport },
- anyInChainDisabled: false,
- skippedTraversal: true
- }
- logIfVerbose(util.inspect(shallowDepInfo))
- return shallowDepInfo
- }
- } catch (err) {
- logIfVerbose(err, console.error)
- }
-
- return new Promise((resolve, reject) => {
- exec(`cd ${rootPath} && npm ls @scarf/scarf --json --long`, { timeout: execTimeout, maxBuffer: 1024 * 1024 * 1024 }, processDependencyTreeOutput(resolve, reject))
- })
-}
-
-async function getGitShaFromRootPath () {
- const promise = new Promise((resolve, reject) => {
- exec(`cd ${rootPath} && git rev-parse HEAD`, { timeout: execTimeout, maxBuffer: 1024 * 1024 * 1024 }, processGitRevParseOutput(resolve, reject))
- })
- try {
- return await promise
- } catch (e) {
- logIfVerbose(e)
- return undefined
- }
-}
-
-async function reportPostInstall () {
- const scarfApiToken = process.env.SCARF_API_TOKEN
-
- const dependencyInfo = await module.exports.getDependencyInfo()
- logIfVerbose(dependencyInfo)
- if (!dependencyInfo.parent || !dependencyInfo.parent.name) {
- return Promise.reject(new Error('No parent found, nothing to report'))
- }
-
- if (parentIsRoot(dependencyInfo) && allowTopLevel(dependencyInfo.rootPackage)) {
- const gitSha = await getGitShaFromRootPath()
- logIfVerbose(`Injecting sha to parent: ${gitSha}`)
- dependencyInfo.parent.gitSha = gitSha
- }
-
- const rootPackage = dependencyInfo.rootPackage
-
- if (!userHasOptedIn(rootPackage) && isYarn()) {
- return Promise.reject(new Error('Package manager is yarn. scarf-js is unable to inform user of analytics. Aborting.'))
- }
-
- await new Promise((resolve, reject) => {
- if (dependencyInfo.parent.scarfSettings.defaultOptIn) {
- if (userHasOptedOut(rootPackage)) {
- return reject(new Error('User has opted out'))
- }
-
- if (!userHasOptedIn(rootPackage)) {
- rateLimitedUserLog(optedInLogRateLimitKey, `
- The dependency '${dependencyInfo.parent.name}' is tracking installation
- statistics using scarf-js (https://scarf.sh), which helps open-source developers
- fund and maintain their projects. Scarf securely logs basic installation
- details when this package is installed. The Scarf npm library is open source
- and permissively licensed at https://github.com/scarf-sh/scarf-js. For more
- details about your project's dependencies, try running 'npm ls'. To opt out of
- analytics, set the environment variable 'SCARF_ANALYTICS=false'.
- `)
- }
- resolve(dependencyInfo)
- } else {
- if (!userHasOptedIn(rootPackage)) {
- if (!userHasOptedOut(rootPackage)) {
- // We'll only print the 'please opt in' text if the user hasn't
- // already opted out, and our logging rate limit hasn't been reached
- if (hasHitRateLimit(optedOutLogRateLimitKey, getRateLimitedLogHistory())) {
- return reject(new Error('Analytics are opt-out by default, but rate limit already hit for prompting opt-in.'))
- }
- rateLimitedUserLog(optedOutLogRateLimitKey, `
- The dependency '${dependencyInfo.parent.name}' would like to track
- installation statistics using scarf-js (https://scarf.sh), which helps
- open-source developers fund and maintain their projects. Reporting is disabled
- by default for this package. When enabled, Scarf securely logs basic
- installation details when this package is installed. The Scarf npm library is
- open source and permissively licensed at https://github.com/scarf-sh/scarf-js.
- For more details about your project's dependencies, try running 'npm ls'.
- `
- )
- const stdin = process.stdin
- stdin.setEncoding('utf-8')
-
- process.stdout.write(`Would you like to support ${dependencyInfo.parent.name} by sending analytics for this install? (y/N): `)
-
- const timeout1 = setTimeout(() => {
- console.log('')
- console.log('No opt in received, skipping analytics')
- reject(new Error('Timeout waiting for user opt in'))
- }, 7000)
-
- stdin.on('data', async function (data) {
- clearTimeout(timeout1)
- const enabled = data.trim().toLowerCase() === 'y'
-
- const afterUserInput = (enabled, saved) => {
- if (enabled) {
- console.log('Thanks for enabling analytics!')
- }
-
- if (!saved) {
- console.log('To prevent this message in the future, you can also set the `SCARF_ANALYTICS=true|false` environment variable')
- }
-
- if (enabled) {
- return resolve(dependencyInfo)
- } else {
- return reject(new Error('Not enabled via cli'))
- }
- }
-
- process.stdout.write('Save this preference to your project\'s package.json file? (y/N): ')
-
- setTimeout(() => {
- console.log('')
- return afterUserInput(enabled, false)
- }, 15000)
-
- stdin.removeAllListeners('data')
- stdin.on('data', async function (data) {
- try {
- const savePreference = data.trim().toLowerCase() === 'y'
- if (savePreference) {
- await savePreferencesToRootPackage(dependencyInfo.rootPackage.packageJsonPath, enabled)
- }
- return afterUserInput(enabled, savePreference)
- } catch (err) {
- logIfVerbose(err, console.error)
- return reject(err)
- }
- })
- })
- }
- } else {
- resolve(dependencyInfo)
- }
- }
- })
-
- redactSensitivePackageInfo(dependencyInfo)
-
- const infoPayload = {
- libraryType: 'npm',
- rawPlatform: os.platform(),
- rawArch: os.arch(),
- nodeVersion: process.versions.node,
- dependencyInfo: dependencyInfo
- }
-
- const data = JSON.stringify(infoPayload)
- logIfVerbose(`Scarf payload: ${data}`)
-
- const reqOptions = {
- host: scarfHost,
- port: localDevPort,
- method: 'POST',
- path: '/package-event/install',
- headers: {
- 'Content-Type': 'application/json',
- 'Content-Length': data.length
- },
- timeout: execTimeout
- }
-
- if (scarfApiToken) {
- const authToken = Buffer.from(`n/a:${scarfApiToken}`).toString('base64')
- reqOptions.headers.Authorization = `Basic ${authToken}`
- }
-
- await new Promise((resolve, reject) => {
- const req = https.request(reqOptions, (res) => {
- logIfVerbose(`Response status: ${res.statusCode}`)
- resolve()
- })
-
- req.on('error', error => {
- logIfVerbose(error, console.error)
- reject(error)
- })
-
- req.on('timeout', error => {
- logIfVerbose(error, console.error)
- reject(error)
- })
-
- req.write(data)
- req.end()
- })
-}
-
-// Find all paths to Scarf from the json output of npm ls @scarf/scarf --json in
-// the root package being installed by the user
-//
-// [{
-// scarf: {name: `@scarf/scarf`, version: '0.0.1'},
-// parent: { name: 'scarfed-library', version: '1.0.0', scarfSettings: { defaultOptIn: true } },
-// grandparent: { name: 'scarfed-lib-consumer', version: '1.0.0' }
-// }]
-function findScarfInSubDepTree (pathToDep, deps) {
- const depNames = Object.keys(deps || {})
-
- if (!depNames) {
- return []
- }
-
- const scarfFound = depNames.find(depName => depName === scarfLibName)
- const output = []
- if (scarfFound) {
- output.push(pathToDep.concat([{ name: scarfLibName, version: deps[scarfLibName].version, path: deps[scarfLibName].path }]))
- }
- for (let i = 0; i < depNames.length; i++) {
- const depName = depNames[i]
- const newPathToDep = pathToDep.concat([
- {
- name: depName,
- version: deps[depName].version,
- scarfSettings: deps[depName].scarfSettings,
- path: deps[depName].path
- }
- ])
- const results = findScarfInSubDepTree(newPathToDep, deps[depName].dependencies)
- if (results) {
- for (let j = 0; j < results.length; j++) {
- output.push(results[j])
- }
- }
- }
-
- return output
-}
-
-function findScarfInFullDependencyTree (tree) {
- if (tree.name === scarfLibName) {
- return [[{ name: scarfLibName, version: tree.version }]]
- } else {
- return findScarfInSubDepTree([packageDetailsFromDepInfo(tree)], tree.dependencies)
- }
-}
-
-function packageDetailsFromDepInfo (tree) {
- return {
- name: tree.name,
- version: tree.version,
- scarfSettings: tree.scarfSettings,
- path: tree.path
- }
-}
-
-function rootPackageDepInfo (packageInfo) {
- if (process.env.npm_config_global) {
- packageInfo = Object.values(packageInfo.dependencies)[0]
- }
- const info = packageDetailsFromDepInfo(packageInfo)
- info.packageJsonPath = `${packageInfo.path}/package.json`
- return info
-}
-
-async function savePreferencesToRootPackage (path, optIn) {
- const packageJsonString = await fsAsync.readFile(path)
- const parsed = JSON.parse(packageJsonString)
- parsed.scarfSettings = {
- enabled: optIn
- }
- await fsAsync.writeFile(path, JSON.stringify(parsed, null, 2))
-}
-
-/*
- If Scarf-js appears in many different spots in a package's dependency tree, we
- want to avoid spamming the user with the same message informing them of
- Scarf's analytics. Rate limited logs will record timestamps of logging in a
- temp file. Before logging something to the user, we will verify we're not over
- the rate limit.
-*/
-function rateLimitedUserLog (rateLimitKey, toLog) {
- const history = getRateLimitedLogHistory()
- if (!hasHitRateLimit(rateLimitKey, history)) {
- writeCurrentTimeToLogHistory(rateLimitKey, history)
- console.log(toLog)
- } else {
- logIfVerbose(`[SUPPRESSED USER MESSAGE, RATE LIMIT HIT] ${toLog}`)
- }
-}
-
-function getRateLimitedLogHistory () {
- let history
- try {
- history = JSON.parse(fs.readFileSync(module.exports.tmpFileName()))
- } catch (e) {
- logIfVerbose(e)
- }
- return history || {}
-}
-
-// Current rate limit: 1/minute
-function hasHitRateLimit (rateLimitKey, history) {
- if (!history || !history[rateLimitKey]) {
- return false
- }
-
- const lastLog = history[rateLimitKey]
- return (new Date().getTime() - lastLog) < userMessageThrottleTime
-}
-
-function writeCurrentTimeToLogHistory (rateLimitKey, history) {
- history[rateLimitKey] = new Date().getTime()
- fs.writeFileSync(module.exports.tmpFileName(), JSON.stringify(history))
-}
-
-module.exports = {
- redactSensitivePackageInfo,
- hasHitRateLimit,
- getRateLimitedLogHistory,
- rateLimitedUserLog,
- tmpFileName,
- dirName,
- processDependencyTreeOutput,
- processGitRevParseOutput,
- npmExecPath,
- getDependencyInfo,
- getGitShaFromRootPath,
- reportPostInstall,
- hashWithDefault,
- findScarfInFullDependencyTree
-}
-
-if (require.main === module) {
- try {
- reportPostInstall().catch(e => {
- // This is an optional, best effort attempt. If there are any errors in
- // Scarf, we must not interfere with whatever the user is doing
- logIfVerbose(`\n\n${e}`, console.error)
- }).finally(() => {
- process.exit(0)
- })
- } catch (e) {
- logIfVerbose(`\n\nTop level error: ${e}`, console.error)
- process.exit(0)
- }
-}
diff --git a/node_modules/@types/json-schema/LICENSE b/node_modules/@types/json-schema/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/node_modules/@types/json-schema/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/node_modules/@types/json-schema/README.md b/node_modules/@types/json-schema/README.md
deleted file mode 100644
index 42d55d3..0000000
--- a/node_modules/@types/json-schema/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/json-schema`
-
-# Summary
-This package contains type definitions for json-schema (https://github.com/kriszyp/json-schema).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/json-schema.
-
-### Additional Details
- * Last updated: Tue, 07 Nov 2023 03:09:37 GMT
- * Dependencies: none
-
-# Credits
-These definitions were written by [Boris Cherny](https://github.com/bcherny), [Lucian Buzzo](https://github.com/lucianbuzzo), [Roland Groza](https://github.com/rolandjitsu), and [Jason Kwok](https://github.com/JasonHK).
diff --git a/node_modules/@types/json-schema/index.d.ts b/node_modules/@types/json-schema/index.d.ts
deleted file mode 100644
index 9381e99..0000000
--- a/node_modules/@types/json-schema/index.d.ts
+++ /dev/null
@@ -1,749 +0,0 @@
-// ==================================================================================================
-// JSON Schema Draft 04
-// ==================================================================================================
-
-/**
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1
- */
-export type JSONSchema4TypeName =
- | "string" //
- | "number"
- | "integer"
- | "boolean"
- | "object"
- | "array"
- | "null"
- | "any";
-
-/**
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-04#section-3.5
- */
-export type JSONSchema4Type =
- | string //
- | number
- | boolean
- | JSONSchema4Object
- | JSONSchema4Array
- | null;
-
-// Workaround for infinite type recursion
-export interface JSONSchema4Object {
- [key: string]: JSONSchema4Type;
-}
-
-// Workaround for infinite type recursion
-// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
-export interface JSONSchema4Array extends Array {}
-
-/**
- * Meta schema
- *
- * Recommended values:
- * - 'http://json-schema.org/schema#'
- * - 'http://json-schema.org/hyper-schema#'
- * - 'http://json-schema.org/draft-04/schema#'
- * - 'http://json-schema.org/draft-04/hyper-schema#'
- * - 'http://json-schema.org/draft-03/schema#'
- * - 'http://json-schema.org/draft-03/hyper-schema#'
- *
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
- */
-export type JSONSchema4Version = string;
-
-/**
- * JSON Schema V4
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-04
- */
-export interface JSONSchema4 {
- id?: string | undefined;
- $ref?: string | undefined;
- $schema?: JSONSchema4Version | undefined;
-
- /**
- * This attribute is a string that provides a short description of the
- * instance property.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.21
- */
- title?: string | undefined;
-
- /**
- * This attribute is a string that provides a full description of the of
- * purpose the instance property.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.22
- */
- description?: string | undefined;
-
- default?: JSONSchema4Type | undefined;
- multipleOf?: number | undefined;
- maximum?: number | undefined;
- exclusiveMaximum?: boolean | undefined;
- minimum?: number | undefined;
- exclusiveMinimum?: boolean | undefined;
- maxLength?: number | undefined;
- minLength?: number | undefined;
- pattern?: string | undefined;
-
- /**
- * May only be defined when "items" is defined, and is a tuple of JSONSchemas.
- *
- * This provides a definition for additional items in an array instance
- * when tuple definitions of the items is provided. This can be false
- * to indicate additional items in the array are not allowed, or it can
- * be a schema that defines the schema of the additional items.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.6
- */
- additionalItems?: boolean | JSONSchema4 | undefined;
-
- /**
- * This attribute defines the allowed items in an instance array, and
- * MUST be a schema or an array of schemas. The default value is an
- * empty schema which allows any value for items in the instance array.
- *
- * When this attribute value is a schema and the instance value is an
- * array, then all the items in the array MUST be valid according to the
- * schema.
- *
- * When this attribute value is an array of schemas and the instance
- * value is an array, each position in the instance array MUST conform
- * to the schema in the corresponding position for this array. This
- * called tuple typing. When tuple typing is used, additional items are
- * allowed, disallowed, or constrained by the "additionalItems"
- * (Section 5.6) attribute using the same rules as
- * "additionalProperties" (Section 5.4) for objects.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.5
- */
- items?: JSONSchema4 | JSONSchema4[] | undefined;
-
- maxItems?: number | undefined;
- minItems?: number | undefined;
- uniqueItems?: boolean | undefined;
- maxProperties?: number | undefined;
- minProperties?: number | undefined;
-
- /**
- * This attribute indicates if the instance must have a value, and not
- * be undefined. This is false by default, making the instance
- * optional.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7
- */
- required?: boolean | string[] | undefined;
-
- /**
- * This attribute defines a schema for all properties that are not
- * explicitly defined in an object type definition. If specified, the
- * value MUST be a schema or a boolean. If false is provided, no
- * additional properties are allowed beyond the properties defined in
- * the schema. The default value is an empty schema which allows any
- * value for additional properties.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.4
- */
- additionalProperties?: boolean | JSONSchema4 | undefined;
-
- definitions?: {
- [k: string]: JSONSchema4;
- } | undefined;
-
- /**
- * This attribute is an object with property definitions that define the
- * valid values of instance object property values. When the instance
- * value is an object, the property values of the instance object MUST
- * conform to the property definitions in this object. In this object,
- * each property definition's value MUST be a schema, and the property's
- * name MUST be the name of the instance property that it defines. The
- * instance property value MUST be valid according to the schema from
- * the property definition. Properties are considered unordered, the
- * order of the instance properties MAY be in any order.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.2
- */
- properties?: {
- [k: string]: JSONSchema4;
- } | undefined;
-
- /**
- * This attribute is an object that defines the schema for a set of
- * property names of an object instance. The name of each property of
- * this attribute's object is a regular expression pattern in the ECMA
- * 262/Perl 5 format, while the value is a schema. If the pattern
- * matches the name of a property on the instance object, the value of
- * the instance's property MUST be valid against the pattern name's
- * schema value.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.3
- */
- patternProperties?: {
- [k: string]: JSONSchema4;
- } | undefined;
- dependencies?: {
- [k: string]: JSONSchema4 | string[];
- } | undefined;
-
- /**
- * This provides an enumeration of all possible values that are valid
- * for the instance property. This MUST be an array, and each item in
- * the array represents a possible value for the instance value. If
- * this attribute is defined, the instance value MUST be one of the
- * values in the array in order for the schema to be valid.
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.19
- */
- enum?: JSONSchema4Type[] | undefined;
-
- /**
- * A single type, or a union of simple types
- */
- type?: JSONSchema4TypeName | JSONSchema4TypeName[] | undefined;
-
- allOf?: JSONSchema4[] | undefined;
- anyOf?: JSONSchema4[] | undefined;
- oneOf?: JSONSchema4[] | undefined;
- not?: JSONSchema4 | undefined;
-
- /**
- * The value of this property MUST be another schema which will provide
- * a base schema which the current schema will inherit from. The
- * inheritance rules are such that any instance that is valid according
- * to the current schema MUST be valid according to the referenced
- * schema. This MAY also be an array, in which case, the instance MUST
- * be valid for all the schemas in the array. A schema that extends
- * another schema MAY define additional attributes, constrain existing
- * attributes, or add other constraints.
- *
- * Conceptually, the behavior of extends can be seen as validating an
- * instance against all constraints in the extending schema as well as
- * the extended schema(s).
- *
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.26
- */
- extends?: string | string[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-zyp-json-schema-04#section-5.6
- */
- [k: string]: any;
-
- format?: string | undefined;
-}
-
-// ==================================================================================================
-// JSON Schema Draft 06
-// ==================================================================================================
-
-export type JSONSchema6TypeName =
- | "string" //
- | "number"
- | "integer"
- | "boolean"
- | "object"
- | "array"
- | "null"
- | "any";
-
-export type JSONSchema6Type =
- | string //
- | number
- | boolean
- | JSONSchema6Object
- | JSONSchema6Array
- | null;
-
-// Workaround for infinite type recursion
-export interface JSONSchema6Object {
- [key: string]: JSONSchema6Type;
-}
-
-// Workaround for infinite type recursion
-// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
-export interface JSONSchema6Array extends Array {}
-
-/**
- * Meta schema
- *
- * Recommended values:
- * - 'http://json-schema.org/schema#'
- * - 'http://json-schema.org/hyper-schema#'
- * - 'http://json-schema.org/draft-06/schema#'
- * - 'http://json-schema.org/draft-06/hyper-schema#'
- *
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
- */
-export type JSONSchema6Version = string;
-
-/**
- * JSON Schema V6
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01
- */
-export type JSONSchema6Definition = JSONSchema6 | boolean;
-export interface JSONSchema6 {
- $id?: string | undefined;
- $ref?: string | undefined;
- $schema?: JSONSchema6Version | undefined;
-
- /**
- * Must be strictly greater than 0.
- * A numeric instance is valid only if division by this keyword's value results in an integer.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.1
- */
- multipleOf?: number | undefined;
-
- /**
- * Representing an inclusive upper limit for a numeric instance.
- * This keyword validates only if the instance is less than or exactly equal to "maximum".
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.2
- */
- maximum?: number | undefined;
-
- /**
- * Representing an exclusive upper limit for a numeric instance.
- * This keyword validates only if the instance is strictly less than (not equal to) to "exclusiveMaximum".
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.3
- */
- exclusiveMaximum?: number | undefined;
-
- /**
- * Representing an inclusive lower limit for a numeric instance.
- * This keyword validates only if the instance is greater than or exactly equal to "minimum".
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.4
- */
- minimum?: number | undefined;
-
- /**
- * Representing an exclusive lower limit for a numeric instance.
- * This keyword validates only if the instance is strictly greater than (not equal to) to "exclusiveMinimum".
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.5
- */
- exclusiveMinimum?: number | undefined;
-
- /**
- * Must be a non-negative integer.
- * A string instance is valid against this keyword if its length is less than, or equal to, the value of this keyword.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.6
- */
- maxLength?: number | undefined;
-
- /**
- * Must be a non-negative integer.
- * A string instance is valid against this keyword if its length is greater than, or equal to, the value of this keyword.
- * Omitting this keyword has the same behavior as a value of 0.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.7
- */
- minLength?: number | undefined;
-
- /**
- * Should be a valid regular expression, according to the ECMA 262 regular expression dialect.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.8
- */
- pattern?: string | undefined;
-
- /**
- * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
- * Omitting this keyword has the same behavior as an empty schema.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.9
- */
- items?: JSONSchema6Definition | JSONSchema6Definition[] | undefined;
-
- /**
- * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
- * If "items" is an array of schemas, validation succeeds if every instance element
- * at a position greater than the size of "items" validates against "additionalItems".
- * Otherwise, "additionalItems" MUST be ignored, as the "items" schema
- * (possibly the default value of an empty schema) is applied to all elements.
- * Omitting this keyword has the same behavior as an empty schema.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.10
- */
- additionalItems?: JSONSchema6Definition | undefined;
-
- /**
- * Must be a non-negative integer.
- * An array instance is valid against "maxItems" if its size is less than, or equal to, the value of this keyword.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.11
- */
- maxItems?: number | undefined;
-
- /**
- * Must be a non-negative integer.
- * An array instance is valid against "maxItems" if its size is greater than, or equal to, the value of this keyword.
- * Omitting this keyword has the same behavior as a value of 0.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.12
- */
- minItems?: number | undefined;
-
- /**
- * If this keyword has boolean value false, the instance validates successfully.
- * If it has boolean value true, the instance validates successfully if all of its elements are unique.
- * Omitting this keyword has the same behavior as a value of false.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.13
- */
- uniqueItems?: boolean | undefined;
-
- /**
- * An array instance is valid against "contains" if at least one of its elements is valid against the given schema.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.14
- */
- contains?: JSONSchema6Definition | undefined;
-
- /**
- * Must be a non-negative integer.
- * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the value of this keyword.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.15
- */
- maxProperties?: number | undefined;
-
- /**
- * Must be a non-negative integer.
- * An object instance is valid against "maxProperties" if its number of properties is greater than,
- * or equal to, the value of this keyword.
- * Omitting this keyword has the same behavior as a value of 0.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.16
- */
- minProperties?: number | undefined;
-
- /**
- * Elements of this array must be unique.
- * An object instance is valid against this keyword if every item in the array is the name of a property in the instance.
- * Omitting this keyword has the same behavior as an empty array.
- *
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.17
- */
- required?: string[] | undefined;
-
- /**
- * This keyword determines how child instances validate for objects, and does not directly validate the immediate instance itself.
- * Validation succeeds if, for each name that appears in both the instance and as a name within this keyword's value,
- * the child instance for that name successfully validates against the corresponding schema.
- * Omitting this keyword has the same behavior as an empty object.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.18
- */
- properties?: {
- [k: string]: JSONSchema6Definition;
- } | undefined;
-
- /**
- * This attribute is an object that defines the schema for a set of property names of an object instance.
- * The name of each property of this attribute's object is a regular expression pattern in the ECMA 262, while the value is a schema.
- * If the pattern matches the name of a property on the instance object, the value of the instance's property
- * MUST be valid against the pattern name's schema value.
- * Omitting this keyword has the same behavior as an empty object.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.19
- */
- patternProperties?: {
- [k: string]: JSONSchema6Definition;
- } | undefined;
-
- /**
- * This attribute defines a schema for all properties that are not explicitly defined in an object type definition.
- * If specified, the value MUST be a schema or a boolean.
- * If false is provided, no additional properties are allowed beyond the properties defined in the schema.
- * The default value is an empty schema which allows any value for additional properties.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.20
- */
- additionalProperties?: JSONSchema6Definition | undefined;
-
- /**
- * This keyword specifies rules that are evaluated if the instance is an object and contains a certain property.
- * Each property specifies a dependency.
- * If the dependency value is an array, each element in the array must be unique.
- * Omitting this keyword has the same behavior as an empty object.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.21
- */
- dependencies?: {
- [k: string]: JSONSchema6Definition | string[];
- } | undefined;
-
- /**
- * Takes a schema which validates the names of all properties rather than their values.
- * Note the property name that the schema is testing will always be a string.
- * Omitting this keyword has the same behavior as an empty schema.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.22
- */
- propertyNames?: JSONSchema6Definition | undefined;
-
- /**
- * This provides an enumeration of all possible values that are valid
- * for the instance property. This MUST be an array, and each item in
- * the array represents a possible value for the instance value. If
- * this attribute is defined, the instance value MUST be one of the
- * values in the array in order for the schema to be valid.
- *
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.23
- */
- enum?: JSONSchema6Type[] | undefined;
-
- /**
- * More readable form of a one-element "enum"
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.24
- */
- const?: JSONSchema6Type | undefined;
-
- /**
- * A single type, or a union of simple types
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.25
- */
- type?: JSONSchema6TypeName | JSONSchema6TypeName[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.26
- */
- allOf?: JSONSchema6Definition[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.27
- */
- anyOf?: JSONSchema6Definition[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.28
- */
- oneOf?: JSONSchema6Definition[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-6.29
- */
- not?: JSONSchema6Definition | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.1
- */
- definitions?: {
- [k: string]: JSONSchema6Definition;
- } | undefined;
-
- /**
- * This attribute is a string that provides a short description of the instance property.
- *
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.2
- */
- title?: string | undefined;
-
- /**
- * This attribute is a string that provides a full description of the of purpose the instance property.
- *
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.2
- */
- description?: string | undefined;
-
- /**
- * This keyword can be used to supply a default JSON value associated with a particular schema.
- * It is RECOMMENDED that a default value be valid against the associated schema.
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.3
- */
- default?: JSONSchema6Type | undefined;
-
- /**
- * Array of examples with no validation effect the value of "default" is usable as an example without repeating it under this keyword
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-7.4
- */
- examples?: JSONSchema6Type[] | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-wright-json-schema-validation-01#section-8
- */
- format?: string | undefined;
-}
-
-// ==================================================================================================
-// JSON Schema Draft 07
-// ==================================================================================================
-// https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
-// --------------------------------------------------------------------------------------------------
-
-/**
- * Primitive type
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
- */
-export type JSONSchema7TypeName =
- | "string" //
- | "number"
- | "integer"
- | "boolean"
- | "object"
- | "array"
- | "null";
-
-/**
- * Primitive type
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1.1
- */
-export type JSONSchema7Type =
- | string //
- | number
- | boolean
- | JSONSchema7Object
- | JSONSchema7Array
- | null;
-
-// Workaround for infinite type recursion
-export interface JSONSchema7Object {
- [key: string]: JSONSchema7Type;
-}
-
-// Workaround for infinite type recursion
-// https://github.com/Microsoft/TypeScript/issues/3496#issuecomment-128553540
-export interface JSONSchema7Array extends Array {}
-
-/**
- * Meta schema
- *
- * Recommended values:
- * - 'http://json-schema.org/schema#'
- * - 'http://json-schema.org/hyper-schema#'
- * - 'http://json-schema.org/draft-07/schema#'
- * - 'http://json-schema.org/draft-07/hyper-schema#'
- *
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5
- */
-export type JSONSchema7Version = string;
-
-/**
- * JSON Schema v7
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01
- */
-export type JSONSchema7Definition = JSONSchema7 | boolean;
-export interface JSONSchema7 {
- $id?: string | undefined;
- $ref?: string | undefined;
- $schema?: JSONSchema7Version | undefined;
- $comment?: string | undefined;
-
- /**
- * @see https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00#section-8.2.4
- * @see https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-validation-00#appendix-A
- */
- $defs?: {
- [key: string]: JSONSchema7Definition;
- } | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1
- */
- type?: JSONSchema7TypeName | JSONSchema7TypeName[] | undefined;
- enum?: JSONSchema7Type[] | undefined;
- const?: JSONSchema7Type | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.2
- */
- multipleOf?: number | undefined;
- maximum?: number | undefined;
- exclusiveMaximum?: number | undefined;
- minimum?: number | undefined;
- exclusiveMinimum?: number | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.3
- */
- maxLength?: number | undefined;
- minLength?: number | undefined;
- pattern?: string | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.4
- */
- items?: JSONSchema7Definition | JSONSchema7Definition[] | undefined;
- additionalItems?: JSONSchema7Definition | undefined;
- maxItems?: number | undefined;
- minItems?: number | undefined;
- uniqueItems?: boolean | undefined;
- contains?: JSONSchema7Definition | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5
- */
- maxProperties?: number | undefined;
- minProperties?: number | undefined;
- required?: string[] | undefined;
- properties?: {
- [key: string]: JSONSchema7Definition;
- } | undefined;
- patternProperties?: {
- [key: string]: JSONSchema7Definition;
- } | undefined;
- additionalProperties?: JSONSchema7Definition | undefined;
- dependencies?: {
- [key: string]: JSONSchema7Definition | string[];
- } | undefined;
- propertyNames?: JSONSchema7Definition | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.6
- */
- if?: JSONSchema7Definition | undefined;
- then?: JSONSchema7Definition | undefined;
- else?: JSONSchema7Definition | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.7
- */
- allOf?: JSONSchema7Definition[] | undefined;
- anyOf?: JSONSchema7Definition[] | undefined;
- oneOf?: JSONSchema7Definition[] | undefined;
- not?: JSONSchema7Definition | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7
- */
- format?: string | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-8
- */
- contentMediaType?: string | undefined;
- contentEncoding?: string | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-9
- */
- definitions?: {
- [key: string]: JSONSchema7Definition;
- } | undefined;
-
- /**
- * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10
- */
- title?: string | undefined;
- description?: string | undefined;
- default?: JSONSchema7Type | undefined;
- readOnly?: boolean | undefined;
- writeOnly?: boolean | undefined;
- examples?: JSONSchema7Type | undefined;
-}
-
-export interface ValidationResult {
- valid: boolean;
- errors: ValidationError[];
-}
-
-export interface ValidationError {
- property: string;
- message: string;
-}
-
-/**
- * To use the validator call JSONSchema.validate with an instance object and an optional schema object.
- * If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating),
- * that schema will be used to validate and the schema parameter is not necessary (if both exist,
- * both validations will occur).
- */
-export function validate(instance: {}, schema: JSONSchema4 | JSONSchema6 | JSONSchema7): ValidationResult;
-
-/**
- * The checkPropertyChange method will check to see if an value can legally be in property with the given schema
- * This is slightly different than the validate method in that it will fail if the schema is readonly and it will
- * not check for self-validation, it is assumed that the passed in value is already internally valid.
- */
-export function checkPropertyChange(
- value: any,
- schema: JSONSchema4 | JSONSchema6 | JSONSchema7,
- property: string,
-): ValidationResult;
-
-/**
- * This checks to ensure that the result is valid and will throw an appropriate error message if it is not.
- */
-export function mustBeValid(result: ValidationResult): void;
diff --git a/node_modules/@types/json-schema/package.json b/node_modules/@types/json-schema/package.json
deleted file mode 100644
index 3c41bd7..0000000
--- a/node_modules/@types/json-schema/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "@types/json-schema",
- "version": "7.0.15",
- "description": "TypeScript definitions for json-schema",
- "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/json-schema",
- "license": "MIT",
- "contributors": [
- {
- "name": "Boris Cherny",
- "githubUsername": "bcherny",
- "url": "https://github.com/bcherny"
- },
- {
- "name": "Lucian Buzzo",
- "githubUsername": "lucianbuzzo",
- "url": "https://github.com/lucianbuzzo"
- },
- {
- "name": "Roland Groza",
- "githubUsername": "rolandjitsu",
- "url": "https://github.com/rolandjitsu"
- },
- {
- "name": "Jason Kwok",
- "githubUsername": "JasonHK",
- "url": "https://github.com/JasonHK"
- }
- ],
- "main": "",
- "types": "index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
- "directory": "types/json-schema"
- },
- "scripts": {},
- "dependencies": {},
- "typesPublisherContentHash": "79984fd70cd25c3f7d72b84368778c763c89728ea0073832d745d4691b705257",
- "typeScriptVersion": "4.5"
-}
\ No newline at end of file
diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md
deleted file mode 100644
index 627a81d..0000000
--- a/node_modules/accepts/HISTORY.md
+++ /dev/null
@@ -1,250 +0,0 @@
-2.0.0 / 2024-08-31
-==================
-
- * Drop node <18 support
- * deps: mime-types@^3.0.0
- * deps: negotiator@^1.0.0
-
-1.3.8 / 2022-02-02
-==================
-
- * deps: mime-types@~2.1.34
- - deps: mime-db@~1.51.0
- * deps: negotiator@0.6.3
-
-1.3.7 / 2019-04-29
-==================
-
- * deps: negotiator@0.6.2
- - Fix sorting charset, encoding, and language with extra parameters
-
-1.3.6 / 2019-04-28
-==================
-
- * deps: mime-types@~2.1.24
- - deps: mime-db@~1.40.0
-
-1.3.5 / 2018-02-28
-==================
-
- * deps: mime-types@~2.1.18
- - deps: mime-db@~1.33.0
-
-1.3.4 / 2017-08-22
-==================
-
- * deps: mime-types@~2.1.16
- - deps: mime-db@~1.29.0
-
-1.3.3 / 2016-05-02
-==================
-
- * deps: mime-types@~2.1.11
- - deps: mime-db@~1.23.0
- * deps: negotiator@0.6.1
- - perf: improve `Accept` parsing speed
- - perf: improve `Accept-Charset` parsing speed
- - perf: improve `Accept-Encoding` parsing speed
- - perf: improve `Accept-Language` parsing speed
-
-1.3.2 / 2016-03-08
-==================
-
- * deps: mime-types@~2.1.10
- - Fix extension of `application/dash+xml`
- - Update primary extension for `audio/mp4`
- - deps: mime-db@~1.22.0
-
-1.3.1 / 2016-01-19
-==================
-
- * deps: mime-types@~2.1.9
- - deps: mime-db@~1.21.0
-
-1.3.0 / 2015-09-29
-==================
-
- * deps: mime-types@~2.1.7
- - deps: mime-db@~1.19.0
- * deps: negotiator@0.6.0
- - Fix including type extensions in parameters in `Accept` parsing
- - Fix parsing `Accept` parameters with quoted equals
- - Fix parsing `Accept` parameters with quoted semicolons
- - Lazy-load modules from main entry point
- - perf: delay type concatenation until needed
- - perf: enable strict mode
- - perf: hoist regular expressions
- - perf: remove closures getting spec properties
- - perf: remove a closure from media type parsing
- - perf: remove property delete from media type parsing
-
-1.2.13 / 2015-09-06
-===================
-
- * deps: mime-types@~2.1.6
- - deps: mime-db@~1.18.0
-
-1.2.12 / 2015-07-30
-===================
-
- * deps: mime-types@~2.1.4
- - deps: mime-db@~1.16.0
-
-1.2.11 / 2015-07-16
-===================
-
- * deps: mime-types@~2.1.3
- - deps: mime-db@~1.15.0
-
-1.2.10 / 2015-07-01
-===================
-
- * deps: mime-types@~2.1.2
- - deps: mime-db@~1.14.0
-
-1.2.9 / 2015-06-08
-==================
-
- * deps: mime-types@~2.1.1
- - perf: fix deopt during mapping
-
-1.2.8 / 2015-06-07
-==================
-
- * deps: mime-types@~2.1.0
- - deps: mime-db@~1.13.0
- * perf: avoid argument reassignment & argument slice
- * perf: avoid negotiator recursive construction
- * perf: enable strict mode
- * perf: remove unnecessary bitwise operator
-
-1.2.7 / 2015-05-10
-==================
-
- * deps: negotiator@0.5.3
- - Fix media type parameter matching to be case-insensitive
-
-1.2.6 / 2015-05-07
-==================
-
- * deps: mime-types@~2.0.11
- - deps: mime-db@~1.9.1
- * deps: negotiator@0.5.2
- - Fix comparing media types with quoted values
- - Fix splitting media types with quoted commas
-
-1.2.5 / 2015-03-13
-==================
-
- * deps: mime-types@~2.0.10
- - deps: mime-db@~1.8.0
-
-1.2.4 / 2015-02-14
-==================
-
- * Support Node.js 0.6
- * deps: mime-types@~2.0.9
- - deps: mime-db@~1.7.0
- * deps: negotiator@0.5.1
- - Fix preference sorting to be stable for long acceptable lists
-
-1.2.3 / 2015-01-31
-==================
-
- * deps: mime-types@~2.0.8
- - deps: mime-db@~1.6.0
-
-1.2.2 / 2014-12-30
-==================
-
- * deps: mime-types@~2.0.7
- - deps: mime-db@~1.5.0
-
-1.2.1 / 2014-12-30
-==================
-
- * deps: mime-types@~2.0.5
- - deps: mime-db@~1.3.1
-
-1.2.0 / 2014-12-19
-==================
-
- * deps: negotiator@0.5.0
- - Fix list return order when large accepted list
- - Fix missing identity encoding when q=0 exists
- - Remove dynamic building of Negotiator class
-
-1.1.4 / 2014-12-10
-==================
-
- * deps: mime-types@~2.0.4
- - deps: mime-db@~1.3.0
-
-1.1.3 / 2014-11-09
-==================
-
- * deps: mime-types@~2.0.3
- - deps: mime-db@~1.2.0
-
-1.1.2 / 2014-10-14
-==================
-
- * deps: negotiator@0.4.9
- - Fix error when media type has invalid parameter
-
-1.1.1 / 2014-09-28
-==================
-
- * deps: mime-types@~2.0.2
- - deps: mime-db@~1.1.0
- * deps: negotiator@0.4.8
- - Fix all negotiations to be case-insensitive
- - Stable sort preferences of same quality according to client order
-
-1.1.0 / 2014-09-02
-==================
-
- * update `mime-types`
-
-1.0.7 / 2014-07-04
-==================
-
- * Fix wrong type returned from `type` when match after unknown extension
-
-1.0.6 / 2014-06-24
-==================
-
- * deps: negotiator@0.4.7
-
-1.0.5 / 2014-06-20
-==================
-
- * fix crash when unknown extension given
-
-1.0.4 / 2014-06-19
-==================
-
- * use `mime-types`
-
-1.0.3 / 2014-06-11
-==================
-
- * deps: negotiator@0.4.6
- - Order by specificity when quality is the same
-
-1.0.2 / 2014-05-29
-==================
-
- * Fix interpretation when header not in request
- * deps: pin negotiator@0.4.5
-
-1.0.1 / 2014-01-18
-==================
-
- * Identity encoding isn't always acceptable
- * deps: negotiator@~0.4.0
-
-1.0.0 / 2013-12-27
-==================
-
- * Genesis
diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE
deleted file mode 100644
index 0616607..0000000
--- a/node_modules/accepts/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Jonathan Ong
-Copyright (c) 2015 Douglas Christopher Wilson
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/accepts/README.md b/node_modules/accepts/README.md
deleted file mode 100644
index f3f10c4..0000000
--- a/node_modules/accepts/README.md
+++ /dev/null
@@ -1,140 +0,0 @@
-# accepts
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-version-image]][node-version-url]
-[![Build Status][github-actions-ci-image]][github-actions-ci-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
-Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
-
-In addition to negotiator, it allows:
-
-- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
- as well as `('text/html', 'application/json')`.
-- Allows type shorthands such as `json`.
-- Returns `false` when no types match
-- Treats non-existent headers as `*`
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```sh
-$ npm install accepts
-```
-
-## API
-
-```js
-var accepts = require('accepts')
-```
-
-### accepts(req)
-
-Create a new `Accepts` object for the given `req`.
-
-#### .charset(charsets)
-
-Return the first accepted charset. If nothing in `charsets` is accepted,
-then `false` is returned.
-
-#### .charsets()
-
-Return the charsets that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .encoding(encodings)
-
-Return the first accepted encoding. If nothing in `encodings` is accepted,
-then `false` is returned.
-
-#### .encodings()
-
-Return the encodings that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .language(languages)
-
-Return the first accepted language. If nothing in `languages` is accepted,
-then `false` is returned.
-
-#### .languages()
-
-Return the languages that the request accepts, in the order of the client's
-preference (most preferred first).
-
-#### .type(types)
-
-Return the first accepted type (and it is returned as the same text as what
-appears in the `types` array). If nothing in `types` is accepted, then `false`
-is returned.
-
-The `types` array can contain full MIME types or file extensions. Any value
-that is not a full MIME type is passed to `require('mime-types').lookup`.
-
-#### .types()
-
-Return the types that the request accepts, in the order of the client's
-preference (most preferred first).
-
-## Examples
-
-### Simple type negotiation
-
-This simple example shows how to use `accepts` to return a different typed
-respond body based on what the client wants to accept. The server lists it's
-preferences in order and will get back the best match between the client and
-server.
-
-```js
-var accepts = require('accepts')
-var http = require('http')
-
-function app (req, res) {
- var accept = accepts(req)
-
- // the order of this list is significant; should be server preferred order
- switch (accept.type(['json', 'html'])) {
- case 'json':
- res.setHeader('Content-Type', 'application/json')
- res.write('{"hello":"world!"}')
- break
- case 'html':
- res.setHeader('Content-Type', 'text/html')
- res.write('hello, world!')
- break
- default:
- // the fallback is text/plain, so no need to specify it above
- res.setHeader('Content-Type', 'text/plain')
- res.write('hello, world!')
- break
- }
-
- res.end()
-}
-
-http.createServer(app).listen(3000)
-```
-
-You can test this out with the cURL program:
-```sh
-curl -I -H'Accept: text/html' http://localhost:3000/
-```
-
-## License
-
-[MIT](LICENSE)
-
-[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
-[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
-[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
-[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
-[node-version-image]: https://badgen.net/npm/node/accepts
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/accepts
-[npm-url]: https://npmjs.org/package/accepts
-[npm-version-image]: https://badgen.net/npm/v/accepts
diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js
deleted file mode 100644
index 4f2840c..0000000
--- a/node_modules/accepts/index.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/*!
- * accepts
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var Negotiator = require('negotiator')
-var mime = require('mime-types')
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = Accepts
-
-/**
- * Create a new Accepts object for the given req.
- *
- * @param {object} req
- * @public
- */
-
-function Accepts (req) {
- if (!(this instanceof Accepts)) {
- return new Accepts(req)
- }
-
- this.headers = req.headers
- this.negotiator = new Negotiator(req)
-}
-
-/**
- * Check if the given `type(s)` is acceptable, returning
- * the best match when true, otherwise `undefined`, in which
- * case you should respond with 406 "Not Acceptable".
- *
- * The `type` value may be a single mime type string
- * such as "application/json", the extension name
- * such as "json" or an array `["json", "html", "text/plain"]`. When a list
- * or array is given the _best_ match, if any is returned.
- *
- * Examples:
- *
- * // Accept: text/html
- * this.types('html');
- * // => "html"
- *
- * // Accept: text/*, application/json
- * this.types('html');
- * // => "html"
- * this.types('text/html');
- * // => "text/html"
- * this.types('json', 'text');
- * // => "json"
- * this.types('application/json');
- * // => "application/json"
- *
- * // Accept: text/*, application/json
- * this.types('image/png');
- * this.types('png');
- * // => undefined
- *
- * // Accept: text/*;q=.5, application/json
- * this.types(['html', 'json']);
- * this.types('html', 'json');
- * // => "json"
- *
- * @param {String|Array} types...
- * @return {String|Array|Boolean}
- * @public
- */
-
-Accepts.prototype.type =
-Accepts.prototype.types = function (types_) {
- var types = types_
-
- // support flattened arguments
- if (types && !Array.isArray(types)) {
- types = new Array(arguments.length)
- for (var i = 0; i < types.length; i++) {
- types[i] = arguments[i]
- }
- }
-
- // no types, return all requested types
- if (!types || types.length === 0) {
- return this.negotiator.mediaTypes()
- }
-
- // no accept header, return first given type
- if (!this.headers.accept) {
- return types[0]
- }
-
- var mimes = types.map(extToMime)
- var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
- var first = accepts[0]
-
- return first
- ? types[mimes.indexOf(first)]
- : false
-}
-
-/**
- * Return accepted encodings or best fit based on `encodings`.
- *
- * Given `Accept-Encoding: gzip, deflate`
- * an array sorted by quality is returned:
- *
- * ['gzip', 'deflate']
- *
- * @param {String|Array} encodings...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.encoding =
-Accepts.prototype.encodings = function (encodings_) {
- var encodings = encodings_
-
- // support flattened arguments
- if (encodings && !Array.isArray(encodings)) {
- encodings = new Array(arguments.length)
- for (var i = 0; i < encodings.length; i++) {
- encodings[i] = arguments[i]
- }
- }
-
- // no encodings, return all requested encodings
- if (!encodings || encodings.length === 0) {
- return this.negotiator.encodings()
- }
-
- return this.negotiator.encodings(encodings)[0] || false
-}
-
-/**
- * Return accepted charsets or best fit based on `charsets`.
- *
- * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
- * an array sorted by quality is returned:
- *
- * ['utf-8', 'utf-7', 'iso-8859-1']
- *
- * @param {String|Array} charsets...
- * @return {String|Array}
- * @public
- */
-
-Accepts.prototype.charset =
-Accepts.prototype.charsets = function (charsets_) {
- var charsets = charsets_
-
- // support flattened arguments
- if (charsets && !Array.isArray(charsets)) {
- charsets = new Array(arguments.length)
- for (var i = 0; i < charsets.length; i++) {
- charsets[i] = arguments[i]
- }
- }
-
- // no charsets, return all requested charsets
- if (!charsets || charsets.length === 0) {
- return this.negotiator.charsets()
- }
-
- return this.negotiator.charsets(charsets)[0] || false
-}
-
-/**
- * Return accepted languages or best fit based on `langs`.
- *
- * Given `Accept-Language: en;q=0.8, es, pt`
- * an array sorted by quality is returned:
- *
- * ['es', 'pt', 'en']
- *
- * @param {String|Array} langs...
- * @return {Array|String}
- * @public
- */
-
-Accepts.prototype.lang =
-Accepts.prototype.langs =
-Accepts.prototype.language =
-Accepts.prototype.languages = function (languages_) {
- var languages = languages_
-
- // support flattened arguments
- if (languages && !Array.isArray(languages)) {
- languages = new Array(arguments.length)
- for (var i = 0; i < languages.length; i++) {
- languages[i] = arguments[i]
- }
- }
-
- // no languages, return all requested languages
- if (!languages || languages.length === 0) {
- return this.negotiator.languages()
- }
-
- return this.negotiator.languages(languages)[0] || false
-}
-
-/**
- * Convert extnames to mime.
- *
- * @param {String} type
- * @return {String}
- * @private
- */
-
-function extToMime (type) {
- return type.indexOf('/') === -1
- ? mime.lookup(type)
- : type
-}
-
-/**
- * Check if mime is valid.
- *
- * @param {String} type
- * @return {Boolean}
- * @private
- */
-
-function validMime (type) {
- return typeof type === 'string'
-}
diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json
deleted file mode 100644
index b35b262..0000000
--- a/node_modules/accepts/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "accepts",
- "description": "Higher-level content negotiation",
- "version": "2.0.0",
- "contributors": [
- "Douglas Christopher Wilson ",
- "Jonathan Ong (http://jongleberry.com)"
- ],
- "license": "MIT",
- "repository": "jshttp/accepts",
- "dependencies": {
- "mime-types": "^3.0.0",
- "negotiator": "^1.0.0"
- },
- "devDependencies": {
- "deep-equal": "1.0.1",
- "eslint": "7.32.0",
- "eslint-config-standard": "14.1.1",
- "eslint-plugin-import": "2.25.4",
- "eslint-plugin-markdown": "2.2.1",
- "eslint-plugin-node": "11.1.0",
- "eslint-plugin-promise": "4.3.1",
- "eslint-plugin-standard": "4.1.0",
- "mocha": "9.2.0",
- "nyc": "15.1.0"
- },
- "files": [
- "LICENSE",
- "HISTORY.md",
- "index.js"
- ],
- "engines": {
- "node": ">= 0.6"
- },
- "scripts": {
- "lint": "eslint .",
- "test": "mocha --reporter spec --check-leaks --bail test/",
- "test-ci": "nyc --reporter=lcov --reporter=text npm test",
- "test-cov": "nyc --reporter=html --reporter=text npm test"
- },
- "keywords": [
- "content",
- "negotiation",
- "accept",
- "accepts"
- ]
-}
diff --git a/node_modules/argparse/CHANGELOG.md b/node_modules/argparse/CHANGELOG.md
deleted file mode 100644
index dc39ed6..0000000
--- a/node_modules/argparse/CHANGELOG.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-
-## [2.0.1] - 2020-08-29
-### Fixed
-- Fix issue with `process.argv` when used with interpreters (`coffee`, `ts-node`, etc.), #150.
-
-
-## [2.0.0] - 2020-08-14
-### Changed
-- Full rewrite. Now port from python 3.9.0 & more precise following.
- See [doc](./doc) for difference and migration info.
-- node.js 10+ required
-- Removed most of local docs in favour of original ones.
-
-
-## [1.0.10] - 2018-02-15
-### Fixed
-- Use .concat instead of + for arrays, #122.
-
-
-## [1.0.9] - 2016-09-29
-### Changed
-- Rerelease after 1.0.8 - deps cleanup.
-
-
-## [1.0.8] - 2016-09-29
-### Changed
-- Maintenance (deps bump, fix node 6.5+ tests, coverage report).
-
-
-## [1.0.7] - 2016-03-17
-### Changed
-- Teach `addArgument` to accept string arg names. #97, @tomxtobin.
-
-
-## [1.0.6] - 2016-02-06
-### Changed
-- Maintenance: moved to eslint & updated CS.
-
-
-## [1.0.5] - 2016-02-05
-### Changed
-- Removed lodash dependency to significantly reduce install size.
- Thanks to @mourner.
-
-
-## [1.0.4] - 2016-01-17
-### Changed
-- Maintenance: lodash update to 4.0.0.
-
-
-## [1.0.3] - 2015-10-27
-### Fixed
-- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple.
-
-
-## [1.0.2] - 2015-03-22
-### Changed
-- Relaxed lodash version dependency.
-
-
-## [1.0.1] - 2015-02-20
-### Changed
-- Changed dependencies to be compatible with ancient nodejs.
-
-
-## [1.0.0] - 2015-02-19
-### Changed
-- Maintenance release.
-- Replaced `underscore` with `lodash`.
-- Bumped version to 1.0.0 to better reflect semver meaning.
-- HISTORY.md -> CHANGELOG.md
-
-
-## [0.1.16] - 2013-12-01
-### Changed
-- Maintenance release. Updated dependencies and docs.
-
-
-## [0.1.15] - 2013-05-13
-### Fixed
-- Fixed #55, @trebor89
-
-
-## [0.1.14] - 2013-05-12
-### Fixed
-- Fixed #62, @maxtaco
-
-
-## [0.1.13] - 2013-04-08
-### Changed
-- Added `.npmignore` to reduce package size
-
-
-## [0.1.12] - 2013-02-10
-### Fixed
-- Fixed conflictHandler (#46), @hpaulj
-
-
-## [0.1.11] - 2013-02-07
-### Added
-- Added 70+ tests (ported from python), @hpaulj
-- Added conflictHandler, @applepicke
-- Added fromfilePrefixChar, @hpaulj
-
-### Fixed
-- Multiple bugfixes, @hpaulj
-
-
-## [0.1.10] - 2012-12-30
-### Added
-- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion)
- support, thanks to @hpaulj
-
-### Fixed
-- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj
-
-
-## [0.1.9] - 2012-12-27
-### Fixed
-- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj
-- Fixed default value behavior with `*` positionals, thanks to @hpaulj
-- Improve `getDefault()` behavior, thanks to @hpaulj
-- Improve negative argument parsing, thanks to @hpaulj
-
-
-## [0.1.8] - 2012-12-01
-### Fixed
-- Fixed parser parents (issue #19), thanks to @hpaulj
-- Fixed negative argument parse (issue #20), thanks to @hpaulj
-
-
-## [0.1.7] - 2012-10-14
-### Fixed
-- Fixed 'choices' argument parse (issue #16)
-- Fixed stderr output (issue #15)
-
-
-## [0.1.6] - 2012-09-09
-### Fixed
-- Fixed check for conflict of options (thanks to @tomxtobin)
-
-
-## [0.1.5] - 2012-09-03
-### Fixed
-- Fix parser #setDefaults method (thanks to @tomxtobin)
-
-
-## [0.1.4] - 2012-07-30
-### Fixed
-- Fixed pseudo-argument support (thanks to @CGamesPlay)
-- Fixed addHelp default (should be true), if not set (thanks to @benblank)
-
-
-## [0.1.3] - 2012-06-27
-### Fixed
-- Fixed formatter api name: Formatter -> HelpFormatter
-
-
-## [0.1.2] - 2012-05-29
-### Fixed
-- Removed excess whitespace in help
-- Fixed error reporting, when parcer with subcommands
- called with empty arguments
-
-### Added
-- Added basic tests
-
-
-## [0.1.1] - 2012-05-23
-### Fixed
-- Fixed line wrapping in help formatter
-- Added better error reporting on invalid arguments
-
-
-## [0.1.0] - 2012-05-16
-### Added
-- First release.
-
-
-[2.0.1]: https://github.com/nodeca/argparse/compare/2.0.0...2.0.1
-[2.0.0]: https://github.com/nodeca/argparse/compare/1.0.10...2.0.0
-[1.0.10]: https://github.com/nodeca/argparse/compare/1.0.9...1.0.10
-[1.0.9]: https://github.com/nodeca/argparse/compare/1.0.8...1.0.9
-[1.0.8]: https://github.com/nodeca/argparse/compare/1.0.7...1.0.8
-[1.0.7]: https://github.com/nodeca/argparse/compare/1.0.6...1.0.7
-[1.0.6]: https://github.com/nodeca/argparse/compare/1.0.5...1.0.6
-[1.0.5]: https://github.com/nodeca/argparse/compare/1.0.4...1.0.5
-[1.0.4]: https://github.com/nodeca/argparse/compare/1.0.3...1.0.4
-[1.0.3]: https://github.com/nodeca/argparse/compare/1.0.2...1.0.3
-[1.0.2]: https://github.com/nodeca/argparse/compare/1.0.1...1.0.2
-[1.0.1]: https://github.com/nodeca/argparse/compare/1.0.0...1.0.1
-[1.0.0]: https://github.com/nodeca/argparse/compare/0.1.16...1.0.0
-[0.1.16]: https://github.com/nodeca/argparse/compare/0.1.15...0.1.16
-[0.1.15]: https://github.com/nodeca/argparse/compare/0.1.14...0.1.15
-[0.1.14]: https://github.com/nodeca/argparse/compare/0.1.13...0.1.14
-[0.1.13]: https://github.com/nodeca/argparse/compare/0.1.12...0.1.13
-[0.1.12]: https://github.com/nodeca/argparse/compare/0.1.11...0.1.12
-[0.1.11]: https://github.com/nodeca/argparse/compare/0.1.10...0.1.11
-[0.1.10]: https://github.com/nodeca/argparse/compare/0.1.9...0.1.10
-[0.1.9]: https://github.com/nodeca/argparse/compare/0.1.8...0.1.9
-[0.1.8]: https://github.com/nodeca/argparse/compare/0.1.7...0.1.8
-[0.1.7]: https://github.com/nodeca/argparse/compare/0.1.6...0.1.7
-[0.1.6]: https://github.com/nodeca/argparse/compare/0.1.5...0.1.6
-[0.1.5]: https://github.com/nodeca/argparse/compare/0.1.4...0.1.5
-[0.1.4]: https://github.com/nodeca/argparse/compare/0.1.3...0.1.4
-[0.1.3]: https://github.com/nodeca/argparse/compare/0.1.2...0.1.3
-[0.1.2]: https://github.com/nodeca/argparse/compare/0.1.1...0.1.2
-[0.1.1]: https://github.com/nodeca/argparse/compare/0.1.0...0.1.1
-[0.1.0]: https://github.com/nodeca/argparse/releases/tag/0.1.0
diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE
deleted file mode 100644
index 66a3ac8..0000000
--- a/node_modules/argparse/LICENSE
+++ /dev/null
@@ -1,254 +0,0 @@
-A. HISTORY OF THE SOFTWARE
-==========================
-
-Python was created in the early 1990s by Guido van Rossum at Stichting
-Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
-as a successor of a language called ABC. Guido remains Python's
-principal author, although it includes many contributions from others.
-
-In 1995, Guido continued his work on Python at the Corporation for
-National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
-in Reston, Virginia where he released several versions of the
-software.
-
-In May 2000, Guido and the Python core development team moved to
-BeOpen.com to form the BeOpen PythonLabs team. In October of the same
-year, the PythonLabs team moved to Digital Creations, which became
-Zope Corporation. In 2001, the Python Software Foundation (PSF, see
-https://www.python.org/psf/) was formed, a non-profit organization
-created specifically to own Python-related Intellectual Property.
-Zope Corporation was a sponsoring member of the PSF.
-
-All Python releases are Open Source (see http://www.opensource.org for
-the Open Source Definition). Historically, most, but not all, Python
-releases have also been GPL-compatible; the table below summarizes
-the various releases.
-
- Release Derived Year Owner GPL-
- from compatible? (1)
-
- 0.9.0 thru 1.2 1991-1995 CWI yes
- 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
- 1.6 1.5.2 2000 CNRI no
- 2.0 1.6 2000 BeOpen.com no
- 1.6.1 1.6 2001 CNRI yes (2)
- 2.1 2.0+1.6.1 2001 PSF no
- 2.0.1 2.0+1.6.1 2001 PSF yes
- 2.1.1 2.1+2.0.1 2001 PSF yes
- 2.1.2 2.1.1 2002 PSF yes
- 2.1.3 2.1.2 2002 PSF yes
- 2.2 and above 2.1.1 2001-now PSF yes
-
-Footnotes:
-
-(1) GPL-compatible doesn't mean that we're distributing Python under
- the GPL. All Python licenses, unlike the GPL, let you distribute
- a modified version without making your changes open source. The
- GPL-compatible licenses make it possible to combine Python with
- other software that is released under the GPL; the others don't.
-
-(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
- because its license has a choice of law clause. According to
- CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
- is "not incompatible" with the GPL.
-
-Thanks to the many outside volunteers who have worked under Guido's
-direction to make these releases possible.
-
-
-B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
-===============================================================
-
-PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
---------------------------------------------
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation
-("PSF"), and the Individual or Organization ("Licensee") accessing and
-otherwise using this software ("Python") in source or binary form and
-its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, PSF hereby
-grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
-analyze, test, perform and/or display publicly, prepare derivative works,
-distribute, and otherwise use Python alone or in any derivative version,
-provided, however, that PSF's License Agreement and PSF's notice of copyright,
-i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Python Software Foundation;
-All Rights Reserved" are retained in Python alone or in any derivative version
-prepared by Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python.
-
-4. PSF is making Python available to Licensee on an "AS IS"
-basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any
-relationship of agency, partnership, or joint venture between PSF and
-Licensee. This License Agreement does not grant permission to use PSF
-trademarks or trade name in a trademark sense to endorse or promote
-products or services of Licensee, or any third party.
-
-8. By copying, installing or otherwise using Python, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
--------------------------------------------
-
-BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
-
-1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
-office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
-Individual or Organization ("Licensee") accessing and otherwise using
-this software in source or binary form and its associated
-documentation ("the Software").
-
-2. Subject to the terms and conditions of this BeOpen Python License
-Agreement, BeOpen hereby grants Licensee a non-exclusive,
-royalty-free, world-wide license to reproduce, analyze, test, perform
-and/or display publicly, prepare derivative works, distribute, and
-otherwise use the Software alone or in any derivative version,
-provided, however, that the BeOpen Python License is retained in the
-Software, alone or in any derivative version prepared by Licensee.
-
-3. BeOpen is making the Software available to Licensee on an "AS IS"
-basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
-SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
-AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
-DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-5. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-6. This License Agreement shall be governed by and interpreted in all
-respects by the law of the State of California, excluding conflict of
-law provisions. Nothing in this License Agreement shall be deemed to
-create any relationship of agency, partnership, or joint venture
-between BeOpen and Licensee. This License Agreement does not grant
-permission to use BeOpen trademarks or trade names in a trademark
-sense to endorse or promote products or services of Licensee, or any
-third party. As an exception, the "BeOpen Python" logos available at
-http://www.pythonlabs.com/logos.html may be used according to the
-permissions granted on that web page.
-
-7. By copying, installing or otherwise using the software, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
----------------------------------------
-
-1. This LICENSE AGREEMENT is between the Corporation for National
-Research Initiatives, having an office at 1895 Preston White Drive,
-Reston, VA 20191 ("CNRI"), and the Individual or Organization
-("Licensee") accessing and otherwise using Python 1.6.1 software in
-source or binary form and its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, CNRI
-hereby grants Licensee a nonexclusive, royalty-free, world-wide
-license to reproduce, analyze, test, perform and/or display publicly,
-prepare derivative works, distribute, and otherwise use Python 1.6.1
-alone or in any derivative version, provided, however, that CNRI's
-License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
-1995-2001 Corporation for National Research Initiatives; All Rights
-Reserved" are retained in Python 1.6.1 alone or in any derivative
-version prepared by Licensee. Alternately, in lieu of CNRI's License
-Agreement, Licensee may substitute the following text (omitting the
-quotes): "Python 1.6.1 is made available subject to the terms and
-conditions in CNRI's License Agreement. This Agreement together with
-Python 1.6.1 may be located on the Internet using the following
-unique, persistent identifier (known as a handle): 1895.22/1013. This
-Agreement may also be obtained from a proxy server on the Internet
-using the following URL: http://hdl.handle.net/1895.22/1013".
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python 1.6.1 or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python 1.6.1.
-
-4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
-basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. This License Agreement shall be governed by the federal
-intellectual property law of the United States, including without
-limitation the federal copyright law, and, to the extent such
-U.S. federal law does not apply, by the law of the Commonwealth of
-Virginia, excluding Virginia's conflict of law provisions.
-Notwithstanding the foregoing, with regard to derivative works based
-on Python 1.6.1 that incorporate non-separable material that was
-previously distributed under the GNU General Public License (GPL), the
-law of the Commonwealth of Virginia shall govern this License
-Agreement only as to issues arising under or with respect to
-Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
-License Agreement shall be deemed to create any relationship of
-agency, partnership, or joint venture between CNRI and Licensee. This
-License Agreement does not grant permission to use CNRI trademarks or
-trade name in a trademark sense to endorse or promote products or
-services of Licensee, or any third party.
-
-8. By clicking on the "ACCEPT" button where indicated, or by copying,
-installing or otherwise using Python 1.6.1, Licensee agrees to be
-bound by the terms and conditions of this License Agreement.
-
- ACCEPT
-
-
-CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
---------------------------------------------------
-
-Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
-The Netherlands. All rights reserved.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md
deleted file mode 100644
index 550b5c9..0000000
--- a/node_modules/argparse/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-argparse
-========
-
-[](http://travis-ci.org/nodeca/argparse)
-[](https://www.npmjs.org/package/argparse)
-
-CLI arguments parser for node.js, with [sub-commands](https://docs.python.org/3.9/library/argparse.html#sub-commands) support. Port of python's [argparse](http://docs.python.org/dev/library/argparse.html) (version [3.9.0](https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py)).
-
-**Difference with original.**
-
-- JS has no keyword arguments support.
- - Pass options instead: `new ArgumentParser({ description: 'example', add_help: true })`.
-- JS has no python's types `int`, `float`, ...
- - Use string-typed names: `.add_argument('-b', { type: 'int', help: 'help' })`.
-- `%r` format specifier uses `require('util').inspect()`.
-
-More details in [doc](./doc).
-
-
-Example
--------
-
-`test.js` file:
-
-```javascript
-#!/usr/bin/env node
-'use strict';
-
-const { ArgumentParser } = require('argparse');
-const { version } = require('./package.json');
-
-const parser = new ArgumentParser({
- description: 'Argparse example'
-});
-
-parser.add_argument('-v', '--version', { action: 'version', version });
-parser.add_argument('-f', '--foo', { help: 'foo bar' });
-parser.add_argument('-b', '--bar', { help: 'bar foo' });
-parser.add_argument('--baz', { help: 'baz bar' });
-
-console.dir(parser.parse_args());
-```
-
-Display help:
-
-```
-$ ./test.js -h
-usage: test.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ]
-
-Argparse example
-
-optional arguments:
- -h, --help show this help message and exit
- -v, --version show program's version number and exit
- -f FOO, --foo FOO foo bar
- -b BAR, --bar BAR bar foo
- --baz BAZ baz bar
-```
-
-Parse arguments:
-
-```
-$ ./test.js -f=3 --bar=4 --baz 5
-{ foo: '3', bar: '4', baz: '5' }
-```
-
-
-API docs
---------
-
-Since this is a port with minimal divergence, there's no separate documentation.
-Use original one instead, with notes about difference.
-
-1. [Original doc](https://docs.python.org/3.9/library/argparse.html).
-2. [Original tutorial](https://docs.python.org/3.9/howto/argparse.html).
-3. [Difference with python](./doc).
-
-
-argparse for enterprise
------------------------
-
-Available as part of the Tidelift Subscription
-
-The maintainers of argparse and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-argparse?utm_source=npm-argparse&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
diff --git a/node_modules/argparse/argparse.js b/node_modules/argparse/argparse.js
deleted file mode 100644
index 2b8c8c6..0000000
--- a/node_modules/argparse/argparse.js
+++ /dev/null
@@ -1,3707 +0,0 @@
-// Port of python's argparse module, version 3.9.0:
-// https://github.com/python/cpython/blob/v3.9.0rc1/Lib/argparse.py
-
-'use strict'
-
-// Copyright (C) 2010-2020 Python Software Foundation.
-// Copyright (C) 2020 argparse.js authors
-
-/*
- * Command-line parsing library
- *
- * This module is an optparse-inspired command-line parsing library that:
- *
- * - handles both optional and positional arguments
- * - produces highly informative usage messages
- * - supports parsers that dispatch to sub-parsers
- *
- * The following is a simple usage example that sums integers from the
- * command-line and writes the result to a file::
- *
- * parser = argparse.ArgumentParser(
- * description='sum the integers at the command line')
- * parser.add_argument(
- * 'integers', metavar='int', nargs='+', type=int,
- * help='an integer to be summed')
- * parser.add_argument(
- * '--log', default=sys.stdout, type=argparse.FileType('w'),
- * help='the file where the sum should be written')
- * args = parser.parse_args()
- * args.log.write('%s' % sum(args.integers))
- * args.log.close()
- *
- * The module contains the following public classes:
- *
- * - ArgumentParser -- The main entry point for command-line parsing. As the
- * example above shows, the add_argument() method is used to populate
- * the parser with actions for optional and positional arguments. Then
- * the parse_args() method is invoked to convert the args at the
- * command-line into an object with attributes.
- *
- * - ArgumentError -- The exception raised by ArgumentParser objects when
- * there are errors with the parser's actions. Errors raised while
- * parsing the command-line are caught by ArgumentParser and emitted
- * as command-line messages.
- *
- * - FileType -- A factory for defining types of files to be created. As the
- * example above shows, instances of FileType are typically passed as
- * the type= argument of add_argument() calls.
- *
- * - Action -- The base class for parser actions. Typically actions are
- * selected by passing strings like 'store_true' or 'append_const' to
- * the action= argument of add_argument(). However, for greater
- * customization of ArgumentParser actions, subclasses of Action may
- * be defined and passed as the action= argument.
- *
- * - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,
- * ArgumentDefaultsHelpFormatter -- Formatter classes which
- * may be passed as the formatter_class= argument to the
- * ArgumentParser constructor. HelpFormatter is the default,
- * RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser
- * not to change the formatting for help text, and
- * ArgumentDefaultsHelpFormatter adds information about argument defaults
- * to the help.
- *
- * All other classes in this module are considered implementation details.
- * (Also note that HelpFormatter and RawDescriptionHelpFormatter are only
- * considered public as object names -- the API of the formatter objects is
- * still considered an implementation detail.)
- */
-
-const SUPPRESS = '==SUPPRESS=='
-
-const OPTIONAL = '?'
-const ZERO_OR_MORE = '*'
-const ONE_OR_MORE = '+'
-const PARSER = 'A...'
-const REMAINDER = '...'
-const _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
-
-
-// ==================================
-// Utility functions used for porting
-// ==================================
-const assert = require('assert')
-const util = require('util')
-const fs = require('fs')
-const sub = require('./lib/sub')
-const path = require('path')
-const repr = util.inspect
-
-function get_argv() {
- // omit first argument (which is assumed to be interpreter - `node`, `coffee`, `ts-node`, etc.)
- return process.argv.slice(1)
-}
-
-function get_terminal_size() {
- return {
- columns: +process.env.COLUMNS || process.stdout.columns || 80
- }
-}
-
-function hasattr(object, name) {
- return Object.prototype.hasOwnProperty.call(object, name)
-}
-
-function getattr(object, name, value) {
- return hasattr(object, name) ? object[name] : value
-}
-
-function setattr(object, name, value) {
- object[name] = value
-}
-
-function setdefault(object, name, value) {
- if (!hasattr(object, name)) object[name] = value
- return object[name]
-}
-
-function delattr(object, name) {
- delete object[name]
-}
-
-function range(from, to, step=1) {
- // range(10) is equivalent to range(0, 10)
- if (arguments.length === 1) [ to, from ] = [ from, 0 ]
- if (typeof from !== 'number' || typeof to !== 'number' || typeof step !== 'number') {
- throw new TypeError('argument cannot be interpreted as an integer')
- }
- if (step === 0) throw new TypeError('range() arg 3 must not be zero')
-
- let result = []
- if (step > 0) {
- for (let i = from; i < to; i += step) result.push(i)
- } else {
- for (let i = from; i > to; i += step) result.push(i)
- }
- return result
-}
-
-function splitlines(str, keepends = false) {
- let result
- if (!keepends) {
- result = str.split(/\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029]/)
- } else {
- result = []
- let parts = str.split(/(\r\n|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029])/)
- for (let i = 0; i < parts.length; i += 2) {
- result.push(parts[i] + (i + 1 < parts.length ? parts[i + 1] : ''))
- }
- }
- if (!result[result.length - 1]) result.pop()
- return result
-}
-
-function _string_lstrip(string, prefix_chars) {
- let idx = 0
- while (idx < string.length && prefix_chars.includes(string[idx])) idx++
- return idx ? string.slice(idx) : string
-}
-
-function _string_split(string, sep, maxsplit) {
- let result = string.split(sep)
- if (result.length > maxsplit) {
- result = result.slice(0, maxsplit).concat([ result.slice(maxsplit).join(sep) ])
- }
- return result
-}
-
-function _array_equal(array1, array2) {
- if (array1.length !== array2.length) return false
- for (let i = 0; i < array1.length; i++) {
- if (array1[i] !== array2[i]) return false
- }
- return true
-}
-
-function _array_remove(array, item) {
- let idx = array.indexOf(item)
- if (idx === -1) throw new TypeError(sub('%r not in list', item))
- array.splice(idx, 1)
-}
-
-// normalize choices to array;
-// this isn't required in python because `in` and `map` operators work with anything,
-// but in js dealing with multiple types here is too clunky
-function _choices_to_array(choices) {
- if (choices === undefined) {
- return []
- } else if (Array.isArray(choices)) {
- return choices
- } else if (choices !== null && typeof choices[Symbol.iterator] === 'function') {
- return Array.from(choices)
- } else if (typeof choices === 'object' && choices !== null) {
- return Object.keys(choices)
- } else {
- throw new Error(sub('invalid choices value: %r', choices))
- }
-}
-
-// decorator that allows a class to be called without new
-function _callable(cls) {
- let result = { // object is needed for inferred class name
- [cls.name]: function (...args) {
- let this_class = new.target === result || !new.target
- return Reflect.construct(cls, args, this_class ? cls : new.target)
- }
- }
- result[cls.name].prototype = cls.prototype
- // fix default tag for toString, e.g. [object Action] instead of [object Object]
- cls.prototype[Symbol.toStringTag] = cls.name
- return result[cls.name]
-}
-
-function _alias(object, from, to) {
- try {
- let name = object.constructor.name
- Object.defineProperty(object, from, {
- value: util.deprecate(object[to], sub('%s.%s() is renamed to %s.%s()',
- name, from, name, to)),
- enumerable: false
- })
- } catch {}
-}
-
-// decorator that allows snake_case class methods to be called with camelCase and vice versa
-function _camelcase_alias(_class) {
- for (let name of Object.getOwnPropertyNames(_class.prototype)) {
- let camelcase = name.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase())
- if (camelcase !== name) _alias(_class.prototype, camelcase, name)
- }
- return _class
-}
-
-function _to_legacy_name(key) {
- key = key.replace(/\w_[a-z]/g, s => s[0] + s[2].toUpperCase())
- if (key === 'default') key = 'defaultValue'
- if (key === 'const') key = 'constant'
- return key
-}
-
-function _to_new_name(key) {
- if (key === 'defaultValue') key = 'default'
- if (key === 'constant') key = 'const'
- key = key.replace(/[A-Z]/g, c => '_' + c.toLowerCase())
- return key
-}
-
-// parse options
-let no_default = Symbol('no_default_value')
-function _parse_opts(args, descriptor) {
- function get_name() {
- let stack = new Error().stack.split('\n')
- .map(x => x.match(/^ at (.*) \(.*\)$/))
- .filter(Boolean)
- .map(m => m[1])
- .map(fn => fn.match(/[^ .]*$/)[0])
-
- if (stack.length && stack[0] === get_name.name) stack.shift()
- if (stack.length && stack[0] === _parse_opts.name) stack.shift()
- return stack.length ? stack[0] : ''
- }
-
- args = Array.from(args)
- let kwargs = {}
- let result = []
- let last_opt = args.length && args[args.length - 1]
-
- if (typeof last_opt === 'object' && last_opt !== null && !Array.isArray(last_opt) &&
- (!last_opt.constructor || last_opt.constructor.name === 'Object')) {
- kwargs = Object.assign({}, args.pop())
- }
-
- // LEGACY (v1 compatibility): camelcase
- let renames = []
- for (let key of Object.keys(descriptor)) {
- let old_name = _to_legacy_name(key)
- if (old_name !== key && (old_name in kwargs)) {
- if (key in kwargs) {
- // default and defaultValue specified at the same time, happens often in old tests
- //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key))
- } else {
- kwargs[key] = kwargs[old_name]
- }
- renames.push([ old_name, key ])
- delete kwargs[old_name]
- }
- }
- if (renames.length) {
- let name = get_name()
- deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s',
- name, renames.map(([ a, b ]) => sub('%r -> %r', a, b))))
- }
- // end
-
- let missing_positionals = []
- let positional_count = args.length
-
- for (let [ key, def ] of Object.entries(descriptor)) {
- if (key[0] === '*') {
- if (key.length > 0 && key[1] === '*') {
- // LEGACY (v1 compatibility): camelcase
- let renames = []
- for (let key of Object.keys(kwargs)) {
- let new_name = _to_new_name(key)
- if (new_name !== key && (key in kwargs)) {
- if (new_name in kwargs) {
- // default and defaultValue specified at the same time, happens often in old tests
- //throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), new_name))
- } else {
- kwargs[new_name] = kwargs[key]
- }
- renames.push([ key, new_name ])
- delete kwargs[key]
- }
- }
- if (renames.length) {
- let name = get_name()
- deprecate('camelcase_' + name, sub('%s(): following options are renamed: %s',
- name, renames.map(([ a, b ]) => sub('%r -> %r', a, b))))
- }
- // end
- result.push(kwargs)
- kwargs = {}
- } else {
- result.push(args)
- args = []
- }
- } else if (key in kwargs && args.length > 0) {
- throw new TypeError(sub('%s() got multiple values for argument %r', get_name(), key))
- } else if (key in kwargs) {
- result.push(kwargs[key])
- delete kwargs[key]
- } else if (args.length > 0) {
- result.push(args.shift())
- } else if (def !== no_default) {
- result.push(def)
- } else {
- missing_positionals.push(key)
- }
- }
-
- if (Object.keys(kwargs).length) {
- throw new TypeError(sub('%s() got an unexpected keyword argument %r',
- get_name(), Object.keys(kwargs)[0]))
- }
-
- if (args.length) {
- let from = Object.entries(descriptor).filter(([ k, v ]) => k[0] !== '*' && v !== no_default).length
- let to = Object.entries(descriptor).filter(([ k ]) => k[0] !== '*').length
- throw new TypeError(sub('%s() takes %s positional argument%s but %s %s given',
- get_name(),
- from === to ? sub('from %s to %s', from, to) : to,
- from === to && to === 1 ? '' : 's',
- positional_count,
- positional_count === 1 ? 'was' : 'were'))
- }
-
- if (missing_positionals.length) {
- let strs = missing_positionals.map(repr)
- if (strs.length > 1) strs[strs.length - 1] = 'and ' + strs[strs.length - 1]
- let str_joined = strs.join(strs.length === 2 ? '' : ', ')
- throw new TypeError(sub('%s() missing %i required positional argument%s: %s',
- get_name(), strs.length, strs.length === 1 ? '' : 's', str_joined))
- }
-
- return result
-}
-
-let _deprecations = {}
-function deprecate(id, string) {
- _deprecations[id] = _deprecations[id] || util.deprecate(() => {}, string)
- _deprecations[id]()
-}
-
-
-// =============================
-// Utility functions and classes
-// =============================
-function _AttributeHolder(cls = Object) {
- /*
- * Abstract base class that provides __repr__.
- *
- * The __repr__ method returns a string in the format::
- * ClassName(attr=name, attr=name, ...)
- * The attributes are determined either by a class-level attribute,
- * '_kwarg_names', or by inspecting the instance __dict__.
- */
-
- return class _AttributeHolder extends cls {
- [util.inspect.custom]() {
- let type_name = this.constructor.name
- let arg_strings = []
- let star_args = {}
- for (let arg of this._get_args()) {
- arg_strings.push(repr(arg))
- }
- for (let [ name, value ] of this._get_kwargs()) {
- if (/^[a-z_][a-z0-9_$]*$/i.test(name)) {
- arg_strings.push(sub('%s=%r', name, value))
- } else {
- star_args[name] = value
- }
- }
- if (Object.keys(star_args).length) {
- arg_strings.push(sub('**%s', repr(star_args)))
- }
- return sub('%s(%s)', type_name, arg_strings.join(', '))
- }
-
- toString() {
- return this[util.inspect.custom]()
- }
-
- _get_kwargs() {
- return Object.entries(this)
- }
-
- _get_args() {
- return []
- }
- }
-}
-
-
-function _copy_items(items) {
- if (items === undefined) {
- return []
- }
- return items.slice(0)
-}
-
-
-// ===============
-// Formatting Help
-// ===============
-const HelpFormatter = _camelcase_alias(_callable(class HelpFormatter {
- /*
- * Formatter for generating usage messages and argument help strings.
- *
- * Only the name of this class is considered a public API. All the methods
- * provided by the class are considered an implementation detail.
- */
-
- constructor() {
- let [
- prog,
- indent_increment,
- max_help_position,
- width
- ] = _parse_opts(arguments, {
- prog: no_default,
- indent_increment: 2,
- max_help_position: 24,
- width: undefined
- })
-
- // default setting for width
- if (width === undefined) {
- width = get_terminal_size().columns
- width -= 2
- }
-
- this._prog = prog
- this._indent_increment = indent_increment
- this._max_help_position = Math.min(max_help_position,
- Math.max(width - 20, indent_increment * 2))
- this._width = width
-
- this._current_indent = 0
- this._level = 0
- this._action_max_length = 0
-
- this._root_section = this._Section(this, undefined)
- this._current_section = this._root_section
-
- this._whitespace_matcher = /[ \t\n\r\f\v]+/g // equivalent to python /\s+/ with ASCII flag
- this._long_break_matcher = /\n\n\n+/g
- }
-
- // ===============================
- // Section and indentation methods
- // ===============================
- _indent() {
- this._current_indent += this._indent_increment
- this._level += 1
- }
-
- _dedent() {
- this._current_indent -= this._indent_increment
- assert(this._current_indent >= 0, 'Indent decreased below 0.')
- this._level -= 1
- }
-
- _add_item(func, args) {
- this._current_section.items.push([ func, args ])
- }
-
- // ========================
- // Message building methods
- // ========================
- start_section(heading) {
- this._indent()
- let section = this._Section(this, this._current_section, heading)
- this._add_item(section.format_help.bind(section), [])
- this._current_section = section
- }
-
- end_section() {
- this._current_section = this._current_section.parent
- this._dedent()
- }
-
- add_text(text) {
- if (text !== SUPPRESS && text !== undefined) {
- this._add_item(this._format_text.bind(this), [text])
- }
- }
-
- add_usage(usage, actions, groups, prefix = undefined) {
- if (usage !== SUPPRESS) {
- let args = [ usage, actions, groups, prefix ]
- this._add_item(this._format_usage.bind(this), args)
- }
- }
-
- add_argument(action) {
- if (action.help !== SUPPRESS) {
-
- // find all invocations
- let invocations = [this._format_action_invocation(action)]
- for (let subaction of this._iter_indented_subactions(action)) {
- invocations.push(this._format_action_invocation(subaction))
- }
-
- // update the maximum item length
- let invocation_length = Math.max(...invocations.map(invocation => invocation.length))
- let action_length = invocation_length + this._current_indent
- this._action_max_length = Math.max(this._action_max_length,
- action_length)
-
- // add the item to the list
- this._add_item(this._format_action.bind(this), [action])
- }
- }
-
- add_arguments(actions) {
- for (let action of actions) {
- this.add_argument(action)
- }
- }
-
- // =======================
- // Help-formatting methods
- // =======================
- format_help() {
- let help = this._root_section.format_help()
- if (help) {
- help = help.replace(this._long_break_matcher, '\n\n')
- help = help.replace(/^\n+|\n+$/g, '') + '\n'
- }
- return help
- }
-
- _join_parts(part_strings) {
- return part_strings.filter(part => part && part !== SUPPRESS).join('')
- }
-
- _format_usage(usage, actions, groups, prefix) {
- if (prefix === undefined) {
- prefix = 'usage: '
- }
-
- // if usage is specified, use that
- if (usage !== undefined) {
- usage = sub(usage, { prog: this._prog })
-
- // if no optionals or positionals are available, usage is just prog
- } else if (usage === undefined && !actions.length) {
- usage = sub('%(prog)s', { prog: this._prog })
-
- // if optionals and positionals are available, calculate usage
- } else if (usage === undefined) {
- let prog = sub('%(prog)s', { prog: this._prog })
-
- // split optionals from positionals
- let optionals = []
- let positionals = []
- for (let action of actions) {
- if (action.option_strings.length) {
- optionals.push(action)
- } else {
- positionals.push(action)
- }
- }
-
- // build full usage string
- let action_usage = this._format_actions_usage([].concat(optionals).concat(positionals), groups)
- usage = [ prog, action_usage ].map(String).join(' ')
-
- // wrap the usage parts if it's too long
- let text_width = this._width - this._current_indent
- if (prefix.length + usage.length > text_width) {
-
- // break usage into wrappable parts
- let part_regexp = /\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+/g
- let opt_usage = this._format_actions_usage(optionals, groups)
- let pos_usage = this._format_actions_usage(positionals, groups)
- let opt_parts = opt_usage.match(part_regexp) || []
- let pos_parts = pos_usage.match(part_regexp) || []
- assert(opt_parts.join(' ') === opt_usage)
- assert(pos_parts.join(' ') === pos_usage)
-
- // helper for wrapping lines
- let get_lines = (parts, indent, prefix = undefined) => {
- let lines = []
- let line = []
- let line_len
- if (prefix !== undefined) {
- line_len = prefix.length - 1
- } else {
- line_len = indent.length - 1
- }
- for (let part of parts) {
- if (line_len + 1 + part.length > text_width && line) {
- lines.push(indent + line.join(' '))
- line = []
- line_len = indent.length - 1
- }
- line.push(part)
- line_len += part.length + 1
- }
- if (line.length) {
- lines.push(indent + line.join(' '))
- }
- if (prefix !== undefined) {
- lines[0] = lines[0].slice(indent.length)
- }
- return lines
- }
-
- let lines
-
- // if prog is short, follow it with optionals or positionals
- if (prefix.length + prog.length <= 0.75 * text_width) {
- let indent = ' '.repeat(prefix.length + prog.length + 1)
- if (opt_parts.length) {
- lines = get_lines([prog].concat(opt_parts), indent, prefix)
- lines = lines.concat(get_lines(pos_parts, indent))
- } else if (pos_parts.length) {
- lines = get_lines([prog].concat(pos_parts), indent, prefix)
- } else {
- lines = [prog]
- }
-
- // if prog is long, put it on its own line
- } else {
- let indent = ' '.repeat(prefix.length)
- let parts = [].concat(opt_parts).concat(pos_parts)
- lines = get_lines(parts, indent)
- if (lines.length > 1) {
- lines = []
- lines = lines.concat(get_lines(opt_parts, indent))
- lines = lines.concat(get_lines(pos_parts, indent))
- }
- lines = [prog].concat(lines)
- }
-
- // join lines into usage
- usage = lines.join('\n')
- }
- }
-
- // prefix with 'usage:'
- return sub('%s%s\n\n', prefix, usage)
- }
-
- _format_actions_usage(actions, groups) {
- // find group indices and identify actions in groups
- let group_actions = new Set()
- let inserts = {}
- for (let group of groups) {
- let start = actions.indexOf(group._group_actions[0])
- if (start === -1) {
- continue
- } else {
- let end = start + group._group_actions.length
- if (_array_equal(actions.slice(start, end), group._group_actions)) {
- for (let action of group._group_actions) {
- group_actions.add(action)
- }
- if (!group.required) {
- if (start in inserts) {
- inserts[start] += ' ['
- } else {
- inserts[start] = '['
- }
- if (end in inserts) {
- inserts[end] += ']'
- } else {
- inserts[end] = ']'
- }
- } else {
- if (start in inserts) {
- inserts[start] += ' ('
- } else {
- inserts[start] = '('
- }
- if (end in inserts) {
- inserts[end] += ')'
- } else {
- inserts[end] = ')'
- }
- }
- for (let i of range(start + 1, end)) {
- inserts[i] = '|'
- }
- }
- }
- }
-
- // collect all actions format strings
- let parts = []
- for (let [ i, action ] of Object.entries(actions)) {
-
- // suppressed arguments are marked with None
- // remove | separators for suppressed arguments
- if (action.help === SUPPRESS) {
- parts.push(undefined)
- if (inserts[+i] === '|') {
- delete inserts[+i]
- } else if (inserts[+i + 1] === '|') {
- delete inserts[+i + 1]
- }
-
- // produce all arg strings
- } else if (!action.option_strings.length) {
- let default_value = this._get_default_metavar_for_positional(action)
- let part = this._format_args(action, default_value)
-
- // if it's in a group, strip the outer []
- if (group_actions.has(action)) {
- if (part[0] === '[' && part[part.length - 1] === ']') {
- part = part.slice(1, -1)
- }
- }
-
- // add the action string to the list
- parts.push(part)
-
- // produce the first way to invoke the option in brackets
- } else {
- let option_string = action.option_strings[0]
- let part
-
- // if the Optional doesn't take a value, format is:
- // -s or --long
- if (action.nargs === 0) {
- part = action.format_usage()
-
- // if the Optional takes a value, format is:
- // -s ARGS or --long ARGS
- } else {
- let default_value = this._get_default_metavar_for_optional(action)
- let args_string = this._format_args(action, default_value)
- part = sub('%s %s', option_string, args_string)
- }
-
- // make it look optional if it's not required or in a group
- if (!action.required && !group_actions.has(action)) {
- part = sub('[%s]', part)
- }
-
- // add the action string to the list
- parts.push(part)
- }
- }
-
- // insert things at the necessary indices
- for (let i of Object.keys(inserts).map(Number).sort((a, b) => b - a)) {
- parts.splice(+i, 0, inserts[+i])
- }
-
- // join all the action items with spaces
- let text = parts.filter(Boolean).join(' ')
-
- // clean up separators for mutually exclusive groups
- text = text.replace(/([\[(]) /g, '$1')
- text = text.replace(/ ([\])])/g, '$1')
- text = text.replace(/[\[(] *[\])]/g, '')
- text = text.replace(/\(([^|]*)\)/g, '$1', text)
- text = text.trim()
-
- // return the text
- return text
- }
-
- _format_text(text) {
- if (text.includes('%(prog)')) {
- text = sub(text, { prog: this._prog })
- }
- let text_width = Math.max(this._width - this._current_indent, 11)
- let indent = ' '.repeat(this._current_indent)
- return this._fill_text(text, text_width, indent) + '\n\n'
- }
-
- _format_action(action) {
- // determine the required width and the entry label
- let help_position = Math.min(this._action_max_length + 2,
- this._max_help_position)
- let help_width = Math.max(this._width - help_position, 11)
- let action_width = help_position - this._current_indent - 2
- let action_header = this._format_action_invocation(action)
- let indent_first
-
- // no help; start on same line and add a final newline
- if (!action.help) {
- let tup = [ this._current_indent, '', action_header ]
- action_header = sub('%*s%s\n', ...tup)
-
- // short action name; start on the same line and pad two spaces
- } else if (action_header.length <= action_width) {
- let tup = [ this._current_indent, '', action_width, action_header ]
- action_header = sub('%*s%-*s ', ...tup)
- indent_first = 0
-
- // long action name; start on the next line
- } else {
- let tup = [ this._current_indent, '', action_header ]
- action_header = sub('%*s%s\n', ...tup)
- indent_first = help_position
- }
-
- // collect the pieces of the action help
- let parts = [action_header]
-
- // if there was help for the action, add lines of help text
- if (action.help) {
- let help_text = this._expand_help(action)
- let help_lines = this._split_lines(help_text, help_width)
- parts.push(sub('%*s%s\n', indent_first, '', help_lines[0]))
- for (let line of help_lines.slice(1)) {
- parts.push(sub('%*s%s\n', help_position, '', line))
- }
-
- // or add a newline if the description doesn't end with one
- } else if (!action_header.endsWith('\n')) {
- parts.push('\n')
- }
-
- // if there are any sub-actions, add their help as well
- for (let subaction of this._iter_indented_subactions(action)) {
- parts.push(this._format_action(subaction))
- }
-
- // return a single string
- return this._join_parts(parts)
- }
-
- _format_action_invocation(action) {
- if (!action.option_strings.length) {
- let default_value = this._get_default_metavar_for_positional(action)
- let metavar = this._metavar_formatter(action, default_value)(1)[0]
- return metavar
-
- } else {
- let parts = []
-
- // if the Optional doesn't take a value, format is:
- // -s, --long
- if (action.nargs === 0) {
- parts = parts.concat(action.option_strings)
-
- // if the Optional takes a value, format is:
- // -s ARGS, --long ARGS
- } else {
- let default_value = this._get_default_metavar_for_optional(action)
- let args_string = this._format_args(action, default_value)
- for (let option_string of action.option_strings) {
- parts.push(sub('%s %s', option_string, args_string))
- }
- }
-
- return parts.join(', ')
- }
- }
-
- _metavar_formatter(action, default_metavar) {
- let result
- if (action.metavar !== undefined) {
- result = action.metavar
- } else if (action.choices !== undefined) {
- let choice_strs = _choices_to_array(action.choices).map(String)
- result = sub('{%s}', choice_strs.join(','))
- } else {
- result = default_metavar
- }
-
- function format(tuple_size) {
- if (Array.isArray(result)) {
- return result
- } else {
- return Array(tuple_size).fill(result)
- }
- }
- return format
- }
-
- _format_args(action, default_metavar) {
- let get_metavar = this._metavar_formatter(action, default_metavar)
- let result
- if (action.nargs === undefined) {
- result = sub('%s', ...get_metavar(1))
- } else if (action.nargs === OPTIONAL) {
- result = sub('[%s]', ...get_metavar(1))
- } else if (action.nargs === ZERO_OR_MORE) {
- let metavar = get_metavar(1)
- if (metavar.length === 2) {
- result = sub('[%s [%s ...]]', ...metavar)
- } else {
- result = sub('[%s ...]', ...metavar)
- }
- } else if (action.nargs === ONE_OR_MORE) {
- result = sub('%s [%s ...]', ...get_metavar(2))
- } else if (action.nargs === REMAINDER) {
- result = '...'
- } else if (action.nargs === PARSER) {
- result = sub('%s ...', ...get_metavar(1))
- } else if (action.nargs === SUPPRESS) {
- result = ''
- } else {
- let formats
- try {
- formats = range(action.nargs).map(() => '%s')
- } catch (err) {
- throw new TypeError('invalid nargs value')
- }
- result = sub(formats.join(' '), ...get_metavar(action.nargs))
- }
- return result
- }
-
- _expand_help(action) {
- let params = Object.assign({ prog: this._prog }, action)
- for (let name of Object.keys(params)) {
- if (params[name] === SUPPRESS) {
- delete params[name]
- }
- }
- for (let name of Object.keys(params)) {
- if (params[name] && params[name].name) {
- params[name] = params[name].name
- }
- }
- if (params.choices !== undefined) {
- let choices_str = _choices_to_array(params.choices).map(String).join(', ')
- params.choices = choices_str
- }
- // LEGACY (v1 compatibility): camelcase
- for (let key of Object.keys(params)) {
- let old_name = _to_legacy_name(key)
- if (old_name !== key) {
- params[old_name] = params[key]
- }
- }
- // end
- return sub(this._get_help_string(action), params)
- }
-
- * _iter_indented_subactions(action) {
- if (typeof action._get_subactions === 'function') {
- this._indent()
- yield* action._get_subactions()
- this._dedent()
- }
- }
-
- _split_lines(text, width) {
- text = text.replace(this._whitespace_matcher, ' ').trim()
- // The textwrap module is used only for formatting help.
- // Delay its import for speeding up the common usage of argparse.
- let textwrap = require('./lib/textwrap')
- return textwrap.wrap(text, { width })
- }
-
- _fill_text(text, width, indent) {
- text = text.replace(this._whitespace_matcher, ' ').trim()
- let textwrap = require('./lib/textwrap')
- return textwrap.fill(text, { width,
- initial_indent: indent,
- subsequent_indent: indent })
- }
-
- _get_help_string(action) {
- return action.help
- }
-
- _get_default_metavar_for_optional(action) {
- return action.dest.toUpperCase()
- }
-
- _get_default_metavar_for_positional(action) {
- return action.dest
- }
-}))
-
-HelpFormatter.prototype._Section = _callable(class _Section {
-
- constructor(formatter, parent, heading = undefined) {
- this.formatter = formatter
- this.parent = parent
- this.heading = heading
- this.items = []
- }
-
- format_help() {
- // format the indented section
- if (this.parent !== undefined) {
- this.formatter._indent()
- }
- let item_help = this.formatter._join_parts(this.items.map(([ func, args ]) => func.apply(null, args)))
- if (this.parent !== undefined) {
- this.formatter._dedent()
- }
-
- // return nothing if the section was empty
- if (!item_help) {
- return ''
- }
-
- // add the heading if the section was non-empty
- let heading
- if (this.heading !== SUPPRESS && this.heading !== undefined) {
- let current_indent = this.formatter._current_indent
- heading = sub('%*s%s:\n', current_indent, '', this.heading)
- } else {
- heading = ''
- }
-
- // join the section-initial newline, the heading and the help
- return this.formatter._join_parts(['\n', heading, item_help, '\n'])
- }
-})
-
-
-const RawDescriptionHelpFormatter = _camelcase_alias(_callable(class RawDescriptionHelpFormatter extends HelpFormatter {
- /*
- * Help message formatter which retains any formatting in descriptions.
- *
- * Only the name of this class is considered a public API. All the methods
- * provided by the class are considered an implementation detail.
- */
-
- _fill_text(text, width, indent) {
- return splitlines(text, true).map(line => indent + line).join('')
- }
-}))
-
-
-const RawTextHelpFormatter = _camelcase_alias(_callable(class RawTextHelpFormatter extends RawDescriptionHelpFormatter {
- /*
- * Help message formatter which retains formatting of all help text.
- *
- * Only the name of this class is considered a public API. All the methods
- * provided by the class are considered an implementation detail.
- */
-
- _split_lines(text/*, width*/) {
- return splitlines(text)
- }
-}))
-
-
-const ArgumentDefaultsHelpFormatter = _camelcase_alias(_callable(class ArgumentDefaultsHelpFormatter extends HelpFormatter {
- /*
- * Help message formatter which adds default values to argument help.
- *
- * Only the name of this class is considered a public API. All the methods
- * provided by the class are considered an implementation detail.
- */
-
- _get_help_string(action) {
- let help = action.help
- // LEGACY (v1 compatibility): additional check for defaultValue needed
- if (!action.help.includes('%(default)') && !action.help.includes('%(defaultValue)')) {
- if (action.default !== SUPPRESS) {
- let defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
- if (action.option_strings.length || defaulting_nargs.includes(action.nargs)) {
- help += ' (default: %(default)s)'
- }
- }
- }
- return help
- }
-}))
-
-
-const MetavarTypeHelpFormatter = _camelcase_alias(_callable(class MetavarTypeHelpFormatter extends HelpFormatter {
- /*
- * Help message formatter which uses the argument 'type' as the default
- * metavar value (instead of the argument 'dest')
- *
- * Only the name of this class is considered a public API. All the methods
- * provided by the class are considered an implementation detail.
- */
-
- _get_default_metavar_for_optional(action) {
- return typeof action.type === 'function' ? action.type.name : action.type
- }
-
- _get_default_metavar_for_positional(action) {
- return typeof action.type === 'function' ? action.type.name : action.type
- }
-}))
-
-
-// =====================
-// Options and Arguments
-// =====================
-function _get_action_name(argument) {
- if (argument === undefined) {
- return undefined
- } else if (argument.option_strings.length) {
- return argument.option_strings.join('/')
- } else if (![ undefined, SUPPRESS ].includes(argument.metavar)) {
- return argument.metavar
- } else if (![ undefined, SUPPRESS ].includes(argument.dest)) {
- return argument.dest
- } else {
- return undefined
- }
-}
-
-
-const ArgumentError = _callable(class ArgumentError extends Error {
- /*
- * An error from creating or using an argument (optional or positional).
- *
- * The string value of this exception is the message, augmented with
- * information about the argument that caused it.
- */
-
- constructor(argument, message) {
- super()
- this.name = 'ArgumentError'
- this._argument_name = _get_action_name(argument)
- this._message = message
- this.message = this.str()
- }
-
- str() {
- let format
- if (this._argument_name === undefined) {
- format = '%(message)s'
- } else {
- format = 'argument %(argument_name)s: %(message)s'
- }
- return sub(format, { message: this._message,
- argument_name: this._argument_name })
- }
-})
-
-
-const ArgumentTypeError = _callable(class ArgumentTypeError extends Error {
- /*
- * An error from trying to convert a command line string to a type.
- */
-
- constructor(message) {
- super(message)
- this.name = 'ArgumentTypeError'
- }
-})
-
-
-// ==============
-// Action classes
-// ==============
-const Action = _camelcase_alias(_callable(class Action extends _AttributeHolder(Function) {
- /*
- * Information about how to convert command line strings to Python objects.
- *
- * Action objects are used by an ArgumentParser to represent the information
- * needed to parse a single argument from one or more strings from the
- * command line. The keyword arguments to the Action constructor are also
- * all attributes of Action instances.
- *
- * Keyword Arguments:
- *
- * - option_strings -- A list of command-line option strings which
- * should be associated with this action.
- *
- * - dest -- The name of the attribute to hold the created object(s)
- *
- * - nargs -- The number of command-line arguments that should be
- * consumed. By default, one argument will be consumed and a single
- * value will be produced. Other values include:
- * - N (an integer) consumes N arguments (and produces a list)
- * - '?' consumes zero or one arguments
- * - '*' consumes zero or more arguments (and produces a list)
- * - '+' consumes one or more arguments (and produces a list)
- * Note that the difference between the default and nargs=1 is that
- * with the default, a single value will be produced, while with
- * nargs=1, a list containing a single value will be produced.
- *
- * - const -- The value to be produced if the option is specified and the
- * option uses an action that takes no values.
- *
- * - default -- The value to be produced if the option is not specified.
- *
- * - type -- A callable that accepts a single string argument, and
- * returns the converted value. The standard Python types str, int,
- * float, and complex are useful examples of such callables. If None,
- * str is used.
- *
- * - choices -- A container of values that should be allowed. If not None,
- * after a command-line argument has been converted to the appropriate
- * type, an exception will be raised if it is not a member of this
- * collection.
- *
- * - required -- True if the action must always be specified at the
- * command line. This is only meaningful for optional command-line
- * arguments.
- *
- * - help -- The help string describing the argument.
- *
- * - metavar -- The name to be used for the option's argument with the
- * help string. If None, the 'dest' value will be used as the name.
- */
-
- constructor() {
- let [
- option_strings,
- dest,
- nargs,
- const_value,
- default_value,
- type,
- choices,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- nargs: undefined,
- const: undefined,
- default: undefined,
- type: undefined,
- choices: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- // when this class is called as a function, redirect it to .call() method of itself
- super('return arguments.callee.call.apply(arguments.callee, arguments)')
-
- this.option_strings = option_strings
- this.dest = dest
- this.nargs = nargs
- this.const = const_value
- this.default = default_value
- this.type = type
- this.choices = choices
- this.required = required
- this.help = help
- this.metavar = metavar
- }
-
- _get_kwargs() {
- let names = [
- 'option_strings',
- 'dest',
- 'nargs',
- 'const',
- 'default',
- 'type',
- 'choices',
- 'help',
- 'metavar'
- ]
- return names.map(name => [ name, getattr(this, name) ])
- }
-
- format_usage() {
- return this.option_strings[0]
- }
-
- call(/*parser, namespace, values, option_string = undefined*/) {
- throw new Error('.call() not defined')
- }
-}))
-
-
-const BooleanOptionalAction = _camelcase_alias(_callable(class BooleanOptionalAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- default_value,
- type,
- choices,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- default: undefined,
- type: undefined,
- choices: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- let _option_strings = []
- for (let option_string of option_strings) {
- _option_strings.push(option_string)
-
- if (option_string.startsWith('--')) {
- option_string = '--no-' + option_string.slice(2)
- _option_strings.push(option_string)
- }
- }
-
- if (help !== undefined && default_value !== undefined) {
- help += ` (default: ${default_value})`
- }
-
- super({
- option_strings: _option_strings,
- dest,
- nargs: 0,
- default: default_value,
- type,
- choices,
- required,
- help,
- metavar
- })
- }
-
- call(parser, namespace, values, option_string = undefined) {
- if (this.option_strings.includes(option_string)) {
- setattr(namespace, this.dest, !option_string.startsWith('--no-'))
- }
- }
-
- format_usage() {
- return this.option_strings.join(' | ')
- }
-}))
-
-
-const _StoreAction = _callable(class _StoreAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- nargs,
- const_value,
- default_value,
- type,
- choices,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- nargs: undefined,
- const: undefined,
- default: undefined,
- type: undefined,
- choices: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- if (nargs === 0) {
- throw new TypeError('nargs for store actions must be != 0; if you ' +
- 'have nothing to store, actions such as store ' +
- 'true or store const may be more appropriate')
- }
- if (const_value !== undefined && nargs !== OPTIONAL) {
- throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL))
- }
- super({
- option_strings,
- dest,
- nargs,
- const: const_value,
- default: default_value,
- type,
- choices,
- required,
- help,
- metavar
- })
- }
-
- call(parser, namespace, values/*, option_string = undefined*/) {
- setattr(namespace, this.dest, values)
- }
-})
-
-
-const _StoreConstAction = _callable(class _StoreConstAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- const_value,
- default_value,
- required,
- help
- //, metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- const: no_default,
- default: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- super({
- option_strings,
- dest,
- nargs: 0,
- const: const_value,
- default: default_value,
- required,
- help
- })
- }
-
- call(parser, namespace/*, values, option_string = undefined*/) {
- setattr(namespace, this.dest, this.const)
- }
-})
-
-
-const _StoreTrueAction = _callable(class _StoreTrueAction extends _StoreConstAction {
-
- constructor() {
- let [
- option_strings,
- dest,
- default_value,
- required,
- help
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- default: false,
- required: false,
- help: undefined
- })
-
- super({
- option_strings,
- dest,
- const: true,
- default: default_value,
- required,
- help
- })
- }
-})
-
-
-const _StoreFalseAction = _callable(class _StoreFalseAction extends _StoreConstAction {
-
- constructor() {
- let [
- option_strings,
- dest,
- default_value,
- required,
- help
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- default: true,
- required: false,
- help: undefined
- })
-
- super({
- option_strings,
- dest,
- const: false,
- default: default_value,
- required,
- help
- })
- }
-})
-
-
-const _AppendAction = _callable(class _AppendAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- nargs,
- const_value,
- default_value,
- type,
- choices,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- nargs: undefined,
- const: undefined,
- default: undefined,
- type: undefined,
- choices: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- if (nargs === 0) {
- throw new TypeError('nargs for append actions must be != 0; if arg ' +
- 'strings are not supplying the value to append, ' +
- 'the append const action may be more appropriate')
- }
- if (const_value !== undefined && nargs !== OPTIONAL) {
- throw new TypeError(sub('nargs must be %r to supply const', OPTIONAL))
- }
- super({
- option_strings,
- dest,
- nargs,
- const: const_value,
- default: default_value,
- type,
- choices,
- required,
- help,
- metavar
- })
- }
-
- call(parser, namespace, values/*, option_string = undefined*/) {
- let items = getattr(namespace, this.dest, undefined)
- items = _copy_items(items)
- items.push(values)
- setattr(namespace, this.dest, items)
- }
-})
-
-
-const _AppendConstAction = _callable(class _AppendConstAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- const_value,
- default_value,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- const: no_default,
- default: undefined,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- super({
- option_strings,
- dest,
- nargs: 0,
- const: const_value,
- default: default_value,
- required,
- help,
- metavar
- })
- }
-
- call(parser, namespace/*, values, option_string = undefined*/) {
- let items = getattr(namespace, this.dest, undefined)
- items = _copy_items(items)
- items.push(this.const)
- setattr(namespace, this.dest, items)
- }
-})
-
-
-const _CountAction = _callable(class _CountAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- default_value,
- required,
- help
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: no_default,
- default: undefined,
- required: false,
- help: undefined
- })
-
- super({
- option_strings,
- dest,
- nargs: 0,
- default: default_value,
- required,
- help
- })
- }
-
- call(parser, namespace/*, values, option_string = undefined*/) {
- let count = getattr(namespace, this.dest, undefined)
- if (count === undefined) {
- count = 0
- }
- setattr(namespace, this.dest, count + 1)
- }
-})
-
-
-const _HelpAction = _callable(class _HelpAction extends Action {
-
- constructor() {
- let [
- option_strings,
- dest,
- default_value,
- help
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- dest: SUPPRESS,
- default: SUPPRESS,
- help: undefined
- })
-
- super({
- option_strings,
- dest,
- default: default_value,
- nargs: 0,
- help
- })
- }
-
- call(parser/*, namespace, values, option_string = undefined*/) {
- parser.print_help()
- parser.exit()
- }
-})
-
-
-const _VersionAction = _callable(class _VersionAction extends Action {
-
- constructor() {
- let [
- option_strings,
- version,
- dest,
- default_value,
- help
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- version: undefined,
- dest: SUPPRESS,
- default: SUPPRESS,
- help: "show program's version number and exit"
- })
-
- super({
- option_strings,
- dest,
- default: default_value,
- nargs: 0,
- help
- })
- this.version = version
- }
-
- call(parser/*, namespace, values, option_string = undefined*/) {
- let version = this.version
- if (version === undefined) {
- version = parser.version
- }
- let formatter = parser._get_formatter()
- formatter.add_text(version)
- parser._print_message(formatter.format_help(), process.stdout)
- parser.exit()
- }
-})
-
-
-const _SubParsersAction = _camelcase_alias(_callable(class _SubParsersAction extends Action {
-
- constructor() {
- let [
- option_strings,
- prog,
- parser_class,
- dest,
- required,
- help,
- metavar
- ] = _parse_opts(arguments, {
- option_strings: no_default,
- prog: no_default,
- parser_class: no_default,
- dest: SUPPRESS,
- required: false,
- help: undefined,
- metavar: undefined
- })
-
- let name_parser_map = {}
-
- super({
- option_strings,
- dest,
- nargs: PARSER,
- choices: name_parser_map,
- required,
- help,
- metavar
- })
-
- this._prog_prefix = prog
- this._parser_class = parser_class
- this._name_parser_map = name_parser_map
- this._choices_actions = []
- }
-
- add_parser() {
- let [
- name,
- kwargs
- ] = _parse_opts(arguments, {
- name: no_default,
- '**kwargs': no_default
- })
-
- // set prog from the existing prefix
- if (kwargs.prog === undefined) {
- kwargs.prog = sub('%s %s', this._prog_prefix, name)
- }
-
- let aliases = getattr(kwargs, 'aliases', [])
- delete kwargs.aliases
-
- // create a pseudo-action to hold the choice help
- if ('help' in kwargs) {
- let help = kwargs.help
- delete kwargs.help
- let choice_action = this._ChoicesPseudoAction(name, aliases, help)
- this._choices_actions.push(choice_action)
- }
-
- // create the parser and add it to the map
- let parser = new this._parser_class(kwargs)
- this._name_parser_map[name] = parser
-
- // make parser available under aliases also
- for (let alias of aliases) {
- this._name_parser_map[alias] = parser
- }
-
- return parser
- }
-
- _get_subactions() {
- return this._choices_actions
- }
-
- call(parser, namespace, values/*, option_string = undefined*/) {
- let parser_name = values[0]
- let arg_strings = values.slice(1)
-
- // set the parser name if requested
- if (this.dest !== SUPPRESS) {
- setattr(namespace, this.dest, parser_name)
- }
-
- // select the parser
- if (hasattr(this._name_parser_map, parser_name)) {
- parser = this._name_parser_map[parser_name]
- } else {
- let args = {parser_name,
- choices: this._name_parser_map.join(', ')}
- let msg = sub('unknown parser %(parser_name)r (choices: %(choices)s)', args)
- throw new ArgumentError(this, msg)
- }
-
- // parse all the remaining options into the namespace
- // store any unrecognized options on the object, so that the top
- // level parser can decide what to do with them
-
- // In case this subparser defines new defaults, we parse them
- // in a new namespace object and then update the original
- // namespace for the relevant parts.
- let subnamespace
- [ subnamespace, arg_strings ] = parser.parse_known_args(arg_strings, undefined)
- for (let [ key, value ] of Object.entries(subnamespace)) {
- setattr(namespace, key, value)
- }
-
- if (arg_strings.length) {
- setdefault(namespace, _UNRECOGNIZED_ARGS_ATTR, [])
- getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).push(...arg_strings)
- }
- }
-}))
-
-
-_SubParsersAction.prototype._ChoicesPseudoAction = _callable(class _ChoicesPseudoAction extends Action {
- constructor(name, aliases, help) {
- let metavar = name, dest = name
- if (aliases.length) {
- metavar += sub(' (%s)', aliases.join(', '))
- }
- super({ option_strings: [], dest, help, metavar })
- }
-})
-
-
-const _ExtendAction = _callable(class _ExtendAction extends _AppendAction {
- call(parser, namespace, values/*, option_string = undefined*/) {
- let items = getattr(namespace, this.dest, undefined)
- items = _copy_items(items)
- items = items.concat(values)
- setattr(namespace, this.dest, items)
- }
-})
-
-
-// ==============
-// Type classes
-// ==============
-const FileType = _callable(class FileType extends Function {
- /*
- * Factory for creating file object types
- *
- * Instances of FileType are typically passed as type= arguments to the
- * ArgumentParser add_argument() method.
- *
- * Keyword Arguments:
- * - mode -- A string indicating how the file is to be opened. Accepts the
- * same values as the builtin open() function.
- * - bufsize -- The file's desired buffer size. Accepts the same values as
- * the builtin open() function.
- * - encoding -- The file's encoding. Accepts the same values as the
- * builtin open() function.
- * - errors -- A string indicating how encoding and decoding errors are to
- * be handled. Accepts the same value as the builtin open() function.
- */
-
- constructor() {
- let [
- flags,
- encoding,
- mode,
- autoClose,
- emitClose,
- start,
- end,
- highWaterMark,
- fs
- ] = _parse_opts(arguments, {
- flags: 'r',
- encoding: undefined,
- mode: undefined, // 0o666
- autoClose: undefined, // true
- emitClose: undefined, // false
- start: undefined, // 0
- end: undefined, // Infinity
- highWaterMark: undefined, // 64 * 1024
- fs: undefined
- })
-
- // when this class is called as a function, redirect it to .call() method of itself
- super('return arguments.callee.call.apply(arguments.callee, arguments)')
-
- Object.defineProperty(this, 'name', {
- get() {
- return sub('FileType(%r)', flags)
- }
- })
- this._flags = flags
- this._options = {}
- if (encoding !== undefined) this._options.encoding = encoding
- if (mode !== undefined) this._options.mode = mode
- if (autoClose !== undefined) this._options.autoClose = autoClose
- if (emitClose !== undefined) this._options.emitClose = emitClose
- if (start !== undefined) this._options.start = start
- if (end !== undefined) this._options.end = end
- if (highWaterMark !== undefined) this._options.highWaterMark = highWaterMark
- if (fs !== undefined) this._options.fs = fs
- }
-
- call(string) {
- // the special argument "-" means sys.std{in,out}
- if (string === '-') {
- if (this._flags.includes('r')) {
- return process.stdin
- } else if (this._flags.includes('w')) {
- return process.stdout
- } else {
- let msg = sub('argument "-" with mode %r', this._flags)
- throw new TypeError(msg)
- }
- }
-
- // all other arguments are used as file names
- let fd
- try {
- fd = fs.openSync(string, this._flags, this._options.mode)
- } catch (e) {
- let args = { filename: string, error: e.message }
- let message = "can't open '%(filename)s': %(error)s"
- throw new ArgumentTypeError(sub(message, args))
- }
-
- let options = Object.assign({ fd, flags: this._flags }, this._options)
- if (this._flags.includes('r')) {
- return fs.createReadStream(undefined, options)
- } else if (this._flags.includes('w')) {
- return fs.createWriteStream(undefined, options)
- } else {
- let msg = sub('argument "%s" with mode %r', string, this._flags)
- throw new TypeError(msg)
- }
- }
-
- [util.inspect.custom]() {
- let args = [ this._flags ]
- let kwargs = Object.entries(this._options).map(([ k, v ]) => {
- if (k === 'mode') v = { value: v, [util.inspect.custom]() { return '0o' + this.value.toString(8) } }
- return [ k, v ]
- })
- let args_str = []
- .concat(args.filter(arg => arg !== -1).map(repr))
- .concat(kwargs.filter(([/*kw*/, arg]) => arg !== undefined)
- .map(([kw, arg]) => sub('%s=%r', kw, arg)))
- .join(', ')
- return sub('%s(%s)', this.constructor.name, args_str)
- }
-
- toString() {
- return this[util.inspect.custom]()
- }
-})
-
-// ===========================
-// Optional and Positional Parsing
-// ===========================
-const Namespace = _callable(class Namespace extends _AttributeHolder() {
- /*
- * Simple object for storing attributes.
- *
- * Implements equality by attribute names and values, and provides a simple
- * string representation.
- */
-
- constructor(options = {}) {
- super()
- Object.assign(this, options)
- }
-})
-
-// unset string tag to mimic plain object
-Namespace.prototype[Symbol.toStringTag] = undefined
-
-
-const _ActionsContainer = _camelcase_alias(_callable(class _ActionsContainer {
-
- constructor() {
- let [
- description,
- prefix_chars,
- argument_default,
- conflict_handler
- ] = _parse_opts(arguments, {
- description: no_default,
- prefix_chars: no_default,
- argument_default: no_default,
- conflict_handler: no_default
- })
-
- this.description = description
- this.argument_default = argument_default
- this.prefix_chars = prefix_chars
- this.conflict_handler = conflict_handler
-
- // set up registries
- this._registries = {}
-
- // register actions
- this.register('action', undefined, _StoreAction)
- this.register('action', 'store', _StoreAction)
- this.register('action', 'store_const', _StoreConstAction)
- this.register('action', 'store_true', _StoreTrueAction)
- this.register('action', 'store_false', _StoreFalseAction)
- this.register('action', 'append', _AppendAction)
- this.register('action', 'append_const', _AppendConstAction)
- this.register('action', 'count', _CountAction)
- this.register('action', 'help', _HelpAction)
- this.register('action', 'version', _VersionAction)
- this.register('action', 'parsers', _SubParsersAction)
- this.register('action', 'extend', _ExtendAction)
- // LEGACY (v1 compatibility): camelcase variants
- ;[ 'storeConst', 'storeTrue', 'storeFalse', 'appendConst' ].forEach(old_name => {
- let new_name = _to_new_name(old_name)
- this.register('action', old_name, util.deprecate(this._registry_get('action', new_name),
- sub('{action: "%s"} is renamed to {action: "%s"}', old_name, new_name)))
- })
- // end
-
- // raise an exception if the conflict handler is invalid
- this._get_handler()
-
- // action storage
- this._actions = []
- this._option_string_actions = {}
-
- // groups
- this._action_groups = []
- this._mutually_exclusive_groups = []
-
- // defaults storage
- this._defaults = {}
-
- // determines whether an "option" looks like a negative number
- this._negative_number_matcher = /^-\d+$|^-\d*\.\d+$/
-
- // whether or not there are any optionals that look like negative
- // numbers -- uses a list so it can be shared and edited
- this._has_negative_number_optionals = []
- }
-
- // ====================
- // Registration methods
- // ====================
- register(registry_name, value, object) {
- let registry = setdefault(this._registries, registry_name, {})
- registry[value] = object
- }
-
- _registry_get(registry_name, value, default_value = undefined) {
- return getattr(this._registries[registry_name], value, default_value)
- }
-
- // ==================================
- // Namespace default accessor methods
- // ==================================
- set_defaults(kwargs) {
- Object.assign(this._defaults, kwargs)
-
- // if these defaults match any existing arguments, replace
- // the previous default on the object with the new one
- for (let action of this._actions) {
- if (action.dest in kwargs) {
- action.default = kwargs[action.dest]
- }
- }
- }
-
- get_default(dest) {
- for (let action of this._actions) {
- if (action.dest === dest && action.default !== undefined) {
- return action.default
- }
- }
- return this._defaults[dest]
- }
-
-
- // =======================
- // Adding argument actions
- // =======================
- add_argument() {
- /*
- * add_argument(dest, ..., name=value, ...)
- * add_argument(option_string, option_string, ..., name=value, ...)
- */
- let [
- args,
- kwargs
- ] = _parse_opts(arguments, {
- '*args': no_default,
- '**kwargs': no_default
- })
- // LEGACY (v1 compatibility), old-style add_argument([ args ], { options })
- if (args.length === 1 && Array.isArray(args[0])) {
- args = args[0]
- deprecate('argument-array',
- sub('use add_argument(%(args)s, {...}) instead of add_argument([ %(args)s ], { ... })', {
- args: args.map(repr).join(', ')
- }))
- }
- // end
-
- // if no positional args are supplied or only one is supplied and
- // it doesn't look like an option string, parse a positional
- // argument
- let chars = this.prefix_chars
- if (!args.length || args.length === 1 && !chars.includes(args[0][0])) {
- if (args.length && 'dest' in kwargs) {
- throw new TypeError('dest supplied twice for positional argument')
- }
- kwargs = this._get_positional_kwargs(...args, kwargs)
-
- // otherwise, we're adding an optional argument
- } else {
- kwargs = this._get_optional_kwargs(...args, kwargs)
- }
-
- // if no default was supplied, use the parser-level default
- if (!('default' in kwargs)) {
- let dest = kwargs.dest
- if (dest in this._defaults) {
- kwargs.default = this._defaults[dest]
- } else if (this.argument_default !== undefined) {
- kwargs.default = this.argument_default
- }
- }
-
- // create the action object, and add it to the parser
- let action_class = this._pop_action_class(kwargs)
- if (typeof action_class !== 'function') {
- throw new TypeError(sub('unknown action "%s"', action_class))
- }
- // eslint-disable-next-line new-cap
- let action = new action_class(kwargs)
-
- // raise an error if the action type is not callable
- let type_func = this._registry_get('type', action.type, action.type)
- if (typeof type_func !== 'function') {
- throw new TypeError(sub('%r is not callable', type_func))
- }
-
- if (type_func === FileType) {
- throw new TypeError(sub('%r is a FileType class object, instance of it' +
- ' must be passed', type_func))
- }
-
- // raise an error if the metavar does not match the type
- if ('_get_formatter' in this) {
- try {
- this._get_formatter()._format_args(action, undefined)
- } catch (err) {
- // check for 'invalid nargs value' is an artifact of TypeError and ValueError in js being the same
- if (err instanceof TypeError && err.message !== 'invalid nargs value') {
- throw new TypeError('length of metavar tuple does not match nargs')
- } else {
- throw err
- }
- }
- }
-
- return this._add_action(action)
- }
-
- add_argument_group() {
- let group = _ArgumentGroup(this, ...arguments)
- this._action_groups.push(group)
- return group
- }
-
- add_mutually_exclusive_group() {
- // eslint-disable-next-line no-use-before-define
- let group = _MutuallyExclusiveGroup(this, ...arguments)
- this._mutually_exclusive_groups.push(group)
- return group
- }
-
- _add_action(action) {
- // resolve any conflicts
- this._check_conflict(action)
-
- // add to actions list
- this._actions.push(action)
- action.container = this
-
- // index the action by any option strings it has
- for (let option_string of action.option_strings) {
- this._option_string_actions[option_string] = action
- }
-
- // set the flag if any option strings look like negative numbers
- for (let option_string of action.option_strings) {
- if (this._negative_number_matcher.test(option_string)) {
- if (!this._has_negative_number_optionals.length) {
- this._has_negative_number_optionals.push(true)
- }
- }
- }
-
- // return the created action
- return action
- }
-
- _remove_action(action) {
- _array_remove(this._actions, action)
- }
-
- _add_container_actions(container) {
- // collect groups by titles
- let title_group_map = {}
- for (let group of this._action_groups) {
- if (group.title in title_group_map) {
- let msg = 'cannot merge actions - two groups are named %r'
- throw new TypeError(sub(msg, group.title))
- }
- title_group_map[group.title] = group
- }
-
- // map each action to its group
- let group_map = new Map()
- for (let group of container._action_groups) {
-
- // if a group with the title exists, use that, otherwise
- // create a new group matching the container's group
- if (!(group.title in title_group_map)) {
- title_group_map[group.title] = this.add_argument_group({
- title: group.title,
- description: group.description,
- conflict_handler: group.conflict_handler
- })
- }
-
- // map the actions to their new group
- for (let action of group._group_actions) {
- group_map.set(action, title_group_map[group.title])
- }
- }
-
- // add container's mutually exclusive groups
- // NOTE: if add_mutually_exclusive_group ever gains title= and
- // description= then this code will need to be expanded as above
- for (let group of container._mutually_exclusive_groups) {
- let mutex_group = this.add_mutually_exclusive_group({
- required: group.required
- })
-
- // map the actions to their new mutex group
- for (let action of group._group_actions) {
- group_map.set(action, mutex_group)
- }
- }
-
- // add all actions to this container or their group
- for (let action of container._actions) {
- group_map.get(action)._add_action(action)
- }
- }
-
- _get_positional_kwargs() {
- let [
- dest,
- kwargs
- ] = _parse_opts(arguments, {
- dest: no_default,
- '**kwargs': no_default
- })
-
- // make sure required is not specified
- if ('required' in kwargs) {
- let msg = "'required' is an invalid argument for positionals"
- throw new TypeError(msg)
- }
-
- // mark positional arguments as required if at least one is
- // always required
- if (![OPTIONAL, ZERO_OR_MORE].includes(kwargs.nargs)) {
- kwargs.required = true
- }
- if (kwargs.nargs === ZERO_OR_MORE && !('default' in kwargs)) {
- kwargs.required = true
- }
-
- // return the keyword arguments with no option strings
- return Object.assign(kwargs, { dest, option_strings: [] })
- }
-
- _get_optional_kwargs() {
- let [
- args,
- kwargs
- ] = _parse_opts(arguments, {
- '*args': no_default,
- '**kwargs': no_default
- })
-
- // determine short and long option strings
- let option_strings = []
- let long_option_strings = []
- let option_string
- for (option_string of args) {
- // error on strings that don't start with an appropriate prefix
- if (!this.prefix_chars.includes(option_string[0])) {
- let args = {option: option_string,
- prefix_chars: this.prefix_chars}
- let msg = 'invalid option string %(option)r: ' +
- 'must start with a character %(prefix_chars)r'
- throw new TypeError(sub(msg, args))
- }
-
- // strings starting with two prefix characters are long options
- option_strings.push(option_string)
- if (option_string.length > 1 && this.prefix_chars.includes(option_string[1])) {
- long_option_strings.push(option_string)
- }
- }
-
- // infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'
- let dest = kwargs.dest
- delete kwargs.dest
- if (dest === undefined) {
- let dest_option_string
- if (long_option_strings.length) {
- dest_option_string = long_option_strings[0]
- } else {
- dest_option_string = option_strings[0]
- }
- dest = _string_lstrip(dest_option_string, this.prefix_chars)
- if (!dest) {
- let msg = 'dest= is required for options like %r'
- throw new TypeError(sub(msg, option_string))
- }
- dest = dest.replace(/-/g, '_')
- }
-
- // return the updated keyword arguments
- return Object.assign(kwargs, { dest, option_strings })
- }
-
- _pop_action_class(kwargs, default_value = undefined) {
- let action = getattr(kwargs, 'action', default_value)
- delete kwargs.action
- return this._registry_get('action', action, action)
- }
-
- _get_handler() {
- // determine function from conflict handler string
- let handler_func_name = sub('_handle_conflict_%s', this.conflict_handler)
- if (typeof this[handler_func_name] === 'function') {
- return this[handler_func_name]
- } else {
- let msg = 'invalid conflict_resolution value: %r'
- throw new TypeError(sub(msg, this.conflict_handler))
- }
- }
-
- _check_conflict(action) {
-
- // find all options that conflict with this option
- let confl_optionals = []
- for (let option_string of action.option_strings) {
- if (hasattr(this._option_string_actions, option_string)) {
- let confl_optional = this._option_string_actions[option_string]
- confl_optionals.push([ option_string, confl_optional ])
- }
- }
-
- // resolve any conflicts
- if (confl_optionals.length) {
- let conflict_handler = this._get_handler()
- conflict_handler.call(this, action, confl_optionals)
- }
- }
-
- _handle_conflict_error(action, conflicting_actions) {
- let message = conflicting_actions.length === 1 ?
- 'conflicting option string: %s' :
- 'conflicting option strings: %s'
- let conflict_string = conflicting_actions.map(([ option_string/*, action*/ ]) => option_string).join(', ')
- throw new ArgumentError(action, sub(message, conflict_string))
- }
-
- _handle_conflict_resolve(action, conflicting_actions) {
-
- // remove all conflicting options
- for (let [ option_string, action ] of conflicting_actions) {
-
- // remove the conflicting option
- _array_remove(action.option_strings, option_string)
- delete this._option_string_actions[option_string]
-
- // if the option now has no option string, remove it from the
- // container holding it
- if (!action.option_strings.length) {
- action.container._remove_action(action)
- }
- }
- }
-}))
-
-
-const _ArgumentGroup = _callable(class _ArgumentGroup extends _ActionsContainer {
-
- constructor() {
- let [
- container,
- title,
- description,
- kwargs
- ] = _parse_opts(arguments, {
- container: no_default,
- title: undefined,
- description: undefined,
- '**kwargs': no_default
- })
-
- // add any missing keyword arguments by checking the container
- setdefault(kwargs, 'conflict_handler', container.conflict_handler)
- setdefault(kwargs, 'prefix_chars', container.prefix_chars)
- setdefault(kwargs, 'argument_default', container.argument_default)
- super(Object.assign({ description }, kwargs))
-
- // group attributes
- this.title = title
- this._group_actions = []
-
- // share most attributes with the container
- this._registries = container._registries
- this._actions = container._actions
- this._option_string_actions = container._option_string_actions
- this._defaults = container._defaults
- this._has_negative_number_optionals =
- container._has_negative_number_optionals
- this._mutually_exclusive_groups = container._mutually_exclusive_groups
- }
-
- _add_action(action) {
- action = super._add_action(action)
- this._group_actions.push(action)
- return action
- }
-
- _remove_action(action) {
- super._remove_action(action)
- _array_remove(this._group_actions, action)
- }
-})
-
-
-const _MutuallyExclusiveGroup = _callable(class _MutuallyExclusiveGroup extends _ArgumentGroup {
-
- constructor() {
- let [
- container,
- required
- ] = _parse_opts(arguments, {
- container: no_default,
- required: false
- })
-
- super(container)
- this.required = required
- this._container = container
- }
-
- _add_action(action) {
- if (action.required) {
- let msg = 'mutually exclusive arguments must be optional'
- throw new TypeError(msg)
- }
- action = this._container._add_action(action)
- this._group_actions.push(action)
- return action
- }
-
- _remove_action(action) {
- this._container._remove_action(action)
- _array_remove(this._group_actions, action)
- }
-})
-
-
-const ArgumentParser = _camelcase_alias(_callable(class ArgumentParser extends _AttributeHolder(_ActionsContainer) {
- /*
- * Object for parsing command line strings into Python objects.
- *
- * Keyword Arguments:
- * - prog -- The name of the program (default: sys.argv[0])
- * - usage -- A usage message (default: auto-generated from arguments)
- * - description -- A description of what the program does
- * - epilog -- Text following the argument descriptions
- * - parents -- Parsers whose arguments should be copied into this one
- * - formatter_class -- HelpFormatter class for printing help messages
- * - prefix_chars -- Characters that prefix optional arguments
- * - fromfile_prefix_chars -- Characters that prefix files containing
- * additional arguments
- * - argument_default -- The default value for all arguments
- * - conflict_handler -- String indicating how to handle conflicts
- * - add_help -- Add a -h/-help option
- * - allow_abbrev -- Allow long options to be abbreviated unambiguously
- * - exit_on_error -- Determines whether or not ArgumentParser exits with
- * error info when an error occurs
- */
-
- constructor() {
- let [
- prog,
- usage,
- description,
- epilog,
- parents,
- formatter_class,
- prefix_chars,
- fromfile_prefix_chars,
- argument_default,
- conflict_handler,
- add_help,
- allow_abbrev,
- exit_on_error,
- debug, // LEGACY (v1 compatibility), debug mode
- version // LEGACY (v1 compatibility), version
- ] = _parse_opts(arguments, {
- prog: undefined,
- usage: undefined,
- description: undefined,
- epilog: undefined,
- parents: [],
- formatter_class: HelpFormatter,
- prefix_chars: '-',
- fromfile_prefix_chars: undefined,
- argument_default: undefined,
- conflict_handler: 'error',
- add_help: true,
- allow_abbrev: true,
- exit_on_error: true,
- debug: undefined, // LEGACY (v1 compatibility), debug mode
- version: undefined // LEGACY (v1 compatibility), version
- })
-
- // LEGACY (v1 compatibility)
- if (debug !== undefined) {
- deprecate('debug',
- 'The "debug" argument to ArgumentParser is deprecated. Please ' +
- 'override ArgumentParser.exit function instead.'
- )
- }
-
- if (version !== undefined) {
- deprecate('version',
- 'The "version" argument to ArgumentParser is deprecated. Please use ' +
- "add_argument(..., { action: 'version', version: 'N', ... }) instead."
- )
- }
- // end
-
- super({
- description,
- prefix_chars,
- argument_default,
- conflict_handler
- })
-
- // default setting for prog
- if (prog === undefined) {
- prog = path.basename(get_argv()[0] || '')
- }
-
- this.prog = prog
- this.usage = usage
- this.epilog = epilog
- this.formatter_class = formatter_class
- this.fromfile_prefix_chars = fromfile_prefix_chars
- this.add_help = add_help
- this.allow_abbrev = allow_abbrev
- this.exit_on_error = exit_on_error
- // LEGACY (v1 compatibility), debug mode
- this.debug = debug
- // end
-
- this._positionals = this.add_argument_group('positional arguments')
- this._optionals = this.add_argument_group('optional arguments')
- this._subparsers = undefined
-
- // register types
- function identity(string) {
- return string
- }
- this.register('type', undefined, identity)
- this.register('type', null, identity)
- this.register('type', 'auto', identity)
- this.register('type', 'int', function (x) {
- let result = Number(x)
- if (!Number.isInteger(result)) {
- throw new TypeError(sub('could not convert string to int: %r', x))
- }
- return result
- })
- this.register('type', 'float', function (x) {
- let result = Number(x)
- if (isNaN(result)) {
- throw new TypeError(sub('could not convert string to float: %r', x))
- }
- return result
- })
- this.register('type', 'str', String)
- // LEGACY (v1 compatibility): custom types
- this.register('type', 'string',
- util.deprecate(String, 'use {type:"str"} or {type:String} instead of {type:"string"}'))
- // end
-
- // add help argument if necessary
- // (using explicit default to override global argument_default)
- let default_prefix = prefix_chars.includes('-') ? '-' : prefix_chars[0]
- if (this.add_help) {
- this.add_argument(
- default_prefix + 'h',
- default_prefix.repeat(2) + 'help',
- {
- action: 'help',
- default: SUPPRESS,
- help: 'show this help message and exit'
- }
- )
- }
- // LEGACY (v1 compatibility), version
- if (version) {
- this.add_argument(
- default_prefix + 'v',
- default_prefix.repeat(2) + 'version',
- {
- action: 'version',
- default: SUPPRESS,
- version: this.version,
- help: "show program's version number and exit"
- }
- )
- }
- // end
-
- // add parent arguments and defaults
- for (let parent of parents) {
- this._add_container_actions(parent)
- Object.assign(this._defaults, parent._defaults)
- }
- }
-
- // =======================
- // Pretty __repr__ methods
- // =======================
- _get_kwargs() {
- let names = [
- 'prog',
- 'usage',
- 'description',
- 'formatter_class',
- 'conflict_handler',
- 'add_help'
- ]
- return names.map(name => [ name, getattr(this, name) ])
- }
-
- // ==================================
- // Optional/Positional adding methods
- // ==================================
- add_subparsers() {
- let [
- kwargs
- ] = _parse_opts(arguments, {
- '**kwargs': no_default
- })
-
- if (this._subparsers !== undefined) {
- this.error('cannot have multiple subparser arguments')
- }
-
- // add the parser class to the arguments if it's not present
- setdefault(kwargs, 'parser_class', this.constructor)
-
- if ('title' in kwargs || 'description' in kwargs) {
- let title = getattr(kwargs, 'title', 'subcommands')
- let description = getattr(kwargs, 'description', undefined)
- delete kwargs.title
- delete kwargs.description
- this._subparsers = this.add_argument_group(title, description)
- } else {
- this._subparsers = this._positionals
- }
-
- // prog defaults to the usage message of this parser, skipping
- // optional arguments and with no "usage:" prefix
- if (kwargs.prog === undefined) {
- let formatter = this._get_formatter()
- let positionals = this._get_positional_actions()
- let groups = this._mutually_exclusive_groups
- formatter.add_usage(this.usage, positionals, groups, '')
- kwargs.prog = formatter.format_help().trim()
- }
-
- // create the parsers action and add it to the positionals list
- let parsers_class = this._pop_action_class(kwargs, 'parsers')
- // eslint-disable-next-line new-cap
- let action = new parsers_class(Object.assign({ option_strings: [] }, kwargs))
- this._subparsers._add_action(action)
-
- // return the created parsers action
- return action
- }
-
- _add_action(action) {
- if (action.option_strings.length) {
- this._optionals._add_action(action)
- } else {
- this._positionals._add_action(action)
- }
- return action
- }
-
- _get_optional_actions() {
- return this._actions.filter(action => action.option_strings.length)
- }
-
- _get_positional_actions() {
- return this._actions.filter(action => !action.option_strings.length)
- }
-
- // =====================================
- // Command line argument parsing methods
- // =====================================
- parse_args(args = undefined, namespace = undefined) {
- let argv
- [ args, argv ] = this.parse_known_args(args, namespace)
- if (argv && argv.length > 0) {
- let msg = 'unrecognized arguments: %s'
- this.error(sub(msg, argv.join(' ')))
- }
- return args
- }
-
- parse_known_args(args = undefined, namespace = undefined) {
- if (args === undefined) {
- args = get_argv().slice(1)
- }
-
- // default Namespace built from parser defaults
- if (namespace === undefined) {
- namespace = new Namespace()
- }
-
- // add any action defaults that aren't present
- for (let action of this._actions) {
- if (action.dest !== SUPPRESS) {
- if (!hasattr(namespace, action.dest)) {
- if (action.default !== SUPPRESS) {
- setattr(namespace, action.dest, action.default)
- }
- }
- }
- }
-
- // add any parser defaults that aren't present
- for (let dest of Object.keys(this._defaults)) {
- if (!hasattr(namespace, dest)) {
- setattr(namespace, dest, this._defaults[dest])
- }
- }
-
- // parse the arguments and exit if there are any errors
- if (this.exit_on_error) {
- try {
- [ namespace, args ] = this._parse_known_args(args, namespace)
- } catch (err) {
- if (err instanceof ArgumentError) {
- this.error(err.message)
- } else {
- throw err
- }
- }
- } else {
- [ namespace, args ] = this._parse_known_args(args, namespace)
- }
-
- if (hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) {
- args = args.concat(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
- delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
- }
-
- return [ namespace, args ]
- }
-
- _parse_known_args(arg_strings, namespace) {
- // replace arg strings that are file references
- if (this.fromfile_prefix_chars !== undefined) {
- arg_strings = this._read_args_from_files(arg_strings)
- }
-
- // map all mutually exclusive arguments to the other arguments
- // they can't occur with
- let action_conflicts = new Map()
- for (let mutex_group of this._mutually_exclusive_groups) {
- let group_actions = mutex_group._group_actions
- for (let [ i, mutex_action ] of Object.entries(mutex_group._group_actions)) {
- let conflicts = action_conflicts.get(mutex_action) || []
- conflicts = conflicts.concat(group_actions.slice(0, +i))
- conflicts = conflicts.concat(group_actions.slice(+i + 1))
- action_conflicts.set(mutex_action, conflicts)
- }
- }
-
- // find all option indices, and determine the arg_string_pattern
- // which has an 'O' if there is an option at an index,
- // an 'A' if there is an argument, or a '-' if there is a '--'
- let option_string_indices = {}
- let arg_string_pattern_parts = []
- let arg_strings_iter = Object.entries(arg_strings)[Symbol.iterator]()
- for (let [ i, arg_string ] of arg_strings_iter) {
-
- // all args after -- are non-options
- if (arg_string === '--') {
- arg_string_pattern_parts.push('-')
- for ([ i, arg_string ] of arg_strings_iter) {
- arg_string_pattern_parts.push('A')
- }
-
- // otherwise, add the arg to the arg strings
- // and note the index if it was an option
- } else {
- let option_tuple = this._parse_optional(arg_string)
- let pattern
- if (option_tuple === undefined) {
- pattern = 'A'
- } else {
- option_string_indices[i] = option_tuple
- pattern = 'O'
- }
- arg_string_pattern_parts.push(pattern)
- }
- }
-
- // join the pieces together to form the pattern
- let arg_strings_pattern = arg_string_pattern_parts.join('')
-
- // converts arg strings to the appropriate and then takes the action
- let seen_actions = new Set()
- let seen_non_default_actions = new Set()
- let extras
-
- let take_action = (action, argument_strings, option_string = undefined) => {
- seen_actions.add(action)
- let argument_values = this._get_values(action, argument_strings)
-
- // error if this argument is not allowed with other previously
- // seen arguments, assuming that actions that use the default
- // value don't really count as "present"
- if (argument_values !== action.default) {
- seen_non_default_actions.add(action)
- for (let conflict_action of action_conflicts.get(action) || []) {
- if (seen_non_default_actions.has(conflict_action)) {
- let msg = 'not allowed with argument %s'
- let action_name = _get_action_name(conflict_action)
- throw new ArgumentError(action, sub(msg, action_name))
- }
- }
- }
-
- // take the action if we didn't receive a SUPPRESS value
- // (e.g. from a default)
- if (argument_values !== SUPPRESS) {
- action(this, namespace, argument_values, option_string)
- }
- }
-
- // function to convert arg_strings into an optional action
- let consume_optional = start_index => {
-
- // get the optional identified at this index
- let option_tuple = option_string_indices[start_index]
- let [ action, option_string, explicit_arg ] = option_tuple
-
- // identify additional optionals in the same arg string
- // (e.g. -xyz is the same as -x -y -z if no args are required)
- let action_tuples = []
- let stop
- for (;;) {
-
- // if we found no optional action, skip it
- if (action === undefined) {
- extras.push(arg_strings[start_index])
- return start_index + 1
- }
-
- // if there is an explicit argument, try to match the
- // optional's string arguments to only this
- if (explicit_arg !== undefined) {
- let arg_count = this._match_argument(action, 'A')
-
- // if the action is a single-dash option and takes no
- // arguments, try to parse more single-dash options out
- // of the tail of the option string
- let chars = this.prefix_chars
- if (arg_count === 0 && !chars.includes(option_string[1])) {
- action_tuples.push([ action, [], option_string ])
- let char = option_string[0]
- option_string = char + explicit_arg[0]
- let new_explicit_arg = explicit_arg.slice(1) || undefined
- let optionals_map = this._option_string_actions
- if (hasattr(optionals_map, option_string)) {
- action = optionals_map[option_string]
- explicit_arg = new_explicit_arg
- } else {
- let msg = 'ignored explicit argument %r'
- throw new ArgumentError(action, sub(msg, explicit_arg))
- }
-
- // if the action expect exactly one argument, we've
- // successfully matched the option; exit the loop
- } else if (arg_count === 1) {
- stop = start_index + 1
- let args = [ explicit_arg ]
- action_tuples.push([ action, args, option_string ])
- break
-
- // error if a double-dash option did not use the
- // explicit argument
- } else {
- let msg = 'ignored explicit argument %r'
- throw new ArgumentError(action, sub(msg, explicit_arg))
- }
-
- // if there is no explicit argument, try to match the
- // optional's string arguments with the following strings
- // if successful, exit the loop
- } else {
- let start = start_index + 1
- let selected_patterns = arg_strings_pattern.slice(start)
- let arg_count = this._match_argument(action, selected_patterns)
- stop = start + arg_count
- let args = arg_strings.slice(start, stop)
- action_tuples.push([ action, args, option_string ])
- break
- }
- }
-
- // add the Optional to the list and return the index at which
- // the Optional's string args stopped
- assert(action_tuples.length)
- for (let [ action, args, option_string ] of action_tuples) {
- take_action(action, args, option_string)
- }
- return stop
- }
-
- // the list of Positionals left to be parsed; this is modified
- // by consume_positionals()
- let positionals = this._get_positional_actions()
-
- // function to convert arg_strings into positional actions
- let consume_positionals = start_index => {
- // match as many Positionals as possible
- let selected_pattern = arg_strings_pattern.slice(start_index)
- let arg_counts = this._match_arguments_partial(positionals, selected_pattern)
-
- // slice off the appropriate arg strings for each Positional
- // and add the Positional and its args to the list
- for (let i = 0; i < positionals.length && i < arg_counts.length; i++) {
- let action = positionals[i]
- let arg_count = arg_counts[i]
- let args = arg_strings.slice(start_index, start_index + arg_count)
- start_index += arg_count
- take_action(action, args)
- }
-
- // slice off the Positionals that we just parsed and return the
- // index at which the Positionals' string args stopped
- positionals = positionals.slice(arg_counts.length)
- return start_index
- }
-
- // consume Positionals and Optionals alternately, until we have
- // passed the last option string
- extras = []
- let start_index = 0
- let max_option_string_index = Math.max(-1, ...Object.keys(option_string_indices).map(Number))
- while (start_index <= max_option_string_index) {
-
- // consume any Positionals preceding the next option
- let next_option_string_index = Math.min(
- // eslint-disable-next-line no-loop-func
- ...Object.keys(option_string_indices).map(Number).filter(index => index >= start_index)
- )
- if (start_index !== next_option_string_index) {
- let positionals_end_index = consume_positionals(start_index)
-
- // only try to parse the next optional if we didn't consume
- // the option string during the positionals parsing
- if (positionals_end_index > start_index) {
- start_index = positionals_end_index
- continue
- } else {
- start_index = positionals_end_index
- }
- }
-
- // if we consumed all the positionals we could and we're not
- // at the index of an option string, there were extra arguments
- if (!(start_index in option_string_indices)) {
- let strings = arg_strings.slice(start_index, next_option_string_index)
- extras = extras.concat(strings)
- start_index = next_option_string_index
- }
-
- // consume the next optional and any arguments for it
- start_index = consume_optional(start_index)
- }
-
- // consume any positionals following the last Optional
- let stop_index = consume_positionals(start_index)
-
- // if we didn't consume all the argument strings, there were extras
- extras = extras.concat(arg_strings.slice(stop_index))
-
- // make sure all required actions were present and also convert
- // action defaults which were not given as arguments
- let required_actions = []
- for (let action of this._actions) {
- if (!seen_actions.has(action)) {
- if (action.required) {
- required_actions.push(_get_action_name(action))
- } else {
- // Convert action default now instead of doing it before
- // parsing arguments to avoid calling convert functions
- // twice (which may fail) if the argument was given, but
- // only if it was defined already in the namespace
- if (action.default !== undefined &&
- typeof action.default === 'string' &&
- hasattr(namespace, action.dest) &&
- action.default === getattr(namespace, action.dest)) {
- setattr(namespace, action.dest,
- this._get_value(action, action.default))
- }
- }
- }
- }
-
- if (required_actions.length) {
- this.error(sub('the following arguments are required: %s',
- required_actions.join(', ')))
- }
-
- // make sure all required groups had one option present
- for (let group of this._mutually_exclusive_groups) {
- if (group.required) {
- let no_actions_used = true
- for (let action of group._group_actions) {
- if (seen_non_default_actions.has(action)) {
- no_actions_used = false
- break
- }
- }
-
- // if no actions were used, report the error
- if (no_actions_used) {
- let names = group._group_actions
- .filter(action => action.help !== SUPPRESS)
- .map(action => _get_action_name(action))
- let msg = 'one of the arguments %s is required'
- this.error(sub(msg, names.join(' ')))
- }
- }
- }
-
- // return the updated namespace and the extra arguments
- return [ namespace, extras ]
- }
-
- _read_args_from_files(arg_strings) {
- // expand arguments referencing files
- let new_arg_strings = []
- for (let arg_string of arg_strings) {
-
- // for regular arguments, just add them back into the list
- if (!arg_string || !this.fromfile_prefix_chars.includes(arg_string[0])) {
- new_arg_strings.push(arg_string)
-
- // replace arguments referencing files with the file content
- } else {
- try {
- let args_file = fs.readFileSync(arg_string.slice(1), 'utf8')
- let arg_strings = []
- for (let arg_line of splitlines(args_file)) {
- for (let arg of this.convert_arg_line_to_args(arg_line)) {
- arg_strings.push(arg)
- }
- }
- arg_strings = this._read_args_from_files(arg_strings)
- new_arg_strings = new_arg_strings.concat(arg_strings)
- } catch (err) {
- this.error(err.message)
- }
- }
- }
-
- // return the modified argument list
- return new_arg_strings
- }
-
- convert_arg_line_to_args(arg_line) {
- return [arg_line]
- }
-
- _match_argument(action, arg_strings_pattern) {
- // match the pattern for this action to the arg strings
- let nargs_pattern = this._get_nargs_pattern(action)
- let match = arg_strings_pattern.match(new RegExp('^' + nargs_pattern))
-
- // raise an exception if we weren't able to find a match
- if (match === null) {
- let nargs_errors = {
- undefined: 'expected one argument',
- [OPTIONAL]: 'expected at most one argument',
- [ONE_OR_MORE]: 'expected at least one argument'
- }
- let msg = nargs_errors[action.nargs]
- if (msg === undefined) {
- msg = sub(action.nargs === 1 ? 'expected %s argument' : 'expected %s arguments', action.nargs)
- }
- throw new ArgumentError(action, msg)
- }
-
- // return the number of arguments matched
- return match[1].length
- }
-
- _match_arguments_partial(actions, arg_strings_pattern) {
- // progressively shorten the actions list by slicing off the
- // final actions until we find a match
- let result = []
- for (let i of range(actions.length, 0, -1)) {
- let actions_slice = actions.slice(0, i)
- let pattern = actions_slice.map(action => this._get_nargs_pattern(action)).join('')
- let match = arg_strings_pattern.match(new RegExp('^' + pattern))
- if (match !== null) {
- result = result.concat(match.slice(1).map(string => string.length))
- break
- }
- }
-
- // return the list of arg string counts
- return result
- }
-
- _parse_optional(arg_string) {
- // if it's an empty string, it was meant to be a positional
- if (!arg_string) {
- return undefined
- }
-
- // if it doesn't start with a prefix, it was meant to be positional
- if (!this.prefix_chars.includes(arg_string[0])) {
- return undefined
- }
-
- // if the option string is present in the parser, return the action
- if (arg_string in this._option_string_actions) {
- let action = this._option_string_actions[arg_string]
- return [ action, arg_string, undefined ]
- }
-
- // if it's just a single character, it was meant to be positional
- if (arg_string.length === 1) {
- return undefined
- }
-
- // if the option string before the "=" is present, return the action
- if (arg_string.includes('=')) {
- let [ option_string, explicit_arg ] = _string_split(arg_string, '=', 1)
- if (option_string in this._option_string_actions) {
- let action = this._option_string_actions[option_string]
- return [ action, option_string, explicit_arg ]
- }
- }
-
- // search through all possible prefixes of the option string
- // and all actions in the parser for possible interpretations
- let option_tuples = this._get_option_tuples(arg_string)
-
- // if multiple actions match, the option string was ambiguous
- if (option_tuples.length > 1) {
- let options = option_tuples.map(([ /*action*/, option_string/*, explicit_arg*/ ]) => option_string).join(', ')
- let args = {option: arg_string, matches: options}
- let msg = 'ambiguous option: %(option)s could match %(matches)s'
- this.error(sub(msg, args))
-
- // if exactly one action matched, this segmentation is good,
- // so return the parsed action
- } else if (option_tuples.length === 1) {
- let [ option_tuple ] = option_tuples
- return option_tuple
- }
-
- // if it was not found as an option, but it looks like a negative
- // number, it was meant to be positional
- // unless there are negative-number-like options
- if (this._negative_number_matcher.test(arg_string)) {
- if (!this._has_negative_number_optionals.length) {
- return undefined
- }
- }
-
- // if it contains a space, it was meant to be a positional
- if (arg_string.includes(' ')) {
- return undefined
- }
-
- // it was meant to be an optional but there is no such option
- // in this parser (though it might be a valid option in a subparser)
- return [ undefined, arg_string, undefined ]
- }
-
- _get_option_tuples(option_string) {
- let result = []
-
- // option strings starting with two prefix characters are only
- // split at the '='
- let chars = this.prefix_chars
- if (chars.includes(option_string[0]) && chars.includes(option_string[1])) {
- if (this.allow_abbrev) {
- let option_prefix, explicit_arg
- if (option_string.includes('=')) {
- [ option_prefix, explicit_arg ] = _string_split(option_string, '=', 1)
- } else {
- option_prefix = option_string
- explicit_arg = undefined
- }
- for (let option_string of Object.keys(this._option_string_actions)) {
- if (option_string.startsWith(option_prefix)) {
- let action = this._option_string_actions[option_string]
- let tup = [ action, option_string, explicit_arg ]
- result.push(tup)
- }
- }
- }
-
- // single character options can be concatenated with their arguments
- // but multiple character options always have to have their argument
- // separate
- } else if (chars.includes(option_string[0]) && !chars.includes(option_string[1])) {
- let option_prefix = option_string
- let explicit_arg = undefined
- let short_option_prefix = option_string.slice(0, 2)
- let short_explicit_arg = option_string.slice(2)
-
- for (let option_string of Object.keys(this._option_string_actions)) {
- if (option_string === short_option_prefix) {
- let action = this._option_string_actions[option_string]
- let tup = [ action, option_string, short_explicit_arg ]
- result.push(tup)
- } else if (option_string.startsWith(option_prefix)) {
- let action = this._option_string_actions[option_string]
- let tup = [ action, option_string, explicit_arg ]
- result.push(tup)
- }
- }
-
- // shouldn't ever get here
- } else {
- this.error(sub('unexpected option string: %s', option_string))
- }
-
- // return the collected option tuples
- return result
- }
-
- _get_nargs_pattern(action) {
- // in all examples below, we have to allow for '--' args
- // which are represented as '-' in the pattern
- let nargs = action.nargs
- let nargs_pattern
-
- // the default (None) is assumed to be a single argument
- if (nargs === undefined) {
- nargs_pattern = '(-*A-*)'
-
- // allow zero or one arguments
- } else if (nargs === OPTIONAL) {
- nargs_pattern = '(-*A?-*)'
-
- // allow zero or more arguments
- } else if (nargs === ZERO_OR_MORE) {
- nargs_pattern = '(-*[A-]*)'
-
- // allow one or more arguments
- } else if (nargs === ONE_OR_MORE) {
- nargs_pattern = '(-*A[A-]*)'
-
- // allow any number of options or arguments
- } else if (nargs === REMAINDER) {
- nargs_pattern = '([-AO]*)'
-
- // allow one argument followed by any number of options or arguments
- } else if (nargs === PARSER) {
- nargs_pattern = '(-*A[-AO]*)'
-
- // suppress action, like nargs=0
- } else if (nargs === SUPPRESS) {
- nargs_pattern = '(-*-*)'
-
- // all others should be integers
- } else {
- nargs_pattern = sub('(-*%s-*)', 'A'.repeat(nargs).split('').join('-*'))
- }
-
- // if this is an optional action, -- is not allowed
- if (action.option_strings.length) {
- nargs_pattern = nargs_pattern.replace(/-\*/g, '')
- nargs_pattern = nargs_pattern.replace(/-/g, '')
- }
-
- // return the pattern
- return nargs_pattern
- }
-
- // ========================
- // Alt command line argument parsing, allowing free intermix
- // ========================
-
- parse_intermixed_args(args = undefined, namespace = undefined) {
- let argv
- [ args, argv ] = this.parse_known_intermixed_args(args, namespace)
- if (argv.length) {
- let msg = 'unrecognized arguments: %s'
- this.error(sub(msg, argv.join(' ')))
- }
- return args
- }
-
- parse_known_intermixed_args(args = undefined, namespace = undefined) {
- // returns a namespace and list of extras
- //
- // positional can be freely intermixed with optionals. optionals are
- // first parsed with all positional arguments deactivated. The 'extras'
- // are then parsed. If the parser definition is incompatible with the
- // intermixed assumptions (e.g. use of REMAINDER, subparsers) a
- // TypeError is raised.
- //
- // positionals are 'deactivated' by setting nargs and default to
- // SUPPRESS. This blocks the addition of that positional to the
- // namespace
-
- let extras
- let positionals = this._get_positional_actions()
- let a = positionals.filter(action => [ PARSER, REMAINDER ].includes(action.nargs))
- if (a.length) {
- throw new TypeError(sub('parse_intermixed_args: positional arg' +
- ' with nargs=%s', a[0].nargs))
- }
-
- for (let group of this._mutually_exclusive_groups) {
- for (let action of group._group_actions) {
- if (positionals.includes(action)) {
- throw new TypeError('parse_intermixed_args: positional in' +
- ' mutuallyExclusiveGroup')
- }
- }
- }
-
- let save_usage
- try {
- save_usage = this.usage
- let remaining_args
- try {
- if (this.usage === undefined) {
- // capture the full usage for use in error messages
- this.usage = this.format_usage().slice(7)
- }
- for (let action of positionals) {
- // deactivate positionals
- action.save_nargs = action.nargs
- // action.nargs = 0
- action.nargs = SUPPRESS
- action.save_default = action.default
- action.default = SUPPRESS
- }
- [ namespace, remaining_args ] = this.parse_known_args(args,
- namespace)
- for (let action of positionals) {
- // remove the empty positional values from namespace
- let attr = getattr(namespace, action.dest)
- if (Array.isArray(attr) && attr.length === 0) {
- // eslint-disable-next-line no-console
- console.warn(sub('Do not expect %s in %s', action.dest, namespace))
- delattr(namespace, action.dest)
- }
- }
- } finally {
- // restore nargs and usage before exiting
- for (let action of positionals) {
- action.nargs = action.save_nargs
- action.default = action.save_default
- }
- }
- let optionals = this._get_optional_actions()
- try {
- // parse positionals. optionals aren't normally required, but
- // they could be, so make sure they aren't.
- for (let action of optionals) {
- action.save_required = action.required
- action.required = false
- }
- for (let group of this._mutually_exclusive_groups) {
- group.save_required = group.required
- group.required = false
- }
- [ namespace, extras ] = this.parse_known_args(remaining_args,
- namespace)
- } finally {
- // restore parser values before exiting
- for (let action of optionals) {
- action.required = action.save_required
- }
- for (let group of this._mutually_exclusive_groups) {
- group.required = group.save_required
- }
- }
- } finally {
- this.usage = save_usage
- }
- return [ namespace, extras ]
- }
-
- // ========================
- // Value conversion methods
- // ========================
- _get_values(action, arg_strings) {
- // for everything but PARSER, REMAINDER args, strip out first '--'
- if (![PARSER, REMAINDER].includes(action.nargs)) {
- try {
- _array_remove(arg_strings, '--')
- } catch (err) {}
- }
-
- let value
- // optional argument produces a default when not present
- if (!arg_strings.length && action.nargs === OPTIONAL) {
- if (action.option_strings.length) {
- value = action.const
- } else {
- value = action.default
- }
- if (typeof value === 'string') {
- value = this._get_value(action, value)
- this._check_value(action, value)
- }
-
- // when nargs='*' on a positional, if there were no command-line
- // args, use the default if it is anything other than None
- } else if (!arg_strings.length && action.nargs === ZERO_OR_MORE &&
- !action.option_strings.length) {
- if (action.default !== undefined) {
- value = action.default
- } else {
- value = arg_strings
- }
- this._check_value(action, value)
-
- // single argument or optional argument produces a single value
- } else if (arg_strings.length === 1 && [undefined, OPTIONAL].includes(action.nargs)) {
- let arg_string = arg_strings[0]
- value = this._get_value(action, arg_string)
- this._check_value(action, value)
-
- // REMAINDER arguments convert all values, checking none
- } else if (action.nargs === REMAINDER) {
- value = arg_strings.map(v => this._get_value(action, v))
-
- // PARSER arguments convert all values, but check only the first
- } else if (action.nargs === PARSER) {
- value = arg_strings.map(v => this._get_value(action, v))
- this._check_value(action, value[0])
-
- // SUPPRESS argument does not put anything in the namespace
- } else if (action.nargs === SUPPRESS) {
- value = SUPPRESS
-
- // all other types of nargs produce a list
- } else {
- value = arg_strings.map(v => this._get_value(action, v))
- for (let v of value) {
- this._check_value(action, v)
- }
- }
-
- // return the converted value
- return value
- }
-
- _get_value(action, arg_string) {
- let type_func = this._registry_get('type', action.type, action.type)
- if (typeof type_func !== 'function') {
- let msg = '%r is not callable'
- throw new ArgumentError(action, sub(msg, type_func))
- }
-
- // convert the value to the appropriate type
- let result
- try {
- try {
- result = type_func(arg_string)
- } catch (err) {
- // Dear TC39, why would you ever consider making es6 classes not callable?
- // We had one universal interface, [[Call]], which worked for anything
- // (with familiar this-instanceof guard for classes). Now we have two.
- if (err instanceof TypeError &&
- /Class constructor .* cannot be invoked without 'new'/.test(err.message)) {
- // eslint-disable-next-line new-cap
- result = new type_func(arg_string)
- } else {
- throw err
- }
- }
-
- } catch (err) {
- // ArgumentTypeErrors indicate errors
- if (err instanceof ArgumentTypeError) {
- //let name = getattr(action.type, 'name', repr(action.type))
- let msg = err.message
- throw new ArgumentError(action, msg)
-
- // TypeErrors or ValueErrors also indicate errors
- } else if (err instanceof TypeError) {
- let name = getattr(action.type, 'name', repr(action.type))
- let args = {type: name, value: arg_string}
- let msg = 'invalid %(type)s value: %(value)r'
- throw new ArgumentError(action, sub(msg, args))
- } else {
- throw err
- }
- }
-
- // return the converted value
- return result
- }
-
- _check_value(action, value) {
- // converted value must be one of the choices (if specified)
- if (action.choices !== undefined && !_choices_to_array(action.choices).includes(value)) {
- let args = {value,
- choices: _choices_to_array(action.choices).map(repr).join(', ')}
- let msg = 'invalid choice: %(value)r (choose from %(choices)s)'
- throw new ArgumentError(action, sub(msg, args))
- }
- }
-
- // =======================
- // Help-formatting methods
- // =======================
- format_usage() {
- let formatter = this._get_formatter()
- formatter.add_usage(this.usage, this._actions,
- this._mutually_exclusive_groups)
- return formatter.format_help()
- }
-
- format_help() {
- let formatter = this._get_formatter()
-
- // usage
- formatter.add_usage(this.usage, this._actions,
- this._mutually_exclusive_groups)
-
- // description
- formatter.add_text(this.description)
-
- // positionals, optionals and user-defined groups
- for (let action_group of this._action_groups) {
- formatter.start_section(action_group.title)
- formatter.add_text(action_group.description)
- formatter.add_arguments(action_group._group_actions)
- formatter.end_section()
- }
-
- // epilog
- formatter.add_text(this.epilog)
-
- // determine help from format above
- return formatter.format_help()
- }
-
- _get_formatter() {
- // eslint-disable-next-line new-cap
- return new this.formatter_class({ prog: this.prog })
- }
-
- // =====================
- // Help-printing methods
- // =====================
- print_usage(file = undefined) {
- if (file === undefined) file = process.stdout
- this._print_message(this.format_usage(), file)
- }
-
- print_help(file = undefined) {
- if (file === undefined) file = process.stdout
- this._print_message(this.format_help(), file)
- }
-
- _print_message(message, file = undefined) {
- if (message) {
- if (file === undefined) file = process.stderr
- file.write(message)
- }
- }
-
- // ===============
- // Exiting methods
- // ===============
- exit(status = 0, message = undefined) {
- if (message) {
- this._print_message(message, process.stderr)
- }
- process.exit(status)
- }
-
- error(message) {
- /*
- * error(message: string)
- *
- * Prints a usage message incorporating the message to stderr and
- * exits.
- *
- * If you override this in a subclass, it should not return -- it
- * should either exit or raise an exception.
- */
-
- // LEGACY (v1 compatibility), debug mode
- if (this.debug === true) throw new Error(message)
- // end
- this.print_usage(process.stderr)
- let args = {prog: this.prog, message: message}
- this.exit(2, sub('%(prog)s: error: %(message)s\n', args))
- }
-}))
-
-
-module.exports = {
- ArgumentParser,
- ArgumentError,
- ArgumentTypeError,
- BooleanOptionalAction,
- FileType,
- HelpFormatter,
- ArgumentDefaultsHelpFormatter,
- RawDescriptionHelpFormatter,
- RawTextHelpFormatter,
- MetavarTypeHelpFormatter,
- Namespace,
- Action,
- ONE_OR_MORE,
- OPTIONAL,
- PARSER,
- REMAINDER,
- SUPPRESS,
- ZERO_OR_MORE
-}
-
-// LEGACY (v1 compatibility), Const alias
-Object.defineProperty(module.exports, 'Const', {
- get() {
- let result = {}
- Object.entries({ ONE_OR_MORE, OPTIONAL, PARSER, REMAINDER, SUPPRESS, ZERO_OR_MORE }).forEach(([ n, v ]) => {
- Object.defineProperty(result, n, {
- get() {
- deprecate(n, sub('use argparse.%s instead of argparse.Const.%s', n, n))
- return v
- }
- })
- })
- Object.entries({ _UNRECOGNIZED_ARGS_ATTR }).forEach(([ n, v ]) => {
- Object.defineProperty(result, n, {
- get() {
- deprecate(n, sub('argparse.Const.%s is an internal symbol and will no longer be available', n))
- return v
- }
- })
- })
- return result
- },
- enumerable: false
-})
-// end
diff --git a/node_modules/argparse/lib/sub.js b/node_modules/argparse/lib/sub.js
deleted file mode 100644
index e3eb321..0000000
--- a/node_modules/argparse/lib/sub.js
+++ /dev/null
@@ -1,67 +0,0 @@
-// Limited implementation of python % string operator, supports only %s and %r for now
-// (other formats are not used here, but may appear in custom templates)
-
-'use strict'
-
-const { inspect } = require('util')
-
-
-module.exports = function sub(pattern, ...values) {
- let regex = /%(?:(%)|(-)?(\*)?(?:\((\w+)\))?([A-Za-z]))/g
-
- let result = pattern.replace(regex, function (_, is_literal, is_left_align, is_padded, name, format) {
- if (is_literal) return '%'
-
- let padded_count = 0
- if (is_padded) {
- if (values.length === 0) throw new TypeError('not enough arguments for format string')
- padded_count = values.shift()
- if (!Number.isInteger(padded_count)) throw new TypeError('* wants int')
- }
-
- let str
- if (name !== undefined) {
- let dict = values[0]
- if (typeof dict !== 'object' || dict === null) throw new TypeError('format requires a mapping')
- if (!(name in dict)) throw new TypeError(`no such key: '${name}'`)
- str = dict[name]
- } else {
- if (values.length === 0) throw new TypeError('not enough arguments for format string')
- str = values.shift()
- }
-
- switch (format) {
- case 's':
- str = String(str)
- break
- case 'r':
- str = inspect(str)
- break
- case 'd':
- case 'i':
- if (typeof str !== 'number') {
- throw new TypeError(`%${format} format: a number is required, not ${typeof str}`)
- }
- str = String(str.toFixed(0))
- break
- default:
- throw new TypeError(`unsupported format character '${format}'`)
- }
-
- if (padded_count > 0) {
- return is_left_align ? str.padEnd(padded_count) : str.padStart(padded_count)
- } else {
- return str
- }
- })
-
- if (values.length) {
- if (values.length === 1 && typeof values[0] === 'object' && values[0] !== null) {
- // mapping
- } else {
- throw new TypeError('not all arguments converted during string formatting')
- }
- }
-
- return result
-}
diff --git a/node_modules/argparse/lib/textwrap.js b/node_modules/argparse/lib/textwrap.js
deleted file mode 100644
index 23d51cd..0000000
--- a/node_modules/argparse/lib/textwrap.js
+++ /dev/null
@@ -1,440 +0,0 @@
-// Partial port of python's argparse module, version 3.9.0 (only wrap and fill functions):
-// https://github.com/python/cpython/blob/v3.9.0b4/Lib/textwrap.py
-
-'use strict'
-
-/*
- * Text wrapping and filling.
- */
-
-// Copyright (C) 1999-2001 Gregory P. Ward.
-// Copyright (C) 2002, 2003 Python Software Foundation.
-// Copyright (C) 2020 argparse.js authors
-// Originally written by Greg Ward
-
-// Hardcode the recognized whitespace characters to the US-ASCII
-// whitespace characters. The main reason for doing this is that
-// some Unicode spaces (like \u00a0) are non-breaking whitespaces.
-//
-// This less funky little regex just split on recognized spaces. E.g.
-// "Hello there -- you goof-ball, use the -b option!"
-// splits into
-// Hello/ /there/ /--/ /you/ /goof-ball,/ /use/ /the/ /-b/ /option!/
-const wordsep_simple_re = /([\t\n\x0b\x0c\r ]+)/
-
-class TextWrapper {
- /*
- * Object for wrapping/filling text. The public interface consists of
- * the wrap() and fill() methods; the other methods are just there for
- * subclasses to override in order to tweak the default behaviour.
- * If you want to completely replace the main wrapping algorithm,
- * you'll probably have to override _wrap_chunks().
- *
- * Several instance attributes control various aspects of wrapping:
- * width (default: 70)
- * the maximum width of wrapped lines (unless break_long_words
- * is false)
- * initial_indent (default: "")
- * string that will be prepended to the first line of wrapped
- * output. Counts towards the line's width.
- * subsequent_indent (default: "")
- * string that will be prepended to all lines save the first
- * of wrapped output; also counts towards each line's width.
- * expand_tabs (default: true)
- * Expand tabs in input text to spaces before further processing.
- * Each tab will become 0 .. 'tabsize' spaces, depending on its position
- * in its line. If false, each tab is treated as a single character.
- * tabsize (default: 8)
- * Expand tabs in input text to 0 .. 'tabsize' spaces, unless
- * 'expand_tabs' is false.
- * replace_whitespace (default: true)
- * Replace all whitespace characters in the input text by spaces
- * after tab expansion. Note that if expand_tabs is false and
- * replace_whitespace is true, every tab will be converted to a
- * single space!
- * fix_sentence_endings (default: false)
- * Ensure that sentence-ending punctuation is always followed
- * by two spaces. Off by default because the algorithm is
- * (unavoidably) imperfect.
- * break_long_words (default: true)
- * Break words longer than 'width'. If false, those words will not
- * be broken, and some lines might be longer than 'width'.
- * break_on_hyphens (default: true)
- * Allow breaking hyphenated words. If true, wrapping will occur
- * preferably on whitespaces and right after hyphens part of
- * compound words.
- * drop_whitespace (default: true)
- * Drop leading and trailing whitespace from lines.
- * max_lines (default: None)
- * Truncate wrapped lines.
- * placeholder (default: ' [...]')
- * Append to the last line of truncated text.
- */
-
- constructor(options = {}) {
- let {
- width = 70,
- initial_indent = '',
- subsequent_indent = '',
- expand_tabs = true,
- replace_whitespace = true,
- fix_sentence_endings = false,
- break_long_words = true,
- drop_whitespace = true,
- break_on_hyphens = true,
- tabsize = 8,
- max_lines = undefined,
- placeholder=' [...]'
- } = options
-
- this.width = width
- this.initial_indent = initial_indent
- this.subsequent_indent = subsequent_indent
- this.expand_tabs = expand_tabs
- this.replace_whitespace = replace_whitespace
- this.fix_sentence_endings = fix_sentence_endings
- this.break_long_words = break_long_words
- this.drop_whitespace = drop_whitespace
- this.break_on_hyphens = break_on_hyphens
- this.tabsize = tabsize
- this.max_lines = max_lines
- this.placeholder = placeholder
- }
-
-
- // -- Private methods -----------------------------------------------
- // (possibly useful for subclasses to override)
-
- _munge_whitespace(text) {
- /*
- * _munge_whitespace(text : string) -> string
- *
- * Munge whitespace in text: expand tabs and convert all other
- * whitespace characters to spaces. Eg. " foo\\tbar\\n\\nbaz"
- * becomes " foo bar baz".
- */
- if (this.expand_tabs) {
- text = text.replace(/\t/g, ' '.repeat(this.tabsize)) // not strictly correct in js
- }
- if (this.replace_whitespace) {
- text = text.replace(/[\t\n\x0b\x0c\r]/g, ' ')
- }
- return text
- }
-
- _split(text) {
- /*
- * _split(text : string) -> [string]
- *
- * Split the text to wrap into indivisible chunks. Chunks are
- * not quite the same as words; see _wrap_chunks() for full
- * details. As an example, the text
- * Look, goof-ball -- use the -b option!
- * breaks into the following chunks:
- * 'Look,', ' ', 'goof-', 'ball', ' ', '--', ' ',
- * 'use', ' ', 'the', ' ', '-b', ' ', 'option!'
- * if break_on_hyphens is True, or in:
- * 'Look,', ' ', 'goof-ball', ' ', '--', ' ',
- * 'use', ' ', 'the', ' ', '-b', ' ', option!'
- * otherwise.
- */
- let chunks = text.split(wordsep_simple_re)
- chunks = chunks.filter(Boolean)
- return chunks
- }
-
- _handle_long_word(reversed_chunks, cur_line, cur_len, width) {
- /*
- * _handle_long_word(chunks : [string],
- * cur_line : [string],
- * cur_len : int, width : int)
- *
- * Handle a chunk of text (most likely a word, not whitespace) that
- * is too long to fit in any line.
- */
- // Figure out when indent is larger than the specified width, and make
- // sure at least one character is stripped off on every pass
- let space_left
- if (width < 1) {
- space_left = 1
- } else {
- space_left = width - cur_len
- }
-
- // If we're allowed to break long words, then do so: put as much
- // of the next chunk onto the current line as will fit.
- if (this.break_long_words) {
- cur_line.push(reversed_chunks[reversed_chunks.length - 1].slice(0, space_left))
- reversed_chunks[reversed_chunks.length - 1] = reversed_chunks[reversed_chunks.length - 1].slice(space_left)
-
- // Otherwise, we have to preserve the long word intact. Only add
- // it to the current line if there's nothing already there --
- // that minimizes how much we violate the width constraint.
- } else if (!cur_line) {
- cur_line.push(...reversed_chunks.pop())
- }
-
- // If we're not allowed to break long words, and there's already
- // text on the current line, do nothing. Next time through the
- // main loop of _wrap_chunks(), we'll wind up here again, but
- // cur_len will be zero, so the next line will be entirely
- // devoted to the long word that we can't handle right now.
- }
-
- _wrap_chunks(chunks) {
- /*
- * _wrap_chunks(chunks : [string]) -> [string]
- *
- * Wrap a sequence of text chunks and return a list of lines of
- * length 'self.width' or less. (If 'break_long_words' is false,
- * some lines may be longer than this.) Chunks correspond roughly
- * to words and the whitespace between them: each chunk is
- * indivisible (modulo 'break_long_words'), but a line break can
- * come between any two chunks. Chunks should not have internal
- * whitespace; ie. a chunk is either all whitespace or a "word".
- * Whitespace chunks will be removed from the beginning and end of
- * lines, but apart from that whitespace is preserved.
- */
- let lines = []
- let indent
- if (this.width <= 0) {
- throw Error(`invalid width ${this.width} (must be > 0)`)
- }
- if (this.max_lines !== undefined) {
- if (this.max_lines > 1) {
- indent = this.subsequent_indent
- } else {
- indent = this.initial_indent
- }
- if (indent.length + this.placeholder.trimStart().length > this.width) {
- throw Error('placeholder too large for max width')
- }
- }
-
- // Arrange in reverse order so items can be efficiently popped
- // from a stack of chucks.
- chunks = chunks.reverse()
-
- while (chunks.length > 0) {
-
- // Start the list of chunks that will make up the current line.
- // cur_len is just the length of all the chunks in cur_line.
- let cur_line = []
- let cur_len = 0
-
- // Figure out which static string will prefix this line.
- let indent
- if (lines) {
- indent = this.subsequent_indent
- } else {
- indent = this.initial_indent
- }
-
- // Maximum width for this line.
- let width = this.width - indent.length
-
- // First chunk on line is whitespace -- drop it, unless this
- // is the very beginning of the text (ie. no lines started yet).
- if (this.drop_whitespace && chunks[chunks.length - 1].trim() === '' && lines.length > 0) {
- chunks.pop()
- }
-
- while (chunks.length > 0) {
- let l = chunks[chunks.length - 1].length
-
- // Can at least squeeze this chunk onto the current line.
- if (cur_len + l <= width) {
- cur_line.push(chunks.pop())
- cur_len += l
-
- // Nope, this line is full.
- } else {
- break
- }
- }
-
- // The current line is full, and the next chunk is too big to
- // fit on *any* line (not just this one).
- if (chunks.length && chunks[chunks.length - 1].length > width) {
- this._handle_long_word(chunks, cur_line, cur_len, width)
- cur_len = cur_line.map(l => l.length).reduce((a, b) => a + b, 0)
- }
-
- // If the last chunk on this line is all whitespace, drop it.
- if (this.drop_whitespace && cur_line.length > 0 && cur_line[cur_line.length - 1].trim() === '') {
- cur_len -= cur_line[cur_line.length - 1].length
- cur_line.pop()
- }
-
- if (cur_line) {
- if (this.max_lines === undefined ||
- lines.length + 1 < this.max_lines ||
- (chunks.length === 0 ||
- this.drop_whitespace &&
- chunks.length === 1 &&
- !chunks[0].trim()) && cur_len <= width) {
- // Convert current line back to a string and store it in
- // list of all lines (return value).
- lines.push(indent + cur_line.join(''))
- } else {
- let had_break = false
- while (cur_line) {
- if (cur_line[cur_line.length - 1].trim() &&
- cur_len + this.placeholder.length <= width) {
- cur_line.push(this.placeholder)
- lines.push(indent + cur_line.join(''))
- had_break = true
- break
- }
- cur_len -= cur_line[-1].length
- cur_line.pop()
- }
- if (!had_break) {
- if (lines) {
- let prev_line = lines[lines.length - 1].trimEnd()
- if (prev_line.length + this.placeholder.length <=
- this.width) {
- lines[lines.length - 1] = prev_line + this.placeholder
- break
- }
- }
- lines.push(indent + this.placeholder.lstrip())
- }
- break
- }
- }
- }
-
- return lines
- }
-
- _split_chunks(text) {
- text = this._munge_whitespace(text)
- return this._split(text)
- }
-
- // -- Public interface ----------------------------------------------
-
- wrap(text) {
- /*
- * wrap(text : string) -> [string]
- *
- * Reformat the single paragraph in 'text' so it fits in lines of
- * no more than 'self.width' columns, and return a list of wrapped
- * lines. Tabs in 'text' are expanded with string.expandtabs(),
- * and all other whitespace characters (including newline) are
- * converted to space.
- */
- let chunks = this._split_chunks(text)
- // not implemented in js
- //if (this.fix_sentence_endings) {
- // this._fix_sentence_endings(chunks)
- //}
- return this._wrap_chunks(chunks)
- }
-
- fill(text) {
- /*
- * fill(text : string) -> string
- *
- * Reformat the single paragraph in 'text' to fit in lines of no
- * more than 'self.width' columns, and return a new string
- * containing the entire wrapped paragraph.
- */
- return this.wrap(text).join('\n')
- }
-}
-
-
-// -- Convenience interface ---------------------------------------------
-
-function wrap(text, options = {}) {
- /*
- * Wrap a single paragraph of text, returning a list of wrapped lines.
- *
- * Reformat the single paragraph in 'text' so it fits in lines of no
- * more than 'width' columns, and return a list of wrapped lines. By
- * default, tabs in 'text' are expanded with string.expandtabs(), and
- * all other whitespace characters (including newline) are converted to
- * space. See TextWrapper class for available keyword args to customize
- * wrapping behaviour.
- */
- let { width = 70, ...kwargs } = options
- let w = new TextWrapper(Object.assign({ width }, kwargs))
- return w.wrap(text)
-}
-
-function fill(text, options = {}) {
- /*
- * Fill a single paragraph of text, returning a new string.
- *
- * Reformat the single paragraph in 'text' to fit in lines of no more
- * than 'width' columns, and return a new string containing the entire
- * wrapped paragraph. As with wrap(), tabs are expanded and other
- * whitespace characters converted to space. See TextWrapper class for
- * available keyword args to customize wrapping behaviour.
- */
- let { width = 70, ...kwargs } = options
- let w = new TextWrapper(Object.assign({ width }, kwargs))
- return w.fill(text)
-}
-
-// -- Loosely related functionality -------------------------------------
-
-let _whitespace_only_re = /^[ \t]+$/mg
-let _leading_whitespace_re = /(^[ \t]*)(?:[^ \t\n])/mg
-
-function dedent(text) {
- /*
- * Remove any common leading whitespace from every line in `text`.
- *
- * This can be used to make triple-quoted strings line up with the left
- * edge of the display, while still presenting them in the source code
- * in indented form.
- *
- * Note that tabs and spaces are both treated as whitespace, but they
- * are not equal: the lines " hello" and "\\thello" are
- * considered to have no common leading whitespace.
- *
- * Entirely blank lines are normalized to a newline character.
- */
- // Look for the longest leading string of spaces and tabs common to
- // all lines.
- let margin = undefined
- text = text.replace(_whitespace_only_re, '')
- let indents = text.match(_leading_whitespace_re) || []
- for (let indent of indents) {
- indent = indent.slice(0, -1)
-
- if (margin === undefined) {
- margin = indent
-
- // Current line more deeply indented than previous winner:
- // no change (previous winner is still on top).
- } else if (indent.startsWith(margin)) {
- // pass
-
- // Current line consistent with and no deeper than previous winner:
- // it's the new winner.
- } else if (margin.startsWith(indent)) {
- margin = indent
-
- // Find the largest common whitespace between current line and previous
- // winner.
- } else {
- for (let i = 0; i < margin.length && i < indent.length; i++) {
- if (margin[i] !== indent[i]) {
- margin = margin.slice(0, i)
- break
- }
- }
- }
- }
-
- if (margin) {
- text = text.replace(new RegExp('^' + margin, 'mg'), '')
- }
- return text
-}
-
-module.exports = { wrap, fill, dedent }
diff --git a/node_modules/argparse/package.json b/node_modules/argparse/package.json
deleted file mode 100644
index 647d2af..0000000
--- a/node_modules/argparse/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name": "argparse",
- "description": "CLI arguments parser. Native port of python's argparse.",
- "version": "2.0.1",
- "keywords": [
- "cli",
- "parser",
- "argparse",
- "option",
- "args"
- ],
- "main": "argparse.js",
- "files": [
- "argparse.js",
- "lib/"
- ],
- "license": "Python-2.0",
- "repository": "nodeca/argparse",
- "scripts": {
- "lint": "eslint .",
- "test": "npm run lint && nyc mocha",
- "coverage": "npm run test && nyc report --reporter html"
- },
- "devDependencies": {
- "@babel/eslint-parser": "^7.11.0",
- "@babel/plugin-syntax-class-properties": "^7.10.4",
- "eslint": "^7.5.0",
- "mocha": "^8.0.1",
- "nyc": "^15.1.0"
- }
-}
diff --git a/node_modules/aws-ssl-profiles/LICENSE b/node_modules/aws-ssl-profiles/LICENSE
deleted file mode 100644
index 95dc096..0000000
--- a/node_modules/aws-ssl-profiles/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2024 Andrey Sidorov, Douglas Wilson, Weslley Araújo and contributors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/node_modules/aws-ssl-profiles/README.md b/node_modules/aws-ssl-profiles/README.md
deleted file mode 100644
index 99acaad..0000000
--- a/node_modules/aws-ssl-profiles/README.md
+++ /dev/null
@@ -1,146 +0,0 @@
-# AWS SSL Profiles
-
-[**AWS RDS**](https://aws.amazon.com/rds/) **SSL** Certificates Bundles.
-
-**Table of Contents**
-
-- [Installation](#installation)
-- [Usage](#usage)
- - [**mysqljs/mysql**](#mysqljsmysql)
- - [**MySQL2**](#mysql2)
- - [**node-postgres**](#node-postgres)
- - [Custom `ssl` options](#custom-ssl-options)
-- [License](#license)
-- [Security](#security)
-- [Contributing](#contributing)
-- [Acknowledgements](#acknowledgements)
-
----
-
-## Installation
-
-```bash
-npm install --save aws-ssl-profiles
-```
-
----
-
-## Usage
-
-### [mysqljs/mysql](https://github.com/mysqljs/mysql)
-
-```js
-const mysql = require('mysql');
-const awsCaBundle = require('aws-ssl-profiles');
-
-// mysql connection
-const connection = mysql.createConnection({
- //...
- ssl: awsCaBundle,
-});
-
-// mysql connection pool
-const pool = mysql.createPool({
- //...
- ssl: awsCaBundle,
-});
-```
-
-### [MySQL2](https://github.com/sidorares/node-mysql2)
-
-```js
-const mysql = require('mysql2');
-const awsCaBundle = require('aws-ssl-profiles');
-
-// mysql2 connection
-const connection = mysql.createConnection({
- //...
- ssl: awsCaBundle,
-});
-
-// mysql2 connection pool
-const pool = mysql.createPool({
- //...
- ssl: awsCaBundle,
-});
-```
-
-### [node-postgres](https://github.com/brianc/node-postgres)
-
-```js
-const pg = require('pg');
-const awsCaBundle = require('aws-ssl-profiles');
-
-// pg connection
-const client = new pg.Client({
- // ...
- ssl: awsCaBundle,
-});
-
-// pg connection pool
-const pool = new pg.Pool({
- // ...
- ssl: awsCaBundle,
-});
-```
-
-### Custom `ssl` options
-
-Using **AWS SSL Profiles** with custom `ssl` options:
-
-```js
-{
- // ...
- ssl: {
- ...awsCaBundle,
- rejectUnauthorized: true,
- // ...
- }
-}
-```
-
-```js
-{
- // ...
- ssl: {
- ca: awsCaBundle.ca,
- rejectUnauthorized: true,
- // ...
- }
-}
-```
-
-### Custom bundles
-
-```js
-const { proxyBundle } = require('aws-ssl-profiles');
-
-{
- // ...
- ssl: proxyBundle,
-}
-```
-
----
-
-## License
-
-**AWS SSL Profiles** is under the [**MIT License**](./LICENSE).
-
----
-
-## Security
-
-Please check the [**SECURITY.md**](./SECURITY.md).
-
----
-
-## Contributing
-
-Please check the [**CONTRIBUTING.md**](./CONTRIBUTING.md) for instructions.
-
----
-
-## Acknowledgements
-
-[**Contributors**](https://github.com/mysqljs/aws-ssl-profiles/graphs/contributors).
diff --git a/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts b/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts
deleted file mode 100644
index a02c121..0000000
--- a/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export type CA = string[];
-export type Profiles = {
- ca: CA;
-};
diff --git a/node_modules/aws-ssl-profiles/lib/@types/profiles.js b/node_modules/aws-ssl-profiles/lib/@types/profiles.js
deleted file mode 100644
index c8ad2e5..0000000
--- a/node_modules/aws-ssl-profiles/lib/@types/profiles.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/node_modules/aws-ssl-profiles/lib/index.d.ts b/node_modules/aws-ssl-profiles/lib/index.d.ts
deleted file mode 100644
index 18d181b..0000000
--- a/node_modules/aws-ssl-profiles/lib/index.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { Profiles } from "./@types/profiles.js";
-export declare const proxyBundle: Profiles;
-declare const profiles: Profiles;
-declare module "aws-ssl-profiles" {
- const profiles: Profiles & { proxyBundle: Profiles };
- export = profiles;
-}
-export default profiles;
diff --git a/node_modules/aws-ssl-profiles/lib/index.js b/node_modules/aws-ssl-profiles/lib/index.js
deleted file mode 100644
index d702ca7..0000000
--- a/node_modules/aws-ssl-profiles/lib/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const defaults_js_1 = require("./profiles/ca/defaults.js");
-const proxies_js_1 = require("./profiles/ca/proxies.js");
-const proxyBundle = {
- ca: proxies_js_1.proxies,
-};
-const profiles = {
- ca: [...defaults_js_1.defaults, ...proxies_js_1.proxies],
-};
-module.exports = profiles;
-module.exports.proxyBundle = proxyBundle;
-module.exports.default = profiles;
diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts
deleted file mode 100644
index 347c7b5..0000000
--- a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { CA } from '../../@types/profiles.js';
-/**
- * CA Certificates for **Amazon RDS** (2024)
- *
- * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
- * - https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html
- * - https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls
- */
-export declare const defaults: CA;
diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js
deleted file mode 100644
index 343c8a0..0000000
--- a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js
+++ /dev/null
@@ -1,2888 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.defaults = void 0;
-/**
- * CA Certificates for **Amazon RDS** (2024)
- *
- * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html
- * - https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html
- * - https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls
- */
-exports.defaults = [
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEEjCCAvqgAwIBAgIJAM2ZN/+nPi27MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBhZi1zb3V0aC0xIFJvb3QgQ0Ew\n' +
- 'HhcNMTkxMDI4MTgwNTU4WhcNMjQxMDI2MTgwNTU4WjCBlTELMAkGA1UEBhMCVVMx\n' +
- 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' +
- 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' +
- 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgYWYtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' +
- 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR2351uPMZaJk2gMGT+1sk8HE9MQh2rc\n' +
- '/sCnbxGn2p1c7Oi9aBbd/GiFijeJb2BXvHU+TOq3d3Jjqepq8tapXVt4ojbTJNyC\n' +
- 'J5E7r7KjTktKdLxtBE1MK25aY+IRJjtdU6vG3KiPKUT1naO3xs3yt0F76WVuFivd\n' +
- '9OHv2a+KHvPkRUWIxpmAHuMY9SIIMmEZtVE7YZGx5ah0iO4JzItHcbVR0y0PBH55\n' +
- 'arpFBddpIVHCacp1FUPxSEWkOpI7q0AaU4xfX0fe1BV5HZYRKpBOIp1TtZWvJD+X\n' +
- 'jGUtL1BEsT5vN5g9MkqdtYrC+3SNpAk4VtpvJrdjraI/hhvfeXNnAwIDAQABo2Mw\n' +
- 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUEEi/\n' +
- 'WWMcBJsoGXg+EZwkQ0MscZQwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0Ms\n' +
- 'cZQwDQYJKoZIhvcNAQELBQADggEBAGDZ5js5Pc/gC58LJrwMPXFhJDBS8QuDm23C\n' +
- 'FFUdlqucskwOS3907ErK1ZkmVJCIqFLArHqskFXMAkRZ2PNR7RjWLqBs+0znG5yH\n' +
- 'hRKb4DXzhUFQ18UBRcvT6V6zN97HTRsEEaNhM/7k8YLe7P8vfNZ28VIoJIGGgv9D\n' +
- 'wQBBvkxQ71oOmAG0AwaGD0ORGUfbYry9Dz4a4IcUsZyRWRMADixgrFv6VuETp26s\n' +
- '/+z+iqNaGWlELBKh3iQCT6Y/1UnkPLO42bxrCSyOvshdkYN58Q2gMTE1SVTqyo8G\n' +
- 'Lw8lLAz9bnvUSgHzB3jRrSx6ggF/WRMRYlR++y6LXP4SAsSAaC0=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEEjCCAvqgAwIBAgIJAJYM4LxvTZA6MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0Ew\n' +
- 'HhcNMTkxMDMwMjAyMDM2WhcNMjQxMDI4MjAyMDM2WjCBlTELMAkGA1UEBhMCVVMx\n' +
- 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' +
- 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' +
- 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgZXUtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' +
- 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqM921jXCXeqpRNCS9CBPOe5N7gMaEt+D\n' +
- 's5uR3riZbqzRlHGiF1jZihkXfHAIQewDwy+Yz+Oec1aEZCQMhUHxZJPusuX0cJfj\n' +
- 'b+UluFqHIijL2TfXJ3D0PVLLoNTQJZ8+GAPECyojAaNuoHbdVqxhOcznMsXIXVFq\n' +
- 'yVLKDGvyKkJjai/iSPDrQMXufg3kWt0ISjNLvsG5IFXgP4gttsM8i0yvRd4QcHoo\n' +
- 'DjvH7V3cS+CQqW5SnDrGnHToB0RLskE1ET+oNOfeN9PWOxQprMOX/zmJhnJQlTqD\n' +
- 'QP7jcf7SddxrKFjuziFiouskJJyNDsMjt1Lf60+oHZhed2ogTeifGwIDAQABo2Mw\n' +
- 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUFBAF\n' +
- 'cgJe/BBuZiGeZ8STfpkgRYQwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkg\n' +
- 'RYQwDQYJKoZIhvcNAQELBQADggEBAKAYUtlvDuX2UpZW9i1QgsjFuy/ErbW0dLHU\n' +
- 'e/IcFtju2z6RLZ+uF+5A8Kme7IKG1hgt8s+w9TRVQS/7ukQzoK3TaN6XKXRosjtc\n' +
- 'o9Rm4gYWM8bmglzY1TPNaiI4HC7546hSwJhubjN0bXCuj/0sHD6w2DkiGuwKNAef\n' +
- 'yTu5vZhPkeNyXLykxkzz7bNp2/PtMBnzIp+WpS7uUDmWyScGPohKMq5PqvL59z+L\n' +
- 'ZI3CYeMZrJ5VpXUg3fNNIz/83N3G0sk7wr0ohs/kHTP7xPOYB0zD7Ku4HA0Q9Swf\n' +
- 'WX0qr6UQgTPMjfYDLffI7aEId0gxKw1eGYc6Cq5JAZ3ipi/cBFc=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEEjCCAvqgAwIBAgIJANew34ehz5l8MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0Ew\n' +
- 'HhcNMTkwNTEwMjE0ODI3WhcNMjQwNTA4MjE0ODI3WjCBlTELMAkGA1UEBhMCVVMx\n' +
- 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' +
- 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' +
- 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgbWUtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' +
- 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7BYV88MukcY+rq0r79+C8UzkT30fEfT\n' +
- 'aPXbx1d6M7uheGN4FMaoYmL+JE1NZPaMRIPTHhFtLSdPccInvenRDIatcXX+jgOk\n' +
- 'UA6lnHQ98pwN0pfDUyz/Vph4jBR9LcVkBbe0zdoKKp+HGbMPRU0N2yNrog9gM5O8\n' +
- 'gkU/3O2csJ/OFQNnj4c2NQloGMUpEmedwJMOyQQfcUyt9CvZDfIPNnheUS29jGSw\n' +
- 'ERpJe/AENu8Pxyc72jaXQuD+FEi2Ck6lBkSlWYQFhTottAeGvVFNCzKszCntrtqd\n' +
- 'rdYUwurYsLTXDHv9nW2hfDUQa0mhXf9gNDOBIVAZugR9NqNRNyYLHQIDAQABo2Mw\n' +
- 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU54cf\n' +
- 'DjgwBx4ycBH8+/r8WXdaiqYwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXda\n' +
- 'iqYwDQYJKoZIhvcNAQELBQADggEBAIIMTSPx/dR7jlcxggr+O6OyY49Rlap2laKA\n' +
- 'eC/XI4ySP3vQkIFlP822U9Kh8a9s46eR0uiwV4AGLabcu0iKYfXjPkIprVCqeXV7\n' +
- 'ny9oDtrbflyj7NcGdZLvuzSwgl9SYTJp7PVCZtZutsPYlbJrBPHwFABvAkMvRtDB\n' +
- 'hitIg4AESDGPoCl94sYHpfDfjpUDMSrAMDUyO6DyBdZH5ryRMAs3lGtsmkkNUrso\n' +
- 'aTW6R05681Z0mvkRdb+cdXtKOSuDZPoe2wJJIaz3IlNQNSrB5TImMYgmt6iAsFhv\n' +
- '3vfTSTKrZDNTJn4ybG6pq1zWExoXsktZPylJly6R3RBwV6nwqBM=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw\n' +
- 'ODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv\n' +
- 'biBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV\n' +
- 'BAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' +
- 'AQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ\n' +
- 'oWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY\n' +
- '0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I\n' +
- '6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9\n' +
- 'O08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9\n' +
- 'McZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E\n' +
- 'BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa\n' +
- 'pmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN\n' +
- 'AQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV\n' +
- 'ynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc\n' +
- 'NUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu\n' +
- 'cbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY\n' +
- '0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/\n' +
- 'zPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEEDCCAvigAwIBAgIJAKFMXyltvuRdMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTAe\n' +
- 'Fw0xOTA4MTkxNzM4MjZaFw0yNDA4MTkxNzM4MjZaMIGUMQswCQYDVQQGEwJVUzEQ\n' +
- 'MA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UECgwZ\n' +
- 'QW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEl\n' +
- 'MCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTCCASIwDQYJKoZI\n' +
- 'hvcNAQEBBQADggEPADCCAQoCggEBAMkZdnIH9ndatGAcFo+DppGJ1HUt4x+zeO+0\n' +
- 'ZZ29m0sfGetVulmTlv2d5b66e+QXZFWpcPQMouSxxYTW08TbrQiZngKr40JNXftA\n' +
- 'atvzBqIImD4II0ZX5UEVj2h98qe/ypW5xaDN7fEa5e8FkYB1TEemPaWIbNXqchcL\n' +
- 'tV7IJPr3Cd7Z5gZJlmujIVDPpMuSiNaal9/6nT9oqN+JSM1fx5SzrU5ssg1Vp1vv\n' +
- '5Xab64uOg7wCJRB9R2GC9XD04odX6VcxUAGrZo6LR64ZSifupo3l+R5sVOc5i8NH\n' +
- 'skdboTzU9H7+oSdqoAyhIU717PcqeDum23DYlPE2nGBWckE+eT8CAwEAAaNjMGEw\n' +
- 'DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK2hDBWl\n' +
- 'sbHzt/EHd0QYOooqcFPhMB8GA1UdIwQYMBaAFK2hDBWlsbHzt/EHd0QYOooqcFPh\n' +
- 'MA0GCSqGSIb3DQEBCwUAA4IBAQAO/718k8EnOqJDx6wweUscGTGL/QdKXUzTVRAx\n' +
- 'JUsjNUv49mH2HQVEW7oxszfH6cPCaupNAddMhQc4C/af6GHX8HnqfPDk27/yBQI+\n' +
- 'yBBvIanGgxv9c9wBbmcIaCEWJcsLp3HzXSYHmjiqkViXwCpYfkoV3Ns2m8bp+KCO\n' +
- 'y9XmcCKRaXkt237qmoxoh2sGmBHk2UlQtOsMC0aUQ4d7teAJG0q6pbyZEiPyKZY1\n' +
- 'XR/UVxMJL0Q4iVpcRS1kaNCMfqS2smbLJeNdsan8pkw1dvPhcaVTb7CvjhJtjztF\n' +
- 'YfDzAI5794qMlWxwilKMmUvDlPPOTen8NNHkLwWvyFCH7Doh\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEFjCCAv6gAwIBAgIJAMzYZJ+R9NBVMA0GCSqGSIb3DQEBCwUAMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' +
- 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' +
- 'em9uIFJEUzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBD\n' +
- 'QTAeFw0xOTA4MjEyMjI5NDlaFw0yNDA4MjEyMjI5NDlaMIGXMQswCQYDVQQGEwJV\n' +
- 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' +
- 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' +
- 'UzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBDQTCCASIw\n' +
- 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7kkS6vjgKKQTPynC2NjdN5aPPV\n' +
- 'O71G0JJS/2ARVBVJd93JLiGovVJilfWYfwZCs4gTRSSjrUD4D4HyqCd6A+eEEtJq\n' +
- 'M0DEC7i0dC+9WNTsPszuB206Jy2IUmxZMIKJAA1NHSbIMjB+b6/JhbSUi7nKdbR/\n' +
- 'brj83bF+RoSA+ogrgX7mQbxhmFcoZN9OGaJgYKsKWUt5Wqv627KkGodUK8mDepgD\n' +
- 'S3ZfoRQRx3iceETpcmHJvaIge6+vyDX3d9Z22jmvQ4AKv3py2CmU2UwuhOltFDwB\n' +
- '0ddtb39vgwrJxaGfiMRHpEP1DfNLWHAnA69/pgZPwIggidS+iBPUhgucMp8CAwEA\n' +
- 'AaNjMGEwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' +
- 'FGnTGpQuQ2H/DZlXMQijZEhjs7TdMB8GA1UdIwQYMBaAFGnTGpQuQ2H/DZlXMQij\n' +
- 'ZEhjs7TdMA0GCSqGSIb3DQEBCwUAA4IBAQC3xz1vQvcXAfpcZlngiRWeqU8zQAMQ\n' +
- 'LZPCFNv7PVk4pmqX+ZiIRo4f9Zy7TrOVcboCnqmP/b/mNq0gVF4O+88jwXJZD+f8\n' +
- '/RnABMZcnGU+vK0YmxsAtYU6TIb1uhRFmbF8K80HHbj9vSjBGIQdPCbvmR2zY6VJ\n' +
- 'BYM+w9U9hp6H4DVMLKXPc1bFlKA5OBTgUtgkDibWJKFOEPW3UOYwp9uq6pFoN0AO\n' +
- 'xMTldqWFsOF3bJIlvOY0c/1EFZXu3Ns6/oCP//Ap9vumldYMUZWmbK+gK33FPOXV\n' +
- '8BQ6jNC29icv7lLDpRPwjibJBXX+peDR5UK4FdYcswWEB1Tix5X8dYu6\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\n' +
- 'MjgxODA2NTNaFw0yNDEwMjgxODA2NTNaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' +
- 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' +
- 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' +
- 'AwwYQW1hem9uIFJEUyBhZi1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' +
- 'AQ8AMIIBCgKCAQEAvtV1OqmFa8zCVQSKOvPUJERLVFtd4rZmDpImc5rIoeBk7w/P\n' +
- '9lcKUJjO8R/w1a2lJXx3oQ81tiY0Piw6TpT62YWVRMWrOw8+Vxq1dNaDSFp9I8d0\n' +
- 'UHillSSbOk6FOrPDp+R6AwbGFqUDebbN5LFFoDKbhNmH1BVS0a6YNKpGigLRqhka\n' +
- 'cClPslWtPqtjbaP3Jbxl26zWzLo7OtZl98dR225pq8aApNBwmtgA7Gh60HK/cX0t\n' +
- '32W94n8D+GKSg6R4MKredVFqRTi9hCCNUu0sxYPoELuM+mHiqB5NPjtm92EzCWs+\n' +
- '+vgWhMc6GxG+82QSWx1Vj8sgLqtE/vLrWddf5QIDAQABo2YwZDAOBgNVHQ8BAf8E\n' +
- 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuLB4gYVJrSKJj/Gz\n' +
- 'pqc6yeA+RcAwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0MscZQwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBABauYOZxUhe9/RhzGJ8MsWCz8eKcyDVd4FCnY6Qh+9wcmYNT\n' +
- 'LtnD88LACtJKb/b81qYzcB0Em6+zVJ3Z9jznfr6buItE6es9wAoja22Xgv44BTHL\n' +
- 'rimbgMwpTt3uEMXDffaS0Ww6YWb3pSE0XYI2ISMWz+xRERRf+QqktSaL39zuiaW5\n' +
- 'tfZMre+YhohRa/F0ZQl3RCd6yFcLx4UoSPqQsUl97WhYzwAxZZfwvLJXOc4ATt3u\n' +
- 'VlCUylNDkaZztDJc/yN5XQoK9W5nOt2cLu513MGYKbuarQr8f+gYU8S+qOyuSRSP\n' +
- 'NRITzwCRVnsJE+2JmcRInn/NcanB7uOGqTvJ9+c=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\n' +
- 'MzAyMDIxMzBaFw0yNDEwMzAyMDIxMzBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' +
- 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' +
- 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' +
- 'AwwYQW1hem9uIFJEUyBldS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' +
- 'AQ8AMIIBCgKCAQEAtEyjYcajx6xImJn8Vz1zjdmL4ANPgQXwF7+tF7xccmNAZETb\n' +
- 'bzb3I9i5fZlmrRaVznX+9biXVaGxYzIUIR3huQ3Q283KsDYnVuGa3mk690vhvJbB\n' +
- 'QIPgKa5mVwJppnuJm78KqaSpi0vxyCPe3h8h6LLFawVyWrYNZ4okli1/U582eef8\n' +
- 'RzJp/Ear3KgHOLIiCdPDF0rjOdCG1MOlDLixVnPn9IYOciqO+VivXBg+jtfc5J+L\n' +
- 'AaPm0/Yx4uELt1tkbWkm4BvTU/gBOODnYziITZM0l6Fgwvbwgq5duAtKW+h031lC\n' +
- '37rEvrclqcp4wrsUYcLAWX79ZyKIlRxcAdvEhQIDAQABo2YwZDAOBgNVHQ8BAf8E\n' +
- 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU7zPyc0azQxnBCe7D\n' +
- 'b9KAadH1QSEwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkgRYQwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAFGaNiYxg7yC/xauXPlaqLCtwbm2dKyK9nIFbF/7be8mk7Q3\n' +
- 'MOA0of1vGHPLVQLr6bJJpD9MAbUcm4cPAwWaxwcNpxOjYOFDaq10PCK4eRAxZWwF\n' +
- 'NJRIRmGsl8NEsMNTMCy8X+Kyw5EzH4vWFl5Uf2bGKOeFg0zt43jWQVOX6C+aL3Cd\n' +
- 'pRS5MhmYpxMG8irrNOxf4NVFE2zpJOCm3bn0STLhkDcV/ww4zMzObTJhiIb5wSWn\n' +
- 'EXKKWhUXuRt7A2y1KJtXpTbSRHQxE++69Go1tWhXtRiULCJtf7wF2Ksm0RR/AdXT\n' +
- '1uR1vKyH5KBJPX3ppYkQDukoHTFR0CpB+G84NLo=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTA1\n' +
- 'MTAyMTU4NDNaFw0yNTA2MDExMjAwMDBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' +
- 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' +
- 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' +
- 'AwwYQW1hem9uIFJEUyBtZS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' +
- 'AQ8AMIIBCgKCAQEAudOYPZH+ihJAo6hNYMB5izPVBe3TYhnZm8+X3IoaaYiKtsp1\n' +
- 'JJhkTT0CEejYIQ58Fh4QrMUyWvU8qsdK3diNyQRoYLbctsBPgxBR1u07eUJDv38/\n' +
- 'C1JlqgHmMnMi4y68Iy7ymv50QgAMuaBqgEBRI1R6Lfbyrb2YvH5txjJyTVMwuCfd\n' +
- 'YPAtZVouRz0JxmnfsHyxjE+So56uOKTDuw++Ho4HhZ7Qveej7XB8b+PIPuroknd3\n' +
- 'FQB5RVbXRvt5ZcVD4F2fbEdBniF7FAF4dEiofVCQGQ2nynT7dZdEIPfPdH3n7ZmE\n' +
- 'lAOmwHQ6G83OsiHRBLnbp+QZRgOsjkHJxT20bQIDAQABo2YwZDAOBgNVHQ8BAf8E\n' +
- 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUOEVDM7VomRH4HVdA\n' +
- 'QvIMNq2tXOcwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXdaiqYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAHhvMssj+Th8IpNePU6RH0BiL6o9c437R3Q4IEJeFdYL+nZz\n' +
- 'PW/rELDPvLRUNMfKM+KzduLZ+l29HahxefejYPXtvXBlq/E/9czFDD4fWXg+zVou\n' +
- 'uDXhyrV4kNmP4S0eqsAP/jQHPOZAMFA4yVwO9hlqmePhyDnszCh9c1PfJSBh49+b\n' +
- '4w7i/L3VBOMt8j3EKYvqz0gVfpeqhJwL4Hey8UbVfJRFJMJzfNHpePqtDRAY7yjV\n' +
- 'PYquRaV2ab/E+/7VFkWMM4tazYz/qsYA2jSH+4xDHvYk8LnsbcrF9iuidQmEc5sb\n' +
- 'FgcWaSKG4DJjcI5k7AJLWcXyTDt21Ci43LE+I9Q=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECDCCAvCgAwIBAgICVIYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDQxNzEz\n' +
- 'MDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' +
- 'DwAwggEKAoIBAQDUYOz1hGL42yUCrcsMSOoU8AeD/3KgZ4q7gP+vAz1WnY9K/kim\n' +
- 'eWN/2Qqzlo3+mxSFQFyD4MyV3+CnCPnBl9Sh1G/F6kThNiJ7dEWSWBQGAB6HMDbC\n' +
- 'BaAsmUc1UIz8sLTL3fO+S9wYhA63Wun0Fbm/Rn2yk/4WnJAaMZcEtYf6e0KNa0LM\n' +
- 'p/kN/70/8cD3iz3dDR8zOZFpHoCtf0ek80QqTich0A9n3JLxR6g6tpwoYviVg89e\n' +
- 'qCjQ4axxOkWWeusLeTJCcY6CkVyFvDAKvcUl1ytM5AiaUkXblE7zDFXRM4qMMRdt\n' +
- 'lPm8d3pFxh0fRYk8bIKnpmtOpz3RIctDrZZxAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' +
- 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT99wKJftD3jb4sHoHG\n' +
- 'i3uGlH6W6TAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' +
- '9w0BAQsFAAOCAQEAZ17hhr3dII3hUfuHQ1hPWGrpJOX/G9dLzkprEIcCidkmRYl+\n' +
- 'hu1Pe3caRMh/17+qsoEErmnVq5jNY9X1GZL04IZH8YbHc7iRHw3HcWAdhN8633+K\n' +
- 'jYEB2LbJ3vluCGnCejq9djDb6alOugdLMJzxOkHDhMZ6/gYbECOot+ph1tQuZXzD\n' +
- 'tZ7prRsrcuPBChHlPjmGy8M9z8u+kF196iNSUGC4lM8vLkHM7ycc1/ZOwRq9aaTe\n' +
- 'iOghbQQyAEe03MWCyDGtSmDfr0qEk+CHN+6hPiaL8qKt4s+V9P7DeK4iW08ny8Ox\n' +
- 'AVS7u0OK/5+jKMAMrKwpYrBydOjTUTHScocyNw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICQ2QwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDUxODQ2\n' +
- 'MjlaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyBzYS1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBAMMvR+ReRnOzqJzoaPipNTt1Z2VA968jlN1+SYKUrYM3No+Vpz0H\n' +
- 'M6Tn0oYB66ByVsXiGc28ulsqX1HbHsxqDPwvQTKvO7SrmDokoAkjJgLocOLUAeld\n' +
- '5AwvUjxGRP6yY90NV7X786MpnYb2Il9DIIaV9HjCmPt+rjy2CZjS0UjPjCKNfB8J\n' +
- 'bFjgW6GGscjeyGb/zFwcom5p4j0rLydbNaOr9wOyQrtt3ZQWLYGY9Zees/b8pmcc\n' +
- 'Jt+7jstZ2UMV32OO/kIsJ4rMUn2r/uxccPwAc1IDeRSSxOrnFKhW3Cu69iB3bHp7\n' +
- 'JbawY12g7zshE4I14sHjv3QoXASoXjx4xgMCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1Fc/Ql2jx+oJPgBVYq\n' +
- 'ccgP0pQ8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQB4VVVabVp70myuYuZ3vltQIWqSUMhkaTzehMgGcHjMf9iLoZ/I\n' +
- '93KiFUSGnek5cRePyS9wcpp0fcBT3FvkjpUdCjVtdttJgZFhBxgTd8y26ImdDDMR\n' +
- '4+BUuhI5msvjL08f+Vkkpu1GQcGmyFVPFOy/UY8iefu+QyUuiBUnUuEDd49Hw0Fn\n' +
- '/kIPII6Vj82a2mWV/Q8e+rgN8dIRksRjKI03DEoP8lhPlsOkhdwU6Uz9Vu6NOB2Q\n' +
- 'Ls1kbcxAc7cFSyRVJEhh12Sz9d0q/CQSTFsVJKOjSNQBQfVnLz1GwO/IieUEAr4C\n' +
- 'jkTntH0r1LX5b/GwN4R887LvjAEdTbg1his7\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECDCCAvCgAwIBAgIDAIkHMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n' +
- 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' +
- 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' +
- 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTA2MTc0\n' +
- 'MDIxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n' +
- 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n' +
- 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n' +
- 'YXpvbiBSRFMgdXMtd2VzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' +
- 'DwAwggEKAoIBAQDD2yzbbAl77OofTghDMEf624OvU0eS9O+lsdO0QlbfUfWa1Kd6\n' +
- '0WkgjkLZGfSRxEHMCnrv4UPBSK/Qwn6FTjkDLgemhqBtAnplN4VsoDL+BkRX4Wwq\n' +
- '/dSQJE2b+0hm9w9UMVGFDEq1TMotGGTD2B71eh9HEKzKhGzqiNeGsiX4VV+LJzdH\n' +
- 'uM23eGisNqmd4iJV0zcAZ+Gbh2zK6fqTOCvXtm7Idccv8vZZnyk1FiWl3NR4WAgK\n' +
- 'AkvWTIoFU3Mt7dIXKKClVmvssG8WHCkd3Xcb4FHy/G756UZcq67gMMTX/9fOFM/v\n' +
- 'l5C0+CHl33Yig1vIDZd+fXV1KZD84dEJfEvHAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' +
- 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+ap20kO/6A7pPxo3+\n' +
- 'T3CfqZpQWjAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' +
- '9w0BAQsFAAOCAQEAHCJky2tPjPttlDM/RIqExupBkNrnSYnOK4kr9xJ3sl8UF2DA\n' +
- 'PAnYsjXp3rfcjN/k/FVOhxwzi3cXJF/2Tjj39Bm/OEfYTOJDNYtBwB0VVH4ffa/6\n' +
- 'tZl87jaIkrxJcreeeHqYMnIxeN0b/kliyA+a5L2Yb0VPjt9INq34QDc1v74FNZ17\n' +
- '4z8nr1nzg4xsOWu0Dbjo966lm4nOYIGBRGOKEkHZRZ4mEiMgr3YLkv8gSmeitx57\n' +
- 'Z6dVemNtUic/LVo5Iqw4n3TBS0iF2C1Q1xT/s3h+0SXZlfOWttzSluDvoMv5PvCd\n' +
- 'pFjNn+aXLAALoihL1MJSsxydtsLjOBro5eK0Vw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDDCCAvSgAwIBAgICOFAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAxNzQ2\n' +
- 'MjFaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' +
- 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
- 'AAOCAQ8AMIIBCgKCAQEAzU72e6XbaJbi4HjJoRNjKxzUEuChKQIt7k3CWzNnmjc5\n' +
- '8I1MjCpa2W1iw1BYVysXSNSsLOtUsfvBZxi/1uyMn5ZCaf9aeoA9UsSkFSZBjOCN\n' +
- 'DpKPCmfV1zcEOvJz26+1m8WDg+8Oa60QV0ou2AU1tYcw98fOQjcAES0JXXB80P2s\n' +
- '3UfkNcnDz+l4k7j4SllhFPhH6BQ4lD2NiFAP4HwoG6FeJUn45EPjzrydxjq6v5Fc\n' +
- 'cQ8rGuHADVXotDbEhaYhNjIrsPL+puhjWfhJjheEw8c4whRZNp6gJ/b6WEes/ZhZ\n' +
- 'h32DwsDsZw0BfRDUMgUn8TdecNexHUw8vQWeC181hwIDAQABo2YwZDAOBgNVHQ8B\n' +
- 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwW9bWgkWkr0U\n' +
- 'lrOsq2kvIdrECDgwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' +
- 'KoZIhvcNAQELBQADggEBAEugF0Gj7HVhX0ehPZoGRYRt3PBuI2YjfrrJRTZ9X5wc\n' +
- '9T8oHmw07mHmNy1qqWvooNJg09bDGfB0k5goC2emDiIiGfc/kvMLI7u+eQOoMKj6\n' +
- 'mkfCncyRN3ty08Po45vTLBFZGUvtQmjM6yKewc4sXiASSBmQUpsMbiHRCL72M5qV\n' +
- 'obcJOjGcIdDTmV1BHdWT+XcjynsGjUqOvQWWhhLPrn4jWe6Xuxll75qlrpn3IrIx\n' +
- 'CRBv/5r7qbcQJPOgwQsyK4kv9Ly8g7YT1/vYBlR3cRsYQjccw5ceWUj2DrMVWhJ4\n' +
- 'prf+E3Aa4vYmLLOUUvKnDQ1k3RGNu56V0tonsQbfsaM=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECjCCAvKgAwIBAgICEzUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAyMDUy\n' +
- 'MjVaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n' +
- 'em9uIFJEUyBjYS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n' +
- 'ggEPADCCAQoCggEBAOxHqdcPSA2uBjsCP4DLSlqSoPuQ/X1kkJLusVRKiQE2zayB\n' +
- 'viuCBt4VB9Qsh2rW3iYGM+usDjltGnI1iUWA5KHcvHszSMkWAOYWLiMNKTlg6LCp\n' +
- 'XnE89tvj5dIH6U8WlDvXLdjB/h30gW9JEX7S8supsBSci2GxEzb5mRdKaDuuF/0O\n' +
- 'qvz4YE04pua3iZ9QwmMFuTAOYzD1M72aOpj+7Ac+YLMM61qOtU+AU6MndnQkKoQi\n' +
- 'qmUN2A9IFaqHFzRlSdXwKCKUA4otzmz+/N3vFwjb5F4DSsbsrMfjeHMo6o/nb6Nh\n' +
- 'YDb0VJxxPee6TxSuN7CQJ2FxMlFUezcoXqwqXD0CAwEAAaNmMGQwDgYDVR0PAQH/\n' +
- 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDGGpon9WfIpsggE\n' +
- 'CxHq8hZ7E2ESMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n' +
- 'SIb3DQEBCwUAA4IBAQAvpeQYEGZvoTVLgV9rd2+StPYykMsmFjWQcyn3dBTZRXC2\n' +
- 'lKq7QhQczMAOhEaaN29ZprjQzsA2X/UauKzLR2Uyqc2qOeO9/YOl0H3qauo8C/W9\n' +
- 'r8xqPbOCDLEXlOQ19fidXyyEPHEq5WFp8j+fTh+s8WOx2M7IuC0ANEetIZURYhSp\n' +
- 'xl9XOPRCJxOhj7JdelhpweX0BJDNHeUFi0ClnFOws8oKQ7sQEv66d5ddxqqZ3NVv\n' +
- 'RbCvCtEutQMOUMIuaygDlMn1anSM8N7Wndx8G6+Uy67AnhjGx7jw/0YPPxopEj6x\n' +
- 'JXP8j0sJbcT9K/9/fPVLNT25RvQ/93T2+IQL4Ca2\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICYpgwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExNzMx\n' +
- 'NDhaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyBldS13ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBAMk3YdSZ64iAYp6MyyKtYJtNzv7zFSnnNf6vv0FB4VnfITTMmOyZ\n' +
- 'LXqKAT2ahZ00hXi34ewqJElgU6eUZT/QlzdIu359TEZyLVPwURflL6SWgdG01Q5X\n' +
- 'O++7fSGcBRyIeuQWs9FJNIIqK8daF6qw0Rl5TXfu7P9dBc3zkgDXZm2DHmxGDD69\n' +
- '7liQUiXzoE1q2Z9cA8+jirDioJxN9av8hQt12pskLQumhlArsMIhjhHRgF03HOh5\n' +
- 'tvi+RCfihVOxELyIRTRpTNiIwAqfZxxTWFTgfn+gijTmd0/1DseAe82aYic8JbuS\n' +
- 'EMbrDduAWsqrnJ4GPzxHKLXX0JasCUcWyMECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPLtsq1NrwJXO13C9eHt\n' +
- 'sLY11AGwMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQAnWBKj5xV1A1mYd0kIgDdkjCwQkiKF5bjIbGkT3YEFFbXoJlSP\n' +
- '0lZZ/hDaOHI8wbLT44SzOvPEEmWF9EE7SJzkvSdQrUAWR9FwDLaU427ALI3ngNHy\n' +
- 'lGJ2hse1fvSRNbmg8Sc9GBv8oqNIBPVuw+AJzHTacZ1OkyLZrz1c1QvwvwN2a+Jd\n' +
- 'vH0V0YIhv66llKcYDMUQJAQi4+8nbRxXWv6Gq3pvrFoorzsnkr42V3JpbhnYiK+9\n' +
- 'nRKd4uWl62KRZjGkfMbmsqZpj2fdSWMY1UGyN1k+kDmCSWYdrTRDP0xjtIocwg+A\n' +
- 'J116n4hV/5mbA0BaPiS2krtv17YAeHABZcvz\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECjCCAvKgAwIBAgICV2YwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExOTM2\n' +
- 'MjBaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n' +
- 'em9uIFJEUyBldS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n' +
- 'ggEPADCCAQoCggEBAMEx54X2pHVv86APA0RWqxxRNmdkhAyp2R1cFWumKQRofoFv\n' +
- 'n+SPXdkpIINpMuEIGJANozdiEz7SPsrAf8WHyD93j/ZxrdQftRcIGH41xasetKGl\n' +
- 'I67uans8d+pgJgBKGb/Z+B5m+UsIuEVekpvgpwKtmmaLFC/NCGuSsJoFsRqoa6Gh\n' +
- 'm34W6yJoY87UatddCqLY4IIXaBFsgK9Q/wYzYLbnWM6ZZvhJ52VMtdhcdzeTHNW0\n' +
- '5LGuXJOF7Ahb4JkEhoo6TS2c0NxB4l4MBfBPgti+O7WjR3FfZHpt18A6Zkq6A2u6\n' +
- 'D/oTSL6c9/3sAaFTFgMyL3wHb2YlW0BPiljZIqECAwEAAaNmMGQwDgYDVR0PAQH/\n' +
- 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOcAToAc6skWffJa\n' +
- 'TnreaswAfrbcMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n' +
- 'SIb3DQEBCwUAA4IBAQA1d0Whc1QtspK496mFWfFEQNegLh0a9GWYlJm+Htcj5Nxt\n' +
- 'DAIGXb+8xrtOZFHmYP7VLCT5Zd2C+XytqseK/+s07iAr0/EPF+O2qcyQWMN5KhgE\n' +
- 'cXw2SwuP9FPV3i+YAm11PBVeenrmzuk9NrdHQ7TxU4v7VGhcsd2C++0EisrmquWH\n' +
- 'mgIfmVDGxphwoES52cY6t3fbnXmTkvENvR+h3rj+fUiSz0aSo+XZUGHPgvuEKM/W\n' +
- 'CBD9Smc9CBoBgvy7BgHRgRUmwtABZHFUIEjHI5rIr7ZvYn+6A0O6sogRfvVYtWFc\n' +
- 'qpyrW1YX8mD0VlJ8fGKM3G+aCOsiiPKDV/Uafrm+\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECDCCAvCgAwIBAgICGAcwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIxODE5\n' +
- 'NDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n' +
- 'em9uIFJEUyBldS1ub3J0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' +
- 'DwAwggEKAoIBAQCiIYnhe4UNBbdBb/nQxl5giM0XoVHWNrYV5nB0YukA98+TPn9v\n' +
- 'Aoj1RGYmtryjhrf01Kuv8SWO+Eom95L3zquoTFcE2gmxCfk7bp6qJJ3eHOJB+QUO\n' +
- 'XsNRh76fwDzEF1yTeZWH49oeL2xO13EAx4PbZuZpZBttBM5zAxgZkqu4uWQczFEs\n' +
- 'JXfla7z2fvWmGcTagX10O5C18XaFroV0ubvSyIi75ue9ykg/nlFAeB7O0Wxae88e\n' +
- 'uhiBEFAuLYdqWnsg3459NfV8Yi1GnaitTym6VI3tHKIFiUvkSiy0DAlAGV2iiyJE\n' +
- 'q+DsVEO4/hSINJEtII4TMtysOsYPpINqeEzRAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' +
- 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRR0UpnbQyjnHChgmOc\n' +
- 'hnlc0PogzTAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' +
- '9w0BAQsFAAOCAQEAKJD4xVzSf4zSGTBJrmamo86jl1NHQxXUApAZuBZEc8tqC6TI\n' +
- 'T5CeoSr9CMuVC8grYyBjXblC4OsM5NMvmsrXl/u5C9dEwtBFjo8mm53rOOIm1fxl\n' +
- 'I1oYB/9mtO9ANWjkykuLzWeBlqDT/i7ckaKwalhLODsRDO73vRhYNjsIUGloNsKe\n' +
- 'pxw3dzHwAZx4upSdEVG4RGCZ1D0LJ4Gw40OfD69hfkDfRVVxKGrbEzqxXRvovmDc\n' +
- 'tKLdYZO/6REoca36v4BlgIs1CbUXJGLSXUwtg7YXGLSVBJ/U0+22iGJmBSNcoyUN\n' +
- 'cjPFD9JQEhDDIYYKSGzIYpvslvGc4T5ISXFiuQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICZIEwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIyMTMy\n' +
- 'MzJaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyBldS13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBALGiwqjiF7xIjT0Sx7zB3764K2T2a1DHnAxEOr+/EIftWKxWzT3u\n' +
- 'PFwS2eEZcnKqSdRQ+vRzonLBeNLO4z8aLjQnNbkizZMBuXGm4BqRm1Kgq3nlLDQn\n' +
- '7YqdijOq54SpShvR/8zsO4sgMDMmHIYAJJOJqBdaus2smRt0NobIKc0liy7759KB\n' +
- '6kmQ47Gg+kfIwxrQA5zlvPLeQImxSoPi9LdbRoKvu7Iot7SOa+jGhVBh3VdqndJX\n' +
- '7tm/saj4NE375csmMETFLAOXjat7zViMRwVorX4V6AzEg1vkzxXpA9N7qywWIT5Y\n' +
- 'fYaq5M8i6vvLg0CzrH9fHORtnkdjdu1y+0MCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFOhOx1yt3Z7mvGB9jBv\n' +
- '2ymdZwiOMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQBehqY36UGDvPVU9+vtaYGr38dBbp+LzkjZzHwKT1XJSSUc2wqM\n' +
- 'hnCIQKilonrTIvP1vmkQi8qHPvDRtBZKqvz/AErW/ZwQdZzqYNFd+BmOXaeZWV0Q\n' +
- 'oHtDzXmcwtP8aUQpxN0e1xkWb1E80qoy+0uuRqb/50b/R4Q5qqSfJhkn6z8nwB10\n' +
- '7RjLtJPrK8igxdpr3tGUzfAOyiPrIDncY7UJaL84GFp7WWAkH0WG3H8Y8DRcRXOU\n' +
- 'mqDxDLUP3rNuow3jnGxiUY+gGX5OqaZg4f4P6QzOSmeQYs6nLpH0PiN00+oS1BbD\n' +
- 'bpWdZEttILPI+vAYkU4QuBKKDjJL6HbSd+cn\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECDCCAvCgAwIBAgIDAIVCMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n' +
- 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' +
- 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' +
- 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTEzMTcw\n' +
- 'NjQxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n' +
- 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n' +
- 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n' +
- 'YXpvbiBSRFMgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' +
- 'DwAwggEKAoIBAQDE+T2xYjUbxOp+pv+gRA3FO24+1zCWgXTDF1DHrh1lsPg5k7ht\n' +
- '2KPYzNc+Vg4E+jgPiW0BQnA6jStX5EqVh8BU60zELlxMNvpg4KumniMCZ3krtMUC\n' +
- 'au1NF9rM7HBh+O+DYMBLK5eSIVt6lZosOb7bCi3V6wMLA8YqWSWqabkxwN4w0vXI\n' +
- '8lu5uXXFRemHnlNf+yA/4YtN4uaAyd0ami9+klwdkZfkrDOaiy59haOeBGL8EB/c\n' +
- 'dbJJlguHH5CpCscs3RKtOOjEonXnKXldxarFdkMzi+aIIjQ8GyUOSAXHtQHb3gZ4\n' +
- 'nS6Ey0CMlwkB8vUObZU9fnjKJcL5QCQqOfwvAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' +
- 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQUPuRHohPxx4VjykmH\n' +
- '6usGrLL1ETAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' +
- '9w0BAQsFAAOCAQEAUdR9Vb3y33Yj6X6KGtuthZ08SwjImVQPtknzpajNE5jOJAh8\n' +
- 'quvQnU9nlnMO85fVDU1Dz3lLHGJ/YG1pt1Cqq2QQ200JcWCvBRgdvH6MjHoDQpqZ\n' +
- 'HvQ3vLgOGqCLNQKFuet9BdpsHzsctKvCVaeBqbGpeCtt3Hh/26tgx0rorPLw90A2\n' +
- 'V8QSkZJjlcKkLa58N5CMM8Xz8KLWg3MZeT4DmlUXVCukqK2RGuP2L+aME8dOxqNv\n' +
- 'OnOz1zrL5mR2iJoDpk8+VE/eBDmJX40IJk6jBjWoxAO/RXq+vBozuF5YHN1ujE92\n' +
- 'tO8HItgTp37XT8bJBAiAnt5mxw+NLSqtxk2QdQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDDCCAvSgAwIBAgICY4kwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTMyMDEx\n' +
- 'NDJaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
- 'AAOCAQ8AMIIBCgKCAQEAr5u9OuLL/OF/fBNUX2kINJLzFl4DnmrhnLuSeSnBPgbb\n' +
- 'qddjf5EFFJBfv7IYiIWEFPDbDG5hoBwgMup5bZDbas+ZTJTotnnxVJTQ6wlhTmns\n' +
- 'eHECcg2pqGIKGrxZfbQhlj08/4nNAPvyYCTS0bEcmQ1emuDPyvJBYDDLDU6AbCB5\n' +
- '6Z7YKFQPTiCBblvvNzchjLWF9IpkqiTsPHiEt21sAdABxj9ityStV3ja/W9BfgxH\n' +
- 'wzABSTAQT6FbDwmQMo7dcFOPRX+hewQSic2Rn1XYjmNYzgEHisdUsH7eeXREAcTw\n' +
- '61TRvaLH8AiOWBnTEJXPAe6wYfrcSd1pD0MXpoB62wIDAQABo2YwZDAOBgNVHQ8B\n' +
- 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUytwMiomQOgX5\n' +
- 'Ichd+2lDWRUhkikwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' +
- 'KoZIhvcNAQELBQADggEBACf6lRDpfCD7BFRqiWM45hqIzffIaysmVfr+Jr+fBTjP\n' +
- 'uYe/ba1omSrNGG23bOcT9LJ8hkQJ9d+FxUwYyICQNWOy6ejicm4z0C3VhphbTPqj\n' +
- 'yjpt9nG56IAcV8BcRJh4o/2IfLNzC/dVuYJV8wj7XzwlvjysenwdrJCoLadkTr1h\n' +
- 'eIdG6Le07sB9IxrGJL9e04afk37h7c8ESGSE4E+oS4JQEi3ATq8ne1B9DQ9SasXi\n' +
- 'IRmhNAaISDzOPdyLXi9N9V9Lwe/DHcja7hgLGYx3UqfjhLhOKwp8HtoZORixAmOI\n' +
- 'HfILgNmwyugAbuZoCazSKKBhQ0wgO0WZ66ZKTMG8Oho=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICUYkwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxODIx\n' +
- 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyB1cy13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBANCEZBZyu6yJQFZBJmSUZfSZd3Ui2gitczMKC4FLr0QzkbxY+cLa\n' +
- 'uVONIOrPt4Rwi+3h/UdnUg917xao3S53XDf1TDMFEYp4U8EFPXqCn/GXBIWlU86P\n' +
- 'PvBN+gzw3nS+aco7WXb+woTouvFVkk8FGU7J532llW8o/9ydQyDIMtdIkKTuMfho\n' +
- 'OiNHSaNc+QXQ32TgvM9A/6q7ksUoNXGCP8hDOkSZ/YOLiI5TcdLh/aWj00ziL5bj\n' +
- 'pvytiMZkilnc9dLY9QhRNr0vGqL0xjmWdoEXz9/OwjmCihHqJq+20MJPsvFm7D6a\n' +
- '2NKybR9U+ddrjb8/iyLOjURUZnj5O+2+OPcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEBxMBdv81xuzqcK5TVu\n' +
- 'pHj+Aor8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQBZkfiVqGoJjBI37aTlLOSjLcjI75L5wBrwO39q+B4cwcmpj58P\n' +
- '3sivv+jhYfAGEbQnGRzjuFoyPzWnZ1DesRExX+wrmHsLLQbF2kVjLZhEJMHF9eB7\n' +
- 'GZlTPdTzHErcnuXkwA/OqyXMpj9aghcQFuhCNguEfnROY9sAoK2PTfnTz9NJHL+Q\n' +
- 'UpDLEJEUfc0GZMVWYhahc0x38ZnSY2SKacIPECQrTI0KpqZv/P+ijCEcMD9xmYEb\n' +
- 'jL4en+XKS1uJpw5fIU5Sj0MxhdGstH6S84iAE5J3GM3XHklGSFwwqPYvuTXvANH6\n' +
- 'uboynxRgSae59jIlAK6Jrr6GWMwQRbgcaAlW\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDDCCAvSgAwIBAgICEkYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxOTUz\n' +
- 'NDdaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
- 'AAOCAQ8AMIIBCgKCAQEAufodI2Flker8q7PXZG0P0vmFSlhQDw907A6eJuF/WeMo\n' +
- 'GHnll3b4S6nC3oRS3nGeRMHbyU2KKXDwXNb3Mheu+ox+n5eb/BJ17eoj9HbQR1cd\n' +
- 'gEkIciiAltf8gpMMQH4anP7TD+HNFlZnP7ii3geEJB2GGXSxgSWvUzH4etL67Zmn\n' +
- 'TpGDWQMB0T8lK2ziLCMF4XAC/8xDELN/buHCNuhDpxpPebhct0T+f6Arzsiswt2j\n' +
- '7OeNeLLZwIZvVwAKF7zUFjC6m7/VmTQC8nidVY559D6l0UhhU0Co/txgq3HVsMOH\n' +
- 'PbxmQUwJEKAzQXoIi+4uZzHFZrvov/nDTNJUhC6DqwIDAQABo2YwZDAOBgNVHQ8B\n' +
- 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwaZpaCme+EiV\n' +
- 'M5gcjeHZSTgOn4owHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' +
- 'KoZIhvcNAQELBQADggEBAAR6a2meCZuXO2TF9bGqKGtZmaah4pH2ETcEVUjkvXVz\n' +
- 'sl+ZKbYjrun+VkcMGGKLUjS812e7eDF726ptoku9/PZZIxlJB0isC/0OyixI8N4M\n' +
- 'NsEyvp52XN9QundTjkl362bomPnHAApeU0mRbMDRR2JdT70u6yAzGLGsUwMkoNnw\n' +
- '1VR4XKhXHYGWo7KMvFrZ1KcjWhubxLHxZWXRulPVtGmyWg/MvE6KF+2XMLhojhUL\n' +
- '+9jB3Fpn53s6KMx5tVq1x8PukHmowcZuAF8k+W4gk8Y68wIwynrdZrKRyRv6CVtR\n' +
- 'FZ8DeJgoNZT3y/GT254VqMxxfuy2Ccb/RInd16tEvVk=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDDCCAvSgAwIBAgICOYIwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTcyMDA1\n' +
- 'MjlaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' +
- 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
- 'AAOCAQ8AMIIBCgKCAQEA4dMak8W+XW8y/2F6nRiytFiA4XLwePadqWebGtlIgyCS\n' +
- 'kbug8Jv5w7nlMkuxOxoUeD4WhI6A9EkAn3r0REM/2f0aYnd2KPxeqS2MrtdxxHw1\n' +
- 'xoOxk2x0piNSlOz6yog1idsKR5Wurf94fvM9FdTrMYPPrDabbGqiBMsZZmoHLvA3\n' +
- 'Z+57HEV2tU0Ei3vWeGIqnNjIekS+E06KhASxrkNU5vi611UsnYZlSi0VtJsH4UGV\n' +
- 'LhnHl53aZL0YFO5mn/fzuNG/51qgk/6EFMMhaWInXX49Dia9FnnuWXwVwi6uX1Wn\n' +
- '7kjoHi5VtmC8ZlGEHroxX2DxEr6bhJTEpcLMnoQMqwIDAQABo2YwZDAOBgNVHQ8B\n' +
- 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUsUI5Cb3SWB8+\n' +
- 'gv1YLN/ABPMdxSAwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' +
- 'KoZIhvcNAQELBQADggEBAJAF3E9PM1uzVL8YNdzb6fwJrxxqI2shvaMVmC1mXS+w\n' +
- 'G0zh4v2hBZOf91l1EO0rwFD7+fxoI6hzQfMxIczh875T6vUXePKVOCOKI5wCrDad\n' +
- 'zQbVqbFbdhsBjF4aUilOdtw2qjjs9JwPuB0VXN4/jY7m21oKEOcnpe36+7OiSPjN\n' +
- 'xngYewCXKrSRqoj3mw+0w/+exYj3Wsush7uFssX18av78G+ehKPIVDXptOCP/N7W\n' +
- '8iKVNeQ2QGTnu2fzWsGUSvMGyM7yqT+h1ILaT//yQS8er511aHMLc142bD4D9VSy\n' +
- 'DgactwPDTShK/PXqhvNey9v/sKXm4XatZvwcc8KYlW4=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDDCCAvSgAwIBAgICcEUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNjU2\n' +
- 'MjBaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' +
- 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' +
- 'AAOCAQ8AMIIBCgKCAQEAndtkldmHtk4TVQAyqhAvtEHSMb6pLhyKrIFved1WO3S7\n' +
- '+I+bWwv9b2W/ljJxLq9kdT43bhvzonNtI4a1LAohS6bqyirmk8sFfsWT3akb+4Sx\n' +
- '1sjc8Ovc9eqIWJCrUiSvv7+cS7ZTA9AgM1PxvHcsqrcUXiK3Jd/Dax9jdZE1e15s\n' +
- 'BEhb2OEPE+tClFZ+soj8h8Pl2Clo5OAppEzYI4LmFKtp1X/BOf62k4jviXuCSst3\n' +
- 'UnRJzE/CXtjmN6oZySVWSe0rQYuyqRl6//9nK40cfGKyxVnimB8XrrcxUN743Vud\n' +
- 'QQVU0Esm8OVTX013mXWQXJHP2c0aKkog8LOga0vobQIDAQABo2YwZDAOBgNVHQ8B\n' +
- 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQULmoOS1mFSjj+\n' +
- 'snUPx4DgS3SkLFYwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' +
- 'KoZIhvcNAQELBQADggEBAAkVL2P1M2/G9GM3DANVAqYOwmX0Xk58YBHQu6iiQg4j\n' +
- 'b4Ky/qsZIsgT7YBsZA4AOcPKQFgGTWhe9pvhmXqoN3RYltN8Vn7TbUm/ZVDoMsrM\n' +
- 'gwv0+TKxW1/u7s8cXYfHPiTzVSJuOogHx99kBW6b2f99GbP7O1Sv3sLq4j6lVvBX\n' +
- 'Fiacf5LAWC925nvlTzLlBgIc3O9xDtFeAGtZcEtxZJ4fnGXiqEnN4539+nqzIyYq\n' +
- 'nvlgCzyvcfRAxwltrJHuuRu6Maw5AGcd2Y0saMhqOVq9KYKFKuD/927BTrbd2JVf\n' +
- '2sGWyuPZPCk3gq+5pCjbD0c6DkhcMGI6WwxvM5V/zSM=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICJDQwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNzAz\n' +
- 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyBldS13ZXN0LTMgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBAL9bL7KE0n02DLVtlZ2PL+g/BuHpMYFq2JnE2RgompGurDIZdjmh\n' +
- '1pxfL3nT+QIVMubuAOy8InRfkRxfpxyjKYdfLJTPJG+jDVL+wDcPpACFVqoV7Prg\n' +
- 'pVYEV0lc5aoYw4bSeYFhdzgim6F8iyjoPnObjll9mo4XsHzSoqJLCd0QC+VG9Fw2\n' +
- 'q+GDRZrLRmVM2oNGDRbGpGIFg77aRxRapFZa8SnUgs2AqzuzKiprVH5i0S0M6dWr\n' +
- 'i+kk5epmTtkiDHceX+dP/0R1NcnkCPoQ9TglyXyPdUdTPPRfKCq12dftqll+u4mV\n' +
- 'ARdN6WFjovxax8EAP2OAUTi1afY+1JFMj+sCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLfhrbrO5exkCVgxW0x3\n' +
- 'Y2mAi8lNMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQAigQ5VBNGyw+OZFXwxeJEAUYaXVoP/qrhTOJ6mCE2DXUVEoJeV\n' +
- 'SxScy/TlFA9tJXqmit8JH8VQ/xDL4ubBfeMFAIAo4WzNWDVoeVMqphVEcDWBHsI1\n' +
- 'AETWzfsapRS9yQekOMmxg63d/nV8xewIl8aNVTHdHYXMqhhik47VrmaVEok1UQb3\n' +
- 'O971RadLXIEbVd9tjY5bMEHm89JsZDnDEw1hQXBb67Elu64OOxoKaHBgUH8AZn/2\n' +
- 'zFsL1ynNUjOhCSAA15pgd1vjwc0YsBbAEBPcHBWYBEyME6NLNarjOzBl4FMtATSF\n' +
- 'wWCKRGkvqN8oxYhwR2jf2rR5Mu4DWkK5Q8Ep\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBzCCAu+gAwIBAgICJVUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTkxODE2\n' +
- 'NTNaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' +
- 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' +
- 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' +
- 'em9uIFJEUyB1cy1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' +
- 'ADCCAQoCggEBAM3i/k2u6cqbMdcISGRvh+m+L0yaSIoOXjtpNEoIftAipTUYoMhL\n' +
- 'InXGlQBVA4shkekxp1N7HXe1Y/iMaPEyb3n+16pf3vdjKl7kaSkIhjdUz3oVUEYt\n' +
- 'i8Z/XeJJ9H2aEGuiZh3kHixQcZczn8cg3dA9aeeyLSEnTkl/npzLf//669Ammyhs\n' +
- 'XcAo58yvT0D4E0D/EEHf2N7HRX7j/TlyWvw/39SW0usiCrHPKDLxByLojxLdHzso\n' +
- 'QIp/S04m+eWn6rmD+uUiRteN1hI5ncQiA3wo4G37mHnUEKo6TtTUh+sd/ku6a8HK\n' +
- 'glMBcgqudDI90s1OpuIAWmuWpY//8xEG2YECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' +
- 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPqhoWZcrVY9mU7tuemR\n' +
- 'RBnQIj1jMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' +
- 'DQEBCwUAA4IBAQB6zOLZ+YINEs72heHIWlPZ8c6WY8MDU+Be5w1M+BK2kpcVhCUK\n' +
- 'PJO4nMXpgamEX8DIiaO7emsunwJzMSvavSPRnxXXTKIc0i/g1EbiDjnYX9d85DkC\n' +
- 'E1LaAUCmCZBVi9fIe0H2r9whIh4uLWZA41oMnJx/MOmo3XyMfQoWcqaSFlMqfZM4\n' +
- '0rNoB/tdHLNuV4eIdaw2mlHxdWDtF4oH+HFm+2cVBUVC1jXKrFv/euRVtsTT+A6i\n' +
- 'h2XBHKxQ1Y4HgAn0jACP2QSPEmuoQEIa57bEKEcZsBR8SDY6ZdTd2HLRIApcCOSF\n' +
- 'MRM8CKLeF658I0XgF8D5EsYoKPsA+74Z+jDH\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEETCCAvmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSUwIwYDVQQDDBxBbWF6b24gUkRTIEJldGEgUm9vdCAyMDE5IENBMB4XDTE5MDgy\n' +
- 'MDE3MTAwN1oXDTI0MDgxOTE3MzgyNlowgZkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI\n' +
- 'DApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6b24g\n' +
- 'V2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSowKAYDVQQD\n' +
- 'DCFBbWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3\n' +
- 'DQEBAQUAA4IBDwAwggEKAoIBAQDTNCOlotQcLP8TP82U2+nk0bExVuuMVOgFeVMx\n' +
- 'vbUHZQeIj9ikjk+jm6eTDnnkhoZcmJiJgRy+5Jt69QcRbb3y3SAU7VoHgtraVbxF\n' +
- 'QDh7JEHI9tqEEVOA5OvRrDRcyeEYBoTDgh76ROco2lR+/9uCvGtHVrMCtG7BP7ZB\n' +
- 'sSVNAr1IIRZZqKLv2skKT/7mzZR2ivcw9UeBBTUf8xsfiYVBvMGoEsXEycjYdf6w\n' +
- 'WV+7XS7teNOc9UgsFNN+9AhIBc1jvee5E//72/4F8pAttAg/+mmPUyIKtekNJ4gj\n' +
- 'OAR2VAzGx1ybzWPwIgOudZFHXFduxvq4f1hIRPH0KbQ/gkRrAgMBAAGjZjBkMA4G\n' +
- 'A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTkvpCD\n' +
- '6C43rar9TtJoXr7q8dkrrjAfBgNVHSMEGDAWgBStoQwVpbGx87fxB3dEGDqKKnBT\n' +
- '4TANBgkqhkiG9w0BAQsFAAOCAQEAJd9fOSkwB3uVdsS+puj6gCER8jqmhd3g/J5V\n' +
- 'Zjk9cKS8H0e8pq/tMxeJ8kpurPAzUk5RkCspGt2l0BSwmf3ahr8aJRviMX6AuW3/\n' +
- 'g8aKplTvq/WMNGKLXONa3Sq8591J+ce8gtOX/1rDKmFI4wQ/gUzOSYiT991m7QKS\n' +
- 'Fr6HMgFuz7RNJbb3Fy5cnurh8eYWA7mMv7laiLwTNsaro5qsqErD5uXuot6o9beT\n' +
- 'a+GiKinEur35tNxAr47ax4IRubuIzyfCrezjfKc5raVV2NURJDyKP0m0CCaffAxE\n' +
- 'qn2dNfYc3v1D8ypg3XjHlOzRo32RB04o8ALHMD9LSwsYDLpMag==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEFzCCAv+gAwIBAgICFSUwDQYJKoZIhvcNAQELBQAwgZcxCzAJBgNVBAYTAlVT\n' +
- 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' +
- 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' +
- 'MSgwJgYDVQQDDB9BbWF6b24gUkRTIFByZXZpZXcgUm9vdCAyMDE5IENBMB4XDTE5\n' +
- 'MDgyMTIyMzk0N1oXDTI0MDgyMTIyMjk0OVowgZwxCzAJBgNVBAYTAlVTMRMwEQYD\n' +
- 'VQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6\n' +
- 'b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMS0wKwYD\n' +
- 'VQQDDCRBbWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0G\n' +
- 'CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0dB/U7qRnSf05wOi7m10Pa2uPMTJv\n' +
- 'r6U/3Y17a5prq5Zr4++CnSUYarG51YuIf355dKs+7Lpzs782PIwCmLpzAHKWzix6\n' +
- 'pOaTQ+WZ0+vUMTxyqgqWbsBgSCyP7pVBiyqnmLC/L4az9XnscrbAX4pNaoJxsuQe\n' +
- 'mzBo6yofjQaAzCX69DuqxFkVTRQnVy7LCFkVaZtjNAftnAHJjVgQw7lIhdGZp9q9\n' +
- 'IafRt2gteihYfpn+EAQ/t/E4MnhrYs4CPLfS7BaYXBycEKC5Muj1l4GijNNQ0Efo\n' +
- 'xG8LSZz7SNgUvfVwiNTaqfLP3AtEAWiqxyMyh3VO+1HpCjT7uNBFtmF3AgMBAAGj\n' +
- 'ZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n' +
- 'BBQtinkdrj+0B2+qdXngV2tgHnPIujAfBgNVHSMEGDAWgBRp0xqULkNh/w2ZVzEI\n' +
- 'o2RIY7O03TANBgkqhkiG9w0BAQsFAAOCAQEAtJdqbCxDeMc8VN1/RzCabw9BIL/z\n' +
- '73Auh8eFTww/sup26yn8NWUkfbckeDYr1BrXa+rPyLfHpg06kwR8rBKyrs5mHwJx\n' +
- 'bvOzXD/5WTdgreB+2Fb7mXNvWhenYuji1MF+q1R2DXV3I05zWHteKX6Dajmx+Uuq\n' +
- 'Yq78oaCBSV48hMxWlp8fm40ANCL1+gzQ122xweMFN09FmNYFhwuW+Ao+Vv90ZfQG\n' +
- 'PYwTvN4n/gegw2TYcifGZC2PNX74q3DH03DXe5fvNgRW5plgz/7f+9mS+YHd5qa9\n' +
- 'tYTPUvoRbi169ou6jicsMKUKPORHWhiTpSCWR1FMMIbsAcsyrvtIsuaGCQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/jCCAuagAwIBAgIQdOCSuA9psBpQd8EI368/0DANBgkqhkiG9w0BAQsFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIHNhLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTE5MTgwNjI2WhgPMjA2MTA1MTkxOTA2MjZaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgc2EtZWFzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6ftL6w8v3dB2yW\n' +
- 'LjCxSP1D7ZsOTeLZOSCz1Zv0Gkd0XLhil5MdHOHBvwH/DrXqFU2oGzCRuAy+aZis\n' +
- 'DardJU6ChyIQIciXCO37f0K23edhtpXuruTLLwUwzeEPdcnLPCX+sWEn9Y5FPnVm\n' +
- 'pCd6J8edH2IfSGoa9LdErkpuESXdidLym/w0tWG/O2By4TabkNSmpdrCL00cqI+c\n' +
- 'prA8Bx1jX8/9sY0gpAovtuFaRN+Ivg3PAnWuhqiSYyQ5nC2qDparOWuDiOhpY56E\n' +
- 'EgmTvjwqMMjNtExfYx6Rv2Ndu50TriiNKEZBzEtkekwXInTupmYTvc7U83P/959V\n' +
- 'UiQ+WSMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU4uYHdH0+\n' +
- 'bUeh81Eq2l5/RJbW+vswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' +
- 'AQBhxcExJ+w74bvDknrPZDRgTeMLYgbVJjx2ExH7/Ac5FZZWcpUpFwWMIJJxtewI\n' +
- 'AnhryzM3tQYYd4CG9O+Iu0+h/VVfW7e4O3joWVkxNMb820kQSEwvZfA78aItGwOY\n' +
- 'WSaFNVRyloVicZRNJSyb1UL9EiJ9ldhxm4LTT0ax+4ontI7zTx6n6h8Sr6r/UOvX\n' +
- 'd9T5aUUENWeo6M9jGupHNn3BobtL7BZm2oS8wX8IVYj4tl0q5T89zDi2x0MxbsIV\n' +
- '5ZjwqBQ5JWKv7ASGPb+z286RjPA9R2knF4lJVZrYuNV90rHvI/ECyt/JrDqeljGL\n' +
- 'BLl1W/UsvZo6ldLIpoMbbrb5\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBDCCAuygAwIBAgIQUfVbqapkLYpUqcLajpTJWzANBgkqhkiG9w0BAQsFADCB\n' +
- 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' +
- 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUwIBcNMjIwNTA2MjMyMDA5WhgPMjA2MjA1MDcwMDIwMDlaMIGa\n' +
- 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' +
- 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' +
- 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIeovu3\n' +
- 'ewI9FVitXMQzvkh34aQ6WyI4NO3YepfJaePiv3cnyFGYHN2S1cR3UQcLWgypP5va\n' +
- 'j6bfroqwGbCbZZcb+6cyOB4ceKO9Ws1UkcaGHnNDcy5gXR7aCW2OGTUfinUuhd2d\n' +
- '5bOGgV7JsPbpw0bwJ156+MwfOK40OLCWVbzy8B1kITs4RUPNa/ZJnvIbiMu9rdj4\n' +
- '8y7GSFJLnKCjlOFUkNI5LcaYvI1+ybuNgphT3nuu5ZirvTswGakGUT/Q0J3dxP0J\n' +
- 'pDfg5Sj/2G4gXiaM0LppVOoU5yEwVewhQ250l0eQAqSrwPqAkdTg9ng360zqCFPE\n' +
- 'JPPcgI1tdGUgneECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\n' +
- '/2AJVxWdZxc8eJgdpbwpW7b0f7IwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n' +
- 'CwUAA4IBAQBYm63jTu2qYKJ94gKnqc+oUgqmb1mTXmgmp/lXDbxonjszJDOXFbri\n' +
- '3CCO7xB2sg9bd5YWY8sGKHaWmENj3FZpCmoefbUx++8D7Mny95Cz8R32rNcwsPTl\n' +
- 'ebpd9A/Oaw5ug6M0x/cNr0qzF8Wk9Dx+nFEimp8RYQdKvLDfNFZHjPa1itnTiD8M\n' +
- 'TorAqj+VwnUGHOYBsT/0NY12tnwXdD+ATWfpEHdOXV+kTMqFFwDyhfgRVNpTc+os\n' +
- 'ygr8SwhnSCpJPB/EYl2S7r+tgAbJOkuwUvGT4pTqrzDQEhwE7swgepnHC87zhf6l\n' +
- 'qN6mVpSnQKQLm6Ob5TeCEFgcyElsF5bH\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAOxu0I1QuMAhIeszB3fJIlkwCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyB1cy13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTI0MjIwNjU5WhgPMjEyMTA1MjQyMzA2NTlaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgdXMtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEz4bylRcGqqDWdP7gQIIoTHdBK6FNtKH1\n' +
- '4SkEIXRXkYDmRvL9Bci1MuGrwuvrka5TDj4b7e+csY0llEzHpKfq6nJPFljoYYP9\n' +
- 'uqHFkv77nOpJJ633KOr8IxmeHW5RXgrZo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBQQikVz8wmjd9eDFRXzBIU8OseiGzAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIwf06Mcrpw1O0EBLBBrp84m37NYtOkE/0Z0O+C7D41wnXi\n' +
- 'EQdn6PXUVgdD23Gj82SrAjEAklhKs+liO1PtN15yeZR1Io98nFve+lLptaLakZcH\n' +
- '+hfFuUtCqMbaI8CdvJlKnPqT\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCTCCA/GgAwIBAgIRALyWMTyCebLZOGcZZQmkmfcwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyODAzWhgPMjEyMTA1MjQyMTI4MDNa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
- 'wGFiyDyCrGqgdn4fXG12cxKAAfVvhMea1mw5h9CVRoavkPqhzQpAitSOuMB9DeiP\n' +
- 'wQyqcsiGl/cTEau4L+AUBG8b9v26RlY48exUYBXj8CieYntOT9iNw5WtdYJa3kF/\n' +
- 'JxgI+HDMzE9cmHDs5DOO3S0uwZVyra/xE1ymfSlpOeUIOTpHRJv97CBUEpaZMUW5\n' +
- 'Sr6GruuOwFVpO5FX3A/jQlcS+UN4GjSRgDUJuqg6RRQldEZGCVCCmodbByvI2fGm\n' +
- 'reGpsPJD54KkmAX08nOR8e5hkGoHxq0m2DLD4SrOFmt65vG47qnuwplWJjtk9B3Z\n' +
- '9wDoopwZLBOtlkPIkUllWm1P8EuHC1IKOA+wSP6XdT7cy8S77wgyHzR0ynxv7q/l\n' +
- 'vlZtH30wnNqFI0y9FeogD0TGMCHcnGqfBSicJXPy9T4fU6f0r1HwqKwPp2GArwe7\n' +
- 'dnqLTj2D7M9MyVtFjEs6gfGWXmu1y5uDrf+CszurE8Cycoma+OfjjuVQgWOCy7Nd\n' +
- 'jJswPxAroTzVfpgoxXza4ShUY10woZu0/J+HmNmqK7lh4NS75q1tz75in8uTZDkV\n' +
- 'be7GK+SEusTrRgcf3tlgPjSTWG3veNzFDF2Vn1GLJXmuZfhdlVQDBNXW4MNREExS\n' +
- 'dG57kJjICpT+r8X+si+5j51gRzkSnMYs7VHulpxfcwECAwEAAaNCMEAwDwYDVR0T\n' +
- 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQU4JWOpDBmUBuWKvGPZelw87ezhL8wDgYDVR0P\n' +
- 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBRNLMql7itvXSEFQRAnyOjivHz\n' +
- 'l5IlWVQjAbOUr6ogZcwvK6YpxNAFW5zQr8F+fdkiypLz1kk5irx9TIpff0BWC9hQ\n' +
- '/odMPO8Gxn8+COlSvc+dLsF2Dax3Hvz0zLeKMo+cYisJOzpdR/eKd0/AmFdkvQoM\n' +
- 'AOK9n0yYvVJU2IrSgeJBiiCarpKSeAktEVQ4rvyacQGr+QAPkkjRwm+5LHZKK43W\n' +
- 'nNnggRli9N/27qYtc5bgr3AaQEhEXMI4RxPRXCLsod0ehMGWyRRK728a+6PMMJAJ\n' +
- 'WHOU0x7LCEMPP/bvpLj3BdvSGqNor4ZtyXEbwREry1uzsgODeRRns5acPwTM6ff+\n' +
- 'CmxO2NZ0OktIUSYRmf6H/ZFlZrIhV8uWaIwEJDz71qvj7buhQ+RFDZ9CNL64C0X6\n' +
- 'mf0zJGEpddjANHaaVky+F4gYMtEy2K2Lcm4JGTdyIzUoIe+atzCnRp0QeIcuWtF+\n' +
- 's8AjDYCVFNypcMmqbRmNpITSnOoCHSRuVkY3gutVoYyMLbp8Jm9SJnCIlEWTA6Rm\n' +
- 'wADOMGZJVn5/XRTRuetVOB3KlQDjs9OO01XN5NzGSZO2KT9ngAUfh9Eqhf1iRWSP\n' +
- 'nZlRbQ2NRCuY/oJ5N59mLGxnNJSE7giEKEBRhTQ/XEPIUYAUPD5fca0arKRJwbol\n' +
- 'l9Se1Hsq0ZU5f+OZKQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGATCCA+mgAwIBAgIRAK7vlRrGVEePJpW1VHMXdlIwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' +
- 'QW1hem9uIFJEUyBhZi1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMTA1MTkxOTI4NDNaGA8yMTIxMDUxOTIwMjg0M1owgZgx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' +
- 'em9uIFJEUyBhZi1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\n' +
- 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMZiHOQC6x4o\n' +
- 'eC7vVOMCGiN5EuLqPYHdceFPm4h5k/ZejXTf7kryk6aoKZKsDIYihkaZwXVS7Y/y\n' +
- '7Ig1F1ABi2jD+CYprj7WxXbhpysmN+CKG7YC3uE4jSvfvUnpzionkQbjJsRJcrPO\n' +
- 'cZJM4FVaVp3mlHHtvnM+K3T+ni4a38nAd8xrv1na4+B8ZzZwWZXarfg8lJoGskSn\n' +
- 'ou+3rbGQ0r+XlUP03zWujHoNlVK85qUIQvDfTB7n3O4s1XNGvkfv3GNBhYRWJYlB\n' +
- '4p8T+PFN8wG+UOByp1gV7BD64RnpuZ8V3dRAlO6YVAmINyG5UGrPzkIbLtErUNHO\n' +
- '4iSp4UqYvztDqJWWHR/rA84ef+I9RVwwZ8FQbjKq96OTnPrsr63A5mXTC9dXKtbw\n' +
- 'XNJPQY//FEdyM3K8sqM0IdCzxCA1MXZ8+QapWVjwyTjUwFvL69HYky9H8eAER59K\n' +
- '5I7u/CWWeCy2R1SYUBINc3xxLr0CGGukcWPEZW2aPo5ibW5kepU1P/pzdMTaTfao\n' +
- 'F42jSFXbc7gplLcSqUgWwzBnn35HLTbiZOFBPKf6vRRu8aRX9atgHw/EjCebi2xP\n' +
- 'xIYr5Ub8u0QVHIqcnF1/hVzO/Xz0chj3E6VF/yTXnsakm+W1aM2QkZbFGpga+LMy\n' +
- 'mFCtdPrELjea2CfxgibaJX1Q4rdEpc8DAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' +
- 'Af8wHQYDVR0OBBYEFDSaycEyuspo/NOuzlzblui8KotFMA4GA1UdDwEB/wQEAwIB\n' +
- 'hjANBgkqhkiG9w0BAQwFAAOCAgEAbosemjeTRsL9o4v0KadBUNS3V7gdAH+X4vH2\n' +
- 'Ee1Jc91VOGLdd/s1L9UX6bhe37b9WjUD69ur657wDW0RzxMYgQdZ27SUl0tEgGGp\n' +
- 'cCmVs1ky3zEN+Hwnhkz+OTmIg1ufq0W2hJgJiluAx2r1ib1GB+YI3Mo3rXSaBYUk\n' +
- 'bgQuujYPctf0PA153RkeICE5GI3OaJ7u6j0caYEixBS3PDHt2MJWexITvXGwHWwc\n' +
- 'CcrC05RIrTUNOJaetQw8smVKYOfRImEzLLPZ5kf/H3Cbj8BNAFNsa10wgvlPuGOW\n' +
- 'XLXqzNXzrG4V3sjQU5YtisDMagwYaN3a6bBf1wFwFIHQoAPIgt8q5zaQ9WI+SBns\n' +
- 'Il6rd4zfvjq/BPmt0uI7rVg/cgbaEg/JDL2neuM9CJAzmKxYxLQuHSX2i3Fy4Y1B\n' +
- 'cnxnRQETCRZNPGd00ADyxPKVoYBC45/t+yVusArFt+2SVLEGiFBr23eG2CEZu+HS\n' +
- 'nDEgIfQ4V3YOTUNa86wvbAss1gbbnT/v1XCnNGClEWCWNCSRjwV2ZmQ/IVTmNHPo\n' +
- '7axTTBBJbKJbKzFndCnuxnDXyytdYRgFU7Ly3sa27WS2KFyFEDebLFRHQEfoYqCu\n' +
- 'IupSqBSbXsR3U10OTjc9z6EPo1nuV6bdz+gEDthmxKa1NI+Qb1kvyliXQHL2lfhr\n' +
- '5zT5+Bs=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'Hing\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRANxgyBbnxgTEOpDul2ZnC0UwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNjEwMTgxOTA3WhgPMjA2MTA2MTAxOTE5MDda\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 'xnwSDAChrMkfk5TA4Dk8hKzStDlSlONzmd3fTG0Wqr5+x3EmFT6Ksiu/WIwEl9J2\n' +
- 'K98UI7vYyuZfCxUKb1iMPeBdVGqk0zb92GpURd+Iz/+K1ps9ZLeGBkzR8mBmAi1S\n' +
- 'OfpwKiTBzIv6E8twhEn4IUpHsdcuX/2Y78uESpJyM8O5CpkG0JaV9FNEbDkJeBUQ\n' +
- 'Ao2qqNcH4R0Qcr5pyeqA9Zto1RswgL06BQMI9dTpfwSP5VvkvcNUaLl7Zv5WzLQE\n' +
- 'JzORWePvdPzzvWEkY/3FPjxBypuYwssKaERW0fkPDmPtykktP9W/oJolKUFI6pXp\n' +
- 'y+Y6p6/AVdnQD2zZjW5FhQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBT+jEKs96LC+/X4BZkUYUkzPfXdqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAIGQqgqcQ6XSGkmNebzR6DhadTbfDmbYeN5N0Vuzv+Tdmufb\n' +
- 'tMGjdjnYMg4B+IVnTKQb+Ox3pL9gbX6KglGK8HupobmIRtwKVth+gYYz3m0SL/Nk\n' +
- 'haWPYzOm0x3tJm8jSdufJcEob4/ATce9JwseLl76pSWdl5A4lLjnhPPKudUDfH+1\n' +
- 'BLNUi3lxpp6GkC8aWUPtupnhZuXddolTLOuA3GwTZySI44NfaFRm+o83N1jp+EwD\n' +
- '6e94M4cTRzjUv6J3MZmSbdtQP/Tk1uz2K4bQZGP0PZC3bVpqiesdE/xr+wbu8uHr\n' +
- 'cM1JXH0AmXf1yIkTgyWzmvt0k1/vgcw5ixAqvvE=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEATCCAumgAwIBAgIRAMhw98EQU18mIji+unM2YH8wDQYJKoZIhvcNAQELBQAw\n' +
- 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMjA2MDYyMTQyMjJaGA8yMDYyMDYwNjIyNDIyMlowgZgx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwH\n' +
- 'U2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIeeRoLfTm+7\n' +
- 'vqm7ZlFSx+1/CGYHyYrOOryM4/Z3dqYVHFMgWTR7V3ziO8RZ6yUanrRcWVX3PZbF\n' +
- 'AfX0KFE8OgLsXEZIX8odSrq86+/Th5eZOchB2fDBsUB7GuN2rvFBbM8lTI9ivVOU\n' +
- 'lbuTnYyb55nOXN7TpmH2bK+z5c1y9RVC5iQsNAl6IJNvSN8VCqXh31eK5MlKB4DT\n' +
- '+Y3OivCrSGsjM+UR59uZmwuFB1h+icE+U0p9Ct3Mjq3MzSX5tQb6ElTNGlfmyGpW\n' +
- 'Kh7GQ5XU1KaKNZXoJ37H53woNSlq56bpVrKI4uv7ATpdpFubOnSLtpsKlpLdR3sy\n' +
- 'Ws245200pC8CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUp0ki\n' +
- '6+eWvsnBjQhMxwMW5pwn7DgwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUA\n' +
- 'A4IBAQB2V8lv0aqbYQpj/bmVv/83QfE4vOxKCJAHv7DQ35cJsTyBdF+8pBczzi3t\n' +
- '3VNL5IUgW6WkyuUOWnE0eqAFOUVj0yTS1jSAtfl3vOOzGJZmWBbqm9BKEdu1D8O6\n' +
- 'sB8bnomwiab2tNDHPmUslpdDqdabbkWwNWzLJ97oGFZ7KNODMEPXWKWNxg33iHfS\n' +
- '/nlmnrTVI3XgaNK9qLZiUrxu9Yz5gxi/1K+sG9/Dajd32ZxjRwDipOLiZbiXQrsd\n' +
- 'qzIMY4GcWf3g1gHL5mCTfk7dG22h/rhPyGV0svaDnsb+hOt6sv1McMN6Y3Ou0mtM\n' +
- '/UaAXojREmJmTSCNvs2aBny3/2sy\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAMnRxsKLYscJV8Qv5pWbL7swCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyBzYS1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTE5MTgxNjAxWhgPMjEyMTA1MTkxOTE2MDFaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgc2EtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEjFOCZgTNVKxLKhUxffiDEvTLFhrmIqdO\n' +
- 'dKqVdgDoELEzIHWDdC+19aDPitbCYtBVHl65ITu/9pn6mMUl5hhUNtfZuc6A+Iw1\n' +
- 'sBe0v0qI3y9Q9HdQYrGgeHDh8M5P7E2ho0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBS5L7/8M0TzoBZk39Ps7BkfTB4yJTAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIwI43O0NtWKTgnVv9z0LO5UMZYgSve7GvGTwqktZYCMObE\n' +
- 'rUI4QerXM9D6JwLy09mqAjEAypfkdLyVWtaElVDUyHFkihAS1I1oUxaaDrynLNQK\n' +
- 'Ou/Ay+ns+J+GyvyDUjBpVVW1\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIF/jCCA+agAwIBAgIQR71Z8lTO5Sj+as2jB7IWXzANBgkqhkiG9w0BAQwFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTI0MjIwMzIwWhgPMjEyMTA1MjQyMzAzMjBaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM977bHIs1WJijrS\n' +
- 'XQMfUOhmlJjr2v0K0UjPl52sE1TJ76H8umo1yR4T7Whkd9IwBHNGKXCJtJmMr9zp\n' +
- 'fB38eLTu+5ydUAXdFuZpRMKBWwPVe37AdJRKqn5beS8HQjd3JXAgGKUNNuE92iqF\n' +
- 'qi2fIqFMpnJXWo0FIW6s2Dl2zkORd7tH0DygcRi7lgVxCsw1BJQhFJon3y+IV8/F\n' +
- 'bnbUXSNSDUnDW2EhvWSD8L+t4eiXYsozhDAzhBvojpxhPH9OB7vqFYw5qxFx+G0t\n' +
- 'lSLX5iWi1jzzc3XyGnB6WInZDVbvnvJ4BGZ+dTRpOCvsoMIn9bz4EQTvu243c7aU\n' +
- 'HbS/kvnCASNt+zk7C6lbmaq0AGNztwNj85Opn2enFciWZVnnJ/4OeefUWQxD0EPp\n' +
- 'SjEd9Cn2IHzkBZrHCg+lWZJQBKbUVS0lLIMSsLQQ6WvR38jY7D2nxM1A93xWxwpt\n' +
- 'ZtQnYRCVXH6zt2OwDAFePInWwxUjR5t/wu3XxPgpSfrmTi3WYtr1wFypAJ811e/P\n' +
- 'yBtswWUQ6BNJQvy+KnOEeGfOwmtdDFYR+GOCfvCihzrKJrxOtHIieehR5Iw3cbXG\n' +
- 'sm4pDzfMUVvDDz6C2M6PRlJhhClbatHCjik9hxFYEsAlqtVVK9pxaz9i8hOqSFQq\n' +
- 'kJSQsgWw+oM/B2CyjcSqkSQEu8RLAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' +
- 'HQYDVR0OBBYEFPmrdxpRRgu3IcaB5BTqlprcKdTsMA4GA1UdDwEB/wQEAwIBhjAN\n' +
- 'BgkqhkiG9w0BAQwFAAOCAgEAVdlxWjPvVKky3kn8ZizeM4D+EsLw9dWLau2UD/ls\n' +
- 'zwDCFoT6euagVeCknrn+YEl7g20CRYT9iaonGoMUPuMR/cdtPL1W/Rf40PSrGf9q\n' +
- 'QuxavWiHLEXOQTCtCaVZMokkvjuuLNDXyZnstgECuiZECTwhexUF4oiuhyGk9o01\n' +
- 'QMaiz4HX4lgk0ozALUvEzaNd9gWEwD2qe+rq9cQMTVq3IArUkvTIftZUaVUMzr0O\n' +
- 'ed1+zAsNa9nJhURJ/6anJPJjbQgb5qA1asFcp9UaMT1ku36U3gnR1T/BdgG2jX3X\n' +
- 'Um0UcaGNVPrH1ukInWW743pxWQb7/2sumEEMVh+jWbB18SAyLI4WIh4lkurdifzS\n' +
- 'IuTFp8TEx+MouISFhz/vJDWZ84tqoLVjkEcP6oDypq9lFoEzHDJv3V1CYcIgOusT\n' +
- 'k1jm9P7BXdTG7TYzUaTb9USb6bkqkD9EwJAOSs7DI94aE6rsSws2yAHavjAMfuMZ\n' +
- 'sDAZvkqS2Qg2Z2+CI6wUZn7mzkJXbZoqRjDvChDXEB1mIhzVXhiNW/CR5WKVDvlj\n' +
- '9v1sdGByh2pbxcLQtVaq/5coM4ANgphoNz3pOYUPWHS+JUrIivBZ+JobjXcxr3SN\n' +
- '9iDzcu5/FVVNbq7+KN/nvPMngT+gduEN5m+EBjm8GukJymFG0m6BENRA0QSDqZ7k\n' +
- 'zDY=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRAK5EYG3iHserxMqgg+0EFjgwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyMzE2WhgPMjA2MTA1MjQyMTIzMTZa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 's1L6TtB84LGraLHVC+rGPhLBW2P0oN/91Rq3AnYwqDOuTom7agANwEjvLq7dSRG/\n' +
- 'sIfZsSV/ABTgArZ5sCmLjHFZAo8Kd45yA9byx20RcYtAG8IZl+q1Cri+s0XefzyO\n' +
- 'U6mlfXZkVe6lzjlfXBkrlE/+5ifVbJK4dqOS1t9cWIpgKqv5fbE6Qbq4LVT+5/WM\n' +
- 'Vd2BOljuBMGMzdZubqFKFq4mzTuIYfnBm7SmHlZfTdfBYPP1ScNuhpjuzw4n3NCR\n' +
- 'EdU6dQv04Q6th4r7eiOCwbWI9LkmVbvBe3ylhH63lApC7MiiPYLlB13xBubVHVhV\n' +
- 'q1NHoNTi+zA3MN9HWicRxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBSuxoqm0/wjNiZLvqv+JlQwsDvTPDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAFfTK/j5kv90uIbM8VaFdVbr/6weKTwehafT0pAk1bfLVX+7\n' +
- 'uf8oHgYiyKTTl0DFQicXejghXTeyzwoEkWSR8c6XkhD5vYG3oESqmt/RGvvoxz11\n' +
- 'rHHy7yHYu7RIUc3VQG60c4qxXv/1mWySGwVwJrnuyNT9KZXPevu3jVaWOVHEILaK\n' +
- 'HvzQ2YEcWBPmde/zEseO2QeeGF8FL45Q1d66wqIP4nNUd2pCjeTS5SpB0MMx7yi9\n' +
- 'ki1OH1pv8tOuIdimtZ7wkdB8+JSZoaJ81b8sRrydRwJyvB88rftuI3YB4WwGuONT\n' +
- 'ZezUPsmaoK69B0RChB0ofDpAaviF9V3xOWvVZfo=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- '1axqeKpI0F5SBUPsaVNYY2uNFg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECDCCAvCgAwIBAgIQCREfzzVyDTMcNME+gWnTCTANBgkqhkiG9w0BAQsFADCB\n' +
- 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' +
- 'bWF6b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4G\n' +
- 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MjQyMDQyMzNaGA8yMDYxMDUyNDIxNDIzM1ow\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDL\n' +
- '1MT6br3L/4Pq87DPXtcjlXN3cnbNk2YqRAZHJayStTz8VtsFcGPJOpk14geRVeVk\n' +
- 'e9uKFHRbcyr/RM4owrJTj5X4qcEuATYZbo6ou/rW2kYzuWFZpFp7lqm0vasV4Z9F\n' +
- 'fChlhwkNks0UbM3G+psCSMNSoF19ERunj7w2c4E62LwujkeYLvKGNepjnaH10TJL\n' +
- '2krpERd+ZQ4jIpObtRcMH++bTrvklc+ei8W9lqrVOJL+89v2piN3Ecdd389uphst\n' +
- 'qQdb1BBVXbhUrtuGHgVf7zKqN1SkCoktoWxVuOprVWhSvr7akaWeq0UmlvbEsujU\n' +
- 'vADqxGMcJFyCzxx3CkJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O\n' +
- 'BBYEFFk8UJmlhoxFT3PP12PvhvazHjT4MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG\n' +
- '9w0BAQsFAAOCAQEAfFtr2lGoWVXmWAsIo2NYre7kzL8Xb9Tx7desKxCCz5HOOvIr\n' +
- '8JMB1YK6A7IOvQsLJQ/f1UnKRh3X3mJZjKIywfrMSh0FiDf+rjcEzXxw2dGtUem4\n' +
- 'A+WMvIA3jwxnJ90OQj5rQ8bg3iPtE6eojzo9vWQGw/Vu48Dtw1DJo9210Lq/6hze\n' +
- 'hPhNkFh8fMXNT7Q1Wz/TJqJElyAQGNOXhyGpHKeb0jHMMhsy5UNoW5hLeMS5ffao\n' +
- 'TBFWEJ1gVfxIU9QRxSh+62m46JIg+dwDlWv8Aww14KgepspRbMqDuaM2cinoejv6\n' +
- 't3dyOyHHrsOyv3ffZUKtQhQbQr+sUcL89lARsg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/zCCAuegAwIBAgIRAIJLTMpzGNxqHZ4t+c1MlCIwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyBhcC1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNTIxMzAzM1oYDzIwNjEwNTI1MjIzMDMzWjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtdHut0ZhJ9Nn2\n' +
- 'MpVafFcwHdoEzx06okmmhjJsNy4l9QYVeh0UUoek0SufRNMRF4d5ibzpgZol0Y92\n' +
- '/qKWNe0jNxhEj6sXyHsHPeYtNBPuDMzThfbvsLK8z7pBP7vVyGPGuppqW/6m4ZBB\n' +
- 'lcc9fsf7xpZ689iSgoyjiT6J5wlVgmCx8hFYc/uvcRtfd8jAHvheug7QJ3zZmIye\n' +
- 'V4htOW+fRVWnBjf40Q+7uTv790UAqs0Zboj4Yil+hER0ibG62y1g71XcCyvcVpto\n' +
- '2/XW7Y9NCgMNqQ7fGN3wR1gjtSYPd7DO32LTzYhutyvfbpAZjsAHnoObmoljcgXI\n' +
- 'QjfBcCFpAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJI3aWLg\n' +
- 'CS5xqU5WYVaeT5s8lpO0MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' +
- 'AQEAUwATpJOcGVOs3hZAgJwznWOoTzOVJKfrqBum7lvkVH1vBwxBl9CahaKj3ZOt\n' +
- 'YYp2qJzhDUWludL164DL4ZjS6eRedLRviyy5cRy0581l1MxPWTThs27z+lCC14RL\n' +
- 'PJZNVYYdl7Jy9Q5NsQ0RBINUKYlRY6OqGDySWyuMPgno2GPbE8aynMdKP+f6G/uE\n' +
- 'YHOf08gFDqTsbyfa70ztgVEJaRooVf5JJq4UQtpDvVswW2reT96qi6tXPKHN5qp3\n' +
- '3wI0I1Mp4ePmiBKku2dwYzPfrJK/pQlvu0Gu5lKOQ65QdotwLAAoaFqrf9za1yYs\n' +
- 'INUkHLWIxDds+4OHNYcerGp5Dw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCTCCA/GgAwIBAgIRAIO6ldra1KZvNWJ0TA1ihXEwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjE0NTA1WhgPMjEyMTA1MjEyMjQ1MDVa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
- 'sDN52Si9pFSyZ1ruh3xAN0nVqEs960o2IK5CPu/ZfshFmzAwnx/MM8EHt/jMeZtj\n' +
- 'SM58LADAsNDL01ELpFZATjgZQ6xNAyXRXE7RiTRUvNkK7O3o2qAGbLnJq/UqF7Sw\n' +
- 'LRnB8V6hYOv+2EjVnohtGCn9SUFGZtYDjWXsLd4ML4Zpxv0a5LK7oEC7AHzbUR7R\n' +
- 'jsjkrXqSv7GE7bvhSOhMkmgxgj1F3J0b0jdQdtyyj109aO0ATUmIvf+Bzadg5AI2\n' +
- 'A9UA+TUcGeebhpHu8AP1Hf56XIlzPpaQv3ZJ4vzoLaVNUC7XKzAl1dlvCl7Klg/C\n' +
- '84qmbD/tjZ6GHtzpLKgg7kQEV7mRoXq8X4wDX2AFPPQl2fv+Kbe+JODqm5ZjGegm\n' +
- 'uskABBi8IFv1hYx9jEulZPxC6uD/09W2+niFm3pirnlWS83BwVDTUBzF+CooUIMT\n' +
- 'jhWkIIZGDDgMJTzouBHfoSJtS1KpUZi99m2WyVs21MNKHeWAbs+zmI6TO5iiMC+T\n' +
- 'uB8spaOiHFO1573Fmeer4sy3YA6qVoqVl6jjTQqOdy3frAMbCkwH22/crV8YA+08\n' +
- 'hLeHXrMK+6XUvU+EtHAM3VzcrLbuYJUI2XJbzTj5g0Eb8I8JWsHvWHR5K7Z7gceR\n' +
- '78AzxQmoGEfV6KABNWKsgoCQnfb1BidDJIe3BsI0A6UCAwEAAaNCMEAwDwYDVR0T\n' +
- 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUABp0MlB14MSHgAcuNSOhs3MOlUcwDgYDVR0P\n' +
- 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCv4CIOBSQi/QR9NxdRgVAG/pAh\n' +
- 'tFJhV7OWb/wqwsNKFDtg6tTxwaahdCfWpGWId15OUe7G9LoPiKiwM9C92n0ZeHRz\n' +
- '4ewbrQVo7Eu1JI1wf0rnZJISL72hVYKmlvaWaacHhWxvsbKLrB7vt6Cknxa+S993\n' +
- 'Kf8i2Psw8j5886gaxhiUtzMTBwoDWak8ZaK7m3Y6C6hXQk08+3pnIornVSFJ9dlS\n' +
- 'PAqt5UPwWmrEfF+0uIDORlT+cvrAwgSp7nUF1q8iasledycZ/BxFgQqzNwnkBDwQ\n' +
- 'Z/aM52ArGsTzfMhkZRz9HIEhz1/0mJw8gZtDVQroD8778h8zsx2SrIz7eWQ6uWsD\n' +
- 'QEeSWXpcheiUtEfzkDImjr2DLbwbA23c9LoexUD10nwohhoiQQg77LmvBVxeu7WU\n' +
- 'E63JqaYUlOLOzEmNJp85zekIgR8UTkO7Gc+5BD7P4noYscI7pPOL5rP7YLg15ZFi\n' +
- 'ega+G53NTckRXz4metsd8XFWloDjZJJq4FfD60VuxgXzoMNT9wpFTNSH42PR2s9L\n' +
- 'I1vcl3w8yNccs9se2utM2nLsItZ3J0m/+QSRiw9hbrTYTcM9sXki0DtH2kyIOwYf\n' +
- 'lOrGJDiYOIrXSQK36H0gQ+8omlrUTvUj4msvkXuQjlfgx6sgp2duOAfnGxE7uHnc\n' +
- 'UhnJzzoe6M+LfGHkVQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICuDCCAj2gAwIBAgIQSAG6j2WHtWUUuLGJTPb1nTAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2MzgyNloYDzIxMjEwNTIwMTczODI2WjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2eqwU4FOzW8RV1W381Bd\n' +
- 'olhDOrqoMqzWli21oDUt7y8OnXM/lmAuOS6sr8Nt61BLVbONdbr+jgCYw75KabrK\n' +
- 'ZGg3siqvMOgabIKkKuXO14wtrGyGDt7dnKXg5ERGYOZlo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBS1Acp2WYxOcblv5ikZ3ZIbRCCW+zAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAJL84J08PBprxmsAKPTotBuVI3MyW1r8\n' +
- 'xQ0i8lgCQUf8GcmYjQ0jI4oZyv+TuYJAcwIxAP9Xpzq0Docxb+4N1qVhpiOfWt1O\n' +
- 'FnemFiy9m1l+wv6p3riQMPV7mBVpklmijkIv3Q==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRALZLcqCVIJ25maDPE3sbPCIwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjEzOTM5WhgPMjA2MTA1MjEyMjM5Mzla\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 'ypKc+6FfGx6Gl6fQ78WYS29QoKgQiur58oxR3zltWeg5fqh9Z85K5S3UbRSTqWWu\n' +
- 'Xcfnkz0/FS07qHX+nWAGU27JiQb4YYqhjZNOAq8q0+ptFHJ6V7lyOqXBq5xOzO8f\n' +
- '+0DlbJSsy7GEtJp7d7QCM3M5KVY9dENVZUKeJwa8PC5StvwPx4jcLeZRJC2rAVDG\n' +
- 'SW7NAInbATvr9ssSh03JqjXb+HDyywiqoQ7EVLtmtXWimX+0b3/2vhqcH5jgcKC9\n' +
- 'IGFydrjPbv4kwMrKnm6XlPZ9L0/3FMzanXPGd64LQVy51SI4d5Xymn0Mw2kMX8s6\n' +
- 'Nf05OsWcDzJ1n6/Q1qHSxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBRmaIc8eNwGP7i6P7AJrNQuK6OpFzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAIBeHfGwz3S2zwIUIpqEEI5/sMySDeS+3nJR+woWAHeO0C8i\n' +
- 'BJdDh+kzzkP0JkWpr/4NWz84/IdYo1lqASd1Kopz9aT1+iROXaWr43CtbzjXb7/X\n' +
- 'Zv7eZZFC8/lS5SROq42pPWl4ekbR0w8XGQElmHYcWS41LBfKeHCUwv83ATF0XQ6I\n' +
- '4t+9YSqZHzj4vvedrvcRInzmwWJaal9s7Z6GuwTGmnMsN3LkhZ+/GD6oW3pU/Pyh\n' +
- 'EtWqffjsLhfcdCs3gG8x9BbkcJPH5aPAVkPn4wc8wuXg6xxb9YGsQuY930GWTYRf\n' +
- 'schbgjsuqznW4HHakq4WNhs1UdTSTKkRdZz7FUQ=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEDzCCAvegAwIBAgIRAM2zAbhyckaqRim63b+Tib8wDQYJKoZIhvcNAQELBQAw\n' +
- 'gZ8xCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE4MDYGA1UEAwwv\n' +
- 'QW1hem9uIFJEUyBQcmV2aWV3IHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzEx\n' +
- 'EDAOBgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjA0OTQ1WhgPMjA2MTA1MTgyMTQ5\n' +
- 'NDVaMIGfMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n' +
- 'cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExODA2BgNV\n' +
- 'BAMML0FtYXpvbiBSRFMgUHJldmlldyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4\n' +
- 'IEcxMRAwDgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n' +
- 'CgKCAQEA1ybjQMH1MkbvfKsWJaCTXeCSN1SG5UYid+Twe+TjuSqaXWonyp4WRR5z\n' +
- 'tlkqq+L2MWUeQQAX3S17ivo/t84mpZ3Rla0cx39SJtP3BiA2BwfUKRjhPwOjmk7j\n' +
- '3zrcJjV5k1vSeLNOfFFSlwyDiVyLAE61lO6onBx+cRjelu0egMGq6WyFVidTdCmT\n' +
- 'Q9Zw3W6LTrnPvPmEyjHy2yCHzH3E50KSd/5k4MliV4QTujnxYexI2eR8F8YQC4m3\n' +
- 'DYjXt/MicbqA366SOoJA50JbgpuVv62+LSBu56FpzY12wubmDZsdn4lsfYKiWxUy\n' +
- 'uc83a2fRXsJZ1d3whxrl20VFtLFHFQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' +
- 'MB0GA1UdDgQWBBRC0ytKmDYbfz0Bz0Psd4lRQV3aNTAOBgNVHQ8BAf8EBAMCAYYw\n' +
- 'DQYJKoZIhvcNAQELBQADggEBAGv8qZu4uaeoF6zsbumauz6ea6tdcWt+hGFuwGrb\n' +
- 'tRbI85ucAmVSX06x59DJClsb4MPhL1XmqO3RxVMIVVfRwRHWOsZQPnXm8OYQ2sny\n' +
- 'rYuFln1COOz1U/KflZjgJmxbn8x4lYiTPZRLarG0V/OsCmnLkQLPtEl/spMu8Un7\n' +
- 'r3K8SkbWN80gg17Q8EV5mnFwycUx9xsTAaFItuG0en9bGsMgMmy+ZsDmTRbL+lcX\n' +
- 'Fq8r4LT4QjrFz0shrzCwuuM4GmcYtBSxlacl+HxYEtAs5k10tmzRf6OYlY33tGf6\n' +
- '1tkYvKryxDPF/EDgGp/LiBwx6ixYMBfISoYASt4V/ylAlHA=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtTCCAjqgAwIBAgIRAK9BSZU6nIe6jqfODmuVctYwCgYIKoZIzj0EAwMwgZkx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' +
- 'em9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTIxMjIxMzA5WhgPMjEyMTA1MjEyMzEzMDlaMIGZMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' +
- 'biBSRFMgY2EtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUkEERcgxneT5H+P+fERcbGmf\n' +
- 'bVx+M7rNWtgWUr6w+OBENebQA9ozTkeSg4c4M+qdYSObFqjxITdYxT1z/nHz1gyx\n' +
- 'OKAhLjWu+nkbRefqy3RwXaWT680uUaAP6ccnkZOMo0IwQDAPBgNVHRMBAf8EBTAD\n' +
- 'AQH/MB0GA1UdDgQWBBSN6fxlg0s5Wny08uRBYZcQ3TUoyzAOBgNVHQ8BAf8EBAMC\n' +
- 'AYYwCgYIKoZIzj0EAwMDaQAwZgIxAORaz+MBVoFBTmZ93j2G2vYTwA6T5hWzBWrx\n' +
- 'CrI54pKn5g6At56DBrkjrwZF5T1enAIxAJe/LZ9xpDkAdxDgGJFN8gZYLRWc0NRy\n' +
- 'Rb4hihy5vj9L+w9uKc9VfEBIFuhT7Z3ljg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQB/57HSuaqUkLaasdjxUdPjANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUxOTE3NDAzNFoYDzIwNjEwNTE5MTg0MDM0WjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtbkaoVsUS76o\n' +
- 'TgLFmcnaB8cswBk1M3Bf4IVRcwWT3a1HeJSnaJUqWHCJ+u3ip/zGVOYl0gN1MgBb\n' +
- 'MuQRIJiB95zGVcIa6HZtx00VezDTr3jgGWRHmRjNVCCHGmxOZWvJjsIE1xavT/1j\n' +
- 'QYV/ph4EZEIZ/qPq7e3rHohJaHDe23Z7QM9kbyqp2hANG2JtU/iUhCxqgqUHNozV\n' +
- 'Zd0l5K6KnltZQoBhhekKgyiHqdTrH8fWajYl5seD71bs0Axowb+Oh0rwmrws3Db2\n' +
- 'Dh+oc2PwREnjHeca9/1C6J2vhY+V0LGaJmnnIuOANrslx2+bgMlyhf9j0Bv8AwSi\n' +
- 'dSWsobOhNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQb7vJT\n' +
- 'VciLN72yJGhaRKLn6Krn2TAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAAxEj8N9GslReAQnNOBpGl8SLgCMTejQ6AW/bapQvzxrZrfVOZOYwp/5oV0f\n' +
- '9S1jcGysDM+DrmfUJNzWxq2Y586R94WtpH4UpJDGqZp+FuOVJL313te4609kopzO\n' +
- 'lDdmd+8z61+0Au93wB1rMiEfnIMkOEyt7D2eTFJfJRKNmnPrd8RjimRDlFgcLWJA\n' +
- '3E8wca67Lz/G0eAeLhRHIXv429y8RRXDtKNNz0wA2RwURWIxyPjn1fHjA9SPDkeW\n' +
- 'E1Bq7gZj+tBnrqz+ra3yjZ2blss6Ds3/uRY6NYqseFTZWmQWT7FolZEnT9vMUitW\n' +
- 'I0VynUbShVpGf6946e0vgaaKw20=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/jCCAuagAwIBAgIQGyUVTaVjYJvWhroVEiHPpDANBgkqhkiG9w0BAQsFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIHVzLXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTE5MTkwNDA2WhgPMjA2MTA1MTkyMDA0MDZaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgdXMtd2VzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANhyXpJ0t4nigRDZ\n' +
- 'EwNtFOem1rM1k8k5XmziHKDvDk831p7QsX9ZOxl/BT59Pu/P+6W6SvasIyKls1sW\n' +
- 'FJIjFF+6xRQcpoE5L5evMgN/JXahpKGeQJPOX9UEXVW5B8yi+/dyUitFT7YK5LZA\n' +
- 'MqWBN/LtHVPa8UmE88RCDLiKkqiv229tmwZtWT7nlMTTCqiAHMFcryZHx0pf9VPh\n' +
- 'x/iPV8p2gBJnuPwcz7z1kRKNmJ8/cWaY+9w4q7AYlAMaq/rzEqDaN2XXevdpsYAK\n' +
- 'TMMj2kji4x1oZO50+VPNfBl5ZgJc92qz1ocF95SAwMfOUsP8AIRZkf0CILJYlgzk\n' +
- '/6u6qZECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm5jfcS9o\n' +
- '+LwL517HpB6hG+PmpBswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' +
- 'AQAcQ6lsqxi63MtpGk9XK8mCxGRLCad51+MF6gcNz6i6PAqhPOoKCoFqdj4cEQTF\n' +
- 'F8dCfa3pvfJhxV6RIh+t5FCk/y6bWT8Ls/fYKVo6FhHj57bcemWsw/Z0XnROdVfK\n' +
- 'Yqbc7zvjCPmwPHEqYBhjU34NcY4UF9yPmlLOL8uO1JKXa3CAR0htIoW4Pbmo6sA4\n' +
- '6P0co/clW+3zzsQ92yUCjYmRNeSbdXbPfz3K/RtFfZ8jMtriRGuO7KNxp8MqrUho\n' +
- 'HK8O0mlSUxGXBZMNicfo7qY8FD21GIPH9w5fp5oiAl7lqFzt3E3sCLD3IiVJmxbf\n' +
- 'fUwpGd1XZBBSdIxysRLM6j48\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrTCCAjOgAwIBAgIQU+PAILXGkpoTcpF200VD/jAKBggqhkjOPQQDAzCBljEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' +
- 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTAgFw0yMTA1MjUyMTQ1MTFaGA8yMTIxMDUyNTIyNDUxMVowgZYxCzAJBgNV\n' +
- 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' +
- 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' +
- 'UyBhcC1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' +
- 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAT3tFKE8Kw1sGQAvNLlLhd8OcGhlc7MiW/s\n' +
- 'NXm3pOiCT4vZpawKvHBzD76Kcv+ZZzHRxQEmG1/muDzZGlKR32h8AAj+NNO2Wy3d\n' +
- 'CKTtYMiVF6Z2zjtuSkZQdjuQbe4eQ7qjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' +
- 'VR0OBBYEFAiSQOp16Vv0Ohpvqcbd2j5RmhYNMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' +
- 'hkjOPQQDAwNoADBlAjBVsi+5Ape0kOhMt/WFkANkslD4qXA5uqhrfAtH29Xzz2NV\n' +
- 'tR7akiA771OaIGB/6xsCMQCZt2egCtbX7J0WkuZ2KivTh66jecJr5DHvAP4X2xtS\n' +
- 'F/5pS+AUhcKTEGjI9jDH3ew=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICuDCCAj2gAwIBAgIQT5mGlavQzFHsB7hV6Mmy6TAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTAxNVoYDzIxMjEwNTI0MjE1MDE1WjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEcm4BBBjYK7clwm0HJRWS\n' +
- 'flt3iYwoJbIXiXn9c1y3E+Vb7bmuyKhS4eO8mwO4GefUcXObRfoHY2TZLhMJLVBQ\n' +
- '7MN2xDc0RtZNj07BbGD3VAIFRTDX0mH9UNYd0JQM3t/Oo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBRrd5ITedfAwrGo4FA9UaDaGFK3rjAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAPBNqmVv1IIA3EZyQ6XuVf4gj79/DMO8\n' +
- 'bkicNS1EcBpUqbSuU4Zwt2BYc8c/t7KVOQIxAOHoWkoKZPiKyCxfMtJpCZySUG+n\n' +
- 'sXgB/LOyWE5BJcXUfm+T1ckeNoWeUUMOLmnJjg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRAJcDeinvdNrDQBeJ8+t38WQwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY0OTE2WhgPMjA2MjA1MjUxNzQ5MTZa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 'k8DBNkr9tMoIM0NHoFiO7cQfSX0cOMhEuk/CHt0fFx95IBytx7GHCnNzpM27O5z6\n' +
- 'x6iRhfNnx+B6CrGyCzOjxvPizneY+h+9zfvNz9jj7L1I2uYMuiNyOKR6FkHR46CT\n' +
- '1CiArfVLLPaTqgD/rQjS0GL2sLHS/0dmYipzynnZcs613XT0rAWdYDYgxDq7r/Yi\n' +
- 'Xge5AkWQFkMUq3nOYDLCyGGfQqWKkwv6lZUHLCDKf+Y0Uvsrj8YGCI1O8mF0qPCQ\n' +
- 'lmlfaDvbuBu1AV+aabmkvyFj3b8KRIlNLEtQ4N8KGYR2Jdb82S4YUGIOAt4wuuFt\n' +
- '1B7AUDLk3V/u+HTWiwfoLQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBSNpcjz6ArWBtAA+Gz6kyyZxrrgdDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAGJEd7UgOzHYIcQRSF7nSYyjLROyalaIV9AX4WXW/Cqlul1c\n' +
- 'MblP5etDZm7A/thliZIWAuyqv2bNicmS3xKvNy6/QYi1YgxZyy/qwJ3NdFl067W0\n' +
- 't8nGo29B+EVK94IPjzFHWShuoktIgp+dmpijB7wkTIk8SmIoe9yuY4+hzgqk+bo4\n' +
- 'ms2SOXSN1DoQ75Xv+YmztbnZM8MuWhL1T7hA4AMorzTQLJ9Pof8SpSdMHeDsHp0R\n' +
- '01jogNFkwy25nw7cL62nufSuH2fPYGWXyNDg+y42wKsKWYXLRgUQuDVEJ2OmTFMB\n' +
- 'T0Vf7VuNijfIA9hkN2d3K53m/9z5WjGPSdOjGhg=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/jCCAuagAwIBAgIQRiwspKyrO0xoxDgSkqLZczANBgkqhkiG9w0BAQsFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTI0MjE1OTAwWhgPMjA2MTA1MjQyMjU5MDBaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL53Jk3GsKiu+4bx\n' +
- 'jDfsevWbwPCNJ3H08Zp7GWhvI3Tgi39opfHYv2ku2BKFjK8N2L6RvNPSR8yplv5j\n' +
- 'Y0tK0U+XVNl8o0ibhqRDhbTuh6KL8CFINWYzAajuxFS+CF0U6c1Q3tXLBdALxA7l\n' +
- 'FlXJ71QrP06W31kRe7kvgrvO7qWU3/OzUf9qYw4LSiR1/VkvvRCTqcVNw09clw/M\n' +
- 'Jbw6FSgweN65M9j7zPbjGAXSHkXyxH1Erin2fa+B9PE4ZDgX9cp2C1DHewYJQL/g\n' +
- 'SepwwcudVNRN1ibKH7kpMrgPnaNIVNx5sXVsTjk6q2ZqYw3SVHegltJpLy/cZReP\n' +
- 'mlivF2kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUmTcQd6o1\n' +
- 'CuS65MjBrMwQ9JJjmBwwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' +
- 'AQAKSDSIzl956wVddPThf2VAzI8syw9ngSwsEHZvxVGHBvu5gg618rDyguVCYX9L\n' +
- '4Kw/xJrk6S3qxOS2ZDyBcOpsrBskgahDFIunzoRP3a18ARQVq55LVgfwSDQiunch\n' +
- 'Bd05cnFGLoiLkR5rrkgYaP2ftn3gRBRaf0y0S3JXZ2XB3sMZxGxavYq9mfiEcwB0\n' +
- 'LMTMQ1NYzahIeG6Jm3LqRqR8HkzP/Ztq4dT2AtSLvFebbNMiWqeqT7OcYp94HTYT\n' +
- 'zqrtaVdUg9bwyAUCDgy0GV9RHDIdNAOInU/4LEETovrtuBU7Z1q4tcHXvN6Hd1H8\n' +
- 'gMb0mCG5I393qW5hFsA/diFb\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRAPQAvihfjBg/JDbj6U64K98wDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYyODQxWhgPMjA2MTA1MjAxNzI4NDFa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 'vJ9lgyksCxkBlY40qOzI1TCj/Q0FVGuPL/Z1Mw2YN0l+41BDv0FHApjTUkIKOeIP\n' +
- 'nwDwpXTa3NjYbk3cOZ/fpH2rYJ++Fte6PNDGPgKppVCUh6x3jiVZ1L7wOgnTdK1Q\n' +
- 'Trw8440IDS5eLykRHvz8OmwvYDl0iIrt832V0QyOlHTGt6ZJ/aTQKl12Fy3QBLv7\n' +
- 'stClPzvHTrgWqVU6uidSYoDtzHbU7Vda7YH0wD9IUoMBf7Tu0rqcE4uH47s2XYkc\n' +
- 'SdLEoOg/Ngs7Y9B1y1GCyj3Ux7hnyvCoRTw014QyNB7dTatFMDvYlrRDGG14KeiU\n' +
- 'UL7Vo/+EejWI31eXNLw84wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBQkgTWFsNg6wA3HbbihDQ4vpt1E2zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAGz1Asiw7hn5WYUj8RpOCzpE0h/oBZcnxP8wulzZ5Xd0YxWO\n' +
- '0jYUcUk3tTQy1QvoY+Q5aCjg6vFv+oFBAxkib/SmZzp4xLisZIGlzpJQuAgRkwWA\n' +
- '6BVMgRS+AaOMQ6wKPgz1x4v6T0cIELZEPq3piGxvvqkcLZKdCaeC3wCS6sxuafzZ\n' +
- '4qA3zMwWuLOzRftgX2hQto7d/2YkRXga7jSvQl3id/EI+xrYoH6zIWgjdU1AUaNq\n' +
- 'NGT7DIo47vVMfnd9HFZNhREsd4GJE83I+JhTqIxiKPNxrKgESzyADmNPt0gXDnHo\n' +
- 'tbV1pMZz5HpJtjnP/qVZhEK5oB0tqlKPv9yx074=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICuTCCAj6gAwIBAgIRAKp1Rn3aL/g/6oiHVIXtCq8wCgYIKoZIzj0EAwMwgZsx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' +
- 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMTA1MjQyMDMyMTdaGA8yMTIxMDUyNDIxMzIxN1owgZsx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' +
- 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGTYWPILeBJXfcL3Dz4z\n' +
- 'EWMUq78xB1HpjBwHoTURYfcMd5r96BTVG6yaUBWnAVCMeeD6yTG9a1eVGNhG14Hk\n' +
- 'ZAEjgLiNB7RRbEG5JZ/XV7W/vODh09WCst2y9SLKsdgeAaNCMEAwDwYDVR0TAQH/\n' +
- 'BAUwAwEB/zAdBgNVHQ4EFgQUoE0qZHmDCDB+Bnm8GUa/evpfPwgwDgYDVR0PAQH/\n' +
- 'BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCnil5MMwhY3qoXv0xvcKZGxGPaBV15\n' +
- '0CCssCKn0oVtdJQfJQ3Jrf3RSaEyijXIJsoCMQC35iJi4cWoNX3N/qfgnHohW52O\n' +
- 'B5dg0DYMqy5cNZ40+UcAanRMyqNQ6P7fy3umGco=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtzCCAj2gAwIBAgIQPXnDTPegvJrI98qz8WxrMjAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUxODIxNDAxMloYDzIxMjEwNTE4MjI0MDEyWjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEI0sR7gwutK5AB46hM761\n' +
- 'gcLTGBIYlURSEoM1jcBwy56CL+3CJKZwLLyJ7qoOKfWbu5GsVLUTWS8MV6Nw33cx\n' +
- '2KQD2svb694wi+Px2f4n9+XHkEFQw8BbiodDD7RZA70fo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBTQSioOvnVLEMXwNSDg+zgln/vAkjAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAMwu1hqm5Bc98uE/E0B5iMYbBQ4kpMxO\n' +
- 'tP8FTfz5UR37HUn26nXE0puj6S/Ffj4oJgIwXI7s2c26tFQeqzq6u3lrNJHp5jC9\n' +
- 'Uxlo/hEJOLoDj5jnpxo8dMAtCNoQPaHdfL0P\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjWgAwIBAgIQGKVv+5VuzEZEBzJ+bVfx2zAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTE5MTc1MDU5WhgPMjEyMTA1MTkxODUwNTlaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgYXAtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMqdLJ0tZF/DGFZTKZDrGRJZID8ivC2I\n' +
- 'JRCYTWweZKCKSCAzoiuGGHzJhr5RlLHQf/QgmFcgXsdmO2n3CggzhA4tOD9Ip7Lk\n' +
- 'P05eHd2UPInyPCHRgmGjGb0Z+RdQ6zkitKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUC1yhRgVqU5bR8cGzOUCIxRpl4EYwDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2cAMGQCMG0c/zLGECRPzGKJvYCkpFTCUvdP4J74YP0v/dPvKojL\n' +
- 't/BrR1Tg4xlfhaib7hPc7wIwFvgqHes20CubQnZmswbTKLUrgSUW4/lcKFpouFd2\n' +
- 't2/ewfi/0VhkeUW+IiHhOMdU\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCTCCA/GgAwIBAgIRAOXxJuyXVkbfhZCkS/dOpfEwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1OTEwWhgPMjEyMTA1MjUyMjU5MTBa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
- 'xiP4RDYm4tIS12hGgn1csfO8onQDmK5SZDswUpl0HIKXOUVVWkHNlINkVxbdqpqH\n' +
- 'FhbyZmNN6F/EWopotMDKe1B+NLrjNQf4zefv2vyKvPHJXhxoKmfyuTd5Wk8k1F7I\n' +
- 'lNwLQzznB+ElhrLIDJl9Ro8t31YBBNFRGAGEnxyACFGcdkjlsa52UwfYrwreEg2l\n' +
- 'gW5AzqHgjFfj9QRLydeU/n4bHm0F1adMsV7P3rVwilcUlqsENDwXnWyPEyv3sw6F\n' +
- 'wNemLEs1129mB77fwvySb+lLNGsnzr8w4wdioZ74co+T9z2ca+eUiP+EQccVw1Is\n' +
- 'D4Fh57IjPa6Wuc4mwiUYKkKY63+38aCfEWb0Qoi+zW+mE9nek6MOQ914cN12u5LX\n' +
- 'dBoYopphRO5YmubSN4xcBy405nIdSdbrAVWwxXnVVyjqjknmNeqQsPZaxAhdoKhV\n' +
- 'AqxNr8AUAdOAO6Sz3MslmcLlDXFihrEEOeUbpg/m1mSUUHGbu966ajTG1FuEHHwS\n' +
- '7WB52yxoJo/tHvt9nAWnh3uH5BHmS8zn6s6CGweWKbX5yICnZ1QFR1e4pogxX39v\n' +
- 'XD6YcNOO+Vn+HY4nXmjgSYVC7l+eeP8eduMg1xJujzjrbmrXU+d+cBObgdTOAlpa\n' +
- 'JFHaGwYw1osAwPCo9cZ2f04yitBfj9aPFia8ASKldakCAwEAAaNCMEAwDwYDVR0T\n' +
- 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUqKS+ltlior0SyZKYAkJ/efv55towDgYDVR0P\n' +
- 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQAdElvp8bW4B+Cv+1WSN87dg6TN\n' +
- 'wGyIjJ14/QYURgyrZiYpUmZpj+/pJmprSWXu4KNyqHftmaidu7cdjL5nCAvAfnY5\n' +
- '/6eDDbX4j8Gt9fb/6H9y0O0dn3mUPSEKG0crR+JRFAtPhn/2FNvst2P82yguWLv0\n' +
- 'pHjHVUVcq+HqDMtUIJsTPYjSh9Iy77Q6TOZKln9dyDOWJpCSkiUWQtMAKbCSlvzd\n' +
- 'zTs/ahqpT+zLfGR1SR+T3snZHgQnbnemmz/XtlKl52NxccARwfcEEKaCRQyGq/pR\n' +
- '0PVZasyJS9JY4JfQs4YOdeOt4UMZ8BmW1+BQWGSkkb0QIRl8CszoKofucAlqdPcO\n' +
- 'IT/ZaMVhI580LFGWiQIizWFskX6lqbCyHqJB3LDl8gJISB5vNTHOHpvpMOMs5PYt\n' +
- 'cRl5Mrksx5MKMqG7y5R734nMlZxQIHjL5FOoOxTBp9KeWIL/Ib89T2QDaLw1SQ+w\n' +
- 'ihqWBJ4ZdrIMWYpP3WqM+MXWk7WAem+xsFJdR+MDgOOuobVQTy5dGBlPks/6gpjm\n' +
- 'rO9TjfQ36ppJ3b7LdKUPeRfnYmlR5RU4oyYJ//uLbClI443RZAgxaCXX/nyc12lr\n' +
- 'eVLUMNF2abLX4/VF63m2/Z9ACgMRfqGshPssn1NN33OonrotQoj4S3N9ZrjvzKt8\n' +
- 'iHcaqd60QKpfiH2A3A==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICuDCCAj2gAwIBAgIQPaVGRuu86nh/ylZVCLB0MzAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMDMxNloYDzIxMjEwNTI1MjMwMzE2WjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEexNURoB9KE93MEtEAlJG\n' +
- 'obz4LS/pD2hc8Gczix1WhVvpJ8bN5zCDXaKdnDMCebetyRQsmQ2LYlfmCwpZwSDu\n' +
- '0zowB11Pt3I5Avu2EEcuKTlKIDMBeZ1WWuOd3Tf7MEAMo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBSaYbZPBvFLikSAjpa8mRJvyArMxzAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAOEJkuh3Zjb7Ih/zuNRd1RBqmIYcnyw0\n' +
- 'nwUZczKXry+9XebYj3VQxSRNadrarPWVqgIxAMg1dyGoDAYjY/L/9YElyMnvHltO\n' +
- 'PwpJShmqHvCLc/mXMgjjYb/akK7yGthvW6j/uQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCDCCA/CgAwIBAgIQChu3v5W1Doil3v6pgRIcVzANBgkqhkiG9w0BAQwFADCB\n' +
- 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' +
- 'bWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4G\n' +
- 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MTgyMTM0MTVaGA8yMTIxMDUxODIyMzQxNVow\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1\n' +
- 'FUGQ5tf3OwpDR6hGBxhUcrkwKZhaXP+1St1lSOQvjG8wXT3RkKzRGMvb7Ee0kzqI\n' +
- 'mzKKe4ASIhtV3UUWdlNmP0EA3XKnif6N79MismTeGkDj75Yzp5A6tSvqByCgxIjK\n' +
- 'JqpJrch3Dszoyn8+XhwDxMZtkUa5nQVdJgPzJ6ltsQ8E4SWLyLtTu0S63jJDkqYY\n' +
- 'S7cQblk7y7fel+Vn+LS5dGTdRRhMvSzEnb6mkVBaVzRyVX90FNUED06e8q+gU8Ob\n' +
- 'htvQlf9/kRzHwRAdls2YBhH40ZeyhpUC7vdtPwlmIyvW5CZ/QiG0yglixnL6xahL\n' +
- 'pbmTuTSA/Oqz4UGQZv2WzHe1lD2gRHhtFX2poQZeNQX8wO9IcUhrH5XurW/G9Xwl\n' +
- 'Sat9CMPERQn4KC3HSkat4ir2xaEUrjfg6c4XsGyh2Pk/LZ0gLKum0dyWYpWP4JmM\n' +
- 'RQNjrInXPbMhzQObozCyFT7jYegS/3cppdyy+K1K7434wzQGLU1gYXDKFnXwkX8R\n' +
- 'bRKgx2pHNbH5lUddjnNt75+e8m83ygSq/ZNBUz2Ur6W2s0pl6aBjwaDES4VfWYlI\n' +
- 'jokcmrGvJNDfQWygb1k00eF2bzNeNCHwgWsuo3HSxVgc/WGsbcGrTlDKfz+g3ich\n' +
- 'bXUeUidPhRiv5UQIVCLIHpHuin3bj9lQO/0t6p+tAQIDAQABo0IwQDAPBgNVHRMB\n' +
- 'Af8EBTADAQH/MB0GA1UdDgQWBBSFmMBgm5IsRv3hLrvDPIhcPweXYTAOBgNVHQ8B\n' +
- 'Af8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBAAa2EuozymOsQDJlEi7TqnyA2OhT\n' +
- 'GXPfYqCyMJVkfrqNgcnsNpCAiNEiZbb+8sIPXnT8Ay8hrwJYEObJ5b7MHXpLuyft\n' +
- 'z0Pu1oFLKnQxKjNxrIsCvaB4CRRdYjm1q7EqGhMGv76se9stOxkOqO9it31w/LoU\n' +
- 'ENDk7GLsSqsV1OzYLhaH8t+MaNP6rZTSNuPrHwbV3CtBFl2TAZ7iKgKOhdFz1Hh9\n' +
- 'Pez0lG+oKi4mHZ7ajov6PD0W7njn5KqzCAkJR6OYmlNVPjir+c/vUtEs0j+owsMl\n' +
- 'g7KE5g4ZpTRShyh5BjCFRK2tv0tkqafzNtxrKC5XNpEkqqVTCnLcKG+OplIEadtr\n' +
- 'C7UWf4HyhCiR+xIyxFyR05p3uY/QQU/5uza7GlK0J+U1sBUytx7BZ+Fo8KQfPPqV\n' +
- 'CqDCaYUksoJcnJE/KeoksyqNQys7sDGJhkd0NeUGDrFLKHSLhIwAMbEWnqGxvhli\n' +
- 'E7sP2E5rI/I9Y9zTbLIiI8pfeZlFF8DBdoP/Hzg8pqsiE/yiXSFTKByDwKzGwNqz\n' +
- 'F0VoFdIZcIbLdDbzlQitgGpJtvEL7HseB0WH7B2PMMD8KPJlYvPveO3/6OLzCsav\n' +
- '+CAkvk47NQViKMsUTKOA0JDCW+u981YRozxa3K081snhSiSe83zIPBz1ikldXxO9\n' +
- '6YYLNPRrj3mi9T/f\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAMkvdFnVDb0mWWFiXqnKH68wCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyB1cy13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTE5MTkxMzI0WhgPMjEyMTA1MTkyMDEzMjRaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgdXMtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEy86DB+9th/0A5VcWqMSWDxIUblWTt/R0\n' +
- 'ao6Z2l3vf2YDF2wt1A2NIOGpfQ5+WAOJO/IQmnV9LhYo+kacB8sOnXdQa6biZZkR\n' +
- 'IyouUfikVQAKWEJnh1Cuo5YMM4E2sUt5o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBQ8u3OnecANmG8OoT7KLWDuFzZwBTAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIwQ817qkb7mWJFnieRAN+m9W3E0FLVKaV3zC5aYJUk2fcZ\n' +
- 'TaUx3oLp3jPLGvY5+wgeAjEA6wAicAki4ZiDfxvAIuYiIe1OS/7H5RA++R8BH6qG\n' +
- 'iRzUBM/FItFpnkus7u/eTkvo\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrzCCAjWgAwIBAgIQS/+Ryfgb/IOVEa1pWoe8oTAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjIwNjA2MjE1NDQyWhgPMjEyMjA2MDYyMjU0NDJaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgYXAtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDsX6fhdUWBQpYTdseBD/P3s96Dtw2Iw\n' +
- 'OrXKNToCnmX5nMkUGdRn9qKNiz1pw3EPzaPxShbYwQ7LYP09ENK/JN4QQjxMihxC\n' +
- 'jLFxS85nhBQQQGRCWikDAe38mD8fSvREQKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUIh1xZiseQYFjPYKJmGbruAgRH+AwDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2gAMGUCMFudS4zLy+UUGrtgNLtRMcu/DZ9BUzV4NdHxo0bkG44O\n' +
- 'thnjl4+wTKI6VbyAbj2rkgIxAOHps8NMITU5DpyiMnKTxV8ubb/WGHrLl0BjB8Lw\n' +
- 'ETVJk5DNuZvsIIcm7ykk6iL4Tw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGBDCCA+ygAwIBAgIQDcEmNIAVrDpUw5cH5ynutDANBgkqhkiG9w0BAQwFADCB\n' +
- 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' +
- 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUwIBcNMjIwNTA3MDA0MDIzWhgPMjEyMjA1MDcwMTQwMjNaMIGa\n' +
- 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' +
- 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' +
- 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvADk8t\n' +
- 'Fl9bFlU5sajLPPDSOUpPAkKs6iPlz+27o1GJC88THcOvf3x0nVAcu9WYe9Qaas+4\n' +
- 'j4a0vv51agqyODRD/SNi2HnqW7DbtLPAm6KBHe4twl28ItB/JD5g7u1oPAHFoXMS\n' +
- 'cH1CZEAs5RtlZGzJhcBXLFsHNv/7+SCLyZ7+2XFh9OrtgU4wMzkHoRNndhfwV5bu\n' +
- '17bPTwuH+VxH37zXf1mQ/KjhuJos0C9dL0FpjYBAuyZTAWhZKs8dpSe4DI544z4w\n' +
- 'gkwUB4bC2nA1TBzsywEAHyNuZ/xRjNpWvx0ToWAA2iFJqC3VO3iKcnBplMvaUuMt\n' +
- 'jwzVSNBnKcoabXCZL2XDLt4YTZR8FSwz05IvsmwcPB7uNTBXq3T9sjejW8QQK3vT\n' +
- 'tzyfLq4jKmQE7PoS6cqYm+hEPm2hDaC/WP9bp3FdEJxZlPH26fq1b7BWYWhQ9pBA\n' +
- 'Nv9zTnzdR1xohTyOJBUFQ81ybEzabqXqVXUIANqIOaNcTB09/sLJ7+zuMhp3mwBu\n' +
- 'LtjfJv8PLuT1r63bU3seROhKA98b5KfzjvbvPSg3vws78JQyoYGbqNyDfyjVjg3U\n' +
- 'v//AdVuPie6PNtdrW3upZY4Qti5IjP9e3kimaJ+KAtTgMRG56W0WxD3SP7+YGGbG\n' +
- 'KhntDOkKsN39hLpn9UOafTIqFu7kIaueEy/NAgMBAAGjQjBAMA8GA1UdEwEB/wQF\n' +
- 'MAMBAf8wHQYDVR0OBBYEFHAems86dTwdZbLe8AaPy3kfIUVoMA4GA1UdDwEB/wQE\n' +
- 'AwIBhjANBgkqhkiG9w0BAQwFAAOCAgEAOBHpp0ICx81kmeoBcZTrMdJs2gnhcd85\n' +
- 'FoSCjXx9H5XE5rmN/lQcxxOgj8hr3uPuLdLHu+i6THAyzjrl2NA1FWiqpfeECGmy\n' +
- '0jm7iZsYORgGQYp/VKnDrwnKNSqlZvOuRr0kfUexwFlr34Y4VmupvEOK/RdGsd3S\n' +
- '+3hiemcHse9ST/sJLHx962AWMkN86UHPscJEe4+eT3f2Wyzg6La8ARwdWZSNS+WH\n' +
- 'ZfybrncMmuiXuUdHv9XspPsqhKgtHhcYeXOGUtrwQPLe3+VJZ0LVxhlTWr9951GZ\n' +
- 'GfmWwTV/9VsyKVaCFIXeQ6L+gjcKyEzYF8wpMtQlSc7FFqwgC4bKxvMBSaRy88Nr\n' +
- 'lV2+tJD/fr8zGUeBK44Emon0HKDBWGX+/Hq1ZIv0Da0S+j6LbA4fusWxtGfuGha+\n' +
- 'luhHgVInCpALIOamiBEdGhILkoTtx7JrYppt3/Raqg9gUNCOOYlCvGhqX7DXeEfL\n' +
- 'DGabooiY2FNWot6h04JE9nqGj5QqT8D6t/TL1nzxhRPzbcSDIHUd/b5R+a0bAA+7\n' +
- 'YTU6JqzEVCWKEIEynYmqikgLMGB/OzWsgyEL6822QW6hJAQ78XpbNeCzrICF4+GC\n' +
- '7KShLnwuWoWpAb26268lvOEvCTFM47VC6jNQl97md+2SA9Ma81C9wflid2M83Wle\n' +
- 'cuLMVcQZceE=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQAhAteLRCvizAElaWORFU2zANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMDE3MDkxNloYDzIwNjEwNTIwMTgwOTE2WjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+qg7JAcOVKjh\n' +
- 'N83SACnBFZPyB63EusfDr/0V9ZdL8lKcmZX9sv/CqoBo3N0EvBqHQqUUX6JvFb7F\n' +
- 'XrMUZ740kr28gSRALfXTFgNODjXeDsCtEkKRTkac/UM8xXHn+hR7UFRPHS3e0GzI\n' +
- 'iLiwQWDkr0Op74W8aM0CfaVKvh2bp4BI1jJbdDnQ9OKXpOxNHGUf0ZGb7TkNPkgI\n' +
- 'b2CBAc8J5o3H9lfw4uiyvl6Fz5JoP+A+zPELAioYBXDrbE7wJeqQDJrETWqR9VEK\n' +
- 'BXURCkVnHeaJy123MpAX2ozf4pqk0V0LOEOZRS29I+USF5DcWr7QIXR/w2I8ws1Q\n' +
- '7ys+qbE+kQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQFJ16n\n' +
- '1EcCMOIhoZs/F9sR+Jy++zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAOc5nXbT3XTDEZsxX2iD15YrQvmL5m13B3ImZWpx/pqmObsgx3/dg75rF2nQ\n' +
- 'qS+Vl+f/HLh516pj2BPP/yWCq12TRYigGav8UH0qdT3CAClYy2o+zAzUJHm84oiB\n' +
- 'ud+6pFVGkbqpsY+QMpJUbZWu52KViBpJMYsUEy+9cnPSFRVuRAHjYynSiLk2ZEjb\n' +
- 'Wkdc4x0nOZR5tP0FgrX0Ve2KcjFwVQJVZLgOUqmFYQ/G0TIIGTNh9tcmR7yp+xJR\n' +
- 'A2tbPV2Z6m9Yxx4E8lLEPNuoeouJ/GR4CkMEmF8cLwM310t174o3lKKUXJ4Vs2HO\n' +
- 'Wj2uN6R9oI+jGLMSswTzCNV1vgc=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICuDCCAj6gAwIBAgIRAOocLeZWjYkG/EbHmscuy8gwCgYIKoZIzj0EAwMwgZsx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMTA1MjEyMTUwMDFaGA8yMTIxMDUyMTIyNTAwMVowgZsx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABCEr3jq1KtRncnZfK5cq\n' +
- 'btY0nW6ZG3FMbh7XwBIR6Ca0f8llGZ4vJEC1pXgiM/4Dh045B9ZIzNrR54rYOIfa\n' +
- '2NcYZ7mk06DjIQML64hbAxbQzOAuNzLPx268MrlL2uW2XaNCMEAwDwYDVR0TAQH/\n' +
- 'BAUwAwEB/zAdBgNVHQ4EFgQUln75pChychwN4RfHl+tOinMrfVowDgYDVR0PAQH/\n' +
- 'BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMGiyPINRU1mwZ4Crw01vpuPvxZxb2IOr\n' +
- 'yX3RNlOIu4We1H+5dQk5tIvH8KGYFbWEpAIxAO9NZ6/j9osMhLgZ0yj0WVjb+uZx\n' +
- 'YlZR9fyFisY/jNfX7QhSk+nrc3SFLRUNtpXrng==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBTCCAu2gAwIBAgIRAKiaRZatN8eiz9p0s0lu0rQwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\n' +
- 'QW1hem9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\n' +
- 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMDIzNVoYDzIwNjEwNTIxMjMwMjM1WjCB\n' +
- 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' +
- 'bWF6b24gUkRTIGNhLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCygVMf\n' +
- 'qB865IR9qYRBRFHn4eAqGJOCFx+UbraQZmjr/mnRqSkY+nhbM7Pn/DWOrRnxoh+w\n' +
- 'q5F9ZxdZ5D5T1v6kljVwxyfFgHItyyyIL0YS7e2h7cRRscCM+75kMedAP7icb4YN\n' +
- 'LfWBqfKHbHIOqvvQK8T6+Emu/QlG2B5LvuErrop9K0KinhITekpVIO4HCN61cuOe\n' +
- 'CADBKF/5uUJHwS9pWw3uUbpGUwsLBuhJzCY/OpJlDqC8Y9aToi2Ivl5u3/Q/sKjr\n' +
- '6AZb9lx4q3J2z7tJDrm5MHYwV74elGSXoeoG8nODUqjgklIWAPrt6lQ3WJpO2kug\n' +
- '8RhCdSbWkcXHfX95AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' +
- 'FOIxhqTPkKVqKBZvMWtKewKWDvDBMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\n' +
- 'AQsFAAOCAQEAqoItII89lOl4TKvg0I1EinxafZLXIheLcdGCxpjRxlZ9QMQUN3yb\n' +
- 'y/8uFKBL0otbQgJEoGhxm4h0tp54g28M6TN1U0332dwkjYxUNwvzrMaV5Na55I2Z\n' +
- '1hq4GB3NMXW+PvdtsgVOZbEN+zOyOZ5MvJHEQVkT3YRnf6avsdntltcRzHJ16pJc\n' +
- 'Y8rR7yWwPXh1lPaPkxddrCtwayyGxNbNmRybjR48uHRhwu7v2WuAMdChL8H8bp89\n' +
- 'TQLMrMHgSbZfee9hKhO4Zebelf1/cslRSrhkG0ESq6G5MUINj6lMg2g6F0F7Xz2v\n' +
- 'ncD/vuRN5P+vT8th/oZ0Q2Gc68Pun0cn/g==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/zCCAuegAwIBAgIRAJYlnmkGRj4ju/2jBQsnXJYwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMTIzMDQ0NFoYDzIwNjEwNTIyMDAwNDQ0WjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC74V3eigv+pCj5\n' +
- 'nqDBqplY0Jp16pTeNB06IKbzb4MOTvNde6QjsZxrE1xUmprT8LxQqN9tI3aDYEYk\n' +
- 'b9v4F99WtQVgCv3Y34tYKX9NwWQgwS1vQwnIR8zOFBYqsAsHEkeJuSqAB12AYUSd\n' +
- 'Zv2RVFjiFmYJho2X30IrSLQfS/IE3KV7fCyMMm154+/K1Z2IJlcissydEAwgsUHw\n' +
- 'edrE6CxJVkkJ3EvIgG4ugK/suxd8eEMztaQYJwSdN8TdfT59LFuSPl7zmF3fIBdJ\n' +
- '//WexcQmGabaJ7Xnx+6o2HTfkP8Zzzzaq8fvjAcvA7gyFH5EP26G2ZqMG+0y4pTx\n' +
- 'SPVTrQEXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIWWuNEF\n' +
- 'sUMOC82XlfJeqazzrkPDMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' +
- 'AQEAgClmxcJaQTGpEZmjElL8G2Zc8lGc+ylGjiNlSIw8X25/bcLRptbDA90nuP+q\n' +
- 'zXAMhEf0ccbdpwxG/P5a8JipmHgqQLHfpkvaXx+0CuP++3k+chAJ3Gk5XtY587jX\n' +
- '+MJfrPgjFt7vmMaKmynndf+NaIJAYczjhJj6xjPWmGrjM3MlTa9XesmelMwP3jep\n' +
- 'bApIWAvCYVjGndbK9byyMq1nyj0TUzB8oJZQooaR3MMjHTmADuVBylWzkRMxbKPl\n' +
- '4Nlsk4Ef1JvIWBCzsMt+X17nuKfEatRfp3c9tbpGlAE/DSP0W2/Lnayxr4RpE9ds\n' +
- 'ICF35uSis/7ZlsftODUe8wtpkQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'Pqj2\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGATCCA+mgAwIBAgIRAI/U4z6+GF8/znpHM8Dq8G0wDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMjA2MDYyMTQ4MThaGA8yMTIyMDYwNjIyNDgxOFowgZgx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' +
- 'em9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\n' +
- 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK5WqMvyq888\n' +
- '3uuOtEj1FcP6iZhqO5kJurdJF59Otp2WCg+zv6I+QwaAspEWHQsKD405XfFsTGKV\n' +
- 'SKTCwoMxwBniuChSmyhlagQGKSnRY9+znOWq0v7hgmJRwp6FqclTbubmr+K6lzPy\n' +
- 'hs86mEp68O5TcOTYWUlPZDqfKwfNTbtCl5YDRr8Gxb5buHmkp6gUSgDkRsXiZ5VV\n' +
- 'b3GBmXRqbnwo5ZRNAzQeM6ylXCn4jKs310lQGUrFbrJqlyxUdfxzqdlaIRn2X+HY\n' +
- 'xRSYbHox3LVNPpJxYSBRvpQVFSy9xbX8d1v6OM8+xluB31cbLBtm08KqPFuqx+cO\n' +
- 'I2H5F0CYqYzhyOSKJsiOEJT6/uH4ewryskZzncx9ae62SC+bB5n3aJLmOSTkKLFY\n' +
- 'YS5IsmDT2m3iMgzsJNUKVoCx2zihAzgBanFFBsG+Xmoq0aKseZUI6vd2qpd5tUST\n' +
- '/wS1sNk0Ph7teWB2ACgbFE6etnJ6stwjHFZOj/iTYhlnR2zDRU8akunFdGb6CB4/\n' +
- 'hMxGJxaqXSJeGtHm7FpadlUTf+2ESbYcVW+ui/F8sdBJseQdKZf3VdZZMgM0bcaX\n' +
- 'NE47cauDTy72WdU9YJX/YXKYMLDE0iFHTnGpfVGsuWGPYhlwZ3dFIO07mWnCRM6X\n' +
- 'u5JXRB1oy5n5HRluMsmpSN/R92MeBxKFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' +
- 'Af8wHQYDVR0OBBYEFNtH0F0xfijSLHEyIkRGD9gW6NazMA4GA1UdDwEB/wQEAwIB\n' +
- 'hjANBgkqhkiG9w0BAQwFAAOCAgEACo+5jFeY3ygxoDDzL3xpfe5M0U1WxdKk+az4\n' +
- '/OfjZvkoma7WfChi3IIMtwtKLYC2/seKWA4KjlB3rlTsCVNPnK6D+gAnybcfTKk/\n' +
- 'IRSPk92zagwQkSUWtAk80HpVfWJzpkSU16ejiajhedzOBRtg6BwsbSqLCDXb8hXr\n' +
- 'eXWC1S9ZceGc+LcKRHewGWPu31JDhHE9bNcl9BFSAS0lYVZqxIRWxivZ+45j5uQv\n' +
- 'wPrC8ggqsdU3K8quV6dblUQzzA8gKbXJpCzXZihkPrYpQHTH0szvXvgebh+CNUAG\n' +
- 'rUxm8+yTS0NFI3U+RLbcLFVzSvjMOnEwCX0SPj5XZRYYXs5ajtQCoZhTUkkwpDV8\n' +
- 'RxXk8qGKiXwUxDO8GRvmvM82IOiXz5w2jy/h7b7soyIgdYiUydMq4Ja4ogB/xPZa\n' +
- 'gf4y0o+bremO15HFf1MkaU2UxPK5FFVUds05pKvpSIaQWbF5lw4LHHj4ZtVup7zF\n' +
- 'CLjPWs4Hs/oUkxLMqQDw0FBwlqa4uot8ItT8uq5BFpz196ZZ+4WXw5PVzfSxZibI\n' +
- 'C/nwcj0AS6qharXOs8yPnPFLPSZ7BbmWzFDgo3tpglRqo3LbSPsiZR+sLeivqydr\n' +
- '0w4RK1btRda5Ws88uZMmW7+2aufposMKcbAdrApDEAVzHijbB/nolS5nsnFPHZoA\n' +
- 'KDPtFEk=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtzCCAj2gAwIBAgIQVZ5Y/KqjR4XLou8MCD5pOjAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIyMDUyNTE2NTgzM1oYDzIxMjIwNTI1MTc1ODMzWjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbo473OmpD5vkckdJajXg\n' +
- 'brhmNFyoSa0WCY1njuZC2zMFp3zP6rX4I1r3imrYnJd9pFH/aSiV/r6L5ACE5RPx\n' +
- '4qdg5SQ7JJUaZc3DWsTOiOed7BCZSzM+KTYK/2QzDMApo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBTmogc06+1knsej1ltKUOdWFvwgsjAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAIs7TlLMbGTWNXpGiKf9DxaM07d/iDHe\n' +
- 'F/Vv/wyWSTGdobxBL6iArQNVXz0Gr4dvPAIwd0rsoa6R0x5mtvhdRPtM37FYrbHJ\n' +
- 'pbV+OMusQqcSLseunLBoCHenvJW0QOCQ8EDY\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICvTCCAkOgAwIBAgIQCIY7E/bFvFN2lK9Kckb0dTAKBggqhkjOPQQDAzCBnjEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5BbWF6\n' +
- 'b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYD\n' +
- 'VQQHDAdTZWF0dGxlMCAXDTIxMDUxODIxMDUxMFoYDzIxMjEwNTE4MjIwNTEwWjCB\n' +
- 'njELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5B\n' +
- 'bWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMI0hzf1JCEOI\n' +
- 'Eue4+DmcNnSs2i2UaJxHMrNGGfU7b42a7vwP53F7045ffHPBGP4jb9q02/bStZzd\n' +
- 'VHqfcgqkSRI7beBKjD2mfz82hF/wJSITTgCLs+NRpS6zKMFOFHUNo0IwQDAPBgNV\n' +
- 'HRMBAf8EBTADAQH/MB0GA1UdDgQWBBS8uF/6hk5mPLH4qaWv9NVZaMmyTjAOBgNV\n' +
- 'HQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAO7Pu9wzLyM0X7Q08uLIL+vL\n' +
- 'qaxe3UFuzFTWjM16MLJHbzLf1i9IDFKz+Q4hXCSiJwIwClMBsqT49BPUxVsJnjGr\n' +
- 'EbyEk6aOOVfY1p2yQL649zh3M4h8okLnwf+bYIb1YpeU\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQY+JhwFEQTe36qyRlUlF8ozANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUxOTE5MjQxNloYDzIwNjEwNTE5MjAyNDE2WjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIye77j6ev40\n' +
- '8wRPyN2OdKFSUfI9jB20Or2RLO+RDoL43+USXdrze0Wv4HMRLqaen9BcmCfaKMp0\n' +
- 'E4SFo47bXK/O17r6G8eyq1sqnHE+v288mWtYH9lAlSamNFRF6YwA7zncmE/iKL8J\n' +
- '0vePHMHP/B6svw8LULZCk+nZk3tgxQn2+r0B4FOz+RmpkoVddfqqUPMbKUxhM2wf\n' +
- 'fO7F6bJaUXDNMBPhCn/3ayKCjYr49ErmnpYV2ZVs1i34S+LFq39J7kyv6zAgbHv9\n' +
- '+/MtRMoRB1CjpqW0jIOZkHBdYcd1o9p1zFn591Do1wPkmMsWdjIYj+6e7UXcHvOB\n' +
- '2+ScIRAcnwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGtq2W\n' +
- 'YSyMMxpdQ3IZvcGE+nyZqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAEgoP3ixJsKSD5FN8dQ01RNHERl/IFbA7TRXfwC+L1yFocKnQh4Mp/msPRSV\n' +
- '+OeHIvemPW/wtZDJzLTOFJ6eTolGekHK1GRTQ6ZqsWiU2fmiOP8ks4oSpI+tQ9Lw\n' +
- 'VrfZqTiEcS5wEIqyfUAZZfKDo7W1xp+dQWzfczSBuZJZwI5iaha7+ILM0r8Ckden\n' +
- 'TVTapc5pLSoO15v0ziRuQ2bT3V3nwu/U0MRK44z+VWOJdSiKxdnOYDs8hFNnKhfe\n' +
- 'klbTZF7kW7WbiNYB43OaAQBJ6BALZsIskEaqfeZT8FD71uN928TcEQyBDXdZpRN+\n' +
- 'iGQZDGhht0r0URGMDSs9waJtTfA=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIF/jCCA+agAwIBAgIQXY/dmS+72lZPranO2JM9jjANBgkqhkiG9w0BAQwFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTI1MjEzNDUxWhgPMjEyMTA1MjUyMjM0NTFaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgYXAtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMyW9kBJjD/hx8e8\n' +
- 'b5E1sF42bp8TXsz1htSYE3Tl3T1Aq379DfEhB+xa/ASDZxt7/vwa81BkNo4M6HYq\n' +
- 'okYIXeE7cu5SnSgjWXqcERhgPevtAwgmhdE3yREe8oz2DyOi2qKKZqah+1gpPaIQ\n' +
- 'fK0uAqoeQlyHosye3KZZKkDHBatjBsQ5kf8lhuf7wVulEZVRHY2bP2X7N98PfbpL\n' +
- 'QdH7mWXzDtJJ0LiwFwds47BrkgK1pkHx2p1mTo+HMkfX0P6Fq1atkVC2RHHtbB/X\n' +
- 'iYyH7paaHBzviFrhr679zNqwXIOKlbf74w3mS11P76rFn9rS1BAH2Qm6eY5S/Fxe\n' +
- 'HEKXm4kjPN63Zy0p3yE5EjPt54yPkvumOnT+RqDGJ2HCI9k8Ehcbve0ogfdRKNqQ\n' +
- 'VHWYTy8V33ndQRHZlx/CuU1yN61TH4WSoMly1+q1ihTX9sApmlQ14B2pJi/9DnKW\n' +
- 'cwECrPy1jAowC2UJ45RtC8UC05CbP9yrIy/7Noj8gQDiDOepm+6w1g6aNlWoiuQS\n' +
- 'kyI6nzz1983GcnOHya73ga7otXo0Qfg9jPghlYiMomrgshlSLDHZG0Ib/3hb8cnR\n' +
- '1OcN9FpzNmVK2Ll1SmTMLrIhuCkyNYX9O/bOknbcf706XeESxGduSkHEjIw/k1+2\n' +
- 'Atteoq5dT6cwjnJ9hyhiueVlVkiDAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' +
- 'HQYDVR0OBBYEFLUI+DD7RJs+0nRnjcwIVWzzYSsFMA4GA1UdDwEB/wQEAwIBhjAN\n' +
- 'BgkqhkiG9w0BAQwFAAOCAgEAb1mcCHv4qMQetLGTBH9IxsB2YUUhr5dda0D2BcHr\n' +
- 'UtDbfd0VQs4tux6h/6iKwHPx0Ew8fuuYj99WknG0ffgJfNc5/fMspxR/pc1jpdyU\n' +
- '5zMQ+B9wi0lOZPO9uH7/pr+d2odcNEy8zAwqdv/ihsTwLmGP54is9fVbsgzNW1cm\n' +
- 'HKAVL2t/Ope+3QnRiRilKCN1lzhav4HHdLlN401TcWRWKbEuxF/FgxSO2Hmx86pj\n' +
- 'e726lweCTMmnq/cTsPOVY0WMjs0or3eHDVlyLgVeV5ldyN+ptg3Oit60T05SRa58\n' +
- 'AJPTaVKIcGQ/gKkKZConpu7GDofT67P/ox0YNY57LRbhsx9r5UY4ROgz7WMQ1yoS\n' +
- 'Y+19xizm+mBm2PyjMUbfwZUyCxsdKMwVdOq5/UmTmdms+TR8+m1uBHPOTQ2vKR0s\n' +
- 'Pd/THSzPuu+d3dbzRyDSLQbHFFneG760CUlD/ZmzFlQjJ89/HmAmz8IyENq+Sjhx\n' +
- 'Jgzy+FjVZb8aRUoYLlnffpUpej1n87Ynlr1GrvC4GsRpNpOHlwuf6WD4W0qUTsC/\n' +
- 'C9JO+fBzUj/aWlJzNcLEW6pte1SB+EdkR2sZvWH+F88TxemeDrV0jKJw5R89CDf8\n' +
- 'ZQNfkxJYjhns+YeV0moYjqQdc7tq4i04uggEQEtVzEhRLU5PE83nlh/K2NZZm8Kj\n' +
- 'dIA=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/zCCAuegAwIBAgIRAPVSMfFitmM5PhmbaOFoGfUwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMzQ1N1oYDzIwNjEwNTI1MjMzNDU3WjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDu9H7TBeGoDzMr\n' +
- 'dxN6H8COntJX4IR6dbyhnj5qMD4xl/IWvp50lt0VpmMd+z2PNZzx8RazeGC5IniV\n' +
- '5nrLg0AKWRQ2A/lGGXbUrGXCSe09brMQCxWBSIYe1WZZ1iU1IJ/6Bp4D2YEHpXrW\n' +
- 'bPkOq5x3YPcsoitgm1Xh8ygz6vb7PsvJvPbvRMnkDg5IqEThapPjmKb8ZJWyEFEE\n' +
- 'QRrkCIRueB1EqQtJw0fvP4PKDlCJAKBEs/y049FoOqYpT3pRy0WKqPhWve+hScMd\n' +
- '6obq8kxTFy1IHACjHc51nrGII5Bt76/MpTWhnJIJrCnq1/Uc3Qs8IVeb+sLaFC8K\n' +
- 'DI69Sw6bAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE7PCopt\n' +
- 'lyOgtXX0Y1lObBUxuKaCMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' +
- 'AQEAFj+bX8gLmMNefr5jRJfHjrL3iuZCjf7YEZgn89pS4z8408mjj9z6Q5D1H7yS\n' +
- 'jNETVV8QaJip1qyhh5gRzRaArgGAYvi2/r0zPsy+Tgf7v1KGL5Lh8NT8iCEGGXwF\n' +
- 'g3Ir+Nl3e+9XUp0eyyzBIjHtjLBm6yy8rGk9p6OtFDQnKF5OxwbAgip42CD75r/q\n' +
- 'p421maEDDvvRFR4D+99JZxgAYDBGqRRceUoe16qDzbMvlz0A9paCZFclxeftAxv6\n' +
- 'QlR5rItMz/XdzpBJUpYhdzM0gCzAzdQuVO5tjJxmXhkSMcDP+8Q+Uv6FA9k2VpUV\n' +
- 'E/O5jgpqUJJ2Hc/5rs9VkAPXeA==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrzCCAjWgAwIBAgIQW0yuFCle3uj4vWiGU0SaGzAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTE5MTkzNTE2WhgPMjEyMTA1MTkyMDM1MTZaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgYWYtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDPiKNZSaXs3Un/J/v+LTsFDANHpi7en\n' +
- 'oL2qh0u0DoqNzEBTbBjvO23bLN3k599zh6CY3HKW0r2k1yaIdbWqt4upMCRCcUFi\n' +
- 'I4iedAmubgzh56wJdoMZztjXZRwDthTkJKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUWbYkcrvVSnAWPR5PJhIzppcAnZIwDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2gAMGUCMCESGqpat93CjrSEjE7z+Hbvz0psZTHwqaxuiH64GKUm\n' +
- 'mYynIiwpKHyBrzjKBmeDoQIxANGrjIo6/b8Jl6sdIZQI18V0pAyLfLiZjlHVOnhM\n' +
- 'MOTVgr82ZuPoEHTX78MxeMnYlw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRAIbsx8XOl0sgTNiCN4O+18QwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1NDU4WhgPMjA2MTA1MjUyMjU0NTha\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- 'tROxwXWCgn5R9gI/2Ivjzaxc0g95ysBjoJsnhPdJEHQb7w3y2kWrVWU3Y9fOitgb\n' +
- 'CEsnEC3PrhRnzNVW0fPsK6kbvOeCmjvY30rdbxbc8h+bjXfGmIOgAkmoULEr6Hc7\n' +
- 'G1Q/+tvv4lEwIs7bEaf+abSZxRJbZ0MBxhbHn7UHHDiMZYvzK+SV1MGCxx7JVhrm\n' +
- 'xWu3GC1zZCsGDhB9YqY9eR6PmjbqA5wy8vqbC57dZZa1QVtWIQn3JaRXn+faIzHx\n' +
- 'nLMN5CEWihsdmHBXhnRboXprE/OS4MFv1UrQF/XM/h5RBeCywpHePpC+Oe1T3LNC\n' +
- 'iP8KzRFrjC1MX/WXJnmOVQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBS33XbXAUMs1znyZo4B0+B3D68WFTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBADuadd2EmlpueY2VlrIIPC30QkoA1EOSoCmZgN6124apkoY1\n' +
- 'HiV4r+QNPljN4WP8gmcARnNkS7ZeR4fvWi8xPh5AxQCpiaBMw4gcbTMCuKDV68Pw\n' +
- 'P2dZCTMspvR3CDfM35oXCufdtFnxyU6PAyINUqF/wyTHguO3owRFPz64+sk3r2pT\n' +
- 'WHmJjG9E7V+KOh0s6REgD17Gqn6C5ijLchSrPUHB0wOIkeLJZndHxN/76h7+zhMt\n' +
- 'fFeNxPWHY2MfpcaLjz4UREzZPSB2U9k+y3pW1omCIcl6MQU9itGx/LpQE+H3ZeX2\n' +
- 'M2bdYd5L+ow+bdbGtsVKOuN+R9Dm17YpswF+vyQ=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'Em4Hy3A=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'jGKc3k6UNxpg\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- '0Ws=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtDCCAjqgAwIBAgIRAMyaTlVLN0ndGp4ffwKAfoMwCgYIKoZIzj0EAwMwgZkx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' +
- 'em9uIFJEUyBtZS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjIwNTA3MDA0NDM3WhgPMjEyMjA1MDcwMTQ0MzdaMIGZMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' +
- 'biBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE19nCV1nsI6CohSor13+B25cr\n' +
- 'zg+IHdi9Y3L7ziQnHWI6yjBazvnKD+oC71aRRlR8b5YXsYGUQxWzPLHN7EGPcSGv\n' +
- 'bzA9SLG1KQYCJaQ0m9Eg/iGrwKWOgylbhVw0bCxoo0IwQDAPBgNVHRMBAf8EBTAD\n' +
- 'AQH/MB0GA1UdDgQWBBS4KsknsJXM9+QPEkBdZxUPaLr11zAOBgNVHQ8BAf8EBAMC\n' +
- 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJaRgrYIEfXQMZQQDxMTYS0azpyWSseQooXo\n' +
- 'L3nYq4OHGBgYyQ9gVjvRYWU85PXbfgIwdi82DtANQFkCu+j+BU0JBY/uRKPEeYzo\n' +
- 'JG92igKIcXPqCoxIJ7lJbbzmuf73gQu5\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'Tspdjbg=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIECTCCAvGgAwIBAgIRAJZFh4s9aZGzKaTMLrSb4acwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjEyODQxWhgPMjA2MTA1MTgyMjI4NDFa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgQmV0YSB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' +
- '17i2yoU6diep+WrqxIn2CrDEO2NdJVwWTSckx4WMZlLpkQDoymSmkNHjq9ADIApD\n' +
- 'A31Cx+843apL7wub8QkFZD0Tk7/ThdHWJOzcAM3ov98QBPQfOC1W5zYIIRP2F+vQ\n' +
- 'TRETHQnLcW3rLv0NMk5oQvIKpJoC9ett6aeVrzu+4cU4DZVWYlJUoC/ljWzCluau\n' +
- '8blfW0Vwin6OB7s0HCG5/wijQWJBU5SrP/KAIPeQi1GqG5efbqAXDr/ple0Ipwyo\n' +
- 'Xjjl73LenGUgqpANlC9EAT4i7FkJcllLPeK3NcOHjuUG0AccLv1lGsHAxZLgjk/x\n' +
- 'z9ZcnVV9UFWZiyJTKxeKPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' +
- 'DgQWBBRWyMuZUo4gxCR3Luf9/bd2AqZ7CjAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' +
- 'hvcNAQELBQADggEBAIqN2DlIKlvDFPO0QUZQVFbsi/tLdYM98/vvzBpttlTGVMyD\n' +
- 'gJuQeHVz+MnhGIwoCGOlGU3OOUoIlLAut0+WG74qYczn43oA2gbMd7HoD7oL/IGg\n' +
- 'njorBwJVcuuLv2G//SqM3nxGcLRtkRnQ+lvqPxMz9+0fKFUn6QcIDuF0QSfthLs2\n' +
- 'WSiGEPKO9c9RSXdRQ4pXA7c3hXng8P4A2ZmdciPne5Nu4I4qLDGZYRrRLRkNTrOi\n' +
- 'TyS6r2HNGUfgF7eOSeKt3NWL+mNChcYj71/Vycf5edeczpUgfnWy9WbPrK1svKyl\n' +
- 'aAs2xg+X6O8qB+Mnj2dNBzm+lZIS3sIlm+nO9sg=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAPAlEk8VJPmEzVRRaWvTh2AwCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTI1MjI0MTU1WhgPMjEyMTA1MjUyMzQxNTVaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEx5xjrup8II4HOJw15NTnS3H5yMrQGlbj\n' +
- 'EDA5MMGnE9DmHp5dACIxmPXPMe/99nO7wNdl7G71OYPCgEvWm0FhdvVUeTb3LVnV\n' +
- 'BnaXt32Ek7/oxGk1T+Df03C+W0vmuJ+wo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBTGXmqBWN/1tkSea4pNw0oHrjk2UDAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIxAIqqZWCSrIkZ7zsv/FygtAusW6yvlL935YAWYPVXU30m\n' +
- 'jkMFLM+/RJ9GMvnO8jHfCgIwB+whlkcItzE9CRQ6CsMo/d5cEHDUu/QW6jSIh9BR\n' +
- 'OGh9pTYPVkUbBiKPA7lVVhre\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'nWS0\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCTCCA/GgAwIBAgIRAOY7gfcBZgR2tqfBzMbFQCUwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY1NDU5WhgPMjEyMjA1MjUxNzU0NTla\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
- 'lfxER43FuLRdL08bddF0YhbCP+XXKj1A/TFMXmd2My8XDei8rPXFYyyjMig9+xZw\n' +
- 'uAsIxLwz8uiA26CKA8bCZKg5VG2kTeOJAfvBJaLv1CZefs3Z4Uf1Sjvm6MF2yqEj\n' +
- 'GoORfyfL9HiZFTDuF/hcjWoKYCfMuG6M/wO8IbdICrX3n+BiYQJu/pFO660Mg3h/\n' +
- '8YBBWYDbHoCiH/vkqqJugQ5BM3OI5nsElW51P1icEEqti4AZ7JmtSv9t7fIFBVyR\n' +
- 'oaEyOgpp0sm193F/cDJQdssvjoOnaubsSYm1ep3awZAUyGN/X8MBrPY95d0hLhfH\n' +
- 'Ehc5Icyg+hsosBljlAyksmt4hFQ9iBnWIz/ZTfGMck+6p3HVL9RDgvluez+rWv59\n' +
- '8q7omUGsiPApy5PDdwI/Wt/KtC34/2sjslIJfvgifdAtkRPkhff1WEwER00ADrN9\n' +
- 'eGGInaCpJfb1Rq8cV2n00jxg7DcEd65VR3dmIRb0bL+jWK62ni/WdEyomAOMfmGj\n' +
- 'aWf78S/4rasHllWJ+QwnaUYY3u6N8Cgio0/ep4i34FxMXqMV3V0/qXdfhyabi/LM\n' +
- 'wCxNo1Dwt+s6OtPJbwO92JL+829QAxydfmaMTeHBsgMPkG7RwAekeuatKGHNsc2Z\n' +
- 'x2Q4C2wVvOGAhcHwxfM8JfZs3nDSZJndtVVnFlUY0UECAwEAAaNCMEAwDwYDVR0T\n' +
- 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUpnG7mWazy6k97/tb5iduRB3RXgQwDgYDVR0P\n' +
- 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCDLqq1Wwa9Tkuv7vxBnIeVvvFF\n' +
- 'ecTn+P+wJxl9Qa2ortzqTHZsBDyJO62d04AgBwiDXkJ9a+bthgG0H1J7Xee8xqv1\n' +
- 'xyX2yKj24ygHjspLotKP4eDMdDi5TYq+gdkbPmm9Q69B1+W6e049JVGXvWG8/7kU\n' +
- 'igxeuCYwtCCdUPRLf6D8y+1XMGgVv3/DSOHWvTg3MJ1wJ3n3+eve3rjGdRYWZeJu\n' +
- 'k21HLSZYzVrCtUsh2YAeLnUbSxVuT2Xr4JehYe9zW5HEQ8Je/OUfnCy9vzoN/ITw\n' +
- 'osAH+EBJQey7RxEDqMwCaRefH0yeHFcnOll0OXg/urnQmwbEYzQ1uutJaBPsjU0J\n' +
- 'Qf06sMxI7GiB5nPE+CnI2sM6A9AW9kvwexGXpNJiLxF8dvPQthpOKGcYu6BFvRmt\n' +
- '6ctfXd9b7JJoVqMWuf5cCY6ihpk1e9JTlAqu4Eb/7JNyGiGCR40iSLvV28un9wiE\n' +
- 'plrdYxwcNYq851BEu3r3AyYWw/UW1AKJ5tM+/Gtok+AphMC9ywT66o/Kfu44mOWm\n' +
- 'L3nSLSWEcgfUVgrikpnyGbUnGtgCmHiMlUtNVexcE7OtCIZoVAlCGKNu7tyuJf10\n' +
- 'Qlk8oIIzfSIlcbHpOYoN79FkLoDNc2er4Gd+7w1oPQmdAB0jBJnA6t0OUBPKdDdE\n' +
- 'Ufff2jrbfbzECn1ELg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCDCCA/CgAwIBAgIQIuO1A8LOnmc7zZ/vMm3TrDANBgkqhkiG9w0BAQwFADCB\n' +
- 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' +
- 'bWF6b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4G\n' +
- 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MjQyMDQ2MThaGA8yMTIxMDUyNDIxNDYxOFow\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDq\n' +
- 'qRHKbG8ZK6/GkGm2cenznEF06yHwI1gD5sdsHjTgekDZ2Dl9RwtDmUH2zFuIQwGj\n' +
- 'SeC7E2iKwrJRA5wYzL9/Vk8NOILEKQOP8OIKUHbc7q8rEtjs401KcU6pFBBEdO9G\n' +
- 'CTiRhogq+8mhC13AM/UriZJbKhwgM2UaDOzAneGMhQAGjH8z83NsNcPxpYVE7tqM\n' +
- 'sch5yLtIJLkJRusrmQQTeHUev16YNqyUa+LuFclFL0FzFCimkcxUhXlbfEKXbssS\n' +
- 'yPzjiv8wokGyo7+gA0SueceMO2UjfGfute3HlXZDcNvBbkSY+ver41jPydyRD6Qq\n' +
- 'oEkh0tyIbPoa3oU74kwipJtz6KBEA3u3iq61OUR0ENhR2NeP7CSKrC24SnQJZ/92\n' +
- 'qxusrbyV/0w+U4m62ug/o4hWNK1lUcc2AqiBOvCSJ7qpdteTFxcEIzDwYfERDx6a\n' +
- 'd9+3IPvzMb0ZCxBIIUFMxLTF7yAxI9s6KZBBXSZ6tDcCCYIgEysEPRWMRAcG+ye/\n' +
- 'fZVn9Vnzsj4/2wchC2eQrYpb1QvG4eMXA4M5tFHKi+/8cOPiUzJRgwS222J8YuDj\n' +
- 'yEBval874OzXk8H8Mj0JXJ/jH66WuxcBbh5K7Rp5oJn7yju9yqX6qubY8gVeMZ1i\n' +
- 'u4oXCopefDqa35JplQNUXbWwSebi0qJ4EK0V8F9Q+QIDAQABo0IwQDAPBgNVHRMB\n' +
- 'Af8EBTADAQH/MB0GA1UdDgQWBBT4ysqCxaPe7y+g1KUIAenqu8PAgzAOBgNVHQ8B\n' +
- 'Af8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBALU8WN35KAjPZEX65tobtCDQFkIO\n' +
- 'uJjv0alD7qLB0i9eY80C+kD87HKqdMDJv50a5fZdqOta8BrHutgFtDm+xo5F/1M3\n' +
- 'u5/Vva5lV4xy5DqPajcF4Mw52czYBmeiLRTnyPJsU93EQIC2Bp4Egvb6LI4cMOgm\n' +
- '4pY2hL8DojOC5PXt4B1/7c1DNcJX3CMzHDm4SMwiv2MAxSuC/cbHXcWMk+qXdrVx\n' +
- '+ayLUSh8acaAOy3KLs1MVExJ6j9iFIGsDVsO4vr4ZNsYQiyHjp+L8ops6YVBO5AT\n' +
- 'k/pI+axHIVsO5qiD4cFWvkGqmZ0gsVtgGUchZaacboyFsVmo6QPrl28l6LwxkIEv\n' +
- 'GGJYvIBW8sfqtGRspjfX5TlNy5IgW/VOwGBdHHsvg/xpRo31PR3HOFw7uPBi7cAr\n' +
- 'FiZRLJut7af98EB2UvovZnOh7uIEGPeecQWeOTQfJeWet2FqTzFYd0NUMgqPuJx1\n' +
- 'vLKferP+ajAZLJvVnW1J7Vccx/pm0rMiUJEf0LRb/6XFxx7T2RGjJTi0EzXODTYI\n' +
- 'gnLfBBjnolQqw+emf4pJ4pAtly0Gq1KoxTG2QN+wTd4lsCMjnelklFDjejwnl7Uy\n' +
- 'vtxzRBAu/hi/AqDkDFf94m6j+edIrjbi9/JDFtQ9EDlyeqPgw0qwi2fwtJyMD45V\n' +
- 'fejbXelUSJSzDIdY\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGCTCCA/GgAwIBAgIRAN7Y9G9i4I+ZaslPobE7VL4wDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' +
- 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAO\n' +
- 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYzMzIzWhgPMjEyMTA1MjAxNzMzMjNa\n' +
- 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' +
- 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' +
- 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' +
- 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' +
- '4BEPCiIfiK66Q/qa8k+eqf1Q3qsa6Xuu/fPkpuStXVBShhtXd3eqrM0iT4Xxs420\n' +
- 'Va0vSB3oZ7l86P9zYfa60n6PzRxdYFckYX330aI7L/oFIdaodB/C9szvROI0oLG+\n' +
- '6RwmIF2zcprH0cTby8MiM7G3v9ykpq27g4WhDC1if2j8giOQL3oHpUaByekZNIHF\n' +
- 'dIllsI3RkXmR3xmmxoOxJM1B9MZi7e1CvuVtTGOnSGpNCQiqofehTGwxCN2wFSK8\n' +
- 'xysaWlw48G0VzZs7cbxoXMH9QbMpb4tpk0d+T8JfAPu6uWO9UwCLWWydf0CkmA/+\n' +
- 'D50/xd1t33X9P4FEaPSg5lYbHXzSLWn7oLbrN2UqMLaQrkoEBg/VGvzmfN0mbflw\n' +
- '+T87bJ/VEOVNlG+gepyCTf89qIQVWOjuYMox4sK0PjzZGsYEuYiq1+OUT3vk/e5K\n' +
- 'ag1fCcq2Isy4/iwB2xcXrsQ6ljwdk1fc+EmOnjGKrhuOHJY3S+RFv4ToQBsVyYhC\n' +
- 'XGaC3EkqIX0xaCpDimxYhFjWhpDXAjG/zJ+hRLDAMCMhl/LPGRk/D1kzSbPmdjpl\n' +
- 'lEMK5695PeBvEBTQdBQdOiYgOU3vWU6tzwwHfiM2/wgvess/q0FDAHfJhppbgbb9\n' +
- '3vgsIUcsvoC5o29JvMsUxsDRvsAfEmMSDGkJoA/X6GECAwEAAaNCMEAwDwYDVR0T\n' +
- 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgEWm1mZCbGD6ytbwk2UU1aLaOUUwDgYDVR0P\n' +
- 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBb4+ABTGBGwxK1U/q4g8JDqTQM\n' +
- '1Wh8Oz8yAk4XtPJMAmCctxbd81cRnSnePWw/hxViLVtkZ/GsemvXfqAQyOn1coN7\n' +
- 'QeYSw+ZOlu0j2jEJVynmgsR7nIRqE7QkCyZAU+d2FTJUfmee+IiBiGyFGgxz9n7A\n' +
- 'JhBZ/eahBbiuoOik/APW2JWLh0xp0W0GznfJ8lAlaQTyDa8iDXmVtbJg9P9qzkvl\n' +
- 'FgPXQttzEOyooF8Pb2LCZO4kUz+1sbU7tHdr2YE+SXxt6D3SBv+Yf0FlvyWLiqVk\n' +
- 'GDEOlPPTDSjAWgKnqST8UJ0RDcZK/v1ixs7ayqQJU0GUQm1I7LGTErWXHMnCuHKe\n' +
- 'UKYuiSZwmTcJ06NgdhcCnGZgPq13ryMDqxPeltQc3n5eO7f1cL9ERYLDLOzm6A9P\n' +
- 'oQ3MfcVOsbHgGHZWaPSeNrQRN9xefqBXH0ZPasgcH9WJdsLlEjVUXoultaHOKx3b\n' +
- 'UCCb+d3EfqF6pRT488ippOL6bk7zNubwhRa/+y4wjZtwe3kAX78ACJVcjPobH9jZ\n' +
- 'ErySads5zdQeaoee5wRKdp3TOfvuCe4bwLRdhOLCHWzEcXzY3g/6+ppLvNom8o+h\n' +
- 'Bh5X26G6KSfr9tqhQ3O9IcbARjnuPbvtJnoPY0gz3EHHGPhy0RNW8i2gl3nUp0ah\n' +
- 'PtjwbKW0hYAhIttT0Q==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtzCCAj2gAwIBAgIQQRBQTs6Y3H1DDbpHGta3lzAKBggqhkjOPQQDAzCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDYxMTAwMTI0M1oYDzIxMjEwNjExMDExMjQzWjCBmzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' +
- 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs0942Xj4m/gKA+WA6F5h\n' +
- 'AHYuek9eGpzTRoLJddM4rEV1T3eSueytMVKOSlS3Ub9IhyQrH2D8EHsLYk9ktnGR\n' +
- 'pATk0kCYTqFbB7onNo070lmMJmGT/Q7NgwC8cySChFxbo0IwQDAPBgNVHRMBAf8E\n' +
- 'BTADAQH/MB0GA1UdDgQWBBQ20iKBKiNkcbIZRu0y1uoF1yJTEzAOBgNVHQ8BAf8E\n' +
- 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIwYv0wTSrpQTaPaarfLN8Xcqrqu3hzl07n\n' +
- 'FrESIoRw6Cx77ZscFi2/MV6AFyjCV/TlAjEAhpwJ3tpzPXpThRML8DMJYZ3YgMh3\n' +
- 'CMuLqhPpla3cL0PhybrD27hJWl29C4el6aMO\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrDCCAjOgAwIBAgIQGcztRyV40pyMKbNeSN+vXTAKBggqhkjOPQQDAzCBljEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' +
- 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTAgFw0yMTA1MjEyMzE1NTZaGA8yMTIxMDUyMjAwMTU1NlowgZYxCzAJBgNV\n' +
- 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' +
- 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' +
- 'UyB1cy1lYXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' +
- 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfDcv+GGRESD9wT+I5YIPRsD3L+/jsiIis\n' +
- 'Tr7t9RSbFl+gYpO7ZbDXvNbV5UGOC5lMJo/SnqFRTC6vL06NF7qOHfig3XO8QnQz\n' +
- '6T5uhhrhnX2RSY3/10d2kTyHq3ZZg3+jQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' +
- 'VR0OBBYEFLDyD3PRyNXpvKHPYYxjHXWOgfPnMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' +
- 'hkjOPQQDAwNnADBkAjB20HQp6YL7CqYD82KaLGzgw305aUKw2aMrdkBR29J183jY\n' +
- '6Ocj9+Wcif9xnRMS+7oCMAvrt03rbh4SU9BohpRUcQ2Pjkh7RoY0jDR4Xq4qzjNr\n' +
- '5UFr3BXpFvACxXF51BksGQ==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjWgAwIBAgIQeKbS5zvtqDvRtwr5H48cAjAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTIwMTcxOTU1WhgPMjEyMTA1MjAxODE5NTVaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgbWUtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABEKjgUaAPmUlRMEQdBC7BScAGosJ1zRV\n' +
- 'LDd38qTBjzgmwBfQJ5ZfGIvyEK5unB09MB4e/3qqK5I/L6Qn5Px/n5g4dq0c7MQZ\n' +
- 'u7G9GBYm90U3WRJBf7lQrPStXaRnS4A/O6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUNKcAbGEIn03/vkwd8g6jNyiRdD4wDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2cAMGQCMHIeTrjenCSYuGC6txuBt/0ZwnM/ciO9kHGWVCoK8QLs\n' +
- 'jGghb5/YSFGZbmQ6qpGlSAIwVOQgdFfTpEfe5i+Vs9frLJ4QKAfc27cTNYzRIM0I\n' +
- 'E+AJgK4C4+DiyyMzOpiCfmvq\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'WT1QcNdw7ntUJP/w\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrzCCAjWgAwIBAgIQARky6+5PNFRkFVOp3Ob1CTAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjIwNTIzMTg0MTI4WhgPMjEyMjA1MjMxOTQxMjdaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgZXUtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABNVGL5oF7cfIBxKyWd2PVK/S5yQfaJY3\n' +
- 'QFHWvEdt6951n9JhiiPrHzfVHsxZp1CBjILRMzjgRbYWmc8qRoLkgGE7htGdwudJ\n' +
- 'Fa/WuKzO574Prv4iZXUnVGTboC7JdvKbh6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUgDeIIEKynwUbNXApdIPnmRWieZwwDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2gAMGUCMEOOJfucrST+FxuqJkMZyCM3gWGZaB+/w6+XUAJC6hFM\n' +
- 'uSTY0F44/bERkA4XhH+YGAIxAIpJQBakCA1/mXjsTnQ+0El9ty+LODp8ibkn031c\n' +
- '8DKDS7pR9UK7ZYdR6zFg3ZCjQw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjOgAwIBAgIQJvkWUcYLbnxtuwnyjMmntDAKBggqhkjOPQQDAzCBljEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' +
- 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTAgFw0yMTA1MjUyMjI2MTJaGA8yMTIxMDUyNTIzMjYxMlowgZYxCzAJBgNV\n' +
- 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' +
- 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' +
- 'UyBldS13ZXN0LTMgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' +
- 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAARENn8uHCyjn1dFax4OeXxvbV861qsXFD9G\n' +
- 'DshumTmFzWWHN/69WN/AOsxy9XN5S7Cgad4gQgeYYYgZ5taw+tFo/jQvCLY//uR5\n' +
- 'uihcLuLJ78opvRPvD9kbWZ6oXfBtFkWjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' +
- 'VR0OBBYEFKiK3LpoF+gDnqPldGSwChBPCYciMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' +
- 'hkjOPQQDAwNpADBmAjEA+7qfvRlnvF1Aosyp9HzxxCbN7VKu+QXXPhLEBWa5oeWW\n' +
- 'UOcifunf/IVLC4/FGCsLAjEAte1AYp+iJyOHDB8UYkhBE/1sxnFaTiEPbvQBU0wZ\n' +
- 'SuwWVLhu2wWDuSW+K7tTuL8p\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/zCCAuegAwIBAgIRAKeDpqX5WFCGNo94M4v69sUwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyBldS13ZXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMTgzM1oYDzIwNjEwNTI1MjMxODMzWjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcKOTEMTfzvs4H\n' +
- 'WtJR8gI7GXN6xesulWtZPv21oT+fLGwJ+9Bv8ADCGDDrDxfeH/HxJmzG9hgVAzVn\n' +
- '4g97Bn7q07tGZM5pVi96/aNp11velZT7spOJKfJDZTlGns6DPdHmx48whpdO+dOb\n' +
- '6+eR0VwCIv+Vl1fWXgoACXYCoKjhxJs+R+fwY//0JJ1YG8yjZ+ghLCJmvlkOJmE1\n' +
- 'TCPUyIENaEONd6T+FHGLVYRRxC2cPO65Jc4yQjsXvvQypoGgx7FwD5voNJnFMdyY\n' +
- '754JGPOOe/SZdepN7Tz7UEq8kn7NQSbhmCsgA/Hkjkchz96qN/YJ+H/okiQUTNB0\n' +
- 'eG9ogiVFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFjayw9Y\n' +
- 'MjbxfF14XAhMM2VPl0PfMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' +
- 'AQEAAtmx6d9+9CWlMoU0JCirtp4dSS41bBfb9Oor6GQ8WIr2LdfZLL6uES/ubJPE\n' +
- '1Sh5Vu/Zon5/MbqLMVrfniv3UpQIof37jKXsjZJFE1JVD/qQfRzG8AlBkYgHNEiS\n' +
- 'VtD4lFxERmaCkY1tjKB4Dbd5hfhdrDy29618ZjbSP7NwAfnwb96jobCmMKgxVGiH\n' +
- 'UqsLSiEBZ33b2hI7PJ6iTJnYBWGuiDnsWzKRmheA4nxwbmcQSfjbrNwa93w3caL2\n' +
- 'v/4u54Kcasvcu3yFsUwJygt8z43jsGAemNZsS7GWESxVVlW93MJRn6M+MMakkl9L\n' +
- 'tWaXdHZ+KUV7LhfYLb0ajvb40w==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBDCCAuygAwIBAgIQJ5oxPEjefCsaESSwrxk68DANBgkqhkiG9w0BAQsFADCB\n' +
- 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' +
- 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUwIBcNMjIwNjA2MjExNzA1WhgPMjA2MjA2MDYyMjE3MDVaMIGa\n' +
- 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' +
- 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' +
- 'YXpvbiBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTQt5eX\n' +
- 'g+VP3BjO9VBkWJhE0GfLrU/QIk32I6WvrnejayTrlup9H1z4QWlXF7GNJrqScRMY\n' +
- 'KhJHlcP05aPsx1lYco6pdFOf42ybXyWHHJdShj4A5glU81GTT+VrXGzHSarLmtua\n' +
- 'eozkQgPpDsSlPt0RefyTyel7r3Cq+5K/4vyjCTcIqbfgaGwTU36ffjM1LaPCuE4O\n' +
- 'nINMeD6YuImt2hU/mFl20FZ+IZQUIFZZU7pxGLqTRz/PWcH8tDDxnkYg7tNuXOeN\n' +
- 'JbTpXrw7St50/E9ZQ0llGS+MxJD8jGRAa/oL4G/cwnV8P2OEPVVkgN9xDDQeieo0\n' +
- '3xkzolkDkmeKOnUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\n' +
- 'bwu8635iQGQMRanekesORM8Hkm4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n' +
- 'CwUAA4IBAQAgN6LE9mUgjsj6xGCX1afYE69fnmCjjb0rC6eEe1mb/QZNcyw4XBIW\n' +
- '6+zTXo4mjZ4ffoxb//R0/+vdTE7IvaLgfAZgFsLKJCtYDDstXZj8ujQnGR9Pig3R\n' +
- 'W+LpNacvOOSJSawNQq0Xrlcu55AU4buyD5VjcICnfF1dqBMnGTnh27m/scd/ZMx/\n' +
- 'kapHZ/fMoK2mAgSX/NvUKF3UkhT85vSSM2BTtET33DzCPDQTZQYxFBa4rFRmFi4c\n' +
- 'BLlmIReiCGyh3eJhuUUuYAbK6wLaRyPsyEcIOLMQmZe1+gAFm1+1/q5Ke9ugBmjf\n' +
- 'PbTWjsi/lfZ5CdVAhc5lmZj/l5aKqwaS\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAKKPTYKln9L4NTx9dpZGUjowCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTIxMjI1NTIxWhgPMjEyMTA1MjEyMzU1MjFaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgZXUtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/owTReDvaRqdmbtTzXbyRmEpKCETNj6O\n' +
- 'hZMKH0F8oU9Tmn8RU7kQQj6xUKEyjLPrFBN7c+26TvrVO1KmJAvbc8bVliiJZMbc\n' +
- 'C0yV5PtJTalvlMZA1NnciZuhxaxrzlK1o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBT4i5HaoHtrs7Mi8auLhMbKM1XevDAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIxAK9A+8/lFdX4XJKgfP+ZLy5ySXC2E0Spoy12Gv2GdUEZ\n' +
- 'p1G7c1KbWVlyb1d6subzkQIwKyH0Naf/3usWfftkmq8SzagicKz5cGcEUaULq4tO\n' +
- 'GzA/AMpr63IDBAqkZbMDTCmH\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrzCCAjWgAwIBAgIQTgIvwTDuNWQo0Oe1sOPQEzAKBggqhkjOPQQDAzCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTI0MjEwNjM4WhgPMjEyMTA1MjQyMjA2MzhaMIGXMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' +
- 'RFMgZXUtbm9ydGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' +
- 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJuzXLU8q6WwSKXBvx8BbdIi3mPhb7Xo\n' +
- 'rNJBfuMW1XRj5BcKH1ZoGaDGw+BIIwyBJg8qNmCK8kqIb4cH8/Hbo3Y+xBJyoXq/\n' +
- 'cuk8aPrxiNoRsKWwiDHCsVxaK9L7GhHHAqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' +
- 'BgNVHQ4EFgQUYgcsdU4fm5xtuqLNppkfTHM2QMYwDgYDVR0PAQH/BAQDAgGGMAoG\n' +
- 'CCqGSM49BAMDA2gAMGUCMQDz/Rm89+QJOWJecYAmYcBWCcETASyoK1kbr4vw7Hsg\n' +
- '7Ew3LpLeq4IRmTyuiTMl0gMCMAa0QSjfAnxBKGhAnYxcNJSntUyyMpaXzur43ec0\n' +
- '3D8npJghwC4DuICtKEkQiI5cSg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'u3UBpZI=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtDCCAjmgAwIBAgIQenQbcP/Zbj9JxvZ+jXbRnTAKBggqhkjOPQQDAzCBmTEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTIwMAYDVQQDDClBbWF6\n' +
- 'b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwH\n' +
- 'U2VhdHRsZTAgFw0yMTA1MjEyMjMzMjRaGA8yMTIxMDUyMTIzMzMyNFowgZkxCzAJ\n' +
- 'BgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMw\n' +
- 'EQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1hem9u\n' +
- 'IFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATlBHiEM9LoEb1Hdnd5j2VpCDOU\n' +
- '5nGuFoBD8ROUCkFLFh5mHrHfPXwBc63heW9WrP3qnDEm+UZEUvW7ROvtWCTPZdLz\n' +
- 'Z4XaqgAlSqeE2VfUyZOZzBSgUUJk7OlznXfkCMOjQjBAMA8GA1UdEwEB/wQFMAMB\n' +
- 'Af8wHQYDVR0OBBYEFDT/ThjQZl42Nv/4Z/7JYaPNMly2MA4GA1UdDwEB/wQEAwIB\n' +
- 'hjAKBggqhkjOPQQDAwNpADBmAjEAnZWmSgpEbmq+oiCa13l5aGmxSlfp9h12Orvw\n' +
- 'Dq/W5cENJz891QD0ufOsic5oGq1JAjEAp5kSJj0MxJBTHQze1Aa9gG4sjHBxXn98\n' +
- '4MP1VGsQuhfndNHQb4V0Au7OWnOeiobq\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/zCCAuegAwIBAgIRAMgnyikWz46xY6yRgiYwZ3swDQYJKoZIhvcNAQELBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NDkxMloYDzIwNjEwNTIwMTc0OTEyWjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi8JYOc9cYSgZH\n' +
- 'gYPxLk6Xcc7HqzamvsnjYU98Dcb98y6iDqS46Ra2Ne02MITtU5MDL+qjxb8WGDZV\n' +
- 'RUA9ZS69tkTO3gldW8QdiSh3J6hVNJQW81F0M7ZWgV0gB3n76WCmfT4IWos0AXHM\n' +
- '5v7M/M4tqVmCPViQnZb2kdVlM3/Xc9GInfSMCgNfwHPTXl+PXX+xCdNBePaP/A5C\n' +
- '5S0oK3HiXaKGQAy3K7VnaQaYdiv32XUatlM4K2WS4AMKt+2cw3hTCjlmqKRHvYFQ\n' +
- 'veWCXAuc+U5PQDJ9SuxB1buFJZhT4VP3JagOuZbh5NWpIbOTxlAJOb5pGEDuJTKi\n' +
- '1gQQQVEFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNXm+N87\n' +
- 'OFxK9Af/bjSxDCiulGUzMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' +
- 'AQEAkqIbkgZ45spvrgRQ6n9VKzDLvNg+WciLtmVrqyohwwJbj4pYvWwnKQCkVc7c\n' +
- 'hUOSBmlSBa5REAPbH5o8bdt00FPRrD6BdXLXhaECKgjsHe1WW08nsequRKD8xVmc\n' +
- '8bEX6sw/utBeBV3mB+3Zv7ejYAbDFM4vnRsWtO+XqgReOgrl+cwdA6SNQT9oW3e5\n' +
- 'rSQ+VaXgJtl9NhkiIysq9BeYigxqS/A13pHQp0COMwS8nz+kBPHhJTsajHCDc8F4\n' +
- 'HfLi6cgs9G0gaRhT8FCH66OdGSqn196sE7Y3bPFFFs/3U+vxvmQgoZC6jegQXAg5\n' +
- 'Prxd+VNXtNI/azitTysQPumH7A==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEBTCCAu2gAwIBAgIRAO8bekN7rUReuNPG8pSTKtEwDQYJKoZIhvcNAQELBQAw\n' +
- 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\n' +
- 'QW1hem9uIFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\n' +
- 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMjM0N1oYDzIwNjEwNTIxMjMyMzQ3WjCB\n' +
- 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' +
- 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' +
- 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTTYds\n' +
- 'Tray+Q9VA5j5jTh5TunHKFQzn68ZbOzdqaoi/Rq4ohfC0xdLrxCpfqn2TGDHN6Zi\n' +
- '2qGK1tWJZEd1H0trhzd9d1CtGK+3cjabUmz/TjSW/qBar7e9MA67/iJ74Gc+Ww43\n' +
- 'A0xPNIWcL4aLrHaLm7sHgAO2UCKsrBUpxErOAACERScVYwPAfu79xeFcX7DmcX+e\n' +
- 'lIqY16pQAvK2RIzrekSYfLFxwFq2hnlgKHaVgZ3keKP+nmXcXmRSHQYUUr72oYNZ\n' +
- 'HcNYl2+gxCc9ccPEHM7xncVEKmb5cWEWvVoaysgQ+osi5f5aQdzgC2X2g2daKbyA\n' +
- 'XL/z5FM9GHpS5BJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' +
- 'FBDAiJ7Py9/A9etNa/ebOnx5l5MGMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\n' +
- 'AQsFAAOCAQEALMh/+81fFPdJV/RrJUeoUvFCGMp8iaANu97NpeJyKitNOv7RoeVP\n' +
- 'WjivS0KcCqZaDBs+p6IZ0sLI5ZH098LDzzytcfZg0PsGqUAb8a0MiU/LfgDCI9Ee\n' +
- 'jsOiwaFB8k0tfUJK32NPcIoQYApTMT2e26lPzYORSkfuntme2PTHUnuC7ikiQrZk\n' +
- 'P+SZjWgRuMcp09JfRXyAYWIuix4Gy0eZ4rpRuaTK6mjAb1/LYoNK/iZ/gTeIqrNt\n' +
- 'l70OWRsWW8jEmSyNTIubGK/gGGyfuZGSyqoRX6OKHESkP6SSulbIZHyJ5VZkgtXo\n' +
- '2XvyRyJ7w5pFyoofrL3Wv0UF8yt/GDszmg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIF/zCCA+egAwIBAgIRAMDk/F+rrhdn42SfE+ghPC8wDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMTIyNTEyMloYDzIxMjEwNTIxMjM1MTIyWjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2twMALVg9vRVu\n' +
- 'VNqsr6N8thmp3Dy8jEGTsm3GCQ+C5P2YcGlD/T/5icfWW84uF7Sx3ezcGlvsqFMf\n' +
- 'Ukj9sQyqtz7qfFFugyy7pa/eH9f48kWFHLbQYm9GEgbYBIrWMp1cy3vyxuMCwQN4\n' +
- 'DCncqU+yNpy0CprQJEha3PzY+3yJOjDQtc3zr99lyECCFJTDUucxHzyQvX89eL74\n' +
- 'uh8la0lKH3v9wPpnEoftbrwmm5jHNFdzj7uXUHUJ41N7af7z7QUfghIRhlBDiKtx\n' +
- '5lYZemPCXajTc3ryDKUZC/b+B6ViXZmAeMdmQoPE0jwyEp/uaUcdp+FlUQwCfsBk\n' +
- 'ayPFEApTWgPiku2isjdeTVmEgL8bJTDUZ6FYFR7ZHcYAsDzcwHgIu3GGEMVRS3Uf\n' +
- 'ILmioiyly9vcK4Sa01ondARmsi/I0s7pWpKflaekyv5boJKD/xqwz9lGejmJHelf\n' +
- '8Od2TyqJScMpB7Q8c2ROxBwqwB72jMCEvYigB+Wnbb8RipliqNflIGx938FRCzKL\n' +
- 'UQUBmNAznR/yRRL0wHf9UAE/8v9a09uZABeiznzOFAl/frHpgdAbC00LkFlnwwgX\n' +
- 'g8YfEFlkp4fLx5B7LtoO6uVNFVimLxtwirpyKoj3G4M/kvSTux8bTw0heBCmWmKR\n' +
- '57MS6k7ODzbv+Kpeht2hqVZCNFMxoQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' +
- 'MB0GA1UdDgQWBBRuMnDhJjoj7DcKALj+HbxEqj3r6jAOBgNVHQ8BAf8EBAMCAYYw\n' +
- 'DQYJKoZIhvcNAQEMBQADggIBALSnXfx72C3ldhBP5kY4Mo2DDaGQ8FGpTOOiD95d\n' +
- '0rf7I9LrsBGVqu/Nir+kqqP80PB70+Jy9fHFFigXwcPBX3MpKGxK8Cel7kVf8t1B\n' +
- '4YD6A6bqlzP+OUL0uGWfZpdpDxwMDI2Flt4NEldHgXWPjvN1VblEKs0+kPnKowyg\n' +
- 'jhRMgBbD/y+8yg0fIcjXUDTAw/+INcp21gWaMukKQr/8HswqC1yoqW9in2ijQkpK\n' +
- '2RB9vcQ0/gXR0oJUbZQx0jn0OH8Agt7yfMAnJAdnHO4M3gjvlJLzIC5/4aGrRXZl\n' +
- 'JoZKfJ2fZRnrFMi0nhAYDeInoS+Rwx+QzaBk6fX5VPyCj8foZ0nmqvuYoydzD8W5\n' +
- 'mMlycgxFqS+DUmO+liWllQC4/MnVBlHGB1Cu3wTj5kgOvNs/k+FW3GXGzD3+rpv0\n' +
- 'QTLuwSbMr+MbEThxrSZRSXTCQzKfehyC+WZejgLb+8ylLJUA10e62o7H9PvCrwj+\n' +
- 'ZDVmN7qj6amzvndCP98sZfX7CFZPLfcBd4wVIjHsFjSNEwWHOiFyLPPG7cdolGKA\n' +
- 'lOFvonvo4A1uRc13/zFeP0Xi5n5OZ2go8aOOeGYdI2vB2sgH9R2IASH/jHmr0gvY\n' +
- '0dfBCcfXNgrS0toq0LX/y+5KkKOxh52vEYsJLdhqrveuZhQnsFEm/mFwjRXkyO7c\n' +
- '2jpC\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- 'FEv9Bg==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICsDCCAjagAwIBAgIRAMgApnfGYPpK/fD0dbN2U4YwCgYIKoZIzj0EAwMwgZcx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwnQW1h\n' +
- 'em9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMCAXDTIxMDUxOTE4MzgxMVoYDzIxMjEwNTE5MTkzODExWjCBlzELMAkG\n' +
- 'A1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzAR\n' +
- 'BgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6b24g\n' +
- 'UkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0\n' +
- 'bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfEWl6d4qSuIoECdZPp+39LaKsfsX7\n' +
- 'THs3/RrtT0+h/jl3bjZ7Qc68k16x+HGcHbaayHfqD0LPdzH/kKtNSfQKqemdxDQh\n' +
- 'Z4pwkixJu8T1VpXZ5zzCvBXCl75UqgEFS92jQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' +
- 'HQYDVR0OBBYEFFPrSNtWS5JU+Tvi6ABV231XbjbEMA4GA1UdDwEB/wQEAwIBhjAK\n' +
- 'BggqhkjOPQQDAwNoADBlAjEA+a7hF1IrNkBd2N/l7IQYAQw8chnRZDzh4wiGsZsC\n' +
- '6A83maaKFWUKIb3qZYXFSi02AjAbp3wxH3myAmF8WekDHhKcC2zDvyOiKLkg9Y6v\n' +
- 'ZVmyMR043dscQbcsVoacOYv198c=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICtDCCAjqgAwIBAgIRAPhVkIsQ51JFhD2kjFK5uAkwCgYIKoZIzj0EAwMwgZkx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' +
- 'em9uIFJEUyBldS1jZW50cmFsLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjIwNjA2MjEyOTE3WhgPMjEyMjA2MDYyMjI5MTdaMIGZMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' +
- 'biBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEA5xnIEBtG5b2nmbj49UEwQza\n' +
- 'yX0844fXjccYzZ8xCDUe9dS2XOUi0aZlGblgSe/3lwjg8fMcKXLObGGQfgIx1+5h\n' +
- 'AIBjORis/dlyN5q/yH4U5sjS8tcR0GDGVHrsRUZCo0IwQDAPBgNVHRMBAf8EBTAD\n' +
- 'AQH/MB0GA1UdDgQWBBRK+lSGutXf4DkTjR3WNfv4+KeNFTAOBgNVHQ8BAf8EBAMC\n' +
- 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJ4NxQ1Gerqr70ZrnUqc62Vl8NNqTzInamCG\n' +
- 'Kce3FTsMWbS9qkgrjZkO9QqOcGIw/gIwSLrwUT+PKr9+H9eHyGvpq9/3AIYSnFkb\n' +
- 'Cf3dyWPiLKoAtLFwjzB/CkJlsAS1c8dS\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIF/jCCA+agAwIBAgIQGZH12Q7x41qIh9vDu9ikTjANBgkqhkiG9w0BAQwFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTI1MjIyMjMzWhgPMjEyMTA1MjUyMzIyMzNaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgZXUtd2VzdC0zIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMqE47sHXWzdpuqj\n' +
- 'JHb+6jM9tDbQLDFnYjDWpq4VpLPZhb7xPNh9gnYYTPKG4avG421EblAHqzy9D2pN\n' +
- '1z90yKbIfUb/Sy2MhQbmZomsObhONEra06fJ0Dydyjswf1iYRp2kwpx5AgkVoNo7\n' +
- '3dlws73zFjD7ImKvUx2C7B75bhnw2pJWkFnGcswl8fZt9B5Yt95sFOKEz2MSJE91\n' +
- 'kZlHtya19OUxZ/cSGci4MlOySzqzbGwUqGxEIDlY8I39VMwXaYQ8uXUN4G780VcL\n' +
- 'u46FeyRGxZGz2n3hMc805WAA1V5uir87vuirTvoSVREET97HVRGVVNJJ/FM6GXr1\n' +
- 'VKtptybbo81nefYJg9KBysxAa2Ao2x2ry/2ZxwhS6VZ6v1+90bpZA1BIYFEDXXn/\n' +
- 'dW07HSCFnYSlgPtSc+Muh15mdr94LspYeDqNIierK9i4tB6ep7llJAnq0BU91fM2\n' +
- 'JPeqyoTtc3m06QhLf68ccSxO4l8Hmq9kLSHO7UXgtdjfRVaffngopTNk8qK7bIb7\n' +
- 'LrgkqhiQw/PRCZjUdyXL153/fUcsj9nFNe25gM4vcFYwH6c5trd2tUl31NTi1MfG\n' +
- 'Mgp3d2dqxQBIYANkEjtBDMy3SqQLIo9EymqmVP8xx2A/gCBgaxvMAsI6FSWRoC7+\n' +
- 'hqJ8XH4mFnXSHKtYMe6WPY+/XZgtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' +
- 'HQYDVR0OBBYEFIkXqTnllT/VJnI2NqipA4XV8rh1MA4GA1UdDwEB/wQEAwIBhjAN\n' +
- 'BgkqhkiG9w0BAQwFAAOCAgEAKjSle8eenGeHgT8pltWCw/HzWyQruVKhfYIBfKJd\n' +
- 'MhV4EnH5BK7LxBIvpXGsFUrb0ThzSw0fn0zoA9jBs3i/Sj6KyeZ9qUF6b8ycDXd+\n' +
- 'wHonmJiQ7nk7UuMefaYAfs06vosgl1rI7eBHC0itexIQmKh0aX+821l4GEgEoSMf\n' +
- 'loMFTLXv2w36fPHHCsZ67ODldgcZbKNnpCTX0YrCwEYO3Pz/L398btiRcWGrewrK\n' +
- 'jdxAAyietra8DRno1Zl87685tfqc6HsL9v8rVw58clAo9XAQvT+fmSOFw/PogRZ7\n' +
- 'OMHUat3gu/uQ1M5S64nkLLFsKu7jzudBuoNmcJysPlzIbqJ7vYc82OUGe9ucF3wi\n' +
- '3tbKQ983hdJiTExVRBLX/fYjPsGbG3JtPTv89eg2tjWHlPhCDMMxyRKl6isu2RTq\n' +
- '6VT489Z2zQrC33MYF8ZqO1NKjtyMAMIZwxVu4cGLkVsqFmEV2ScDHa5RadDyD3Ok\n' +
- 'm+mqybhvEVm5tPgY6p0ILPMN3yvJsMSPSvuBXhO/X5ppNnpw9gnxpwbjQKNhkFaG\n' +
- 'M5pkADZ14uRguOLM4VthSwUSEAr5VQYCFZhEwK+UOyJAGiB/nJz6IxL5XBNUXmRM\n' +
- 'Hl8Xvz4riq48LMQbjcVQj0XvH941yPh+P8xOi00SGaQRaWp55Vyr4YKGbV0mEDz1\n' +
- 'r1o=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIF/zCCA+egAwIBAgIRAKwYju1QWxUZpn6D1gOtwgQwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' +
- 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NTM1NFoYDzIxMjEwNTIwMTc1MzU0WjCBlzEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' +
- 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCKdBP1U4lqWWkc\n' +
- 'Cb25/BKRTsvNVnISiKocva8GAzJyKfcGRa85gmgu41U+Hz6+39K+XkRfM0YS4BvQ\n' +
- 'F1XxWT0bNyypuvwCvmYShSTjN1TY0ltncDddahTajE/4MdSOZb/c98u0yt03cH+G\n' +
- 'hVwRyT50h0v/UEol50VfwcVAEZEgcQQYhf1IFUFlIvKpmDOqLuFakOnc7c9akK+i\n' +
- 'ivST+JO1tgowbnNkn2iLlSSgUWgb1gjaOsNfysagv1RXdlyPw3EyfwkFifAQvF2P\n' +
- 'Q0ayYZfYS640cccv7efM1MSVyFHR9PrrDsF/zr2S2sGPbeHr7R/HwLl+S5J/l9N9\n' +
- 'y0rk6IHAWV4dEkOvgpnuJKURwA48iu1Hhi9e4moNS6eqoK2KmY3VFpuiyWcA73nH\n' +
- 'GSmyaH+YuMrF7Fnuu7GEHZL/o6+F5cL3mj2SJJhL7sz0ryf5Cs5R4yN9BIEj/f49\n' +
- 'wh84pM6nexoI0Q4wiSFCxWiBpjSmOK6h7z6+2utaB5p20XDZHhxAlmlx4vMuWtjh\n' +
- 'XckgRFxc+ZpVMU3cAHUpVEoO49e/+qKEpPzp8Xg4cToKw2+AfTk3cmyyXQfGwXMQ\n' +
- 'ZUHNZ3w9ILMWihGCM2aGUsLcGDRennvNmnmin/SENsOQ8Ku0/a3teEzwV9cmmdYz\n' +
- '5iYs1YtgPvKFobY6+T2RXXh+A5kprwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' +
- 'MB0GA1UdDgQWBBSyUrsQVnKmA8z6/2Ech0rCvqpNmTAOBgNVHQ8BAf8EBAMCAYYw\n' +
- 'DQYJKoZIhvcNAQEMBQADggIBAFlj3IFmgiFz5lvTzFTRizhVofhTJsGr14Yfkuc7\n' +
- 'UrXPuXOwJomd4uot2d/VIeGJpfnuS84qGdmQyGewGTJ9inatHsGZgHl9NHNWRwKZ\n' +
- 'lTKTbBiq7aqgtUSFa06v202wpzU+1kadxJJePrbABxiXVfOmIW/a1a4hPNcT3syH\n' +
- 'FIEg1+CGsp71UNjBuwg3JTKWna0sLSKcxLOSOvX1fzxK5djzVpEsvQMB4PSAzXca\n' +
- 'vENgg2ErTwgTA+4s6rRtiBF9pAusN1QVuBahYP3ftrY6f3ycS4K65GnqscyfvKt5\n' +
- 'YgjtEKO3ZeeX8NpubMbzC+0Z6tVKfPFk/9TXuJtwvVeqow0YMrLLyRiYvK7EzJ97\n' +
- 'rrkxoKnHYQSZ+rH2tZ5SE392/rfk1PJL0cdHnkpDkUDO+8cKsFjjYKAQSNC52sKX\n' +
- '74AVh6wMwxYwVZZJf2/2XxkjMWWhKNejsZhUkTISSmiLs+qPe3L67IM7GyKm9/m6\n' +
- 'R3r8x6NGjhTsKH64iYJg7AeKeax4b2e4hBb6GXFftyOs7unpEOIVkJJgM6gh3mwn\n' +
- 'R7v4gwFbLKADKt1vHuerSZMiTuNTGhSfCeDM53XI/mjZl2HeuCKP1mCDLlaO+gZR\n' +
- 'Q/G+E0sBKgEX4xTkAc3kgkuQGfExdGtnN2U2ehF80lBHB8+2y2E+xWWXih/ZyIcW\n' +
- 'wOx+\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- '89cEIGdbjsA=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQYjbPSg4+RNRD3zNxO1fuKDANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTkyMVoYDzIwNjEwNTI0MjE1OTIxWjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA179eQHxcV0YL\n' +
- 'XMkqEmhSBazHhnRVd8yICbMq82PitE3BZcnv1Z5Zs/oOgNmMkOKae4tCXO/41JCX\n' +
- 'wAgbs/eWWi+nnCfpQ/FqbLPg0h3dqzAgeszQyNl9IzTzX4Nd7JFRBVJXPIIKzlRf\n' +
- '+GmFsAhi3rYgDgO27pz3ciahVSN+CuACIRYnA0K0s9lhYdddmrW/SYeWyoB7jPa2\n' +
- 'LmWpAs7bDOgS4LlP2H3eFepBPgNufRytSQUVA8f58lsE5w25vNiUSnrdlvDrIU5n\n' +
- 'Qwzc7NIZCx4qJpRbSKWrUtbyJriWfAkGU7i0IoainHLn0eHp9bWkwb9D+C/tMk1X\n' +
- 'ERZw2PDGkwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSFmR7s\n' +
- 'dAblusFN+xhf1ae0KUqhWTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAHsXOpjPMyH9lDhPM61zYdja1ebcMVgfUvsDvt+w0xKMKPhBzYDMs/cFOi1N\n' +
- 'Q8LV79VNNfI2NuvFmGygcvTIR+4h0pqqZ+wjWl3Kk5jVxCrbHg3RBX02QLumKd/i\n' +
- 'kwGcEtTUvTssn3SM8bgM0/1BDXgImZPC567ciLvWDo0s/Fe9dJJC3E0G7d/4s09n\n' +
- 'OMdextcxFuWBZrBm/KK3QF0ByA8MG3//VXaGO9OIeeOJCpWn1G1PjT1UklYhkg61\n' +
- 'EbsTiZVA2DLd1BGzfU4o4M5mo68l0msse/ndR1nEY6IywwpgIFue7+rEleDh6b9d\n' +
- 'PYkG1rHVw2I0XDG4o17aOn5E94I=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQC6W4HFghUkkgyQw14a6JljANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIyMDUyMzE4MTYzMloYDzIwNjIwNTIzMTkxNjMyWjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiM/t4FV2R9Nx\n' +
- 'UQG203UY83jInTa/6TMq0SPyg617FqYZxvz2kkx09x3dmxepUg9ttGMlPgjsRZM5\n' +
- 'LCFEi1FWk+hxHzt7vAdhHES5tdjwds3aIkgNEillmRDVrUsbrDwufLaa+MMDO2E1\n' +
- 'wQ/JYFXw16WBCCi2g1EtyQ2Xp+tZDX5IWOTnvhZpW8vVDptZ2AcJ5rMhfOYO3OsK\n' +
- '5EF0GGA5ldzuezP+BkrBYGJ4wVKGxeaq9+5AT8iVZrypjwRkD7Y5CurywK3+aBwm\n' +
- 's9Q5Nd8t45JCOUzYp92rFKsCriD86n/JnEvgDfdP6Hvtm0/DkwXK40Wz2q0Zrd0k\n' +
- 'mjP054NRPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRR7yqd\n' +
- 'SfKcX2Q8GzhcVucReIpewTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAEszBRDwXcZyNm07VcFwI1Im94oKwKccuKYeJEsizTBsVon8VpEiMwDs+yGu\n' +
- '3p8kBhvkLwWybkD/vv6McH7T5b9jDX2DoOudqYnnaYeypsPH/00Vh3LvKagqzQza\n' +
- 'orWLx+0tLo8xW4BtU+Wrn3JId8LvAhxyYXTn9bm+EwPcStp8xGLwu53OPD1RXYuy\n' +
- 'uu+3ps/2piP7GVfou7H6PRaqbFHNfiGg6Y+WA0HGHiJzn8uLmrRJ5YRdIOOG9/xi\n' +
- 'qTmAZloUNM7VNuurcMM2hWF494tQpsQ6ysg2qPjbBqzlGoOt3GfBTOZmqmwmqtam\n' +
- 'K7juWM/mdMQAJ3SMlE5wI8nVdx4=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIICrjCCAjSgAwIBAgIRAL9SdzVPcpq7GOpvdGoM80IwCgYIKoZIzj0EAwMwgZYx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' +
- 'em9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' +
- 'YXR0bGUwIBcNMjEwNTIwMTY1ODA3WhgPMjEyMTA1MjAxNzU4MDdaMIGWMQswCQYD\n' +
- 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' +
- 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' +
- 'RFMgZXUtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' +
- 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJWDgXebvwjR+Ce+hxKOLbnsfN5W5dOlP\n' +
- 'Zn8kwWnD+SLkU81Eac/BDJsXGrMk6jFD1vg16PEkoSevsuYWlC8xR6FmT6F6pmeh\n' +
- 'fsMGOyJpfK4fyoEPhKeQoT23lFIc5Orjo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' +
- 'A1UdDgQWBBSVNAN1CHAz0eZ77qz2adeqjm31TzAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' +
- 'KoZIzj0EAwMDaAAwZQIxAMlQeHbcjor49jqmcJ9gRLWdEWpXG8thIf6zfYQ/OEAg\n' +
- 'd7GDh4fR/OUk0VfjsBUN/gIwZB0bGdXvK38s6AAE/9IT051cz/wMe9GIrX1MnL1T\n' +
- '1F5OqnXJdiwfZRRTHsRQ/L00\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- '1YfpdH2jp30=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID/jCCAuagAwIBAgIQTDc+UgTRtYO7ZGTQ8UWKDDANBgkqhkiG9w0BAQsFADCB\n' +
- 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' +
- 'bWF6b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' +
- 'B1NlYXR0bGUwIBcNMjEwNTIxMjI0NjI0WhgPMjA2MTA1MjEyMzQ2MjRaMIGXMQsw\n' +
- 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' +
- 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' +
- 'biBSRFMgZXUtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' +
- 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1oGtthQ1YiVIC2\n' +
- 'i4u4swMAGxAjc/BZp0yq0eP5ZQFaxnxs7zFAPabEWsrjeDzrRhdVO0h7zskrertP\n' +
- 'gblGhfD20JfjvCHdP1RUhy/nzG+T+hn6Takan/GIgs8grlBMRHMgBYHW7tklhjaH\n' +
- '3F7LujhceAHhhgp6IOrpb6YTaTTaJbF3GTmkqxSJ3l1LtEoWz8Al/nL/Ftzxrtez\n' +
- 'Vs6ebpvd7sw37sxmXBWX2OlvUrPCTmladw9OrllGXtCFw4YyLe3zozBlZ3cHzQ0q\n' +
- 'lINhpRcajTMfZrsiGCkQtoJT+AqVJPS2sHjqsEH8yiySW9Jbq4zyMbM1yqQ2vnnx\n' +
- 'MJgoYMcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUaQG88UnV\n' +
- 'JPTI+Pcti1P+q3H7pGYwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' +
- 'AQBAkgr75V0sEJimC6QRiTVWEuj2Khy7unjSfudbM6zumhXEU2/sUaVLiYy6cA/x\n' +
- '3v0laDle6T07x9g64j5YastE/4jbzrGgIINFlY0JnaYmR3KZEjgi1s1fkRRf3llL\n' +
- 'PJm9u4Q1mbwAMQK/ZjLuuRcL3uRIHJek18nRqT5h43GB26qXyvJqeYYpYfIjL9+/\n' +
- 'YiZAbSRRZG+Li23cmPWrbA1CJY121SB+WybCbysbOXzhD3Sl2KSZRwSw4p2HrFtV\n' +
- '1Prk0dOBtZxCG9luf87ultuDZpfS0w6oNBAMXocgswk24ylcADkkFxBWW+7BETn1\n' +
- 'EpK+t1Lm37mU4sxtuha00XAi\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIEADCCAuigAwIBAgIQcY44/8NUvBwr6LlHfRy7KjANBgkqhkiG9w0BAQsFADCB\n' +
- 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' +
- 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' +
- 'bWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' +
- 'DAdTZWF0dGxlMCAXDTIxMDUxOTE4MjcxOFoYDzIwNjEwNTE5MTkyNzE4WjCBmDEL\n' +
- 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' +
- 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' +
- 'b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' +
- 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0UaBeC+Usalu\n' +
- 'EtXnV7+PnH+gi7/71tI/jkKVGKuhD2JDVvqLVoqbMHRh3+wGMvqKCjbHPcC2XMWv\n' +
- '566fpAj4UZ9CLB5fVzss+QVNTl+FH2XhEzigopp+872ajsNzcZxrMkifxGb4i0U+\n' +
- 't0Zi+UrbL5tsfP2JonKR1crOrbS6/DlzHBjIiJazGOQcMsJjNuTOItLbMohLpraA\n' +
- '/nApa3kOvI7Ufool1/34MG0+wL3UUA4YkZ6oBJVxjZvvs6tI7Lzz/SnhK2widGdc\n' +
- 'snbLqBpHNIZQSorVoiwcFaRBGYX/uzYkiw44Yfa4cK2V/B5zgu1Fbr0gbI2am4eh\n' +
- 'yVYyg4jPawIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS9gM1m\n' +
- 'IIjyh9O5H/7Vj0R/akI7UzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' +
- 'ggEBAF0Sm9HC2AUyedBVnwgkVXMibnYChOzz7T+0Y+fOLXYAEXex2s8oqGeZdGYX\n' +
- 'JHkjBn7JXu7LM+TpTbPbFFDoc1sgMguD/ls+8XsqAl1CssW+amryIL+jfcfbgQ+P\n' +
- 'ICwEUD9hGdjBgJ5WcuS+qqxHsEIlFNci3HxcxfBa9VsWs5TjI7Vsl4meL5lf7ZyL\n' +
- 'wDV7dHRuU+cImqG1MIvPRIlvPnT7EghrCYi2VCPhP2pM/UvShuwVnkz4MJ29ebIk\n' +
- 'WR9kpblFxFdE92D5UUvMCjC2kmtgzNiErvTcwIvOO9YCbBHzRB1fFiWrXUHhJWq9\n' +
- 'IkaxR5icb/IpAV0A1lYZEWMVsfQ=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIGATCCA+mgAwIBAgIRAMa0TPL+QgbWfUPpYXQkf8wwDQYJKoZIhvcNAQEMBQAw\n' +
- 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' +
- 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' +
- 'QW1hem9uIFJEUyBldS1ub3J0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' +
- 'BwwHU2VhdHRsZTAgFw0yMTA1MjQyMTAzMjBaGA8yMTIxMDUyNDIyMDMyMFowgZgx\n' +
- 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' +
- 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' +
- 'em9uIFJEUyBldS1ub3J0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\n' +
- 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANhS9LJVJyWp\n' +
- '6Rudy9t47y6kzvgnFYDrvJVtgEK0vFn5ifdlHE7xqMz4LZqWBFTnS+3oidwVRqo7\n' +
- 'tqsuuElsouStO8m315/YUzKZEPmkw8h5ufWt/lg3NTCoUZNkB4p4skr7TspyMUwE\n' +
- 'VdlKQuWTCOLtofwmWT+BnFF3To6xTh3XPlT3ssancw27Gob8kJegD7E0TSMVsecP\n' +
- 'B8je65+3b8CGwcD3QB3kCTGLy87tXuS2+07pncHvjMRMBdDQQQqhXWsRSeUNg0IP\n' +
- 'xdHTWcuwMldYPWK5zus9M4dCNBDlmZjKdcZZVUOKeBBAm7Uo7CbJCk8r/Fvfr6mw\n' +
- 'nXXDtuWhqn/WhJiI/y0QU27M+Hy5CQMxBwFsfAjJkByBpdXmyYxUgTmMpLf43p7H\n' +
- 'oWfH1xN0cT0OQEVmAQjMakauow4AQLNkilV+X6uAAu3STQVFRSrpvMen9Xx3EPC3\n' +
- 'G9flHueTa71bU65Xe8ZmEmFhGeFYHY0GrNPAFhq9RThPRY0IPyCZe0Th8uGejkek\n' +
- 'jQjm0FHPOqs5jc8CD8eJs4jSEFt9lasFLVDcAhx0FkacLKQjGHvKAnnbRwhN/dF3\n' +
- 'xt4oL8Z4JGPCLau056gKnYaEyviN7PgO+IFIVOVIdKEBu2ASGE8/+QJB5bcHefNj\n' +
- '04hEkDW0UYJbSfPpVbGAR0gFI/QpycKnAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' +
- 'Af8wHQYDVR0OBBYEFFMXvvjoaGGUcul8GA3FT05DLbZcMA4GA1UdDwEB/wQEAwIB\n' +
- 'hjANBgkqhkiG9w0BAQwFAAOCAgEAQLwFhd2JKn4K/6salLyIA4mP58qbA/9BTB/r\n' +
- 'D9l0bEwDlVPSdY7R3gZCe6v7SWLfA9RjE5tdWDrQMi5IU6W2OVrVsZS/yGJfwnwe\n' +
- 'a/9iUAYprA5QYKDg37h12XhVsDKlYCekHdC+qa5WwB1SL3YUprDLPWeaIQdg+Uh2\n' +
- '+LxvpZGoxoEbca0fc7flwq9ke/3sXt/3V4wJDyY6AL2YNdjFzC+FtYjHHx8rYxHs\n' +
- 'aesP7yunuN17KcfOZBBnSFRrx96k+Xm95VReTEEpwiBqAECqEpMbd+R0mFAayMb1\n' +
- 'cE77GaK5yeC2f67NLYGpkpIoPbO9p9rzoXLE5GpSizMjimnz6QCbXPFAFBDfSzim\n' +
- 'u6azp40kEUO6kWd7rBhqRwLc43D3TtNWQYxMve5mTRG4Od+eMKwYZmQz89BQCeqm\n' +
- 'aZiJP9y9uwJw4p/A5V3lYHTDQqzmbOyhGUk6OdpdE8HXs/1ep1xTT20QDYOx3Ekt\n' +
- 'r4mmNYfH/8v9nHNRlYJOqFhmoh1i85IUl5IHhg6OT5ZTTwsGTSxvgQQXrmmHVrgZ\n' +
- 'rZIqyBKllCgVeB9sMEsntn4bGLig7CS/N1y2mYdW/745yCLZv2gj0NXhPqgEIdVV\n' +
- 'f9DhFD4ohE1C63XP0kOQee+LYg/MY5vH8swpCSWxQgX5icv5jVDz8YTdCKgUc5u8\n' +
- 'rM2p0kk=\n' +
- '-----END CERTIFICATE-----\n',
-];
diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts
deleted file mode 100644
index da2b76b..0000000
--- a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { CA } from '../../@types/profiles.js';
-/**
- * CA Certificates for **Amazon RDS Proxy** (2024)
- *
- * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-security.tls
- * - https://www.amazontrust.com/repository/
- */
-export declare const proxies: CA;
diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js
deleted file mode 100644
index 367a4c3..0000000
--- a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js
+++ /dev/null
@@ -1,111 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.proxies = void 0;
-/**
- * CA Certificates for **Amazon RDS Proxy** (2024)
- *
- * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-security.tls
- * - https://www.amazontrust.com/repository/
- */
-exports.proxies = [
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n' +
- 'ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n' +
- 'b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n' +
- 'MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n' +
- 'b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n' +
- 'ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n' +
- '9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n' +
- 'IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n' +
- 'VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n' +
- '93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n' +
- 'jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n' +
- 'AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n' +
- 'A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n' +
- 'U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n' +
- 'N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n' +
- 'o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n' +
- '5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n' +
- 'rqXRfboQnoZsG4q5WTP468SQvvG5\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- '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\n' +
- '4PsJYGw=\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n' +
- 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n' +
- 'Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n' +
- 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n' +
- 'Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n' +
- 'ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n' +
- 'QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n' +
- 'ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n' +
- 'BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n' +
- 'YyRIHN8wfdVoOw==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\n' +
- 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n' +
- 'Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n' +
- 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n' +
- 'Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n' +
- '9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\n' +
- 'M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n' +
- '/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\n' +
- 'MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\n' +
- 'CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n' +
- '1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n' +
- '-----END CERTIFICATE-----\n',
- '-----BEGIN CERTIFICATE-----\n' +
- 'MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\n' +
- 'EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\n' +
- 'HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\n' +
- 'ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\n' +
- 'MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\n' +
- 'VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\n' +
- 'ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\n' +
- 'dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\n' +
- 'hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\n' +
- 'OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\n' +
- '8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\n' +
- 'Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\n' +
- 'hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\n' +
- '6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\n' +
- 'DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\n' +
- 'AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\n' +
- 'bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\n' +
- 've6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\n' +
- 'qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\n' +
- 'iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\n' +
- '0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\n' +
- 'sSi6\n' +
- '-----END CERTIFICATE-----\n',
-];
diff --git a/node_modules/aws-ssl-profiles/package.json b/node_modules/aws-ssl-profiles/package.json
deleted file mode 100644
index 0856ad9..0000000
--- a/node_modules/aws-ssl-profiles/package.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "aws-ssl-profiles",
- "version": "1.1.2",
- "main": "lib/index.js",
- "author": "https://github.com/wellwelwel",
- "description": "AWS RDS SSL certificates bundles.",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/mysqljs/aws-ssl-profiles"
- },
- "bugs": {
- "url": "https://github.com/mysqljs/aws-ssl-profiles/issues"
- },
- "devDependencies": {
- "@biomejs/biome": "^1.8.3",
- "@types/node": "^22.5.1",
- "@types/x509.js": "^1.0.3",
- "poku": "^2.5.0",
- "prettier": "^3.3.3",
- "tsx": "^4.19.0",
- "typescript": "^5.5.4",
- "x509.js": "^1.0.0"
- },
- "files": [
- "lib"
- ],
- "engines": {
- "node": ">= 6.0.0"
- },
- "keywords": [
- "mysql",
- "mysql2",
- "pg",
- "postgres",
- "aws",
- "rds",
- "ssl",
- "certificates",
- "ca",
- "bundle"
- ],
- "scripts": {
- "build": "npx tsc",
- "postbuild": "cp src/index.d.ts lib/index.d.ts",
- "lint": "npx @biomejs/biome lint && prettier --check .",
- "lint:fix": "npx @biomejs/biome lint --write . && prettier --write .",
- "pretest": "npm run build",
- "test": "poku --parallel ./test",
- "test:ci": "npm run lint && npm run test"
- }
-}
diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/balanced-match/.github/FUNDING.yml
deleted file mode 100644
index cea8b16..0000000
--- a/node_modules/balanced-match/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-tidelift: "npm/balanced-match"
-patreon: juliangruber
diff --git a/node_modules/balanced-match/LICENSE.md b/node_modules/balanced-match/LICENSE.md
deleted file mode 100644
index 2cdc8e4..0000000
--- a/node_modules/balanced-match/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-(MIT)
-
-Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md
deleted file mode 100644
index d2a48b6..0000000
--- a/node_modules/balanced-match/README.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# balanced-match
-
-Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well!
-
-[](http://travis-ci.org/juliangruber/balanced-match)
-[](https://www.npmjs.org/package/balanced-match)
-
-[](https://ci.testling.com/juliangruber/balanced-match)
-
-## Example
-
-Get the first matching pair of braces:
-
-```js
-var balanced = require('balanced-match');
-
-console.log(balanced('{', '}', 'pre{in{nested}}post'));
-console.log(balanced('{', '}', 'pre{first}between{second}post'));
-console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
-```
-
-The matches are:
-
-```bash
-$ node example.js
-{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
-{ start: 3,
- end: 9,
- pre: 'pre',
- body: 'first',
- post: 'between{second}post' }
-{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
-```
-
-## API
-
-### var m = balanced(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-object with those keys:
-
-* **start** the index of the first match of `a`
-* **end** the index of the matching `b`
-* **pre** the preamble, `a` and `b` not included
-* **body** the match, `a` and `b` not included
-* **post** the postscript, `a` and `b` not included
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
-
-### var r = balanced.range(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-array with indexes: `[ , ]`.
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install balanced-match
-```
-
-## Security contact information
-
-To report a security vulnerability, please use the
-[Tidelift security contact](https://tidelift.com/security).
-Tidelift will coordinate the fix and disclosure.
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js
deleted file mode 100644
index c67a646..0000000
--- a/node_modules/balanced-match/index.js
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-module.exports = balanced;
-function balanced(a, b, str) {
- if (a instanceof RegExp) a = maybeMatch(a, str);
- if (b instanceof RegExp) b = maybeMatch(b, str);
-
- var r = range(a, b, str);
-
- return r && {
- start: r[0],
- end: r[1],
- pre: str.slice(0, r[0]),
- body: str.slice(r[0] + a.length, r[1]),
- post: str.slice(r[1] + b.length)
- };
-}
-
-function maybeMatch(reg, str) {
- var m = str.match(reg);
- return m ? m[0] : null;
-}
-
-balanced.range = range;
-function range(a, b, str) {
- var begs, beg, left, right, result;
- var ai = str.indexOf(a);
- var bi = str.indexOf(b, ai + 1);
- var i = ai;
-
- if (ai >= 0 && bi > 0) {
- if(a===b) {
- return [ai, bi];
- }
- begs = [];
- left = str.length;
-
- while (i >= 0 && !result) {
- if (i == ai) {
- begs.push(i);
- ai = str.indexOf(a, i + 1);
- } else if (begs.length == 1) {
- result = [ begs.pop(), bi ];
- } else {
- beg = begs.pop();
- if (beg < left) {
- left = beg;
- right = bi;
- }
-
- bi = str.indexOf(b, i + 1);
- }
-
- i = ai < bi && ai >= 0 ? ai : bi;
- }
-
- if (begs.length) {
- result = [ left, right ];
- }
- }
-
- return result;
-}
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
deleted file mode 100644
index ce6073e..0000000
--- a/node_modules/balanced-match/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "balanced-match",
- "description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "1.0.2",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/balanced-match.git"
- },
- "homepage": "https://github.com/juliangruber/balanced-match",
- "main": "index.js",
- "scripts": {
- "test": "tape test/test.js",
- "bench": "matcha test/bench.js"
- },
- "devDependencies": {
- "matcha": "^0.7.0",
- "tape": "^4.6.0"
- },
- "keywords": [
- "match",
- "regexp",
- "test",
- "balanced",
- "parse"
- ],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- }
-}
diff --git a/node_modules/body-parser/HISTORY.md b/node_modules/body-parser/HISTORY.md
deleted file mode 100644
index 17dd110..0000000
--- a/node_modules/body-parser/HISTORY.md
+++ /dev/null
@@ -1,731 +0,0 @@
-2.2.0 / 2025-03-27
-=========================
-
-* refactor: normalize common options for all parsers
-* deps:
- * iconv-lite@^0.6.3
-
-2.1.0 / 2025-02-10
-=========================
-
-* deps:
- * type-is@^2.0.0
- * debug@^4.4.0
- * Removed destroy
-* refactor: prefix built-in node module imports
-* use the node require cache instead of custom caching
-
-2.0.2 / 2024-10-31
-=========================
-
-* remove `unpipe` package and use native `unpipe()` method
-
-2.0.1 / 2024-09-10
-=========================
-
-* Restore expected behavior `extended` to `false`
-
-2.0.0 / 2024-09-10
-=========================
-* Propagate changes from 1.20.3
-* add brotli support #406
-* Breaking Change: Node.js 18 is the minimum supported version
-
-2.0.0-beta.2 / 2023-02-23
-=========================
-
-This incorporates all changes after 1.19.1 up to 1.20.2.
-
- * Remove deprecated `bodyParser()` combination middleware
- * deps: debug@3.1.0
- - Add `DEBUG_HIDE_DATE` environment variable
- - Change timer to per-namespace instead of global
- - Change non-TTY date format
- - Remove `DEBUG_FD` environment variable support
- - Support 256 namespace colors
- * deps: iconv-lite@0.5.2
- - Add encoding cp720
- - Add encoding UTF-32
- * deps: raw-body@3.0.0-beta.1
-
-2.0.0-beta.1 / 2021-12-17
-=========================
-
- * Drop support for Node.js 0.8
- * `req.body` is no longer always initialized to `{}`
- - it is left `undefined` unless a body is parsed
- * `urlencoded` parser now defaults `extended` to `false`
- * Use `on-finished` to determine when body read
-
-1.20.3 / 2024-09-10
-===================
-
- * deps: qs@6.13.0
- * add `depth` option to customize the depth level in the parser
- * IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
-
-1.20.2 / 2023-02-21
-===================
-
- * Fix strict json error message on Node.js 19+
- * deps: content-type@~1.0.5
- - perf: skip value escaping when unnecessary
- * deps: raw-body@2.5.2
-
-1.20.1 / 2022-10-06
-===================
-
- * deps: qs@6.11.0
- * perf: remove unnecessary object clone
-
-1.20.0 / 2022-04-02
-===================
-
- * Fix error message for json parse whitespace in `strict`
- * Fix internal error when inflated body exceeds limit
- * Prevent loss of async hooks context
- * Prevent hanging when request already read
- * deps: depd@2.0.0
- - Replace internal `eval` usage with `Function` constructor
- - Use instance methods on `process` to check for listeners
- * deps: http-errors@2.0.0
- - deps: depd@2.0.0
- - deps: statuses@2.0.1
- * deps: on-finished@2.4.1
- * deps: qs@6.10.3
- * deps: raw-body@2.5.1
- - deps: http-errors@2.0.0
-
-1.19.2 / 2022-02-15
-===================
-
- * deps: bytes@3.1.2
- * deps: qs@6.9.7
- * Fix handling of `__proto__` keys
- * deps: raw-body@2.4.3
- - deps: bytes@3.1.2
-
-1.19.1 / 2021-12-10
-===================
-
- * deps: bytes@3.1.1
- * deps: http-errors@1.8.1
- - deps: inherits@2.0.4
- - deps: toidentifier@1.0.1
- - deps: setprototypeof@1.2.0
- * deps: qs@6.9.6
- * deps: raw-body@2.4.2
- - deps: bytes@3.1.1
- - deps: http-errors@1.8.1
- * deps: safe-buffer@5.2.1
- * deps: type-is@~1.6.18
-
-1.19.0 / 2019-04-25
-===================
-
- * deps: bytes@3.1.0
- - Add petabyte (`pb`) support
- * deps: http-errors@1.7.2
- - Set constructor name when possible
- - deps: setprototypeof@1.1.1
- - deps: statuses@'>= 1.5.0 < 2'
- * deps: iconv-lite@0.4.24
- - Added encoding MIK
- * deps: qs@6.7.0
- - Fix parsing array brackets after index
- * deps: raw-body@2.4.0
- - deps: bytes@3.1.0
- - deps: http-errors@1.7.2
- - deps: iconv-lite@0.4.24
- * deps: type-is@~1.6.17
- - deps: mime-types@~2.1.24
- - perf: prevent internal `throw` on invalid type
-
-1.18.3 / 2018-05-14
-===================
-
- * Fix stack trace for strict json parse error
- * deps: depd@~1.1.2
- - perf: remove argument reassignment
- * deps: http-errors@~1.6.3
- - deps: depd@~1.1.2
- - deps: setprototypeof@1.1.0
- - deps: statuses@'>= 1.3.1 < 2'
- * deps: iconv-lite@0.4.23
- - Fix loading encoding with year appended
- - Fix deprecation warnings on Node.js 10+
- * deps: qs@6.5.2
- * deps: raw-body@2.3.3
- - deps: http-errors@1.6.3
- - deps: iconv-lite@0.4.23
- * deps: type-is@~1.6.16
- - deps: mime-types@~2.1.18
-
-1.18.2 / 2017-09-22
-===================
-
- * deps: debug@2.6.9
- * perf: remove argument reassignment
-
-1.18.1 / 2017-09-12
-===================
-
- * deps: content-type@~1.0.4
- - perf: remove argument reassignment
- - perf: skip parameter parsing when no parameters
- * deps: iconv-lite@0.4.19
- - Fix ISO-8859-1 regression
- - Update Windows-1255
- * deps: qs@6.5.1
- - Fix parsing & compacting very deep objects
- * deps: raw-body@2.3.2
- - deps: iconv-lite@0.4.19
-
-1.18.0 / 2017-09-08
-===================
-
- * Fix JSON strict violation error to match native parse error
- * Include the `body` property on verify errors
- * Include the `type` property on all generated errors
- * Use `http-errors` to set status code on errors
- * deps: bytes@3.0.0
- * deps: debug@2.6.8
- * deps: depd@~1.1.1
- - Remove unnecessary `Buffer` loading
- * deps: http-errors@~1.6.2
- - deps: depd@1.1.1
- * deps: iconv-lite@0.4.18
- - Add support for React Native
- - Add a warning if not loaded as utf-8
- - Fix CESU-8 decoding in Node.js 8
- - Improve speed of ISO-8859-1 encoding
- * deps: qs@6.5.0
- * deps: raw-body@2.3.1
- - Use `http-errors` for standard emitted errors
- - deps: bytes@3.0.0
- - deps: iconv-lite@0.4.18
- - perf: skip buffer decoding on overage chunk
- * perf: prevent internal `throw` when missing charset
-
-1.17.2 / 2017-05-17
-===================
-
- * deps: debug@2.6.7
- - Fix `DEBUG_MAX_ARRAY_LENGTH`
- - deps: ms@2.0.0
- * deps: type-is@~1.6.15
- - deps: mime-types@~2.1.15
-
-1.17.1 / 2017-03-06
-===================
-
- * deps: qs@6.4.0
- - Fix regression parsing keys starting with `[`
-
-1.17.0 / 2017-03-01
-===================
-
- * deps: http-errors@~1.6.1
- - Make `message` property enumerable for `HttpError`s
- - deps: setprototypeof@1.0.3
- * deps: qs@6.3.1
- - Fix compacting nested arrays
-
-1.16.1 / 2017-02-10
-===================
-
- * deps: debug@2.6.1
- - Fix deprecation messages in WebStorm and other editors
- - Undeprecate `DEBUG_FD` set to `1` or `2`
-
-1.16.0 / 2017-01-17
-===================
-
- * deps: debug@2.6.0
- - Allow colors in workers
- - Deprecated `DEBUG_FD` environment variable
- - Fix error when running under React Native
- - Use same color for same namespace
- - deps: ms@0.7.2
- * deps: http-errors@~1.5.1
- - deps: inherits@2.0.3
- - deps: setprototypeof@1.0.2
- - deps: statuses@'>= 1.3.1 < 2'
- * deps: iconv-lite@0.4.15
- - Added encoding MS-31J
- - Added encoding MS-932
- - Added encoding MS-936
- - Added encoding MS-949
- - Added encoding MS-950
- - Fix GBK/GB18030 handling of Euro character
- * deps: qs@6.2.1
- - Fix array parsing from skipping empty values
- * deps: raw-body@~2.2.0
- - deps: iconv-lite@0.4.15
- * deps: type-is@~1.6.14
- - deps: mime-types@~2.1.13
-
-1.15.2 / 2016-06-19
-===================
-
- * deps: bytes@2.4.0
- * deps: content-type@~1.0.2
- - perf: enable strict mode
- * deps: http-errors@~1.5.0
- - Use `setprototypeof` module to replace `__proto__` setting
- - deps: statuses@'>= 1.3.0 < 2'
- - perf: enable strict mode
- * deps: qs@6.2.0
- * deps: raw-body@~2.1.7
- - deps: bytes@2.4.0
- - perf: remove double-cleanup on happy path
- * deps: type-is@~1.6.13
- - deps: mime-types@~2.1.11
-
-1.15.1 / 2016-05-05
-===================
-
- * deps: bytes@2.3.0
- - Drop partial bytes on all parsed units
- - Fix parsing byte string that looks like hex
- * deps: raw-body@~2.1.6
- - deps: bytes@2.3.0
- * deps: type-is@~1.6.12
- - deps: mime-types@~2.1.10
-
-1.15.0 / 2016-02-10
-===================
-
- * deps: http-errors@~1.4.0
- - Add `HttpError` export, for `err instanceof createError.HttpError`
- - deps: inherits@2.0.1
- - deps: statuses@'>= 1.2.1 < 2'
- * deps: qs@6.1.0
- * deps: type-is@~1.6.11
- - deps: mime-types@~2.1.9
-
-1.14.2 / 2015-12-16
-===================
-
- * deps: bytes@2.2.0
- * deps: iconv-lite@0.4.13
- * deps: qs@5.2.0
- * deps: raw-body@~2.1.5
- - deps: bytes@2.2.0
- - deps: iconv-lite@0.4.13
- * deps: type-is@~1.6.10
- - deps: mime-types@~2.1.8
-
-1.14.1 / 2015-09-27
-===================
-
- * Fix issue where invalid charset results in 400 when `verify` used
- * deps: iconv-lite@0.4.12
- - Fix CESU-8 decoding in Node.js 4.x
- * deps: raw-body@~2.1.4
- - Fix masking critical errors from `iconv-lite`
- - deps: iconv-lite@0.4.12
- * deps: type-is@~1.6.9
- - deps: mime-types@~2.1.7
-
-1.14.0 / 2015-09-16
-===================
-
- * Fix JSON strict parse error to match syntax errors
- * Provide static `require` analysis in `urlencoded` parser
- * deps: depd@~1.1.0
- - Support web browser loading
- * deps: qs@5.1.0
- * deps: raw-body@~2.1.3
- - Fix sync callback when attaching data listener causes sync read
- * deps: type-is@~1.6.8
- - Fix type error when given invalid type to match against
- - deps: mime-types@~2.1.6
-
-1.13.3 / 2015-07-31
-===================
-
- * deps: type-is@~1.6.6
- - deps: mime-types@~2.1.4
-
-1.13.2 / 2015-07-05
-===================
-
- * deps: iconv-lite@0.4.11
- * deps: qs@4.0.0
- - Fix dropping parameters like `hasOwnProperty`
- - Fix user-visible incompatibilities from 3.1.0
- - Fix various parsing edge cases
- * deps: raw-body@~2.1.2
- - Fix error stack traces to skip `makeError`
- - deps: iconv-lite@0.4.11
- * deps: type-is@~1.6.4
- - deps: mime-types@~2.1.2
- - perf: enable strict mode
- - perf: remove argument reassignment
-
-1.13.1 / 2015-06-16
-===================
-
- * deps: qs@2.4.2
- - Downgraded from 3.1.0 because of user-visible incompatibilities
-
-1.13.0 / 2015-06-14
-===================
-
- * Add `statusCode` property on `Error`s, in addition to `status`
- * Change `type` default to `application/json` for JSON parser
- * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
- * Provide static `require` analysis
- * Use the `http-errors` module to generate errors
- * deps: bytes@2.1.0
- - Slight optimizations
- * deps: iconv-lite@0.4.10
- - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
- - Leading BOM is now removed when decoding
- * deps: on-finished@~2.3.0
- - Add defined behavior for HTTP `CONNECT` requests
- - Add defined behavior for HTTP `Upgrade` requests
- - deps: ee-first@1.1.1
- * deps: qs@3.1.0
- - Fix dropping parameters like `hasOwnProperty`
- - Fix various parsing edge cases
- - Parsed object now has `null` prototype
- * deps: raw-body@~2.1.1
- - Use `unpipe` module for unpiping requests
- - deps: iconv-lite@0.4.10
- * deps: type-is@~1.6.3
- - deps: mime-types@~2.1.1
- - perf: reduce try block size
- - perf: remove bitwise operations
- * perf: enable strict mode
- * perf: remove argument reassignment
- * perf: remove delete call
-
-1.12.4 / 2015-05-10
-===================
-
- * deps: debug@~2.2.0
- * deps: qs@2.4.2
- - Fix allowing parameters like `constructor`
- * deps: on-finished@~2.2.1
- * deps: raw-body@~2.0.1
- - Fix a false-positive when unpiping in Node.js 0.8
- - deps: bytes@2.0.1
- * deps: type-is@~1.6.2
- - deps: mime-types@~2.0.11
-
-1.12.3 / 2015-04-15
-===================
-
- * Slight efficiency improvement when not debugging
- * deps: depd@~1.0.1
- * deps: iconv-lite@0.4.8
- - Add encoding alias UNICODE-1-1-UTF-7
- * deps: raw-body@1.3.4
- - Fix hanging callback if request aborts during read
- - deps: iconv-lite@0.4.8
-
-1.12.2 / 2015-03-16
-===================
-
- * deps: qs@2.4.1
- - Fix error when parameter `hasOwnProperty` is present
-
-1.12.1 / 2015-03-15
-===================
-
- * deps: debug@~2.1.3
- - Fix high intensity foreground color for bold
- - deps: ms@0.7.0
- * deps: type-is@~1.6.1
- - deps: mime-types@~2.0.10
-
-1.12.0 / 2015-02-13
-===================
-
- * add `debug` messages
- * accept a function for the `type` option
- * use `content-type` to parse `Content-Type` headers
- * deps: iconv-lite@0.4.7
- - Gracefully support enumerables on `Object.prototype`
- * deps: raw-body@1.3.3
- - deps: iconv-lite@0.4.7
- * deps: type-is@~1.6.0
- - fix argument reassignment
- - fix false-positives in `hasBody` `Transfer-Encoding` check
- - support wildcard for both type and subtype (`*/*`)
- - deps: mime-types@~2.0.9
-
-1.11.0 / 2015-01-30
-===================
-
- * make internal `extended: true` depth limit infinity
- * deps: type-is@~1.5.6
- - deps: mime-types@~2.0.8
-
-1.10.2 / 2015-01-20
-===================
-
- * deps: iconv-lite@0.4.6
- - Fix rare aliases of single-byte encodings
- * deps: raw-body@1.3.2
- - deps: iconv-lite@0.4.6
-
-1.10.1 / 2015-01-01
-===================
-
- * deps: on-finished@~2.2.0
- * deps: type-is@~1.5.5
- - deps: mime-types@~2.0.7
-
-1.10.0 / 2014-12-02
-===================
-
- * make internal `extended: true` array limit dynamic
-
-1.9.3 / 2014-11-21
-==================
-
- * deps: iconv-lite@0.4.5
- - Fix Windows-31J and X-SJIS encoding support
- * deps: qs@2.3.3
- - Fix `arrayLimit` behavior
- * deps: raw-body@1.3.1
- - deps: iconv-lite@0.4.5
- * deps: type-is@~1.5.3
- - deps: mime-types@~2.0.3
-
-1.9.2 / 2014-10-27
-==================
-
- * deps: qs@2.3.2
- - Fix parsing of mixed objects and values
-
-1.9.1 / 2014-10-22
-==================
-
- * deps: on-finished@~2.1.1
- - Fix handling of pipelined requests
- * deps: qs@2.3.0
- - Fix parsing of mixed implicit and explicit arrays
- * deps: type-is@~1.5.2
- - deps: mime-types@~2.0.2
-
-1.9.0 / 2014-09-24
-==================
-
- * include the charset in "unsupported charset" error message
- * include the encoding in "unsupported content encoding" error message
- * deps: depd@~1.0.0
-
-1.8.4 / 2014-09-23
-==================
-
- * fix content encoding to be case-insensitive
-
-1.8.3 / 2014-09-19
-==================
-
- * deps: qs@2.2.4
- - Fix issue with object keys starting with numbers truncated
-
-1.8.2 / 2014-09-15
-==================
-
- * deps: depd@0.4.5
-
-1.8.1 / 2014-09-07
-==================
-
- * deps: media-typer@0.3.0
- * deps: type-is@~1.5.1
-
-1.8.0 / 2014-09-05
-==================
-
- * make empty-body-handling consistent between chunked requests
- - empty `json` produces `{}`
- - empty `raw` produces `new Buffer(0)`
- - empty `text` produces `''`
- - empty `urlencoded` produces `{}`
- * deps: qs@2.2.3
- - Fix issue where first empty value in array is discarded
- * deps: type-is@~1.5.0
- - fix `hasbody` to be true for `content-length: 0`
-
-1.7.0 / 2014-09-01
-==================
-
- * add `parameterLimit` option to `urlencoded` parser
- * change `urlencoded` extended array limit to 100
- * respond with 413 when over `parameterLimit` in `urlencoded`
-
-1.6.7 / 2014-08-29
-==================
-
- * deps: qs@2.2.2
- - Remove unnecessary cloning
-
-1.6.6 / 2014-08-27
-==================
-
- * deps: qs@2.2.0
- - Array parsing fix
- - Performance improvements
-
-1.6.5 / 2014-08-16
-==================
-
- * deps: on-finished@2.1.0
-
-1.6.4 / 2014-08-14
-==================
-
- * deps: qs@1.2.2
-
-1.6.3 / 2014-08-10
-==================
-
- * deps: qs@1.2.1
-
-1.6.2 / 2014-08-07
-==================
-
- * deps: qs@1.2.0
- - Fix parsing array of objects
-
-1.6.1 / 2014-08-06
-==================
-
- * deps: qs@1.1.0
- - Accept urlencoded square brackets
- - Accept empty values in implicit array notation
-
-1.6.0 / 2014-08-05
-==================
-
- * deps: qs@1.0.2
- - Complete rewrite
- - Limits array length to 20
- - Limits object depth to 5
- - Limits parameters to 1,000
-
-1.5.2 / 2014-07-27
-==================
-
- * deps: depd@0.4.4
- - Work-around v8 generating empty stack traces
-
-1.5.1 / 2014-07-26
-==================
-
- * deps: depd@0.4.3
- - Fix exception when global `Error.stackTraceLimit` is too low
-
-1.5.0 / 2014-07-20
-==================
-
- * deps: depd@0.4.2
- - Add `TRACE_DEPRECATION` environment variable
- - Remove non-standard grey color from color output
- - Support `--no-deprecation` argument
- - Support `--trace-deprecation` argument
- * deps: iconv-lite@0.4.4
- - Added encoding UTF-7
- * deps: raw-body@1.3.0
- - deps: iconv-lite@0.4.4
- - Added encoding UTF-7
- - Fix `Cannot switch to old mode now` error on Node.js 0.10+
- * deps: type-is@~1.3.2
-
-1.4.3 / 2014-06-19
-==================
-
- * deps: type-is@1.3.1
- - fix global variable leak
-
-1.4.2 / 2014-06-19
-==================
-
- * deps: type-is@1.3.0
- - improve type parsing
-
-1.4.1 / 2014-06-19
-==================
-
- * fix urlencoded extended deprecation message
-
-1.4.0 / 2014-06-19
-==================
-
- * add `text` parser
- * add `raw` parser
- * check accepted charset in content-type (accepts utf-8)
- * check accepted encoding in content-encoding (accepts identity)
- * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
- * deprecate `urlencoded()` without provided `extended` option
- * lazy-load urlencoded parsers
- * parsers split into files for reduced mem usage
- * support gzip and deflate bodies
- - set `inflate: false` to turn off
- * deps: raw-body@1.2.2
- - Support all encodings from `iconv-lite`
-
-1.3.1 / 2014-06-11
-==================
-
- * deps: type-is@1.2.1
- - Switch dependency from mime to mime-types@1.0.0
-
-1.3.0 / 2014-05-31
-==================
-
- * add `extended` option to urlencoded parser
-
-1.2.2 / 2014-05-27
-==================
-
- * deps: raw-body@1.1.6
- - assert stream encoding on node.js 0.8
- - assert stream encoding on node.js < 0.10.6
- - deps: bytes@1
-
-1.2.1 / 2014-05-26
-==================
-
- * invoke `next(err)` after request fully read
- - prevents hung responses and socket hang ups
-
-1.2.0 / 2014-05-11
-==================
-
- * add `verify` option
- * deps: type-is@1.2.0
- - support suffix matching
-
-1.1.2 / 2014-05-11
-==================
-
- * improve json parser speed
-
-1.1.1 / 2014-05-11
-==================
-
- * fix repeated limit parsing with every request
-
-1.1.0 / 2014-05-10
-==================
-
- * add `type` option
- * deps: pin for safety and consistency
-
-1.0.2 / 2014-04-14
-==================
-
- * use `type-is` module
-
-1.0.1 / 2014-03-20
-==================
-
- * lower default limits to 100kb
diff --git a/node_modules/body-parser/LICENSE b/node_modules/body-parser/LICENSE
deleted file mode 100644
index 386b7b6..0000000
--- a/node_modules/body-parser/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 Jonathan Ong
-Copyright (c) 2014-2015 Douglas Christopher Wilson
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/body-parser/README.md b/node_modules/body-parser/README.md
deleted file mode 100644
index 9fcd4c6..0000000
--- a/node_modules/body-parser/README.md
+++ /dev/null
@@ -1,491 +0,0 @@
-# body-parser
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Build Status][ci-image]][ci-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
-
-Node.js body parsing middleware.
-
-Parse incoming request bodies in a middleware before your handlers, available
-under the `req.body` property.
-
-**Note** As `req.body`'s shape is based on user-controlled input, all
-properties and values in this object are untrusted and should be validated
-before trusting. For example, `req.body.foo.toString()` may fail in multiple
-ways, for example the `foo` property may not be there or may not be a string,
-and `toString` may not be a function and instead a string or other user input.
-
-[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
-
-_This does not handle multipart bodies_, due to their complex and typically
-large nature. For multipart bodies, you may be interested in the following
-modules:
-
- * [busboy](https://www.npmjs.org/package/busboy#readme) and
- [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
- * [multiparty](https://www.npmjs.org/package/multiparty#readme) and
- [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
- * [formidable](https://www.npmjs.org/package/formidable#readme)
- * [multer](https://www.npmjs.org/package/multer#readme)
-
-This module provides the following parsers:
-
- * [JSON body parser](#bodyparserjsonoptions)
- * [Raw body parser](#bodyparserrawoptions)
- * [Text body parser](#bodyparsertextoptions)
- * [URL-encoded form body parser](#bodyparserurlencodedoptions)
-
-Other body parsers you might be interested in:
-
-- [body](https://www.npmjs.org/package/body#readme)
-- [co-body](https://www.npmjs.org/package/co-body#readme)
-
-## Installation
-
-```sh
-$ npm install body-parser
-```
-
-## API
-
-```js
-const bodyParser = require('body-parser')
-```
-
-The `bodyParser` object exposes various factories to create middlewares. All
-middlewares will populate the `req.body` property with the parsed body when
-the `Content-Type` request header matches the `type` option.
-
-The various errors returned by this module are described in the
-[errors section](#errors).
-
-### bodyParser.json([options])
-
-Returns middleware that only parses `json` and only looks at requests where
-the `Content-Type` header matches the `type` option. This parser accepts any
-Unicode encoding of the body and supports automatic inflation of `gzip`,
-`br` (brotli) and `deflate` encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`).
-
-#### Options
-
-The `json` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### reviver
-
-The `reviver` option is passed directly to `JSON.parse` as the second
-argument. You can find more information on this argument
-[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
-
-##### strict
-
-When set to `true`, will only accept arrays and objects; when `false` will
-accept anything `JSON.parse` accepts. Defaults to `true`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not a
-function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `json`), a mime type (like `application/json`), or
-a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
-option is called as `fn(req)` and the request is parsed if it returns a truthy
-value. Defaults to `application/json`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.raw([options])
-
-Returns middleware that parses all bodies as a `Buffer` and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser supports automatic inflation of `gzip`, `br` (brotli) and `deflate`
-encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This will be a `Buffer` object
-of the body.
-
-#### Options
-
-The `raw` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function.
-If not a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this
-can be an extension name (like `bin`), a mime type (like
-`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
-`application/*`). If a function, the `type` option is called as `fn(req)`
-and the request is parsed if it returns a truthy value. Defaults to
-`application/octet-stream`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.text([options])
-
-Returns middleware that parses all bodies as a string and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser supports automatic inflation of `gzip`, `br` (brotli) and `deflate`
-encodings.
-
-A new `body` string containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This will be a string of the
-body.
-
-#### Options
-
-The `text` function takes an optional `options` object that may contain any of
-the following keys:
-
-##### defaultCharset
-
-Specify the default character set for the text content if the charset is not
-specified in the `Content-Type` header of the request. Defaults to `utf-8`.
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not
-a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
-type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
-option is called as `fn(req)` and the request is parsed if it returns a
-truthy value. Defaults to `text/plain`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-### bodyParser.urlencoded([options])
-
-Returns middleware that only parses `urlencoded` bodies and only looks at
-requests where the `Content-Type` header matches the `type` option. This
-parser accepts only UTF-8 encoding of the body and supports automatic
-inflation of `gzip`, `br` (brotli) and `deflate` encodings.
-
-A new `body` object containing the parsed data is populated on the `request`
-object after the middleware (i.e. `req.body`). This object will contain
-key-value pairs, where the value can be a string or array (when `extended` is
-`false`), or any type (when `extended` is `true`).
-
-#### Options
-
-The `urlencoded` function takes an optional `options` object that may contain
-any of the following keys:
-
-##### extended
-
-The "extended" syntax allows for rich objects and arrays to be encoded into the
-URL-encoded format, allowing for a JSON-like experience with URL-encoded. For
-more information, please [see the qs
-library](https://www.npmjs.org/package/qs#readme).
-
-Defaults to `false`.
-
-##### inflate
-
-When set to `true`, then deflated (compressed) bodies will be inflated; when
-`false`, deflated bodies are rejected. Defaults to `true`.
-
-##### limit
-
-Controls the maximum request body size. If this is a number, then the value
-specifies the number of bytes; if it is a string, the value is passed to the
-[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
-to `'100kb'`.
-
-##### parameterLimit
-
-The `parameterLimit` option controls the maximum number of parameters that
-are allowed in the URL-encoded data. If a request contains more parameters
-than this value, a 413 will be returned to the client. Defaults to `1000`.
-
-##### type
-
-The `type` option is used to determine what media type the middleware will
-parse. This option can be a string, array of strings, or a function. If not
-a function, `type` option is passed directly to the
-[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
-be an extension name (like `urlencoded`), a mime type (like
-`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
-`*/x-www-form-urlencoded`). If a function, the `type` option is called as
-`fn(req)` and the request is parsed if it returns a truthy value. Defaults
-to `application/x-www-form-urlencoded`.
-
-##### verify
-
-The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
-where `buf` is a `Buffer` of the raw request body and `encoding` is the
-encoding of the request. The parsing can be aborted by throwing an error.
-
-##### defaultCharset
-
-The default charset to parse as, if not specified in content-type. Must be
-either `utf-8` or `iso-8859-1`. Defaults to `utf-8`.
-
-##### charsetSentinel
-
-Whether to let the value of the `utf8` parameter take precedence as the charset
-selector. It requires the form to contain a parameter named `utf8` with a value
-of `✓`. Defaults to `false`.
-
-##### interpretNumericEntities
-
-Whether to decode numeric entities such as `☺` when parsing an iso-8859-1
-form. Defaults to `false`.
-
-
-#### depth
-
-The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
-
-## Errors
-
-The middlewares provided by this module create errors using the
-[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
-will typically have a `status`/`statusCode` property that contains the suggested
-HTTP response code, an `expose` property to determine if the `message` property
-should be displayed to the client, a `type` property to determine the type of
-error without matching against the `message`, and a `body` property containing
-the read body, if available.
-
-The following are the common errors created, though any error can come through
-for various reasons.
-
-### content encoding unsupported
-
-This error will occur when the request had a `Content-Encoding` header that
-contained an encoding but the "inflation" option was set to `false`. The
-`status` property is set to `415`, the `type` property is set to
-`'encoding.unsupported'`, and the `charset` property will be set to the
-encoding that is unsupported.
-
-### entity parse failed
-
-This error will occur when the request contained an entity that could not be
-parsed by the middleware. The `status` property is set to `400`, the `type`
-property is set to `'entity.parse.failed'`, and the `body` property is set to
-the entity value that failed parsing.
-
-### entity verify failed
-
-This error will occur when the request contained an entity that could not be
-failed verification by the defined `verify` option. The `status` property is
-set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
-`body` property is set to the entity value that failed verification.
-
-### request aborted
-
-This error will occur when the request is aborted by the client before reading
-the body has finished. The `received` property will be set to the number of
-bytes received before the request was aborted and the `expected` property is
-set to the number of expected bytes. The `status` property is set to `400`
-and `type` property is set to `'request.aborted'`.
-
-### request entity too large
-
-This error will occur when the request body's size is larger than the "limit"
-option. The `limit` property will be set to the byte limit and the `length`
-property will be set to the request body's length. The `status` property is
-set to `413` and the `type` property is set to `'entity.too.large'`.
-
-### request size did not match content length
-
-This error will occur when the request's length did not match the length from
-the `Content-Length` header. This typically occurs when the request is malformed,
-typically when the `Content-Length` header was calculated based on characters
-instead of bytes. The `status` property is set to `400` and the `type` property
-is set to `'request.size.invalid'`.
-
-### stream encoding should not be set
-
-This error will occur when something called the `req.setEncoding` method prior
-to this middleware. This module operates directly on bytes only and you cannot
-call `req.setEncoding` when using this module. The `status` property is set to
-`500` and the `type` property is set to `'stream.encoding.set'`.
-
-### stream is not readable
-
-This error will occur when the request is no longer readable when this middleware
-attempts to read it. This typically means something other than a middleware from
-this module read the request body already and the middleware was also configured to
-read the same request. The `status` property is set to `500` and the `type`
-property is set to `'stream.not.readable'`.
-
-### too many parameters
-
-This error will occur when the content of the request exceeds the configured
-`parameterLimit` for the `urlencoded` parser. The `status` property is set to
-`413` and the `type` property is set to `'parameters.too.many'`.
-
-### unsupported charset "BOGUS"
-
-This error will occur when the request had a charset parameter in the
-`Content-Type` header, but the `iconv-lite` module does not support it OR the
-parser does not support it. The charset is contained in the message as well
-as in the `charset` property. The `status` property is set to `415`, the
-`type` property is set to `'charset.unsupported'`, and the `charset` property
-is set to the charset that is unsupported.
-
-### unsupported content encoding "bogus"
-
-This error will occur when the request had a `Content-Encoding` header that
-contained an unsupported encoding. The encoding is contained in the message
-as well as in the `encoding` property. The `status` property is set to `415`,
-the `type` property is set to `'encoding.unsupported'`, and the `encoding`
-property is set to the encoding that is unsupported.
-
-### The input exceeded the depth
-
-This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
-
-## Examples
-
-### Express/Connect top-level generic
-
-This example demonstrates adding a generic JSON and URL-encoded parser as a
-top-level middleware, which will parse the bodies of all incoming requests.
-This is the simplest setup.
-
-```js
-const express = require('express')
-const bodyParser = require('body-parser')
-
-const app = express()
-
-// parse application/x-www-form-urlencoded
-app.use(bodyParser.urlencoded())
-
-// parse application/json
-app.use(bodyParser.json())
-
-app.use(function (req, res) {
- res.setHeader('Content-Type', 'text/plain')
- res.write('you posted:\n')
- res.end(String(JSON.stringify(req.body, null, 2)))
-})
-```
-
-### Express route-specific
-
-This example demonstrates adding body parsers specifically to the routes that
-need them. In general, this is the most recommended way to use body-parser with
-Express.
-
-```js
-const express = require('express')
-const bodyParser = require('body-parser')
-
-const app = express()
-
-// create application/json parser
-const jsonParser = bodyParser.json()
-
-// create application/x-www-form-urlencoded parser
-const urlencodedParser = bodyParser.urlencoded()
-
-// POST /login gets urlencoded bodies
-app.post('/login', urlencodedParser, function (req, res) {
- if (!req.body || !req.body.username) res.sendStatus(400)
- res.send('welcome, ' + req.body.username)
-})
-
-// POST /api/users gets JSON bodies
-app.post('/api/users', jsonParser, function (req, res) {
- if (!req.body) res.sendStatus(400)
- // create user in req.body
-})
-```
-
-### Change accepted type for parsers
-
-All the parsers accept a `type` option which allows you to change the
-`Content-Type` that the middleware will parse.
-
-```js
-const express = require('express')
-const bodyParser = require('body-parser')
-
-const app = express()
-
-// parse various different custom JSON types as JSON
-app.use(bodyParser.json({ type: 'application/*+json' }))
-
-// parse some custom thing into a Buffer
-app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
-
-// parse an HTML body into a string
-app.use(bodyParser.text({ type: 'text/html' }))
-```
-
-## License
-
-[MIT](LICENSE)
-
-[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
-[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
-[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
-[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
-[node-version-image]: https://badgen.net/npm/node/body-parser
-[node-version-url]: https://nodejs.org/en/download
-[npm-downloads-image]: https://badgen.net/npm/dm/body-parser
-[npm-url]: https://npmjs.org/package/body-parser
-[npm-version-image]: https://badgen.net/npm/v/body-parser
-[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
-[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
\ No newline at end of file
diff --git a/node_modules/body-parser/index.js b/node_modules/body-parser/index.js
deleted file mode 100644
index d722d0b..0000000
--- a/node_modules/body-parser/index.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * @typedef Parsers
- * @type {function}
- * @property {function} json
- * @property {function} raw
- * @property {function} text
- * @property {function} urlencoded
- */
-
-/**
- * Module exports.
- * @type {Parsers}
- */
-
-exports = module.exports = bodyParser
-
-/**
- * JSON parser.
- * @public
- */
-
-Object.defineProperty(exports, 'json', {
- configurable: true,
- enumerable: true,
- get: () => require('./lib/types/json')
-})
-
-/**
- * Raw parser.
- * @public
- */
-
-Object.defineProperty(exports, 'raw', {
- configurable: true,
- enumerable: true,
- get: () => require('./lib/types/raw')
-})
-
-/**
- * Text parser.
- * @public
- */
-
-Object.defineProperty(exports, 'text', {
- configurable: true,
- enumerable: true,
- get: () => require('./lib/types/text')
-})
-
-/**
- * URL-encoded parser.
- * @public
- */
-
-Object.defineProperty(exports, 'urlencoded', {
- configurable: true,
- enumerable: true,
- get: () => require('./lib/types/urlencoded')
-})
-
-/**
- * Create a middleware to parse json and urlencoded bodies.
- *
- * @param {object} [options]
- * @return {function}
- * @deprecated
- * @public
- */
-
-function bodyParser () {
- throw new Error('The bodyParser() generic has been split into individual middleware to use instead.')
-}
diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js
deleted file mode 100644
index eee8b11..0000000
--- a/node_modules/body-parser/lib/read.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var createError = require('http-errors')
-var getBody = require('raw-body')
-var iconv = require('iconv-lite')
-var onFinished = require('on-finished')
-var zlib = require('node:zlib')
-
-/**
- * Module exports.
- */
-
-module.exports = read
-
-/**
- * Read a request into a buffer and parse.
- *
- * @param {object} req
- * @param {object} res
- * @param {function} next
- * @param {function} parse
- * @param {function} debug
- * @param {object} options
- * @private
- */
-
-function read (req, res, next, parse, debug, options) {
- var length
- var opts = options
- var stream
-
- // read options
- var encoding = opts.encoding !== null
- ? opts.encoding
- : null
- var verify = opts.verify
-
- try {
- // get the content stream
- stream = contentstream(req, debug, opts.inflate)
- length = stream.length
- stream.length = undefined
- } catch (err) {
- return next(err)
- }
-
- // set raw-body options
- opts.length = length
- opts.encoding = verify
- ? null
- : encoding
-
- // assert charset is supported
- if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
- return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
- charset: encoding.toLowerCase(),
- type: 'charset.unsupported'
- }))
- }
-
- // read body
- debug('read body')
- getBody(stream, opts, function (error, body) {
- if (error) {
- var _error
-
- if (error.type === 'encoding.unsupported') {
- // echo back charset
- _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
- charset: encoding.toLowerCase(),
- type: 'charset.unsupported'
- })
- } else {
- // set status code on error
- _error = createError(400, error)
- }
-
- // unpipe from stream and destroy
- if (stream !== req) {
- req.unpipe()
- stream.destroy()
- }
-
- // read off entire request
- dump(req, function onfinished () {
- next(createError(400, _error))
- })
- return
- }
-
- // verify
- if (verify) {
- try {
- debug('verify body')
- verify(req, res, body, encoding)
- } catch (err) {
- next(createError(403, err, {
- body: body,
- type: err.type || 'entity.verify.failed'
- }))
- return
- }
- }
-
- // parse
- var str = body
- try {
- debug('parse body')
- str = typeof body !== 'string' && encoding !== null
- ? iconv.decode(body, encoding)
- : body
- req.body = parse(str, encoding)
- } catch (err) {
- next(createError(400, err, {
- body: str,
- type: err.type || 'entity.parse.failed'
- }))
- return
- }
-
- next()
- })
-}
-
-/**
- * Get the content stream of the request.
- *
- * @param {object} req
- * @param {function} debug
- * @param {boolean} [inflate=true]
- * @return {object}
- * @api private
- */
-
-function contentstream (req, debug, inflate) {
- var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
- var length = req.headers['content-length']
-
- debug('content-encoding "%s"', encoding)
-
- if (inflate === false && encoding !== 'identity') {
- throw createError(415, 'content encoding unsupported', {
- encoding: encoding,
- type: 'encoding.unsupported'
- })
- }
-
- if (encoding === 'identity') {
- req.length = length
- return req
- }
-
- var stream = createDecompressionStream(encoding, debug)
- req.pipe(stream)
- return stream
-}
-
-/**
- * Create a decompression stream for the given encoding.
- * @param {string} encoding
- * @param {function} debug
- * @return {object}
- * @api private
- */
-function createDecompressionStream (encoding, debug) {
- switch (encoding) {
- case 'deflate':
- debug('inflate body')
- return zlib.createInflate()
- case 'gzip':
- debug('gunzip body')
- return zlib.createGunzip()
- case 'br':
- debug('brotli decompress body')
- return zlib.createBrotliDecompress()
- default:
- throw createError(415, 'unsupported content encoding "' + encoding + '"', {
- encoding: encoding,
- type: 'encoding.unsupported'
- })
- }
-}
-
-/**
- * Dump the contents of a request.
- *
- * @param {object} req
- * @param {function} callback
- * @api private
- */
-
-function dump (req, callback) {
- if (onFinished.isFinished(req)) {
- callback(null)
- } else {
- onFinished(req, callback)
- req.resume()
- }
-}
diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js
deleted file mode 100644
index 078ce71..0000000
--- a/node_modules/body-parser/lib/types/json.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var createError = require('http-errors')
-var debug = require('debug')('body-parser:json')
-var isFinished = require('on-finished').isFinished
-var read = require('../read')
-var typeis = require('type-is')
-var { getCharset, normalizeOptions } = require('../utils')
-
-/**
- * Module exports.
- */
-
-module.exports = json
-
-/**
- * RegExp to match the first non-space in a string.
- *
- * Allowed whitespace is defined in RFC 7159:
- *
- * ws = *(
- * %x20 / ; Space
- * %x09 / ; Horizontal tab
- * %x0A / ; Line feed or New line
- * %x0D ) ; Carriage return
- */
-
-var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex
-
-var JSON_SYNTAX_CHAR = '#'
-var JSON_SYNTAX_REGEXP = /#+/g
-
-/**
- * Create a middleware to parse JSON bodies.
- *
- * @param {object} [options]
- * @return {function}
- * @public
- */
-
-function json (options) {
- var { inflate, limit, verify, shouldParse } = normalizeOptions(options, 'application/json')
-
- var reviver = options?.reviver
- var strict = options?.strict !== false
-
- function parse (body) {
- if (body.length === 0) {
- // special-case empty json body, as it's a common client-side mistake
- // TODO: maybe make this configurable or part of "strict" option
- return {}
- }
-
- if (strict) {
- var first = firstchar(body)
-
- if (first !== '{' && first !== '[') {
- debug('strict violation')
- throw createStrictSyntaxError(body, first)
- }
- }
-
- try {
- debug('parse json')
- return JSON.parse(body, reviver)
- } catch (e) {
- throw normalizeJsonSyntaxError(e, {
- message: e.message,
- stack: e.stack
- })
- }
- }
-
- return function jsonParser (req, res, next) {
- if (isFinished(req)) {
- debug('body already parsed')
- next()
- return
- }
-
- if (!('body' in req)) {
- req.body = undefined
- }
-
- // skip requests without bodies
- if (!typeis.hasBody(req)) {
- debug('skip empty body')
- next()
- return
- }
-
- debug('content-type %j', req.headers['content-type'])
-
- // determine if request should be parsed
- if (!shouldParse(req)) {
- debug('skip parsing')
- next()
- return
- }
-
- // assert charset per RFC 7159 sec 8.1
- var charset = getCharset(req) || 'utf-8'
- if (charset.slice(0, 4) !== 'utf-') {
- debug('invalid charset')
- next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
- charset: charset,
- type: 'charset.unsupported'
- }))
- return
- }
-
- // read
- read(req, res, next, parse, debug, {
- encoding: charset,
- inflate,
- limit,
- verify
- })
- }
-}
-
-/**
- * Create strict violation syntax error matching native error.
- *
- * @param {string} str
- * @param {string} char
- * @return {Error}
- * @private
- */
-
-function createStrictSyntaxError (str, char) {
- var index = str.indexOf(char)
- var partial = ''
-
- if (index !== -1) {
- partial = str.substring(0, index) + JSON_SYNTAX_CHAR
-
- for (var i = index + 1; i < str.length; i++) {
- partial += JSON_SYNTAX_CHAR
- }
- }
-
- try {
- JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')
- } catch (e) {
- return normalizeJsonSyntaxError(e, {
- message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {
- return str.substring(index, index + placeholder.length)
- }),
- stack: e.stack
- })
- }
-}
-
-/**
- * Get the first non-whitespace character in a string.
- *
- * @param {string} str
- * @return {function}
- * @private
- */
-
-function firstchar (str) {
- var match = FIRST_CHAR_REGEXP.exec(str)
-
- return match
- ? match[1]
- : undefined
-}
-
-/**
- * Normalize a SyntaxError for JSON.parse.
- *
- * @param {SyntaxError} error
- * @param {object} obj
- * @return {SyntaxError}
- */
-
-function normalizeJsonSyntaxError (error, obj) {
- var keys = Object.getOwnPropertyNames(error)
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i]
- if (key !== 'stack' && key !== 'message') {
- delete error[key]
- }
- }
-
- // replace stack before message for Node.js 0.10 and below
- error.stack = obj.stack.replace(error.message, obj.message)
- error.message = obj.message
-
- return error
-}
diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js
deleted file mode 100644
index 3788ff2..0000000
--- a/node_modules/body-parser/lib/types/raw.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- */
-
-var debug = require('debug')('body-parser:raw')
-var isFinished = require('on-finished').isFinished
-var read = require('../read')
-var typeis = require('type-is')
-var { normalizeOptions } = require('../utils')
-
-/**
- * Module exports.
- */
-
-module.exports = raw
-
-/**
- * Create a middleware to parse raw bodies.
- *
- * @param {object} [options]
- * @return {function}
- * @api public
- */
-
-function raw (options) {
- var { inflate, limit, verify, shouldParse } = normalizeOptions(options, 'application/octet-stream')
-
- function parse (buf) {
- return buf
- }
-
- return function rawParser (req, res, next) {
- if (isFinished(req)) {
- debug('body already parsed')
- next()
- return
- }
-
- if (!('body' in req)) {
- req.body = undefined
- }
-
- // skip requests without bodies
- if (!typeis.hasBody(req)) {
- debug('skip empty body')
- next()
- return
- }
-
- debug('content-type %j', req.headers['content-type'])
-
- // determine if request should be parsed
- if (!shouldParse(req)) {
- debug('skip parsing')
- next()
- return
- }
-
- // read
- read(req, res, next, parse, debug, {
- encoding: null,
- inflate,
- limit,
- verify
- })
- }
-}
diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js
deleted file mode 100644
index 3e0ab1b..0000000
--- a/node_modules/body-parser/lib/types/text.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- */
-
-var debug = require('debug')('body-parser:text')
-var isFinished = require('on-finished').isFinished
-var read = require('../read')
-var typeis = require('type-is')
-var { getCharset, normalizeOptions } = require('../utils')
-
-/**
- * Module exports.
- */
-
-module.exports = text
-
-/**
- * Create a middleware to parse text bodies.
- *
- * @param {object} [options]
- * @return {function}
- * @api public
- */
-
-function text (options) {
- var { inflate, limit, verify, shouldParse } = normalizeOptions(options, 'text/plain')
-
- var defaultCharset = options?.defaultCharset || 'utf-8'
-
- function parse (buf) {
- return buf
- }
-
- return function textParser (req, res, next) {
- if (isFinished(req)) {
- debug('body already parsed')
- next()
- return
- }
-
- if (!('body' in req)) {
- req.body = undefined
- }
-
- // skip requests without bodies
- if (!typeis.hasBody(req)) {
- debug('skip empty body')
- next()
- return
- }
-
- debug('content-type %j', req.headers['content-type'])
-
- // determine if request should be parsed
- if (!shouldParse(req)) {
- debug('skip parsing')
- next()
- return
- }
-
- // get charset
- var charset = getCharset(req) || defaultCharset
-
- // read
- read(req, res, next, parse, debug, {
- encoding: charset,
- inflate,
- limit,
- verify
- })
- }
-}
diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js
deleted file mode 100644
index f993425..0000000
--- a/node_modules/body-parser/lib/types/urlencoded.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/*!
- * body-parser
- * Copyright(c) 2014 Jonathan Ong
- * Copyright(c) 2014-2015 Douglas Christopher Wilson
- * MIT Licensed
- */
-
-'use strict'
-
-/**
- * Module dependencies.
- * @private
- */
-
-var createError = require('http-errors')
-var debug = require('debug')('body-parser:urlencoded')
-var isFinished = require('on-finished').isFinished
-var read = require('../read')
-var typeis = require('type-is')
-var qs = require('qs')
-var { getCharset, normalizeOptions } = require('../utils')
-
-/**
- * Module exports.
- */
-
-module.exports = urlencoded
-
-/**
- * Create a middleware to parse urlencoded bodies.
- *
- * @param {object} [options]
- * @return {function}
- * @public
- */
-
-function urlencoded (options) {
- var { inflate, limit, verify, shouldParse } = normalizeOptions(options, 'application/x-www-form-urlencoded')
-
- var defaultCharset = options?.defaultCharset || 'utf-8'
- if (defaultCharset !== 'utf-8' && defaultCharset !== 'iso-8859-1') {
- throw new TypeError('option defaultCharset must be either utf-8 or iso-8859-1')
- }
-
- // create the appropriate query parser
- var queryparse = createQueryParser(options)
-
- function parse (body, encoding) {
- return body.length
- ? queryparse(body, encoding)
- : {}
- }
-
- return function urlencodedParser (req, res, next) {
- if (isFinished(req)) {
- debug('body already parsed')
- next()
- return
- }
-
- if (!('body' in req)) {
- req.body = undefined
- }
-
- // skip requests without bodies
- if (!typeis.hasBody(req)) {
- debug('skip empty body')
- next()
- return
- }
-
- debug('content-type %j', req.headers['content-type'])
-
- // determine if request should be parsed
- if (!shouldParse(req)) {
- debug('skip parsing')
- next()
- return
- }
-
- // assert charset
- var charset = getCharset(req) || defaultCharset
- if (charset !== 'utf-8' && charset !== 'iso-8859-1') {
- debug('invalid charset')
- next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
- charset: charset,
- type: 'charset.unsupported'
- }))
- return
- }
-
- // read
- read(req, res, next, parse, debug, {
- encoding: charset,
- inflate,
- limit,
- verify
- })
- }
-}
-
-/**
- * Get the extended query parser.
- *
- * @param {object} options
- */
-
-function createQueryParser (options) {
- var extended = Boolean(options?.extended)
- var parameterLimit = options?.parameterLimit !== undefined
- ? options?.parameterLimit
- : 1000
- var charsetSentinel = options?.charsetSentinel
- var interpretNumericEntities = options?.interpretNumericEntities
- var depth = extended ? (options?.depth !== undefined ? options?.depth : 32) : 0
-
- if (isNaN(parameterLimit) || parameterLimit < 1) {
- throw new TypeError('option parameterLimit must be a positive number')
- }
-
- if (isNaN(depth) || depth < 0) {
- throw new TypeError('option depth must be a zero or a positive number')
- }
-
- if (isFinite(parameterLimit)) {
- parameterLimit = parameterLimit | 0
- }
-
- return function queryparse (body, encoding) {
- var paramCount = parameterCount(body, parameterLimit)
-
- if (paramCount === undefined) {
- debug('too many parameters')
- throw createError(413, 'too many parameters', {
- type: 'parameters.too.many'
- })
- }
-
- var arrayLimit = extended ? Math.max(100, paramCount) : 0
-
- debug('parse ' + (extended ? 'extended ' : '') + 'urlencoding')
- try {
- return qs.parse(body, {
- allowPrototypes: true,
- arrayLimit: arrayLimit,
- depth: depth,
- charsetSentinel: charsetSentinel,
- interpretNumericEntities: interpretNumericEntities,
- charset: encoding,
- parameterLimit: parameterLimit,
- strictDepth: true
- })
- } catch (err) {
- if (err instanceof RangeError) {
- throw createError(400, 'The input exceeded the depth', {
- type: 'querystring.parse.rangeError'
- })
- } else {
- throw err
- }
- }
- }
-}
-
-/**
- * Count the number of parameters, stopping once limit reached
- *
- * @param {string} body
- * @param {number} limit
- * @api private
- */
-
-function parameterCount (body, limit) {
- var len = body.split('&').length
-
- return len > limit ? undefined : len - 1
-}
diff --git a/node_modules/body-parser/lib/utils.js b/node_modules/body-parser/lib/utils.js
deleted file mode 100644
index eee5d95..0000000
--- a/node_modules/body-parser/lib/utils.js
+++ /dev/null
@@ -1,83 +0,0 @@
-'use strict'
-
-/**
- * Module dependencies.
- */
-
-var bytes = require('bytes')
-var contentType = require('content-type')
-var typeis = require('type-is')
-
-/**
- * Module exports.
- */
-
-module.exports = {
- getCharset,
- normalizeOptions
-}
-
-/**
- * Get the charset of a request.
- *
- * @param {object} req
- * @api private
- */
-
-function getCharset (req) {
- try {
- return (contentType.parse(req).parameters.charset || '').toLowerCase()
- } catch {
- return undefined
- }
-}
-
-/**
- * Get the simple type checker.
- *
- * @param {string | string[]} type
- * @return {function}
- */
-
-function typeChecker (type) {
- return function checkType (req) {
- return Boolean(typeis(req, type))
- }
-}
-
-/**
- * Normalizes the common options for all parsers.
- *
- * @param {object} options options to normalize
- * @param {string | string[] | function} defaultType default content type(s) or a function to determine it
- * @returns {object}
- */
-function normalizeOptions (options, defaultType) {
- if (!defaultType) {
- // Parsers must define a default content type
- throw new TypeError('defaultType must be provided')
- }
-
- var inflate = options?.inflate !== false
- var limit = typeof options?.limit !== 'number'
- ? bytes.parse(options?.limit || '100kb')
- : options?.limit
- var type = options?.type || defaultType
- var verify = options?.verify || false
-
- if (verify !== false && typeof verify !== 'function') {
- throw new TypeError('option verify must be function')
- }
-
- // create the appropriate type checking function
- var shouldParse = typeof type !== 'function'
- ? typeChecker(type)
- : type
-
- return {
- inflate,
- limit,
- verify,
- shouldParse
- }
-}
diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json
deleted file mode 100644
index e7f763b..0000000
--- a/node_modules/body-parser/package.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "name": "body-parser",
- "description": "Node.js body parsing middleware",
- "version": "2.2.0",
- "contributors": [
- "Douglas Christopher Wilson ",
- "Jonathan Ong (http://jongleberry.com)"
- ],
- "license": "MIT",
- "repository": "expressjs/body-parser",
- "dependencies": {
- "bytes": "^3.1.2",
- "content-type": "^1.0.5",
- "debug": "^4.4.0",
- "http-errors": "^2.0.0",
- "iconv-lite": "^0.6.3",
- "on-finished": "^2.4.1",
- "qs": "^6.14.0",
- "raw-body": "^3.0.0",
- "type-is": "^2.0.0"
- },
- "devDependencies": {
- "eslint": "8.34.0",
- "eslint-config-standard": "14.1.1",
- "eslint-plugin-import": "2.27.5",
- "eslint-plugin-markdown": "3.0.0",
- "eslint-plugin-node": "11.1.0",
- "eslint-plugin-promise": "6.1.1",
- "eslint-plugin-standard": "4.1.0",
- "mocha": "^11.1.0",
- "nyc": "^17.1.0",
- "supertest": "^7.0.0"
- },
- "files": [
- "lib/",
- "LICENSE",
- "HISTORY.md",
- "index.js"
- ],
- "engines": {
- "node": ">=18"
- },
- "scripts": {
- "lint": "eslint .",
- "test": "mocha --reporter spec --check-leaks test/",
- "test-ci": "nyc --reporter=lcovonly --reporter=text npm test",
- "test-cov": "nyc --reporter=html --reporter=text npm test"
- }
-}
diff --git a/node_modules/brace-expansion/LICENSE b/node_modules/brace-expansion/LICENSE
deleted file mode 100644
index de32266..0000000
--- a/node_modules/brace-expansion/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2013 Julian Gruber
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md
deleted file mode 100644
index 6b4e0e1..0000000
--- a/node_modules/brace-expansion/README.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# brace-expansion
-
-[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
-as known from sh/bash, in JavaScript.
-
-[](http://travis-ci.org/juliangruber/brace-expansion)
-[](https://www.npmjs.org/package/brace-expansion)
-[](https://greenkeeper.io/)
-
-[](https://ci.testling.com/juliangruber/brace-expansion)
-
-## Example
-
-```js
-var expand = require('brace-expansion');
-
-expand('file-{a,b,c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('-v{,,}')
-// => ['-v', '-v', '-v']
-
-expand('file{0..2}.jpg')
-// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
-
-expand('file-{a..c}.jpg')
-// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
-
-expand('file{2..0}.jpg')
-// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
-
-expand('file{0..4..2}.jpg')
-// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
-
-expand('file-{a..e..2}.jpg')
-// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
-
-expand('file{00..10..5}.jpg')
-// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
-
-expand('{{A..C},{a..c}}')
-// => ['A', 'B', 'C', 'a', 'b', 'c']
-
-expand('ppp{,config,oe{,conf}}')
-// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
-```
-
-## API
-
-```js
-var expand = require('brace-expansion');
-```
-
-### var expanded = expand(str)
-
-Return an array of all possible and valid expansions of `str`. If none are
-found, `[str]` is returned.
-
-Valid expansions are:
-
-```js
-/^(.*,)+(.+)?$/
-// {a,b,...}
-```
-
-A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-A numeric sequence from `x` to `y` inclusive, with optional increment.
-If `x` or `y` start with a leading `0`, all the numbers will be padded
-to have equal length. Negative numbers and backwards iteration work too.
-
-```js
-/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
-// {x..y[..incr]}
-```
-
-An alphabetic sequence from `x` to `y` inclusive, with optional increment.
-`x` and `y` must be exactly one character, and if given, `incr` must be a
-number.
-
-For compatibility reasons, the string `${` is not eligible for brace expansion.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install brace-expansion
-```
-
-## Contributors
-
-- [Julian Gruber](https://github.com/juliangruber)
-- [Isaac Z. Schlueter](https://github.com/isaacs)
-
-## Sponsors
-
-This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
-
-Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js
deleted file mode 100644
index bd19fe6..0000000
--- a/node_modules/brace-expansion/index.js
+++ /dev/null
@@ -1,201 +0,0 @@
-var concatMap = require('concat-map');
-var balanced = require('balanced-match');
-
-module.exports = expandTop;
-
-var escSlash = '\0SLASH'+Math.random()+'\0';
-var escOpen = '\0OPEN'+Math.random()+'\0';
-var escClose = '\0CLOSE'+Math.random()+'\0';
-var escComma = '\0COMMA'+Math.random()+'\0';
-var escPeriod = '\0PERIOD'+Math.random()+'\0';
-
-function numeric(str) {
- return parseInt(str, 10) == str
- ? parseInt(str, 10)
- : str.charCodeAt(0);
-}
-
-function escapeBraces(str) {
- return str.split('\\\\').join(escSlash)
- .split('\\{').join(escOpen)
- .split('\\}').join(escClose)
- .split('\\,').join(escComma)
- .split('\\.').join(escPeriod);
-}
-
-function unescapeBraces(str) {
- return str.split(escSlash).join('\\')
- .split(escOpen).join('{')
- .split(escClose).join('}')
- .split(escComma).join(',')
- .split(escPeriod).join('.');
-}
-
-
-// Basically just str.split(","), but handling cases
-// where we have nested braced sections, which should be
-// treated as individual members, like {a,{b,c},d}
-function parseCommaParts(str) {
- if (!str)
- return [''];
-
- var parts = [];
- var m = balanced('{', '}', str);
-
- if (!m)
- return str.split(',');
-
- var pre = m.pre;
- var body = m.body;
- var post = m.post;
- var p = pre.split(',');
-
- p[p.length-1] += '{' + body + '}';
- var postParts = parseCommaParts(post);
- if (post.length) {
- p[p.length-1] += postParts.shift();
- p.push.apply(p, postParts);
- }
-
- parts.push.apply(parts, p);
-
- return parts;
-}
-
-function expandTop(str) {
- if (!str)
- return [];
-
- // I don't know why Bash 4.3 does this, but it does.
- // Anything starting with {} will have the first two bytes preserved
- // but *only* at the top level, so {},a}b will not expand to anything,
- // but a{},b}c will be expanded to [a}c,abc].
- // One could argue that this is a bug in Bash, but since the goal of
- // this module is to match Bash's rules, we escape a leading {}
- if (str.substr(0, 2) === '{}') {
- str = '\\{\\}' + str.substr(2);
- }
-
- return expand(escapeBraces(str), true).map(unescapeBraces);
-}
-
-function identity(e) {
- return e;
-}
-
-function embrace(str) {
- return '{' + str + '}';
-}
-function isPadded(el) {
- return /^-?0\d/.test(el);
-}
-
-function lte(i, y) {
- return i <= y;
-}
-function gte(i, y) {
- return i >= y;
-}
-
-function expand(str, isTop) {
- var expansions = [];
-
- var m = balanced('{', '}', str);
- if (!m || /\$$/.test(m.pre)) return [str];
-
- var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
- var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
- var isSequence = isNumericSequence || isAlphaSequence;
- var isOptions = m.body.indexOf(',') >= 0;
- if (!isSequence && !isOptions) {
- // {a},b}
- if (m.post.match(/,(?!,).*\}/)) {
- str = m.pre + '{' + m.body + escClose + m.post;
- return expand(str);
- }
- return [str];
- }
-
- var n;
- if (isSequence) {
- n = m.body.split(/\.\./);
- } else {
- n = parseCommaParts(m.body);
- if (n.length === 1) {
- // x{{a,b}}y ==> x{a}y x{b}y
- n = expand(n[0], false).map(embrace);
- if (n.length === 1) {
- var post = m.post.length
- ? expand(m.post, false)
- : [''];
- return post.map(function(p) {
- return m.pre + n[0] + p;
- });
- }
- }
- }
-
- // at this point, n is the parts, and we know it's not a comma set
- // with a single entry.
-
- // no need to expand pre, since it is guaranteed to be free of brace-sets
- var pre = m.pre;
- var post = m.post.length
- ? expand(m.post, false)
- : [''];
-
- var N;
-
- if (isSequence) {
- var x = numeric(n[0]);
- var y = numeric(n[1]);
- var width = Math.max(n[0].length, n[1].length)
- var incr = n.length == 3
- ? Math.abs(numeric(n[2]))
- : 1;
- var test = lte;
- var reverse = y < x;
- if (reverse) {
- incr *= -1;
- test = gte;
- }
- var pad = n.some(isPadded);
-
- N = [];
-
- for (var i = x; test(i, y); i += incr) {
- var c;
- if (isAlphaSequence) {
- c = String.fromCharCode(i);
- if (c === '\\')
- c = '';
- } else {
- c = String(i);
- if (pad) {
- var need = width - c.length;
- if (need > 0) {
- var z = new Array(need + 1).join('0');
- if (i < 0)
- c = '-' + z + c.slice(1);
- else
- c = z + c;
- }
- }
- }
- N.push(c);
- }
- } else {
- N = concatMap(n, function(el) { return expand(el, false) });
- }
-
- for (var j = 0; j < N.length; j++) {
- for (var k = 0; k < post.length; k++) {
- var expansion = pre + N[j] + post[k];
- if (!isTop || isSequence || expansion)
- expansions.push(expansion);
- }
- }
-
- return expansions;
-}
-
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
deleted file mode 100644
index 3447888..0000000
--- a/node_modules/brace-expansion/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "brace-expansion",
- "description": "Brace expansion as known from sh/bash",
- "version": "1.1.12",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/brace-expansion.git"
- },
- "homepage": "https://github.com/juliangruber/brace-expansion",
- "main": "index.js",
- "scripts": {
- "test": "tape test/*.js",
- "gentest": "bash test/generate.sh",
- "bench": "matcha test/perf/bench.js"
- },
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- },
- "devDependencies": {
- "matcha": "^0.7.0",
- "tape": "^4.6.0"
- },
- "keywords": [],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- },
- "publishConfig": {
- "tag": "1.x"
- }
-}
diff --git a/node_modules/bytes/History.md b/node_modules/bytes/History.md
deleted file mode 100644
index d60ce0e..0000000
--- a/node_modules/bytes/History.md
+++ /dev/null
@@ -1,97 +0,0 @@
-3.1.2 / 2022-01-27
-==================
-
- * Fix return value for un-parsable strings
-
-3.1.1 / 2021-11-15
-==================
-
- * Fix "thousandsSeparator" incorrecting formatting fractional part
-
-3.1.0 / 2019-01-22
-==================
-
- * Add petabyte (`pb`) support
-
-3.0.0 / 2017-08-31
-==================
-
- * Change "kB" to "KB" in format output
- * Remove support for Node.js 0.6
- * Remove support for ComponentJS
-
-2.5.0 / 2017-03-24
-==================
-
- * Add option "unit"
-
-2.4.0 / 2016-06-01
-==================
-
- * Add option "unitSeparator"
-
-2.3.0 / 2016-02-15
-==================
-
- * Drop partial bytes on all parsed units
- * Fix non-finite numbers to `.format` to return `null`
- * Fix parsing byte string that looks like hex
- * perf: hoist regular expressions
-
-2.2.0 / 2015-11-13
-==================
-
- * add option "decimalPlaces"
- * add option "fixedDecimals"
-
-2.1.0 / 2015-05-21
-==================
-
- * add `.format` export
- * add `.parse` export
-
-2.0.2 / 2015-05-20
-==================
-
- * remove map recreation
- * remove unnecessary object construction
-
-2.0.1 / 2015-05-07
-==================
-
- * fix browserify require
- * remove node.extend dependency
-
-2.0.0 / 2015-04-12
-==================
-
- * add option "case"
- * add option "thousandsSeparator"
- * return "null" on invalid parse input
- * support proper round-trip: bytes(bytes(num)) === num
- * units no longer case sensitive when parsing
-
-1.0.0 / 2014-05-05
-==================
-
- * add negative support. fixes #6
-
-0.3.0 / 2014-03-19
-==================
-
- * added terabyte support
-
-0.2.1 / 2013-04-01
-==================
-
- * add .component
-
-0.2.0 / 2012-10-28
-==================
-
- * bytes(200).should.eql('200b')
-
-0.1.0 / 2012-07-04
-==================
-
- * add bytes to string conversion [yields]
diff --git a/node_modules/bytes/LICENSE b/node_modules/bytes/LICENSE
deleted file mode 100644
index 63e95a9..0000000
--- a/node_modules/bytes/LICENSE
+++ /dev/null
@@ -1,23 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2012-2014 TJ Holowaychuk
-Copyright (c) 2015 Jed Watson
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/bytes/Readme.md b/node_modules/bytes/Readme.md
deleted file mode 100644
index 5790e23..0000000
--- a/node_modules/bytes/Readme.md
+++ /dev/null
@@ -1,152 +0,0 @@
-# Bytes utility
-
-[![NPM Version][npm-image]][npm-url]
-[![NPM Downloads][downloads-image]][downloads-url]
-[![Build Status][ci-image]][ci-url]
-[![Test Coverage][coveralls-image]][coveralls-url]
-
-Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
-
-## Installation
-
-This is a [Node.js](https://nodejs.org/en/) module available through the
-[npm registry](https://www.npmjs.com/). Installation is done using the
-[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
-
-```bash
-$ npm install bytes
-```
-
-## Usage
-
-```js
-var bytes = require('bytes');
-```
-
-#### bytes(number|string value, [options]): number|string|null
-
-Default export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`.
-
-**Arguments**
-
-| Name | Type | Description |
-|---------|----------|--------------------|
-| value | `number`|`string` | Number value to format or string value to parse |
-| options | `Object` | Conversion options for `format` |
-
-**Returns**
-
-| Name | Type | Description |
-|---------|------------------|-------------------------------------------------|
-| results | `string`|`number`|`null` | Return null upon error. Numeric value in bytes, or string value otherwise. |
-
-**Example**
-
-```js
-bytes(1024);
-// output: '1KB'
-
-bytes('1KB');
-// output: 1024
-```
-
-#### bytes.format(number value, [options]): string|null
-
-Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is
- rounded.
-
-**Arguments**
-
-| Name | Type | Description |
-|---------|----------|--------------------|
-| value | `number` | Value in bytes |
-| options | `Object` | Conversion options |
-
-**Options**
-
-| Property | Type | Description |
-|-------------------|--------|-----------------------------------------------------------------------------------------|
-| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. |
-| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
-| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. |
-| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). |
-| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. |
-
-**Returns**
-
-| Name | Type | Description |
-|---------|------------------|-------------------------------------------------|
-| results | `string`|`null` | Return null upon error. String value otherwise. |
-
-**Example**
-
-```js
-bytes.format(1024);
-// output: '1KB'
-
-bytes.format(1000);
-// output: '1000B'
-
-bytes.format(1000, {thousandsSeparator: ' '});
-// output: '1 000B'
-
-bytes.format(1024 * 1.7, {decimalPlaces: 0});
-// output: '2KB'
-
-bytes.format(1024, {unitSeparator: ' '});
-// output: '1 KB'
-```
-
-#### bytes.parse(string|number value): number|null
-
-Parse the string value into an integer in bytes. If no unit is given, or `value`
-is a number, it is assumed the value is in bytes.
-
-Supported units and abbreviations are as follows and are case-insensitive:
-
- * `b` for bytes
- * `kb` for kilobytes
- * `mb` for megabytes
- * `gb` for gigabytes
- * `tb` for terabytes
- * `pb` for petabytes
-
-The units are in powers of two, not ten. This means 1kb = 1024b according to this parser.
-
-**Arguments**
-
-| Name | Type | Description |
-|---------------|--------|--------------------|
-| value | `string`|`number` | String to parse, or number in bytes. |
-
-**Returns**
-
-| Name | Type | Description |
-|---------|-------------|-------------------------|
-| results | `number`|`null` | Return null upon error. Value in bytes otherwise. |
-
-**Example**
-
-```js
-bytes.parse('1KB');
-// output: 1024
-
-bytes.parse('1024');
-// output: 1024
-
-bytes.parse(1024);
-// output: 1024
-```
-
-## License
-
-[MIT](LICENSE)
-
-[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci
-[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci
-[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master
-[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master
-[downloads-image]: https://badgen.net/npm/dm/bytes
-[downloads-url]: https://npmjs.org/package/bytes
-[npm-image]: https://badgen.net/npm/v/bytes
-[npm-url]: https://npmjs.org/package/bytes
diff --git a/node_modules/bytes/index.js b/node_modules/bytes/index.js
deleted file mode 100644
index 6f2d0f8..0000000
--- a/node_modules/bytes/index.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*!
- * bytes
- * Copyright(c) 2012-2014 TJ Holowaychuk
- * Copyright(c) 2015 Jed Watson
- * MIT Licensed
- */
-
-'use strict';
-
-/**
- * Module exports.
- * @public
- */
-
-module.exports = bytes;
-module.exports.format = format;
-module.exports.parse = parse;
-
-/**
- * Module variables.
- * @private
- */
-
-var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
-
-var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
-
-var map = {
- b: 1,
- kb: 1 << 10,
- mb: 1 << 20,
- gb: 1 << 30,
- tb: Math.pow(1024, 4),
- pb: Math.pow(1024, 5),
-};
-
-var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
-
-/**
- * Convert the given value in bytes into a string or parse to string to an integer in bytes.
- *
- * @param {string|number} value
- * @param {{
- * case: [string],
- * decimalPlaces: [number]
- * fixedDecimals: [boolean]
- * thousandsSeparator: [string]
- * unitSeparator: [string]
- * }} [options] bytes options.
- *
- * @returns {string|number|null}
- */
-
-function bytes(value, options) {
- if (typeof value === 'string') {
- return parse(value);
- }
-
- if (typeof value === 'number') {
- return format(value, options);
- }
-
- return null;
-}
-
-/**
- * Format the given value in bytes into a string.
- *
- * If the value is negative, it is kept as such. If it is a float,
- * it is rounded.
- *
- * @param {number} value
- * @param {object} [options]
- * @param {number} [options.decimalPlaces=2]
- * @param {number} [options.fixedDecimals=false]
- * @param {string} [options.thousandsSeparator=]
- * @param {string} [options.unit=]
- * @param {string} [options.unitSeparator=]
- *
- * @returns {string|null}
- * @public
- */
-
-function format(value, options) {
- if (!Number.isFinite(value)) {
- return null;
- }
-
- var mag = Math.abs(value);
- var thousandsSeparator = (options && options.thousandsSeparator) || '';
- var unitSeparator = (options && options.unitSeparator) || '';
- var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
- var fixedDecimals = Boolean(options && options.fixedDecimals);
- var unit = (options && options.unit) || '';
-
- if (!unit || !map[unit.toLowerCase()]) {
- if (mag >= map.pb) {
- unit = 'PB';
- } else if (mag >= map.tb) {
- unit = 'TB';
- } else if (mag >= map.gb) {
- unit = 'GB';
- } else if (mag >= map.mb) {
- unit = 'MB';
- } else if (mag >= map.kb) {
- unit = 'KB';
- } else {
- unit = 'B';
- }
- }
-
- var val = value / map[unit.toLowerCase()];
- var str = val.toFixed(decimalPlaces);
-
- if (!fixedDecimals) {
- str = str.replace(formatDecimalsRegExp, '$1');
- }
-
- if (thousandsSeparator) {
- str = str.split('.').map(function (s, i) {
- return i === 0
- ? s.replace(formatThousandsRegExp, thousandsSeparator)
- : s
- }).join('.');
- }
-
- return str + unitSeparator + unit;
-}
-
-/**
- * Parse the string value into an integer in bytes.
- *
- * If no unit is given, it is assumed the value is in bytes.
- *
- * @param {number|string} val
- *
- * @returns {number|null}
- * @public
- */
-
-function parse(val) {
- if (typeof val === 'number' && !isNaN(val)) {
- return val;
- }
-
- if (typeof val !== 'string') {
- return null;
- }
-
- // Test if the string passed is valid
- var results = parseRegExp.exec(val);
- var floatValue;
- var unit = 'b';
-
- if (!results) {
- // Nothing could be extracted from the given string
- floatValue = parseInt(val, 10);
- unit = 'b'
- } else {
- // Retrieve the value and the unit
- floatValue = parseFloat(results[1]);
- unit = results[4].toLowerCase();
- }
-
- if (isNaN(floatValue)) {
- return null;
- }
-
- return Math.floor(map[unit] * floatValue);
-}
diff --git a/node_modules/bytes/package.json b/node_modules/bytes/package.json
deleted file mode 100644
index f2b6a8b..0000000
--- a/node_modules/bytes/package.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "bytes",
- "description": "Utility to parse a string bytes to bytes and vice-versa",
- "version": "3.1.2",
- "author": "TJ Holowaychuk (http://tjholowaychuk.com)",
- "contributors": [
- "Jed Watson ",
- "Théo FIDRY "
- ],
- "license": "MIT",
- "keywords": [
- "byte",
- "bytes",
- "utility",
- "parse",
- "parser",
- "convert",
- "converter"
- ],
- "repository": "visionmedia/bytes.js",
- "devDependencies": {
- "eslint": "7.32.0",
- "eslint-plugin-markdown": "2.2.1",
- "mocha": "9.2.0",
- "nyc": "15.1.0"
- },
- "files": [
- "History.md",
- "LICENSE",
- "Readme.md",
- "index.js"
- ],
- "engines": {
- "node": ">= 0.8"
- },
- "scripts": {
- "lint": "eslint .",
- "test": "mocha --check-leaks --reporter spec",
- "test-ci": "nyc --reporter=lcov --reporter=text npm test",
- "test-cov": "nyc --reporter=html --reporter=text npm test"
- }
-}
diff --git a/node_modules/call-bind-apply-helpers/.eslintrc b/node_modules/call-bind-apply-helpers/.eslintrc
deleted file mode 100644
index 201e859..0000000
--- a/node_modules/call-bind-apply-helpers/.eslintrc
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "root": true,
-
- "extends": "@ljharb",
-
- "rules": {
- "func-name-matching": 0,
- "id-length": 0,
- "new-cap": [2, {
- "capIsNewExceptions": [
- "GetIntrinsic",
- ],
- }],
- "no-extra-parens": 0,
- "no-magic-numbers": 0,
- },
-}
diff --git a/node_modules/call-bind-apply-helpers/.github/FUNDING.yml b/node_modules/call-bind-apply-helpers/.github/FUNDING.yml
deleted file mode 100644
index 0011e9d..0000000
--- a/node_modules/call-bind-apply-helpers/.github/FUNDING.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# These are supported funding model platforms
-
-github: [ljharb]
-patreon: # Replace with a single Patreon username
-open_collective: # Replace with a single Open Collective username
-ko_fi: # Replace with a single Ko-fi username
-tidelift: npm/call-bind-apply-helpers
-community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-liberapay: # Replace with a single Liberapay username
-issuehunt: # Replace with a single IssueHunt username
-otechie: # Replace with a single Otechie username
-custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/call-bind-apply-helpers/.nycrc b/node_modules/call-bind-apply-helpers/.nycrc
deleted file mode 100644
index bdd626c..0000000
--- a/node_modules/call-bind-apply-helpers/.nycrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "all": true,
- "check-coverage": false,
- "reporter": ["text-summary", "text", "html", "json"],
- "exclude": [
- "coverage",
- "test"
- ]
-}
diff --git a/node_modules/call-bind-apply-helpers/CHANGELOG.md b/node_modules/call-bind-apply-helpers/CHANGELOG.md
deleted file mode 100644
index 2484942..0000000
--- a/node_modules/call-bind-apply-helpers/CHANGELOG.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [v1.0.2](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12
-
-### Commits
-
-- [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1)
-- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1)
-
-## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08
-
-### Commits
-
-- [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8)
-- [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75)
-- [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940)
-
-## v1.0.0 - 2024-12-05
-
-### Commits
-
-- Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04)
-- Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f)
-- npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603)
-- Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930)
diff --git a/node_modules/call-bind-apply-helpers/LICENSE b/node_modules/call-bind-apply-helpers/LICENSE
deleted file mode 100644
index f82f389..0000000
--- a/node_modules/call-bind-apply-helpers/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2024 Jordan Harband
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/call-bind-apply-helpers/README.md b/node_modules/call-bind-apply-helpers/README.md
deleted file mode 100644
index 8fc0dae..0000000
--- a/node_modules/call-bind-apply-helpers/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# call-bind-apply-helpers [![Version Badge][npm-version-svg]][package-url]
-
-[![github actions][actions-image]][actions-url]
-[![coverage][codecov-image]][codecov-url]
-[![dependency status][deps-svg]][deps-url]
-[![dev dependency status][dev-deps-svg]][dev-deps-url]
-[![License][license-image]][license-url]
-[![Downloads][downloads-image]][downloads-url]
-
-[![npm badge][npm-badge-png]][package-url]
-
-Helper functions around Function call/apply/bind, for use in `call-bind`.
-
-The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`.
-Please use `call-bind` unless you have a very good reason not to.
-
-## Getting started
-
-```sh
-npm install --save call-bind-apply-helpers
-```
-
-## Usage/Examples
-
-```js
-const assert = require('assert');
-const callBindBasic = require('call-bind-apply-helpers');
-
-function f(a, b) {
- assert.equal(this, 1);
- assert.equal(a, 2);
- assert.equal(b, 3);
- assert.equal(arguments.length, 2);
-}
-
-const fBound = callBindBasic([f, 1]);
-
-delete Function.prototype.call;
-delete Function.prototype.bind;
-
-fBound(2, 3);
-```
-
-## Tests
-
-Clone the repo, `npm install`, and run `npm test`
-
-[package-url]: https://npmjs.org/package/call-bind-apply-helpers
-[npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg
-[deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg
-[deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers
-[dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg
-[dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies
-[npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true
-[license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg
-[license-url]: LICENSE
-[downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg
-[downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers
-[codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg
-[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/
-[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers
-[actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions
diff --git a/node_modules/call-bind-apply-helpers/actualApply.d.ts b/node_modules/call-bind-apply-helpers/actualApply.d.ts
deleted file mode 100644
index b87286a..0000000
--- a/node_modules/call-bind-apply-helpers/actualApply.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export = Reflect.apply;
\ No newline at end of file
diff --git a/node_modules/call-bind-apply-helpers/actualApply.js b/node_modules/call-bind-apply-helpers/actualApply.js
deleted file mode 100644
index ffa5135..0000000
--- a/node_modules/call-bind-apply-helpers/actualApply.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-var bind = require('function-bind');
-
-var $apply = require('./functionApply');
-var $call = require('./functionCall');
-var $reflectApply = require('./reflectApply');
-
-/** @type {import('./actualApply')} */
-module.exports = $reflectApply || bind.call($call, $apply);
diff --git a/node_modules/call-bind-apply-helpers/applyBind.d.ts b/node_modules/call-bind-apply-helpers/applyBind.d.ts
deleted file mode 100644
index d176c1a..0000000
--- a/node_modules/call-bind-apply-helpers/applyBind.d.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import actualApply from './actualApply';
-
-type TupleSplitHead = T['length'] extends N
- ? T
- : T extends [...infer R, any]
- ? TupleSplitHead
- : never
-
-type TupleSplitTail = O['length'] extends N
- ? T
- : T extends [infer F, ...infer R]
- ? TupleSplitTail<[...R], N, [...O, F]>
- : never
-
-type TupleSplit = [TupleSplitHead, TupleSplitTail]
-
-declare function applyBind(...args: TupleSplit, 2>[1]): ReturnType;
-
-export = applyBind;
\ No newline at end of file
diff --git a/node_modules/call-bind-apply-helpers/applyBind.js b/node_modules/call-bind-apply-helpers/applyBind.js
deleted file mode 100644
index d2b7723..0000000
--- a/node_modules/call-bind-apply-helpers/applyBind.js
+++ /dev/null
@@ -1,10 +0,0 @@
-'use strict';
-
-var bind = require('function-bind');
-var $apply = require('./functionApply');
-var actualApply = require('./actualApply');
-
-/** @type {import('./applyBind')} */
-module.exports = function applyBind() {
- return actualApply(bind, $apply, arguments);
-};
diff --git a/node_modules/call-bind-apply-helpers/functionApply.d.ts b/node_modules/call-bind-apply-helpers/functionApply.d.ts
deleted file mode 100644
index 1f6e11b..0000000
--- a/node_modules/call-bind-apply-helpers/functionApply.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export = Function.prototype.apply;
\ No newline at end of file
diff --git a/node_modules/call-bind-apply-helpers/functionApply.js b/node_modules/call-bind-apply-helpers/functionApply.js
deleted file mode 100644
index c71df9c..0000000
--- a/node_modules/call-bind-apply-helpers/functionApply.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-
-/** @type {import('./functionApply')} */
-module.exports = Function.prototype.apply;
diff --git a/node_modules/call-bind-apply-helpers/functionCall.d.ts b/node_modules/call-bind-apply-helpers/functionCall.d.ts
deleted file mode 100644
index 15e93df..0000000
--- a/node_modules/call-bind-apply-helpers/functionCall.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export = Function.prototype.call;
\ No newline at end of file
diff --git a/node_modules/call-bind-apply-helpers/functionCall.js b/node_modules/call-bind-apply-helpers/functionCall.js
deleted file mode 100644
index 7a8d873..0000000
--- a/node_modules/call-bind-apply-helpers/functionCall.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-
-/** @type {import('./functionCall')} */
-module.exports = Function.prototype.call;
diff --git a/node_modules/call-bind-apply-helpers/index.d.ts b/node_modules/call-bind-apply-helpers/index.d.ts
deleted file mode 100644
index 541516b..0000000
--- a/node_modules/call-bind-apply-helpers/index.d.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-type RemoveFromTuple<
- Tuple extends readonly unknown[],
- RemoveCount extends number,
- Index extends 1[] = []
-> = Index["length"] extends RemoveCount
- ? Tuple
- : Tuple extends [infer First, ...infer Rest]
- ? RemoveFromTuple
- : Tuple;
-
-type ConcatTuples<
- Prefix extends readonly unknown[],
- Suffix extends readonly unknown[]
-> = [...Prefix, ...Suffix];
-
-type ExtractFunctionParams = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R
- ? { thisArg: TThis; params: P; returnType: R }
- : never;
-
-type BindFunction<
- T extends (this: any, ...args: any[]) => any,
- TThis,
- TBoundArgs extends readonly unknown[],
- ReceiverBound extends boolean
-> = ExtractFunctionParams extends {
- thisArg: infer OrigThis;
- params: infer P extends readonly unknown[];
- returnType: infer R;
-}
- ? ReceiverBound extends true
- ? (...args: RemoveFromTuple>) => R extends [OrigThis, ...infer Rest]
- ? [TThis, ...Rest] // Replace `this` with `thisArg`
- : R
- : >>(
- thisArg: U,
- ...args: RemainingArgs
- ) => R extends [OrigThis, ...infer Rest]
- ? [U, ...ConcatTuples] // Preserve bound args in return type
- : R
- : never;
-
-declare function callBind<
- const T extends (this: any, ...args: any[]) => any,
- Extracted extends ExtractFunctionParams,
- const TBoundArgs extends Partial & readonly unknown[],
- const TThis extends Extracted["thisArg"]
->(
- args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs]
-): BindFunction;
-
-declare function callBind<
- const T extends (this: any, ...args: any[]) => any,
- Extracted extends ExtractFunctionParams,
- const TBoundArgs extends Partial & readonly unknown[]
->(
- args: [fn: T, ...boundArgs: TBoundArgs]
-): BindFunction;
-
-declare function callBind(
- args: [fn: Exclude, ...rest: TArgs]
-): never;
-
-// export as namespace callBind;
-export = callBind;
diff --git a/node_modules/call-bind-apply-helpers/index.js b/node_modules/call-bind-apply-helpers/index.js
deleted file mode 100644
index 2f6dab4..0000000
--- a/node_modules/call-bind-apply-helpers/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use strict';
-
-var bind = require('function-bind');
-var $TypeError = require('es-errors/type');
-
-var $call = require('./functionCall');
-var $actualApply = require('./actualApply');
-
-/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */
-module.exports = function callBindBasic(args) {
- if (args.length < 1 || typeof args[0] !== 'function') {
- throw new $TypeError('a function is required');
- }
- return $actualApply(bind, $call, args);
-};
diff --git a/node_modules/call-bind-apply-helpers/package.json b/node_modules/call-bind-apply-helpers/package.json
deleted file mode 100644
index 923b8be..0000000
--- a/node_modules/call-bind-apply-helpers/package.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "name": "call-bind-apply-helpers",
- "version": "1.0.2",
- "description": "Helper functions around Function call/apply/bind, for use in `call-bind`",
- "main": "index.js",
- "exports": {
- ".": "./index.js",
- "./actualApply": "./actualApply.js",
- "./applyBind": "./applyBind.js",
- "./functionApply": "./functionApply.js",
- "./functionCall": "./functionCall.js",
- "./reflectApply": "./reflectApply.js",
- "./package.json": "./package.json"
- },
- "scripts": {
- "prepack": "npmignore --auto --commentLines=auto",
- "prepublish": "not-in-publish || npm run prepublishOnly",
- "prepublishOnly": "safe-publish-latest",
- "prelint": "evalmd README.md",
- "lint": "eslint --ext=.js,.mjs .",
- "postlint": "tsc -p . && attw -P",
- "pretest": "npm run lint",
- "tests-only": "nyc tape 'test/**/*.js'",
- "test": "npm run tests-only",
- "posttest": "npx npm@'>=10.2' audit --production",
- "version": "auto-changelog && git add CHANGELOG.md",
- "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git"
- },
- "author": "Jordan Harband ",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/ljharb/call-bind-apply-helpers/issues"
- },
- "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "devDependencies": {
- "@arethetypeswrong/cli": "^0.17.3",
- "@ljharb/eslint-config": "^21.1.1",
- "@ljharb/tsconfig": "^0.2.3",
- "@types/for-each": "^0.3.3",
- "@types/function-bind": "^1.1.10",
- "@types/object-inspect": "^1.13.0",
- "@types/tape": "^5.8.1",
- "auto-changelog": "^2.5.0",
- "encoding": "^0.1.13",
- "es-value-fixtures": "^1.7.1",
- "eslint": "=8.8.0",
- "evalmd": "^0.0.19",
- "for-each": "^0.3.5",
- "has-strict-mode": "^1.1.0",
- "in-publish": "^2.0.1",
- "npmignore": "^0.3.1",
- "nyc": "^10.3.2",
- "object-inspect": "^1.13.4",
- "safe-publish-latest": "^2.0.0",
- "tape": "^5.9.0",
- "typescript": "next"
- },
- "testling": {
- "files": "test/index.js"
- },
- "auto-changelog": {
- "output": "CHANGELOG.md",
- "template": "keepachangelog",
- "unreleased": false,
- "commitLimit": false,
- "backfillLimit": false,
- "hideCredit": true
- },
- "publishConfig": {
- "ignore": [
- ".github/workflows"
- ]
- },
- "engines": {
- "node": ">= 0.4"
- }
-}
diff --git a/node_modules/call-bind-apply-helpers/reflectApply.d.ts b/node_modules/call-bind-apply-helpers/reflectApply.d.ts
deleted file mode 100644
index 6b2ae76..0000000
--- a/node_modules/call-bind-apply-helpers/reflectApply.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-declare const reflectApply: false | typeof Reflect.apply;
-
-export = reflectApply;
diff --git a/node_modules/call-bind-apply-helpers/reflectApply.js b/node_modules/call-bind-apply-helpers/reflectApply.js
deleted file mode 100644
index 3d03caa..0000000
--- a/node_modules/call-bind-apply-helpers/reflectApply.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-
-/** @type {import('./reflectApply')} */
-module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;
diff --git a/node_modules/call-bind-apply-helpers/test/index.js b/node_modules/call-bind-apply-helpers/test/index.js
deleted file mode 100644
index 1cdc89e..0000000
--- a/node_modules/call-bind-apply-helpers/test/index.js
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-var callBind = require('../');
-var hasStrictMode = require('has-strict-mode')();
-var forEach = require('for-each');
-var inspect = require('object-inspect');
-var v = require('es-value-fixtures');
-
-var test = require('tape');
-
-test('callBindBasic', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- // @ts-expect-error
- function () { callBind([nonFunction]); },
- TypeError,
- inspect(nonFunction) + ' is not a function'
- );
- });
-
- var sentinel = { sentinel: true };
- /** @type {(this: T, a: A, b: B) => [T | undefined, A, B]} */
- var func = function (a, b) {
- // eslint-disable-next-line no-invalid-this
- return [!hasStrictMode && this === global ? undefined : this, a, b];
- };
- t.equal(func.length, 2, 'original function length is 2');
-
- /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */
- var bound = callBind([func]);
- /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */
- var boundR = callBind([func, sentinel]);
- /** type {((b: number) => [typeof sentinel, number, typeof b])} */
- var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]);
-
- // @ts-expect-error
- t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args');
-
- // @ts-expect-error
- t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args');
- // @ts-expect-error
- t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args');
- // @ts-expect-error
- t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args');
- // @ts-expect-error
- t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args');
-
- t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args');
- t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args');
- t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args');
- t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg');
-
- // @ts-expect-error
- t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args');
- // @ts-expect-error
- t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args');
- // @ts-expect-error
- t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args');
- // @ts-expect-error
- t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args');
-
- t.end();
-});
diff --git a/node_modules/call-bind-apply-helpers/tsconfig.json b/node_modules/call-bind-apply-helpers/tsconfig.json
deleted file mode 100644
index aef9993..0000000
--- a/node_modules/call-bind-apply-helpers/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "@ljharb/tsconfig",
- "compilerOptions": {
- "target": "es2021",
- },
- "exclude": [
- "coverage",
- ],
-}
\ No newline at end of file
diff --git a/node_modules/call-bound/.eslintrc b/node_modules/call-bound/.eslintrc
deleted file mode 100644
index 2612ed8..0000000
--- a/node_modules/call-bound/.eslintrc
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "root": true,
-
- "extends": "@ljharb",
-
- "rules": {
- "new-cap": [2, {
- "capIsNewExceptions": [
- "GetIntrinsic",
- ],
- }],
- },
-}
diff --git a/node_modules/call-bound/.github/FUNDING.yml b/node_modules/call-bound/.github/FUNDING.yml
deleted file mode 100644
index 2a2a135..0000000
--- a/node_modules/call-bound/.github/FUNDING.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# These are supported funding model platforms
-
-github: [ljharb]
-patreon: # Replace with a single Patreon username
-open_collective: # Replace with a single Open Collective username
-ko_fi: # Replace with a single Ko-fi username
-tidelift: npm/call-bound
-community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-liberapay: # Replace with a single Liberapay username
-issuehunt: # Replace with a single IssueHunt username
-otechie: # Replace with a single Otechie username
-custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/call-bound/.nycrc b/node_modules/call-bound/.nycrc
deleted file mode 100644
index bdd626c..0000000
--- a/node_modules/call-bound/.nycrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "all": true,
- "check-coverage": false,
- "reporter": ["text-summary", "text", "html", "json"],
- "exclude": [
- "coverage",
- "test"
- ]
-}
diff --git a/node_modules/call-bound/CHANGELOG.md b/node_modules/call-bound/CHANGELOG.md
deleted file mode 100644
index 8bde4e9..0000000
--- a/node_modules/call-bound/CHANGELOG.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [v1.0.4](https://github.com/ljharb/call-bound/compare/v1.0.3...v1.0.4) - 2025-03-03
-
-### Commits
-
-- [types] improve types [`e648922`](https://github.com/ljharb/call-bound/commit/e6489222a9e54f350fbf952ceabe51fd8b6027ff)
-- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`a42a5eb`](https://github.com/ljharb/call-bound/commit/a42a5ebe6c1b54fcdc7997c7dc64fdca9e936719)
-- [Deps] update `call-bind-apply-helpers`, `get-intrinsic` [`f529eac`](https://github.com/ljharb/call-bound/commit/f529eac132404c17156bbc23ab2297a25d0f20b8)
-
-## [v1.0.3](https://github.com/ljharb/call-bound/compare/v1.0.2...v1.0.3) - 2024-12-15
-
-### Commits
-
-- [Refactor] use `call-bind-apply-helpers` instead of `call-bind` [`5e0b134`](https://github.com/ljharb/call-bound/commit/5e0b13496df14fb7d05dae9412f088da8d3f75be)
-- [Deps] update `get-intrinsic` [`41fc967`](https://github.com/ljharb/call-bound/commit/41fc96732a22c7b7e8f381f93ccc54bb6293be2e)
-- [readme] fix example [`79a0137`](https://github.com/ljharb/call-bound/commit/79a0137723f7c6d09c9c05452bbf8d5efb5d6e49)
-- [meta] add `sideEffects` flag [`08b07be`](https://github.com/ljharb/call-bound/commit/08b07be7f1c03f67dc6f3cdaf0906259771859f7)
-
-## [v1.0.2](https://github.com/ljharb/call-bound/compare/v1.0.1...v1.0.2) - 2024-12-10
-
-### Commits
-
-- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `gopd` [`e6a5ffe`](https://github.com/ljharb/call-bound/commit/e6a5ffe849368fe4f74dfd6cdeca1b9baa39e8d5)
-- [Deps] update `call-bind`, `get-intrinsic` [`2aeb5b5`](https://github.com/ljharb/call-bound/commit/2aeb5b521dc2b2683d1345c753ea1161de2d1c14)
-- [types] improve return type [`1a0c9fe`](https://github.com/ljharb/call-bound/commit/1a0c9fe3114471e7ca1f57d104e2efe713bb4871)
-
-## v1.0.1 - 2024-12-05
-
-### Commits
-
-- Initial implementation, tests, readme, types [`6d94121`](https://github.com/ljharb/call-bound/commit/6d94121a9243602e506334069f7a03189fe3363d)
-- Initial commit [`0eae867`](https://github.com/ljharb/call-bound/commit/0eae867334ea025c33e6e91cdecfc9df96680cf9)
-- npm init [`71b2479`](https://github.com/ljharb/call-bound/commit/71b2479c6723e0b7d91a6b663613067e98b7b275)
-- Only apps should have lockfiles [`c3754a9`](https://github.com/ljharb/call-bound/commit/c3754a949b7f9132b47e2d18c1729889736741eb)
-- [actions] skip `npm ls` in node < 10 [`74275a5`](https://github.com/ljharb/call-bound/commit/74275a5186b8caf6309b6b97472bdcb0df4683a8)
-- [Dev Deps] add missing peer dep [`1354de8`](https://github.com/ljharb/call-bound/commit/1354de8679413e4ae9c523d85f76fa7a5e032d97)
diff --git a/node_modules/call-bound/LICENSE b/node_modules/call-bound/LICENSE
deleted file mode 100644
index f82f389..0000000
--- a/node_modules/call-bound/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2024 Jordan Harband
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/call-bound/README.md b/node_modules/call-bound/README.md
deleted file mode 100644
index a44e43e..0000000
--- a/node_modules/call-bound/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# call-bound [![Version Badge][npm-version-svg]][package-url]
-
-[![github actions][actions-image]][actions-url]
-[![coverage][codecov-image]][codecov-url]
-[![dependency status][deps-svg]][deps-url]
-[![dev dependency status][dev-deps-svg]][dev-deps-url]
-[![License][license-image]][license-url]
-[![Downloads][downloads-image]][downloads-url]
-
-[![npm badge][npm-badge-png]][package-url]
-
-Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`.
-
-## Getting started
-
-```sh
-npm install --save call-bound
-```
-
-## Usage/Examples
-
-```js
-const assert = require('assert');
-const callBound = require('call-bound');
-
-const slice = callBound('Array.prototype.slice');
-
-delete Function.prototype.call;
-delete Function.prototype.bind;
-delete Array.prototype.slice;
-
-assert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]);
-```
-
-## Tests
-
-Clone the repo, `npm install`, and run `npm test`
-
-[package-url]: https://npmjs.org/package/call-bound
-[npm-version-svg]: https://versionbadg.es/ljharb/call-bound.svg
-[deps-svg]: https://david-dm.org/ljharb/call-bound.svg
-[deps-url]: https://david-dm.org/ljharb/call-bound
-[dev-deps-svg]: https://david-dm.org/ljharb/call-bound/dev-status.svg
-[dev-deps-url]: https://david-dm.org/ljharb/call-bound#info=devDependencies
-[npm-badge-png]: https://nodei.co/npm/call-bound.png?downloads=true&stars=true
-[license-image]: https://img.shields.io/npm/l/call-bound.svg
-[license-url]: LICENSE
-[downloads-image]: https://img.shields.io/npm/dm/call-bound.svg
-[downloads-url]: https://npm-stat.com/charts.html?package=call-bound
-[codecov-image]: https://codecov.io/gh/ljharb/call-bound/branch/main/graphs/badge.svg
-[codecov-url]: https://app.codecov.io/gh/ljharb/call-bound/
-[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bound
-[actions-url]: https://github.com/ljharb/call-bound/actions
diff --git a/node_modules/call-bound/index.d.ts b/node_modules/call-bound/index.d.ts
deleted file mode 100644
index 5562f00..0000000
--- a/node_modules/call-bound/index.d.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-type Intrinsic = typeof globalThis;
-
-type IntrinsicName = keyof Intrinsic | `%${keyof Intrinsic}%`;
-
-type IntrinsicPath = IntrinsicName | `${StripPercents}.${string}` | `%${StripPercents}.${string}%`;
-
-type AllowMissing = boolean;
-
-type StripPercents = T extends `%${infer U}%` ? U : T;
-
-type BindMethodPrecise =
- F extends (this: infer This, ...args: infer Args) => infer R
- ? (obj: This, ...args: Args) => R
- : F extends {
- (this: infer This1, ...args: infer Args1): infer R1;
- (this: infer This2, ...args: infer Args2): infer R2
- }
- ? {
- (obj: This1, ...args: Args1): R1;
- (obj: This2, ...args: Args2): R2
- }
- : never
-
-// Extract method type from a prototype
-type GetPrototypeMethod =
- (typeof globalThis)[T] extends { prototype: any }
- ? M extends keyof (typeof globalThis)[T]['prototype']
- ? (typeof globalThis)[T]['prototype'][M]
- : never
- : never
-
-// Get static property/method
-type GetStaticMember =
- P extends keyof (typeof globalThis)[T] ? (typeof globalThis)[T][P] : never
-
-// Type that maps string path to actual bound function or value with better precision
-type BoundIntrinsic =
- S extends `${infer Obj}.prototype.${infer Method}`
- ? Obj extends keyof typeof globalThis
- ? BindMethodPrecise>
- : unknown
- : S extends `${infer Obj}.${infer Prop}`
- ? Obj extends keyof typeof globalThis
- ? GetStaticMember
- : unknown
- : unknown
-
-declare function arraySlice(array: readonly T[], start?: number, end?: number): T[];
-declare function arraySlice(array: ArrayLike, start?: number, end?: number): T[];
-declare function arraySlice(array: IArguments, start?: number, end?: number): T[];
-
-// Special cases for methods that need explicit typing
-interface SpecialCases {
- '%Object.prototype.isPrototypeOf%': (thisArg: {}, obj: unknown) => boolean;
- '%String.prototype.replace%': {
- (str: string, searchValue: string | RegExp, replaceValue: string): string;
- (str: string, searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string
- };
- '%Object.prototype.toString%': (obj: {}) => string;
- '%Object.prototype.hasOwnProperty%': (obj: {}, v: PropertyKey) => boolean;
- '%Array.prototype.slice%': typeof arraySlice;
- '%Array.prototype.map%': (array: readonly T[], callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any) => U[];
- '%Array.prototype.filter%': (array: readonly T[], predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any) => T[];
- '%Array.prototype.indexOf%': (array: readonly T[], searchElement: T, fromIndex?: number) => number;
- '%Function.prototype.apply%': (fn: (...args: A) => R, thisArg: any, args: A) => R;
- '%Function.prototype.call%': (fn: (...args: A) => R, thisArg: any, ...args: A) => R;
- '%Function.prototype.bind%': (fn: (...args: A) => R, thisArg: any, ...args: A) => (...remainingArgs: A) => R;
- '%Promise.prototype.then%': {
- (promise: Promise, onfulfilled: (value: T) => R | PromiseLike): Promise;
- (promise: Promise, onfulfilled: ((value: T) => R | PromiseLike) | undefined | null, onrejected: (reason: any) => R | PromiseLike): Promise;
- };
- '%RegExp.prototype.test%': (regexp: RegExp, str: string) => boolean;
- '%RegExp.prototype.exec%': (regexp: RegExp, str: string) => RegExpExecArray | null;
- '%Error.prototype.toString%': (error: Error) => string;
- '%TypeError.prototype.toString%': (error: TypeError) => string;
- '%String.prototype.split%': (
- obj: unknown,
- splitter: string | RegExp | {
- [Symbol.split](string: string, limit?: number): string[];
- },
- limit?: number | undefined
- ) => string[];
-}
-
-/**
- * Returns a bound function for a prototype method, or a value for a static property.
- *
- * @param name - The name of the intrinsic (e.g. 'Array.prototype.slice')
- * @param {AllowMissing} [allowMissing] - Whether to allow missing intrinsics (default: false)
- */
-declare function callBound, S extends IntrinsicPath>(name: K, allowMissing?: AllowMissing): SpecialCases[`%${StripPercents}%`];
-declare function callBound, S extends IntrinsicPath>(name: S, allowMissing?: AllowMissing): BoundIntrinsic;
-
-export = callBound;
diff --git a/node_modules/call-bound/index.js b/node_modules/call-bound/index.js
deleted file mode 100644
index e9ade74..0000000
--- a/node_modules/call-bound/index.js
+++ /dev/null
@@ -1,19 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('get-intrinsic');
-
-var callBindBasic = require('call-bind-apply-helpers');
-
-/** @type {(thisArg: string, searchString: string, position?: number) => number} */
-var $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);
-
-/** @type {import('.')} */
-module.exports = function callBoundIntrinsic(name, allowMissing) {
- /* eslint no-extra-parens: 0 */
-
- var intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));
- if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
- return callBindBasic(/** @type {const} */ ([intrinsic]));
- }
- return intrinsic;
-};
diff --git a/node_modules/call-bound/package.json b/node_modules/call-bound/package.json
deleted file mode 100644
index d542db4..0000000
--- a/node_modules/call-bound/package.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "name": "call-bound",
- "version": "1.0.4",
- "description": "Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`.",
- "main": "index.js",
- "exports": {
- ".": "./index.js",
- "./package.json": "./package.json"
- },
- "sideEffects": false,
- "scripts": {
- "prepack": "npmignore --auto --commentLines=auto",
- "prepublish": "not-in-publish || npm run prepublishOnly",
- "prepublishOnly": "safe-publish-latest",
- "prelint": "evalmd README.md",
- "lint": "eslint --ext=.js,.mjs .",
- "postlint": "tsc -p . && attw -P",
- "pretest": "npm run lint",
- "tests-only": "nyc tape 'test/**/*.js'",
- "test": "npm run tests-only",
- "posttest": "npx npm@'>=10.2' audit --production",
- "version": "auto-changelog && git add CHANGELOG.md",
- "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/ljharb/call-bound.git"
- },
- "keywords": [
- "javascript",
- "ecmascript",
- "es",
- "js",
- "callbind",
- "callbound",
- "call",
- "bind",
- "bound",
- "call-bind",
- "call-bound",
- "function",
- "es-abstract"
- ],
- "author": "Jordan Harband ",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/ljharb/call-bound/issues"
- },
- "homepage": "https://github.com/ljharb/call-bound#readme",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "devDependencies": {
- "@arethetypeswrong/cli": "^0.17.4",
- "@ljharb/eslint-config": "^21.1.1",
- "@ljharb/tsconfig": "^0.3.0",
- "@types/call-bind": "^1.0.5",
- "@types/get-intrinsic": "^1.2.3",
- "@types/tape": "^5.8.1",
- "auto-changelog": "^2.5.0",
- "encoding": "^0.1.13",
- "es-value-fixtures": "^1.7.1",
- "eslint": "=8.8.0",
- "evalmd": "^0.0.19",
- "for-each": "^0.3.5",
- "gopd": "^1.2.0",
- "has-strict-mode": "^1.1.0",
- "in-publish": "^2.0.1",
- "npmignore": "^0.3.1",
- "nyc": "^10.3.2",
- "object-inspect": "^1.13.4",
- "safe-publish-latest": "^2.0.0",
- "tape": "^5.9.0",
- "typescript": "next"
- },
- "testling": {
- "files": "test/index.js"
- },
- "auto-changelog": {
- "output": "CHANGELOG.md",
- "template": "keepachangelog",
- "unreleased": false,
- "commitLimit": false,
- "backfillLimit": false,
- "hideCredit": true
- },
- "publishConfig": {
- "ignore": [
- ".github/workflows"
- ]
- },
- "engines": {
- "node": ">= 0.4"
- }
-}
diff --git a/node_modules/call-bound/test/index.js b/node_modules/call-bound/test/index.js
deleted file mode 100644
index a2fc9f0..0000000
--- a/node_modules/call-bound/test/index.js
+++ /dev/null
@@ -1,61 +0,0 @@
-'use strict';
-
-var test = require('tape');
-
-var callBound = require('../');
-
-/** @template {true} T @template U @typedef {T extends U ? T : never} AssertType */
-
-test('callBound', function (t) {
- // static primitive
- t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself');
- t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself');
-
- // static non-function object
- t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself');
- t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself');
- t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself');
- t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself');
-
- // static function
- t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself');
- t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself');
-
- // prototype primitive
- t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself');
- t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself');
-
- var x = callBound('Object.prototype.toString');
- var y = callBound('%Object.prototype.toString%');
-
- // prototype function
- t.notEqual(x, Object.prototype.toString, 'Object.prototype.toString does not yield itself');
- t.notEqual(y, Object.prototype.toString, '%Object.prototype.toString% does not yield itself');
- t.equal(x(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original');
- t.equal(y(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original');
-
- t['throws'](
- // @ts-expect-error
- function () { callBound('does not exist'); },
- SyntaxError,
- 'nonexistent intrinsic throws'
- );
- t['throws'](
- // @ts-expect-error
- function () { callBound('does not exist', true); },
- SyntaxError,
- 'allowMissing arg still throws for unknown intrinsic'
- );
-
- t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) {
- st['throws'](
- function () { callBound('WeakRef'); },
- TypeError,
- 'real but absent intrinsic throws'
- );
- st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception');
- st.end();
- });
-
- t.end();
-});
diff --git a/node_modules/call-bound/tsconfig.json b/node_modules/call-bound/tsconfig.json
deleted file mode 100644
index 8976d98..0000000
--- a/node_modules/call-bound/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extends": "@ljharb/tsconfig",
- "compilerOptions": {
- "target": "ESNext",
- "lib": ["es2024"],
- },
- "exclude": [
- "coverage",
- ],
-}
diff --git a/node_modules/call-me-maybe/LICENSE b/node_modules/call-me-maybe/LICENSE
deleted file mode 100644
index 8447d84..0000000
--- a/node_modules/call-me-maybe/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Eric McCarthy
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/node_modules/call-me-maybe/README.md b/node_modules/call-me-maybe/README.md
deleted file mode 100644
index 33e8744..0000000
--- a/node_modules/call-me-maybe/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# call-me-maybe [](https://github.com/limulus/call-me-maybe/actions/workflows/continuous-release.yaml)
-
-Let your JS API users either give you a callback or receive a promise.
-
-## Usage
-
-```javascript
-var maybe = require("call-me-maybe")
-
-module.exports = function asyncFunc (cb) {
- return maybe(cb, new Promise(function(resolve, reject) {
- // ...
- }))
-}
-```
-
-## API
-
-### maybe(cb, promise)
-
-If the callback `cb` is truthy, returns `undefined` and will call `cb` when `promise` is settled. The parameters passed to `cb` are standard error-first:
-
- - If `promise` is fulfilled, then it is called with the result of the promise: `cb(null, result)`
- - If `promise` is rejected, then it is called with the rejection error: `cb(err)`
-
-If `cb` is falsey, then `promise` is returned.
diff --git a/node_modules/call-me-maybe/package.json b/node_modules/call-me-maybe/package.json
deleted file mode 100644
index 3484474..0000000
--- a/node_modules/call-me-maybe/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "call-me-maybe",
- "version": "1.0.2",
- "description": "Let your JS API users either give you a callback or receive a promise",
- "main": "src/maybe.js",
- "files": [
- "src"
- ],
- "devDependencies": {
- "@commitlint/config-conventional": "^17.1.0",
- "browserify": "^17.0.0",
- "commitlint": "^17.1.2",
- "husky": "^7.0.0",
- "is-ci": "^3.0.1",
- "karma": "^6.4.1",
- "karma-browserify": "^8.1.0",
- "karma-browserstack-launcher": "^1.6.0",
- "karma-mocha": "^2.0.1",
- "mocha": "^2.3.2",
- "promise": "^7.0.4",
- "semantic-release": "^19.0.5"
- },
- "scripts": {
- "test": "mocha",
- "prepare": "is-ci || husky install",
- "test-browsers": "karma start"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/limulus/call-me-maybe.git"
- },
- "keywords": [
- "promise",
- "callback",
- "denodeify",
- "promisify",
- "carlyraejepsen"
- ],
- "author": "Eric McCarthy (http://www.limulus.net/)",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/limulus/call-me-maybe/issues"
- },
- "homepage": "https://github.com/limulus/call-me-maybe#readme"
-}
diff --git a/node_modules/call-me-maybe/src/maybe.js b/node_modules/call-me-maybe/src/maybe.js
deleted file mode 100644
index 705e72c..0000000
--- a/node_modules/call-me-maybe/src/maybe.js
+++ /dev/null
@@ -1,18 +0,0 @@
-"use strict"
-
-var next = require('./next.js')
-
-module.exports = function maybe (cb, promise) {
- if (cb) {
- promise
- .then(function (result) {
- next(function () { cb(null, result) })
- }, function (err) {
- next(function () { cb(err) })
- })
- return undefined
- }
- else {
- return promise
- }
-}
diff --git a/node_modules/call-me-maybe/src/next.js b/node_modules/call-me-maybe/src/next.js
deleted file mode 100644
index cac934b..0000000
--- a/node_modules/call-me-maybe/src/next.js
+++ /dev/null
@@ -1,15 +0,0 @@
-'use strict'
-
-function makeNext () {
- if (typeof process === 'object' && typeof process.nextTick === 'function') {
- return process.nextTick
- } else if (typeof setImmediate === 'function') {
- return setImmediate
- } else {
- return function next (f) {
- setTimeout(f, 0)
- }
- }
-}
-
-module.exports = makeNext()
diff --git a/node_modules/commander/CHANGELOG.md b/node_modules/commander/CHANGELOG.md
deleted file mode 100644
index c329ca3..0000000
--- a/node_modules/commander/CHANGELOG.md
+++ /dev/null
@@ -1,354 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
-and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)
-
-
-
-
-## [6.2.0] (2020-10-25)
-
-### Added
-
-- added 'tsx' file extension for stand-alone executable subcommands ([#1368])
-- documented second parameter to `.description()` to describe command arguments ([#1353])
-- documentation of special cases with options taking varying numbers of option-arguments ([#1332])
-- documentation for terminology ([#1361])
-
-### Fixed
-
-- add missing TypeScript definition for `.addHelpCommand()' ([#1375])
-- removed blank line after "Arguments:" in help, to match "Options:" and "Commands:" ([#1360])
-
-### Changed
-
-- update dependencies
-
-## [6.1.0] (2020-08-28)
-
-### Added
-
-- include URL to relevant section of README for error for potential conflict between Command properties and option values ([#1306])
-- `.combineFlagAndOptionalValue(false)` to ease upgrade path from older versions of Commander ([#1326])
-- allow disabling the built-in help option using `.helpOption(false)` ([#1325])
-- allow just some arguments in `argumentDescription` to `.description()` ([#1323])
-
-### Changed
-
-- tidy async test and remove lint override ([#1312])
-
-### Fixed
-
-- executable subcommand launching when script path not known ([#1322])
-
-## [6.0.0] (2020-07-21)
-
-### Added
-
-- add support for variadic options ([#1250])
-- allow options to be added with just a short flag ([#1256])
- - *Breaking* the option property has same case as flag. e.g. flag `-n` accessed as `opts().n` (previously uppercase)
-- *Breaking* throw an error if there might be a clash between option name and a Command property, with advice on how to resolve ([#1275])
-
-### Fixed
-
-- Options which contain -no- in the middle of the option flag should not be treated as negatable. ([#1301])
-
-## [6.0.0-0] (2020-06-20)
-
-(Released in 6.0.0)
-
-## [5.1.0] (2020-04-25)
-
-### Added
-
-- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236])
-- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232])
-
-### Fixed
-
-- omit masked help flags from the displayed help ([#645], [#1247])
-- remove old short help flag when change help flags using `helpOption` ([#1248])
-
-### Changed
-
-- remove use of `arguments` to improve auto-generated help in editors ([#1235])
-- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232])
-- improvements to documentation
-- update dependencies
-- update tested versions of node
-- eliminate lint errors in TypeScript ([#1208])
-
-## [5.0.0] (2020-03-14)
-
-### Added
-
-* support for nested commands with action-handlers ([#1] [#764] [#1149])
-* `.addCommand()` for adding a separately configured command ([#764] [#1149])
-* allow a non-executable to be set as the default command ([#742] [#1149])
-* implicit help command when there are subcommands (previously only if executables) ([#1149])
-* customise implicit help command with `.addHelpCommand()` ([#1149])
-* display error message for unknown subcommand, by default ([#432] [#1088] [#1149])
-* display help for missing subcommand, by default ([#1088] [#1149])
-* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145])
-* `.parseOption()` includes short flag and long flag expansions ([#1145])
-* `.helpInformation()` returns help text as a string, previously a private routine ([#1169])
-* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172])
-* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172])
-* suggest help option along with unknown command error ([#1179])
-* TypeScript definition for `commands` property of `Command` ([#1184])
-* export `program` property ([#1195])
-* `createCommand` factory method to simplify subclassing ([#1191])
-
-### Fixed
-
-* preserve argument order in subcommands ([#508] [#962] [#1138])
-* do not emit `command:*` for executable subcommands ([#809] [#1149])
-* action handler called whether or not there are non-option arguments ([#1062] [#1149])
-* combining option short flag and value in single argument now works for subcommands ([#1145])
-* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149])
-* implicit help command works with command aliases ([#948] [#1149])
-* options are validated whether or not there is an action handler ([#1149])
-
-### Changed
-
-* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138])
-* *Breaking* display error if required argument for command is missing ([#995] [#1149])
-* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119])
-* *Breaking* `.allowUnknownOption()` ([#802] [#1138])
- * unknown options included in arguments passed to command action handler
- * unknown options included in `.args`
-* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145])
-* *Breaking* `.parseOptions()` ([#1138])
- * `args` in returned result renamed `operands` and does not include anything after first unknown option
- * `unknown` in returned result has arguments after first unknown option including operands, not just options and values
-* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138])
-* refactor Option from prototype to class ([#1133])
-* refactor Command from prototype to class ([#1159])
-* changes to error handling ([#1165])
- * throw for author error, not just display message
- * preflight for variadic error
- * add tips to missing subcommand executable
-* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180])
-* `.parseAsync` returns `Promise` to be consistent with `.parse()` ([#1180])
-* update dependencies
-
-### Removed
-
-* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146])
-* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145])
-* `parseExpectedArgs` is now private ([#1149])
-
-### Migration Tips
-
-If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour.
-
-If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour.
-
-If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command.
-
-If you want to continue combining short options with optional values as though they were boolean flags, set `combineFlagAndOptionalValue(false)`
-to expand `-fb` to `-f -b` rather than `-f b`.
-
-## [5.0.0-4] (2020-03-03)
-
-(Released in 5.0.0)
-
-## [5.0.0-3] (2020-02-20)
-
-(Released in 5.0.0)
-
-## [5.0.0-2] (2020-02-10)
-
-(Released in 5.0.0)
-
-## [5.0.0-1] (2020-02-08)
-
-(Released in 5.0.0)
-
-## [5.0.0-0] (2020-02-02)
-
-(Released in 5.0.0)
-
-## [4.1.1] (2020-02-02)
-
-### Fixed
-
-* TypeScript definition for `.action()` should include Promise for async ([#1157])
-
-## [4.1.0] (2020-01-06)
-
-### Added
-
-* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102])
- * see storeOptionsAsProperties and passCommandToAction in README
-* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118])
-
-### Fixed
-
-* Remove trailing blanks from wrapped help text ([#1096])
-
-### Changed
-
-* update dependencies
-* extend security coverage for Commander 2.x to 2020-02-03
-* improvements to README
-* improvements to TypeScript definition documentation
-* move old versions out of main CHANGELOG
-* removed explicit use of `ts-node` in tests
-
-## [4.0.1] (2019-11-12)
-
-### Fixed
-
-* display help when requested, even if there are missing required options ([#1091])
-
-## [4.0.0] (2019-11-02)
-
-### Added
-
-* automatically wrap and indent help descriptions for options and commands ([#1051])
-* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040])
-* support for declaring required options with `.requiredOptions()` ([#1071])
-* GitHub Actions support ([#1027])
-* translation links in README
-
-### Changed
-
-* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035])
-* call default subcommand even when there are unknown options ([#1047])
-* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053])
-
-### Fixed
-
-* *Breaking* keep command object out of program.args when action handler called ([#1048])
- * also, action handler now passed array of unknown arguments
-* complain about unknown options when program argument supplied and action handler ([#1049])
- * this changes parameters to `command:*` event to include unknown arguments
-* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052])
-* rework TypeScript declarations to bring all types into imported namespace ([#1081])
-
-### Migration Tips
-
-#### Testing for no arguments
-
-If you were previously using code like:
-
-```js
-if (!program.args.length) ...
-```
-
-a partial replacement is:
-
-```js
-if (program.rawArgs.length < 3) ...
-```
-
-## [4.0.0-1] Prerelease (2019-10-08)
-
-(Released in 4.0.0)
-
-## [4.0.0-0] Prerelease (2019-10-01)
-
-(Released in 4.0.0)
-
-## Older versions
-
-* [3.x](./changelogs/CHANGELOG-3.md)
-* [2.x](./changelogs/CHANGELOG-2.md)
-* [1.x](./changelogs/CHANGELOG-1.md)
-* [0.x](./changelogs/CHANGELOG-0.md)
-
-[#1]: https://github.com/tj/commander.js/issues/1
-[#432]: https://github.com/tj/commander.js/issues/432
-[#508]: https://github.com/tj/commander.js/issues/508
-[#512]: https://github.com/tj/commander.js/issues/512
-[#531]: https://github.com/tj/commander.js/issues/531
-[#645]: https://github.com/tj/commander.js/issues/645
-[#742]: https://github.com/tj/commander.js/issues/742
-[#764]: https://github.com/tj/commander.js/issues/764
-[#802]: https://github.com/tj/commander.js/issues/802
-[#806]: https://github.com/tj/commander.js/issues/806
-[#809]: https://github.com/tj/commander.js/issues/809
-[#948]: https://github.com/tj/commander.js/issues/948
-[#962]: https://github.com/tj/commander.js/issues/962
-[#995]: https://github.com/tj/commander.js/issues/995
-[#1027]: https://github.com/tj/commander.js/pull/1027
-[#1032]: https://github.com/tj/commander.js/issues/1032
-[#1035]: https://github.com/tj/commander.js/pull/1035
-[#1040]: https://github.com/tj/commander.js/pull/1040
-[#1047]: https://github.com/tj/commander.js/pull/1047
-[#1048]: https://github.com/tj/commander.js/pull/1048
-[#1049]: https://github.com/tj/commander.js/pull/1049
-[#1051]: https://github.com/tj/commander.js/pull/1051
-[#1052]: https://github.com/tj/commander.js/pull/1052
-[#1053]: https://github.com/tj/commander.js/pull/1053
-[#1062]: https://github.com/tj/commander.js/pull/1062
-[#1071]: https://github.com/tj/commander.js/pull/1071
-[#1081]: https://github.com/tj/commander.js/pull/1081
-[#1088]: https://github.com/tj/commander.js/issues/1088
-[#1091]: https://github.com/tj/commander.js/pull/1091
-[#1096]: https://github.com/tj/commander.js/pull/1096
-[#1102]: https://github.com/tj/commander.js/pull/1102
-[#1118]: https://github.com/tj/commander.js/pull/1118
-[#1119]: https://github.com/tj/commander.js/pull/1119
-[#1133]: https://github.com/tj/commander.js/pull/1133
-[#1138]: https://github.com/tj/commander.js/pull/1138
-[#1145]: https://github.com/tj/commander.js/pull/1145
-[#1146]: https://github.com/tj/commander.js/pull/1146
-[#1149]: https://github.com/tj/commander.js/pull/1149
-[#1153]: https://github.com/tj/commander.js/issues/1153
-[#1157]: https://github.com/tj/commander.js/pull/1157
-[#1159]: https://github.com/tj/commander.js/pull/1159
-[#1165]: https://github.com/tj/commander.js/pull/1165
-[#1169]: https://github.com/tj/commander.js/pull/1169
-[#1172]: https://github.com/tj/commander.js/pull/1172
-[#1179]: https://github.com/tj/commander.js/pull/1179
-[#1180]: https://github.com/tj/commander.js/pull/1180
-[#1184]: https://github.com/tj/commander.js/pull/1184
-[#1191]: https://github.com/tj/commander.js/pull/1191
-[#1195]: https://github.com/tj/commander.js/pull/1195
-[#1208]: https://github.com/tj/commander.js/pull/1208
-[#1232]: https://github.com/tj/commander.js/pull/1232
-[#1235]: https://github.com/tj/commander.js/pull/1235
-[#1236]: https://github.com/tj/commander.js/pull/1236
-[#1247]: https://github.com/tj/commander.js/pull/1247
-[#1248]: https://github.com/tj/commander.js/pull/1248
-[#1250]: https://github.com/tj/commander.js/pull/1250
-[#1256]: https://github.com/tj/commander.js/pull/1256
-[#1275]: https://github.com/tj/commander.js/pull/1275
-[#1301]: https://github.com/tj/commander.js/issues/1301
-[#1306]: https://github.com/tj/commander.js/pull/1306
-[#1312]: https://github.com/tj/commander.js/pull/1312
-[#1322]: https://github.com/tj/commander.js/pull/1322
-[#1323]: https://github.com/tj/commander.js/pull/1323
-[#1325]: https://github.com/tj/commander.js/pull/1325
-[#1326]: https://github.com/tj/commander.js/pull/1326
-[#1332]: https://github.com/tj/commander.js/pull/1332
-[#1353]: https://github.com/tj/commander.js/pull/1353
-[#1360]: https://github.com/tj/commander.js/pull/1360
-[#1361]: https://github.com/tj/commander.js/pull/1361
-[#1368]: https://github.com/tj/commander.js/pull/1368
-[#1375]: https://github.com/tj/commander.js/pull/1375
-
-
-[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
-[6.2.0]: https://github.com/tj/commander.js/compare/v6.1.0..v6.2.0
-[6.1.0]: https://github.com/tj/commander.js/compare/v6.0.0..v6.1.0
-[6.0.0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0
-[6.0.0-0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0-0
-[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0
-[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0
-[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4
-[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3
-[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2
-[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1
-[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0
-[4.1.1]: https://github.com/tj/commander.js/compare/v4.1.0..v4.1.1
-[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0
-[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1
-[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0
-[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1
-[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0
diff --git a/node_modules/commander/LICENSE b/node_modules/commander/LICENSE
deleted file mode 100644
index 10f997a..0000000
--- a/node_modules/commander/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2011 TJ Holowaychuk
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md
deleted file mode 100644
index 45cd755..0000000
--- a/node_modules/commander/Readme.md
+++ /dev/null
@@ -1,791 +0,0 @@
-# Commander.js
-
-[](http://travis-ci.org/tj/commander.js)
-[](https://www.npmjs.org/package/commander)
-[](https://npmcharts.com/compare/commander?minimal=true)
-[](https://packagephobia.now.sh/result?p=commander)
-
-The complete solution for [node.js](http://nodejs.org) command-line interfaces.
-
-Read this in other languages: English | [简体中文](./Readme_zh-CN.md)
-
-- [Commander.js](#commanderjs)
- - [Installation](#installation)
- - [Declaring _program_ variable](#declaring-program-variable)
- - [Options](#options)
- - [Common option types, boolean and value](#common-option-types-boolean-and-value)
- - [Default option value](#default-option-value)
- - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue)
- - [Custom option processing](#custom-option-processing)
- - [Required option](#required-option)
- - [Variadic option](#variadic-option)
- - [Version option](#version-option)
- - [Commands](#commands)
- - [Specify the argument syntax](#specify-the-argument-syntax)
- - [Action handler (sub)commands](#action-handler-subcommands)
- - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)
- - [Automated help](#automated-help)
- - [Custom help](#custom-help)
- - [.usage and .name](#usage-and-name)
- - [.help(cb)](#helpcb)
- - [.outputHelp(cb)](#outputhelpcb)
- - [.helpInformation()](#helpinformation)
- - [.helpOption(flags, description)](#helpoptionflags-description)
- - [.addHelpCommand()](#addhelpcommand)
- - [Custom event listeners](#custom-event-listeners)
- - [Bits and pieces](#bits-and-pieces)
- - [.parse() and .parseAsync()](#parse-and-parseasync)
- - [Avoiding option name clashes](#avoiding-option-name-clashes)
- - [TypeScript](#typescript)
- - [createCommand()](#createcommand)
- - [Import into ECMAScript Module](#import-into-ecmascript-module)
- - [Node options such as `--harmony`](#node-options-such-as---harmony)
- - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)
- - [Override exit handling](#override-exit-handling)
- - [Examples](#examples)
- - [Support](#support)
- - [Commander for enterprise](#commander-for-enterprise)
-
-For information about terms used in this document see: [terminology](./docs/terminology.md)
-
-## Installation
-
-```bash
-npm install commander
-```
-
-## Declaring _program_ variable
-
-Commander exports a global object which is convenient for quick programs.
-This is used in the examples in this README for brevity.
-
-```js
-const { program } = require('commander');
-program.version('0.0.1');
-```
-
-For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.
-
-```js
-const { Command } = require('commander');
-const program = new Command();
-program.version('0.0.1');
-```
-
-## Options
-
-Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|').
-
-The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes).
-
-Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, followed by a single option taking a value (possibly followed by the value).
-For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`.
-
-You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.
-
-Options on the command line are not positional, and can be specified before or after other arguments.
-
-### Common option types, boolean and value
-
-The two most used option types are a boolean option, and an option which takes its value
-from the following argument (declared with angle brackets like `--expect `). Both are `undefined` unless specified on command line.
-
-Example file: [options-common.js](./examples/options-common.js)
-
-```js
-program
- .option('-d, --debug', 'output extra debugging')
- .option('-s, --small', 'small pizza size')
- .option('-p, --pizza-type ', 'flavour of pizza');
-
-program.parse(process.argv);
-
-if (program.debug) console.log(program.opts());
-console.log('pizza details:');
-if (program.small) console.log('- small pizza size');
-if (program.pizzaType) console.log(`- ${program.pizzaType}`);
-```
-
-```bash
-$ pizza-options -d
-{ debug: true, small: undefined, pizzaType: undefined }
-pizza details:
-$ pizza-options -p
-error: option '-p, --pizza-type ' argument missing
-$ pizza-options -ds -p vegetarian
-{ debug: true, small: true, pizzaType: 'vegetarian' }
-pizza details:
-- small pizza size
-- vegetarian
-$ pizza-options --pizza-type=cheese
-pizza details:
-- cheese
-```
-
-`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array.
-
-### Default option value
-
-You can specify a default value for an option which takes a value.
-
-Example file: [options-defaults.js](./examples/options-defaults.js)
-
-```js
-program
- .option('-c, --cheese ', 'add the specified type of cheese', 'blue');
-
-program.parse(process.argv);
-
-console.log(`cheese: ${program.cheese}`);
-```
-
-```bash
-$ pizza-options
-cheese: blue
-$ pizza-options --cheese stilton
-cheese: stilton
-```
-
-### Other option types, negatable boolean and boolean|value
-
-You can define a boolean option long name with a leading `no-` to set the option value to false when used.
-Defined alone this also makes the option true by default.
-
-If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
-otherwise be. You can specify a default boolean value for a boolean option and it can be overridden on command line.
-
-Example file: [options-negatable.js](./examples/options-negatable.js)
-
-```js
-program
- .option('--no-sauce', 'Remove sauce')
- .option('--cheese ', 'cheese flavour', 'mozzarella')
- .option('--no-cheese', 'plain with no cheese')
- .parse(process.argv);
-
-const sauceStr = program.sauce ? 'sauce' : 'no sauce';
-const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`;
-console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
-```
-
-```bash
-$ pizza-options
-You ordered a pizza with sauce and mozzarella cheese
-$ pizza-options --sauce
-error: unknown option '--sauce'
-$ pizza-options --cheese=blue
-You ordered a pizza with sauce and blue cheese
-$ pizza-options --no-sauce --no-cheese
-You ordered a pizza with no sauce and no cheese
-```
-
-You can specify an option which may be used as a boolean option but may optionally take an option-argument
-(declared with square brackets like `--optional [value]`).
-
-Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js)
-
-```js
-program
- .option('-c, --cheese [type]', 'Add cheese with optional type');
-
-program.parse(process.argv);
-
-if (program.cheese === undefined) console.log('no cheese');
-else if (program.cheese === true) console.log('add cheese');
-else console.log(`add cheese type ${program.cheese}`);
-```
-
-```bash
-$ pizza-options
-no cheese
-$ pizza-options --cheese
-add cheese
-$ pizza-options --cheese mozzarella
-add cheese type mozzarella
-```
-
-For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
-
-### Custom option processing
-
-You may specify a function to do custom processing of option-arguments. The callback function receives two parameters,
-the user specified option-argument and the previous value for the option. It returns the new value for the option.
-
-This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing.
-
-You can optionally specify the default/starting value for the option after the function parameter.
-
-Example file: [options-custom-processing.js](./examples/options-custom-processing.js)
-
-```js
-function myParseInt(value, dummyPrevious) {
- // parseInt takes a string and an optional radix
- return parseInt(value);
-}
-
-function increaseVerbosity(dummyValue, previous) {
- return previous + 1;
-}
-
-function collect(value, previous) {
- return previous.concat([value]);
-}
-
-function commaSeparatedList(value, dummyPrevious) {
- return value.split(',');
-}
-
-program
- .option('-f, --float ', 'float argument', parseFloat)
- .option('-i, --integer ', 'integer argument', myParseInt)
- .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)
- .option('-c, --collect ', 'repeatable value', collect, [])
- .option('-l, --list ', 'comma separated list', commaSeparatedList)
-;
-
-program.parse(process.argv);
-
-if (program.float !== undefined) console.log(`float: ${program.float}`);
-if (program.integer !== undefined) console.log(`integer: ${program.integer}`);
-if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`);
-if (program.collect.length > 0) console.log(program.collect);
-if (program.list !== undefined) console.log(program.list);
-```
-
-```bash
-$ custom -f 1e2
-float: 100
-$ custom --integer 2
-integer: 2
-$ custom -v -v -v
-verbose: 3
-$ custom -c a -c b -c c
-[ 'a', 'b', 'c' ]
-$ custom --list x,y,z
-[ 'x', 'y', 'z' ]
-```
-
-### Required option
-
-You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
-
-Example file: [options-required.js](./examples/options-required.js)
-
-```js
-program
- .requiredOption('-c, --cheese ', 'pizza must have cheese');
-
-program.parse(process.argv);
-```
-
-```bash
-$ pizza
-error: required option '-c, --cheese ' not specified
-```
-
-### Variadic option
-
-You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you
-can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments
-are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value
-is specified in the same argument as the option then no further values are read.
-
-Example file: [options-variadic.js](./examples/options-variadic.js)
-
-```js
-program
- .option('-n, --number ', 'specify numbers')
- .option('-l, --letter [letters...]', 'specify letters');
-
-program.parse();
-
-console.log('Options: ', program.opts());
-console.log('Remaining arguments: ', program.args);
-```
-
-```bash
-$ collect -n 1 2 3 --letter a b c
-Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] }
-Remaining arguments: []
-$ collect --letter=A -n80 operand
-Options: { number: [ '80' ], letter: [ 'A' ] }
-Remaining arguments: [ 'operand' ]
-$ collect --letter -n 1 -n 2 3 -- operand
-Options: { number: [ '1', '2', '3' ], letter: true }
-Remaining arguments: [ 'operand' ]
-```
-
-For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
-
-### Version option
-
-The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
-
-```js
-program.version('0.0.1');
-```
-
-```bash
-$ ./examples/pizza -V
-0.0.1
-```
-
-You may change the flags and description by passing additional parameters to the `version` method, using
-the same syntax for flags as the `option` method.
-
-```js
-program.version('0.0.1', '-v, --vers', 'output the current version');
-```
-
-## Commands
-
-You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).
-
-In the first parameter to `.command()` you specify the command name and any command-arguments. The arguments may be `` or `[optional]`, and the last argument may also be `variadic...`.
-
-You can use `.addCommand()` to add an already configured subcommand to the program.
-
-For example:
-
-```js
-// Command implemented using action handler (description is supplied separately to `.command`)
-// Returns new command for configuring.
-program
- .command('clone [destination]')
- .description('clone a repository into a newly created directory')
- .action((source, destination) => {
- console.log('clone command called');
- });
-
-// Command implemented using stand-alone executable file (description is second parameter to `.command`)
-// Returns `this` for adding more commands.
-program
- .command('start ', 'start named service')
- .command('stop [service]', 'stop named service, or all if no name supplied');
-
-// Command prepared separately.
-// Returns `this` for adding more commands.
-program
- .addCommand(build.makeBuildCommand());
-```
-
-Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will
-remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other
-subcommand is specified ([example](./examples/defaultCommand.js)).
-
-### Specify the argument syntax
-
-You use `.arguments` to specify the expected command-arguments for the top-level command, and for subcommands they are usually
-included in the `.command` call. Angled brackets (e.g. ``) indicate required command-arguments.
-Square brackets (e.g. `[optional]`) indicate optional command-arguments.
-You can optionally describe the arguments in the help by supplying a hash as second parameter to `.description()`.
-
-Example file: [env](./examples/env)
-
-```js
-program
- .version('0.1.0')
- .arguments(' [env]')
- .description('test command', {
- cmd: 'command to run',
- env: 'environment to run test in'
- })
- .action(function (cmd, env) {
- console.log('command:', cmd);
- console.log('environment:', env || 'no environment given');
- });
-
-program.parse(process.argv);
-```
-
- The last argument of a command can be variadic, and only the last argument. To make an argument variadic you
- append `...` to the argument name. For example:
-
-```js
-const { program } = require('commander');
-
-program
- .version('0.1.0')
- .command('rmdir [otherDirs...]')
- .action(function (dir, otherDirs) {
- console.log('rmdir %s', dir);
- if (otherDirs) {
- otherDirs.forEach(function (oDir) {
- console.log('rmdir %s', oDir);
- });
- }
- });
-
-program.parse(process.argv);
-```
-
-The variadic argument is passed to the action handler as an array.
-
-### Action handler (sub)commands
-
-You can add options to a command that uses an action handler.
-The action handler gets passed a parameter for each argument you declared, and one additional argument which is the
-command object itself. This command argument has the values for the command-specific options added as properties.
-
-```js
-const { program } = require('commander');
-
-program
- .command('rm