diff --git a/App.tsx b/App.tsx index 2c1bdd4b..6dfe535a 100644 --- a/App.tsx +++ b/App.tsx @@ -1,3 +1,7 @@ +import { Buffer } from 'buffer'; +import RNBlob from 'react-native-blob-util'; +global.Buffer = Buffer; + import React, { useContext } from 'react'; import AppLoading from 'expo-app-loading'; import { AppLayout } from './screens/AppLayout'; diff --git a/babel.config.js b/babel.config.js index 5de19159..a6c4cbc0 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,11 +1,22 @@ -module.exports = function(api) { +module.exports = function (api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: [ ['babel-plugin-inline-import', { extensions: ['.md'] - }] - ] + }], + [ + 'module-resolver', + { + alias: { + 'isomorphic-webcrypto': 'isomorphic-webcrypto/src/react-native', + 'fast-text-encoding': 'fast-text-encoding/text', + 'jsonld': '@digitalcredentials/jsonld', + 'jsonld-signatures': '@digitalcredentials/jsonld-signatures', + }, + }, + ], + ], }; }; diff --git a/components/VcDetails.tsx b/components/VcDetails.tsx index d9b180b0..4e6f5e06 100644 --- a/components/VcDetails.tsx +++ b/components/VcDetails.tsx @@ -1,10 +1,21 @@ import React from 'react'; import { Image } from 'react-native'; -import { ListItem } from 'react-native-elements'; +import { Icon, ListItem } from 'react-native-elements'; import { VC, CredentialSubject } from '../types/vc'; import { Column, Row, Text } from './ui'; import { Colors } from './ui/styleUtils'; +const VerifiedIcon: React.FC = () => { + return ( + + ); +}; + export const VcDetails: React.FC = (props) => { return ( @@ -18,20 +29,26 @@ export const VcDetails: React.FC = (props) => { - - {props.vid?.idType} + + {props.vc?.idType} {props.vc?.id} - + Status - - Valid - + + + Valid + + {props.vc?.isVerified && } + diff --git a/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts b/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts new file mode 100644 index 00000000..2693400a --- /dev/null +++ b/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts @@ -0,0 +1,13 @@ +/*! + * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved. + */ + +import { ControllerProofPurpose } from './ControllerProofPurpose'; + +export class AssertionProofPurpose extends ControllerProofPurpose { + constructor({ + term = 'assertionMethod', controller, + date, maxTimestampDelta = Infinity}: any = {}) { + super({term, controller, date, maxTimestampDelta}); + } +} diff --git a/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts b/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts new file mode 100644 index 00000000..b87ced6e --- /dev/null +++ b/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts @@ -0,0 +1,138 @@ +/*! + * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved. + */ + +import constants from 'jsonld-signatures/lib/constants'; +import jsonld from 'jsonld'; +import { ProofPurpose } from './ProofPurpose'; + +// DID documents can be specially optimized +const DID_CONTEXT_V1 = 'https://www.w3.org/ns/did/v1'; +// verification relationship terms that are known to appear in DID documents +const DID_VR_TERMS = [ + 'assertionMethod', + 'authentication', + 'capabilityInvocation', + 'capabilityDelegation', + 'keyAgreement', + 'verificationMethod' +]; + +export class ControllerProofPurpose extends ProofPurpose { + /** + * Creates a proof purpose that will validate whether or not the verification + * method in a proof was authorized by its declared controller for the + * proof's purpose. + * + * @param term {string} the `proofPurpose` term, as defined in the + * SECURITY_CONTEXT_URL `@context` or a URI if not defined in such. + * @param [controller] {object} the description of the controller, if it + * is not to be dereferenced via a `documentLoader`. + * @param [date] {string or Date or integer} the expected date for + * the creation of the proof. + * @param [maxTimestampDelta] {integer} a maximum number of seconds that + * the date on the signature can deviate from, defaults to `Infinity`. + */ + constructor({term, controller, date, maxTimestampDelta = Infinity}: any = {}) { + super({term, date, maxTimestampDelta}); + if(controller !== undefined) { + if(typeof controller !== 'object') { + throw new TypeError('"controller" must be an object.'); + } + this.controller = controller; + } + this._termDefinedByDIDContext = DID_VR_TERMS.includes(term); + } + + /** + * Validates the purpose of a proof. This method is called during + * proof verification, after the proof value has been checked against the + * given verification method (e.g. in the case of a digital signature, the + * signature has been cryptographically verified against the public key). + * + * @param proof + * @param verificationMethod + * @param documentLoader + * @param expansionMap + * + * @throws {Error} If verification method not authorized by controller + * @throws {Error} If proof's created timestamp is out of range + * + * @returns {Promise<{valid: boolean, error: Error}>} + */ + async validate(proof, {verificationMethod, documentLoader, expansionMap}) { + try { + const result = await super.validate( + proof, {verificationMethod, documentLoader, expansionMap}); + if(!result.valid) { + throw result.error; + } + + const {id: verificationId} = verificationMethod; + const {term, _termDefinedByDIDContext} = this; + + // if no `controller` specified, use verification method's + if(this.controller) { + result.controller = this.controller; + } else { + const {controller} = verificationMethod; + let controllerId; + if(controller) { + if(typeof controller === 'object') { + controllerId = controller.id; + } else if(typeof controller !== 'string') { + throw new TypeError( + '"controller" must be a string representing a URL.'); + } else { + controllerId = controller; + } + } + + // apply optimization to controller documents that are DID documents; + // if `term` is one of those defined by the DID context + let {document} = await documentLoader(controllerId); + + // Try to parse document to JSON + if (typeof document !== 'object') { + try { + document = JSON.parse(document); + } catch (e) { + throw new Error(`Controller ${controllerId} document JSON parse error: ` + e); + } + } + const mustFrame = !(_termDefinedByDIDContext && + document['@context'] === DID_CONTEXT_V1 || + (Array.isArray(document['@context']) && + document['@context'][0] === DID_CONTEXT_V1)); + if(mustFrame) { + // Note: `expansionMap` is intentionally not passed; we can safely + // drop properties here and must allow for it + document = await jsonld.frame(document, { + '@context': constants.SECURITY_CONTEXT_URL, + id: controllerId, + // this term must be in the JSON-LD controller document or + // verification will fail + [term]: { + '@embed': '@never', + id: verificationId + } + }, {documentLoader, compactToRelative: false}); + } + result.controller = document; + } + + const verificationMethods = jsonld.getValues(result.controller, term); + result.valid = verificationMethods.some(vm => + vm === verificationId || + (typeof vm === 'object' && vm.id === verificationId)); + if(!result.valid) { + throw new Error( + `Verification method "${verificationMethod.id}" not authorized ` + + `by controller for proof purpose "${this.term}".`); + } + return result; + } catch(error) { + return {valid: false, error}; + } + } +} \ No newline at end of file diff --git a/lib/jsonld-signatures/purposes/ProofPurpose.ts b/lib/jsonld-signatures/purposes/ProofPurpose.ts new file mode 100644 index 00000000..5e0875e3 --- /dev/null +++ b/lib/jsonld-signatures/purposes/ProofPurpose.ts @@ -0,0 +1,92 @@ +/*! + * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved. + */ + +export class ProofPurpose { + /** + * @param term {string} the `proofPurpose` term, as defined in the + * SECURITY_CONTEXT_URL `@context` or a URI if not defined in such. + * @param [date] {string or Date or integer} the expected date for + * the creation of the proof. + * @param [maxTimestampDelta] {integer} a maximum number of seconds that + * the date on the signature can deviate from, defaults to `Infinity`. + */ + constructor({term, date, maxTimestampDelta = Infinity}: any = {}) { + if(term === undefined) { + throw new Error('"term" is required.'); + } + if(maxTimestampDelta !== undefined && + typeof maxTimestampDelta !== 'number') { + throw new TypeError('"maxTimestampDelta" must be a number.'); + } + this.term = term; + if(date !== undefined) { + this.date = new Date(date); + if(isNaN(this.date)) { + throw TypeError(`"date" "${date}" is not a valid date.`); + } + } + this.maxTimestampDelta = maxTimestampDelta; + } + + /** + * Called to validate the purpose of a proof. This method is called during + * proof verification, after the proof value has been checked against the + * given verification method (e.g. in the case of a digital signature, the + * signature has been cryptographically verified against the public key). + * + * @param proof {object} the proof, in the `constants.SECURITY_CONTEXT_URL`, + * with the matching purpose to validate. + * + * @return {Promise} resolves to an object with `valid` and `error`. + */ + async validate( + proof, {/*document, suite, verificationMethod, + documentLoader, expansionMap*/}) { + try { + // check expiration + if(this.maxTimestampDelta !== Infinity) { + const expected = (this.date || new Date()).getTime(); + const delta = this.maxTimestampDelta * 1000; + const created = new Date(proof.created).getTime(); + // comparing this way handles NaN case where `created` is invalid + if(!(created >= (expected - delta) && created <= (expected + delta))) { + throw new Error('The proof\'s created timestamp is out of range.'); + } + } + return {valid: true}; + } catch(error) { + return {valid: false, error}; + } + } + + /** + * Called to update a proof when it is being created, adding any properties + * specific to this purpose. This method is called prior to the proof + * value being generated such that any properties added may be, for example, + * included in a digital signature value. + * + * @param proof {object} the proof, in the `constants.SECURITY_CONTEXT_URL` + * to update. + * + * @return {Promise} resolves to the proof instance (in the + * `constants.SECURITY_CONTEXT_URL`. + */ + async update(proof, {/*document, suite, documentLoader, expansionMap */}) { + proof.proofPurpose = this.term; + return proof; + } + + /** + * Determines if the given proof has a purpose that matches this instance, + * i.e. this ProofPurpose instance should be used to validate the given + * proof. + * + * @param proof {object} the proof to check. + * + * @return {Promise} `true` if there's a match, `false` if not. + */ + async match(proof, {/* document, documentLoader, expansionMap */}) { + return proof.proofPurpose === this.term; + } +}; diff --git a/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts b/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts new file mode 100644 index 00000000..837af7d3 --- /dev/null +++ b/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts @@ -0,0 +1,22 @@ +/*! + * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved. + */ + +import { ControllerProofPurpose } from './ControllerProofPurpose'; + +export class PublicKeyProofPurpose extends ControllerProofPurpose { + constructor({ controller, date, maxTimestampDelta = Infinity }: any = {}) { + super({ term: 'publicKey', controller, date, maxTimestampDelta }); + } + + async update(proof) { + // do not add `term` to proof + return proof; + } + + async match(proof) { + // `proofPurpose` must not be present in the proof to match as this + // proof purpose is a legacy, non-descript purpose for signing + return proof.proofPurpose === undefined; + } +} diff --git a/lib/jsonld-signatures/sha256digest.ts b/lib/jsonld-signatures/sha256digest.ts new file mode 100644 index 00000000..284fcb4a --- /dev/null +++ b/lib/jsonld-signatures/sha256digest.ts @@ -0,0 +1,15 @@ +import crypto from 'isomorphic-webcrypto'; +import 'fast-text-encoding'; + +/** + * Hashes a string of data using SHA-256. + * + * @param {string} string - the string to hash. + * + * @return {Uint8Array} the hash digest. + */ +export async function sha256digest({ string }: any) { + const bytes = new TextEncoder().encode(string); + + return new Uint8Array(await crypto.subtle.digest({ name: 'SHA-256' }, bytes)); +} diff --git a/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts b/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts new file mode 100644 index 00000000..50fbe0cc --- /dev/null +++ b/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts @@ -0,0 +1,233 @@ +/*! + * Copyright (c) 2020-2021 Digital Bazaar, Inc. All rights reserved. + */ +import { Buffer } from 'buffer'; +import 'fast-text-encoding'; +import jsonld from 'jsonld'; +import LinkedDataSignature from 'jsonld-signatures/lib/suites/LinkedDataSignature'; +import { encode, decode } from 'base64url-universal'; + +export interface JwsLinkedDataSignature { + [key: string]: any; +} + +export class JwsLinkedDataSignature extends LinkedDataSignature { + /** + * @param type {string} Provided by subclass. + * @param alg {string} JWS alg provided by subclass. + * @param [LDKeyClass] {LDKeyClass} provided by subclass or subclass + * overrides `getVerificationMethod`. + * + * @param [verificationMethod] {string} A key id URL to the paired public key. + * + * This parameter is required for signing: + * + * @param [signer] {function} an optional signer. + * + * Advanced optional parameters and overrides: + * + * @param [proof] {object} a JSON-LD document with options to use for + * the `proof` node (e.g. any other custom fields can be provided here + * using a context different from security-v2). + * @param [date] {string|Date} signing date to use if not passed. + * @param [key] {LDKeyPair} an optional crypto-ld KeyPair. + * @param [useNativeCanonize] {boolean} true to use a native canonize + * algorithm. + */ + constructor({ + type, + alg, + LDKeyClass, + verificationMethod, + signer, + key, + proof, + date, + useNativeCanonize, + }: any = {}) { + super({ type, verificationMethod, proof, date, useNativeCanonize }); + this.alg = alg; + this.LDKeyClass = LDKeyClass; + this.signer = signer; + if (key) { + if (verificationMethod === undefined) { + const publicKey = key.export({ publicKey: true }); + this.verificationMethod = publicKey.id; + } + this.key = key; + if (typeof key.signer === 'function') { + this.signer = key.signer(); + } + if (typeof key.verifier === 'function') { + this.verifier = key.verifier(); + } + } + } + + /** + * @param verifyData {Uint8Array}. + * @param proof {object} + * + * @returns {Promise<{object}>} the proof containing the signature value. + */ + async sign({ verifyData, proof }) { + if (!(this.signer && typeof this.signer.sign === 'function')) { + throw new Error('A signer API has not been specified.'); + } + // JWS header + const header = { + alg: this.alg, + b64: false, + crit: ['b64'], + }; + + /* + +-------+-----------------------------------------------------------+ + | "b64" | JWS Signing Input Formula | + +-------+-----------------------------------------------------------+ + | true | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || | + | | BASE64URL(JWS Payload)) | + | | | + | false | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.') || | + | | JWS Payload | + +-------+-----------------------------------------------------------+ + */ + + // create JWS data and sign + const encodedHeader = encode(JSON.stringify(header)); + + const data = _createJws({ encodedHeader, verifyData }); + + const signature = await this.signer.sign({ data }); + + // create detached content signature + const encodedSignature = encode(signature); + proof.jws = encodedHeader + '..' + encodedSignature; + return proof; + } + + /** + * @param verifyData {Uint8Array}. + * @param verificationMethod {object}. + * @param document {object} the document the proof applies to. + * @param proof {object} the proof to be verified. + * @param purpose {ProofPurpose} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise<{boolean}>} Resolves with the verification result. + */ + async verifySignature({ verifyData, verificationMethod, proof }) { + if ( + !(proof.jws && typeof proof.jws === 'string' && proof.jws.includes('.')) + ) { + throw new TypeError('The proof does not include a valid "jws" property.'); + } + // add payload into detached content signature + const [encodedHeader /*payload*/, , encodedSignature] = + proof.jws.split('.'); + + let header; + try { + header = JSON.parse(Buffer.from(encodedHeader, 'base64').toString()); + } catch (e) { + throw new Error(`Could not parse JWS header; ${e}`); + } + if (!(header && typeof header === 'object')) { + throw new Error('Invalid JWS header.'); + } + + // confirm header matches all expectations + if ( + !( + header.alg === this.alg && + header.b64 === false && + Array.isArray(header.crit) && + header.crit.length === 1 && + header.crit[0] === 'b64' + ) && + Object.keys(header).length === 3 + ) { + throw new Error(`Invalid JWS header parameters for ${this.type}.`); + } + + // do signature verification + const signature = Buffer.from(encodedSignature, 'base64'); + + const data = _createJws({ encodedHeader, verifyData }); + + let { verifier } = this; + if (!verifier) { + const key = await this.LDKeyClass.from(verificationMethod); + verifier = key.verifier(); + } + return verifier.verify({ data, signature }); + } + + async assertVerificationMethod({ verificationMethod }) { + if (!jsonld.hasValue(verificationMethod, 'type', this.requiredKeyType)) { + throw new Error( + `Invalid key type. Key type must be "${this.requiredKeyType}".` + ); + } + } + + async getVerificationMethod({ proof, documentLoader }) { + if (this.key) { + return this.key.export({ publicKey: true }); + } + + const verificationMethod = await super.getVerificationMethod({ + proof, + documentLoader, + }); + await this.assertVerificationMethod({ verificationMethod }); + return verificationMethod; + } + + async matchProof({ proof, document, purpose, documentLoader, expansionMap }) { + if ( + !(await super.matchProof({ + proof, + document, + purpose, + documentLoader, + expansionMap, + })) + ) { + return false; + } + // NOTE: When subclassing this suite: Extending suites will need to check + // for the presence their contexts here and in sign() + + if (!this.key) { + // no key specified, so assume this suite matches and it can be retrieved + return true; + } + + const { verificationMethod } = proof; + + // only match if the key specified matches the one in the proof + if (typeof verificationMethod === 'object') { + return verificationMethod.id === this.key.id; + } + return verificationMethod === this.key.id; + } +} + +/** + * Creates the bytes ready for signing. + * + * @param {string} encodedHeader - base64url encoded JWT header. + * @param {Uint8Array} verifyData - Payload to sign/verify. + * @returns {Uint8Array} A combined byte array for signing. + */ +function _createJws({ encodedHeader, verifyData }) { + const encodedHeaderBytes = new TextEncoder().encode(encodedHeader + '.'); + + // concatenate the two uint8arrays + const data = new Uint8Array(encodedHeaderBytes.length + verifyData.length); + data.set(encodedHeaderBytes, 0); + data.set(verifyData, encodedHeaderBytes.length); + return data; +} diff --git a/lib/jsonld-signatures/suites/LinkedDataSignature.ts b/lib/jsonld-signatures/suites/LinkedDataSignature.ts new file mode 100644 index 00000000..e00738f9 --- /dev/null +++ b/lib/jsonld-signatures/suites/LinkedDataSignature.ts @@ -0,0 +1,468 @@ +/*! + * Copyright (c) 2017-2021 Digital Bazaar, Inc. All rights reserved. + */ + +import { sha256digest } from '../sha256digest'; +import jsonld from 'jsonld'; + +import constants from 'jsonld-signatures/lib/constants'; +import util from 'jsonld-signatures/lib/util'; +import LinkedDataProof from 'jsonld-signatures/lib/suites/LinkedDataProof'; + +export interface LinkedDataSignature { + [key: string]: any; +} + +export class LinkedDataSignature extends LinkedDataProof { + /** + * Parent class from which the various LinkDataSignature suites (such as + * `Ed25519Signature2020`) inherit. + * NOTE: Developers are never expected to use this class directly, but to + * only work with individual suites. + * + * @param {object} options - Options hashmap. + * @param {string} options.type - Suite name, provided by subclass. + * @typedef LDKeyPair + * @param {LDKeyPair} LDKeyClass - The crypto-ld key class that this suite + * will use to sign/verify signatures. Provided by subclass. Used + * during the `verifySignature` operation, to create an instance (containing + * a `verifier()` property) of a public key fetched via a `documentLoader`. + * + * @param {string} contextUrl - JSON-LD context URL that corresponds to this + * signature suite. Provided by subclass. Used for enforcing suite context + * during the `sign()` operation. + * + * For `sign()` operations, either a `key` OR a `signer` is required. + * For `verify()` operations, you can pass in a verifier (from KMS), or + * the public key will be fetched via documentLoader. + * + * @param {object} [options.key] - An optional key object (containing an + * `id` property, and either `signer` or `verifier`, depending on the + * intended operation. Useful for when the application is managing keys + * itself (when using a KMS, you never have access to the private key, + * and so should use the `signer` param instead). + * + * @param {{sign: Function, id: string}} [options.signer] - Signer object + * that has two properties: an async `sign()` method, and an `id`. This is + * useful when interfacing with a KMS (since you don't get access to the + * private key and its `signer`, the KMS client gives you only the signer + * object to use). + * + * @param {{verify: Function, id: string}} [options.verifier] - Verifier + * object that has two properties: an async `verify()` method, and an `id`. + * Useful when working with a KMS-provided verifier. + * + * Advanced optional parameters and overrides: + * + * @param {object} [options.proof] - A JSON-LD document with options to use + * for the `proof` node (e.g. any other custom fields can be provided here + * using a context different from security-v2). If not provided, this is + * constructed during signing. + * @param {string|Date} [options.date] - Signing date to use (otherwise + * defaults to `now()`). + * @param {boolean} [options.useNativeCanonize] - Whether to use a native + * canonize algorithm. + */ + constructor({ + type, + proof, + LDKeyClass, + date, + key, + signer, + verifier, + useNativeCanonize, + contextUrl, + }: any = {}) { + super({ type }); + this.LDKeyClass = LDKeyClass; + this.contextUrl = contextUrl; + this.proof = proof; + const vm = _processSignatureParams({ key, signer, verifier }); + this.verificationMethod = vm.verificationMethod; + this.key = vm.key; + this.signer = vm.signer; + this.verifier = vm.verifier; + if (date) { + this.date = new Date(date); + if (isNaN(this.date)) { + throw TypeError(`"date" "${date}" is not a valid date.`); + } + } + this.useNativeCanonize = useNativeCanonize; + this._hashCache = null; + } + + /** + * @param document {object} to be signed. + * @param purpose {ProofPurpose} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise} Resolves with the created proof object. + */ + async createProof({ document, purpose, documentLoader, expansionMap }) { + // build proof (currently known as `signature options` in spec) + let proof; + if (this.proof) { + // shallow copy + proof = { ...this.proof }; + } else { + // create proof JSON-LD document + proof = {}; + } + + // ensure proof type is set + proof.type = this.type; + + // set default `now` date if not given in `proof` or `options` + let date = this.date; + if (proof.created === undefined && date === undefined) { + date = new Date(); + } + + // ensure date is in string format + if (date && typeof date !== 'string') { + date = util.w3cDate(date); + } + + // add API overrides + if (date) { + proof.created = date; + } + + proof.verificationMethod = this.verificationMethod; + + // add any extensions to proof (mostly for legacy support) + proof = await this.updateProof({ + document, + proof, + purpose, + documentLoader, + expansionMap, + }); + + // allow purpose to update the proof; the `proof` is in the + // SECURITY_CONTEXT_URL `@context` -- therefore the `purpose` must + // ensure any added fields are also represented in that same `@context` + proof = await purpose.update(proof, { + document, + suite: this, + documentLoader, + expansionMap, + }); + + // create data to sign + const verifyData = await this.createVerifyData({ + document, + proof, + documentLoader, + expansionMap, + }); + + // sign data + proof = await this.sign({ + verifyData, + document, + proof, + documentLoader, + expansionMap, + }); + + return proof; + } + + /** + * @param document {object} to be signed. + * @param purpose {ProofPurpose} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise} Resolves with the created proof object. + */ + async updateProof({ proof }: any) { + // extending classes may do more + return proof; + } + + /** + * @param proof {object} the proof to be verified. + * @param document {object} the document the proof applies to. + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise<{object}>} Resolves with the verification result. + */ + async verifyProof({ proof, document, documentLoader, expansionMap }) { + try { + // create data to verify + const verifyData = await this.createVerifyData({ + document, + proof, + documentLoader, + expansionMap, + }); + + // fetch verification method + const verificationMethod = await this.getVerificationMethod({ + proof, + document, + documentLoader, + expansionMap, + }); + + // verify signature on data + const verified = await this.verifySignature({ + verifyData, + verificationMethod, + document, + proof, + documentLoader, + expansionMap, + }); + if (!verified) { + throw new Error('Invalid signature.'); + } + + return { verified: true, verificationMethod }; + } catch (error) { + return { verified: false, error }; + } + } + + async canonize(input, { documentLoader, expansionMap, skipExpansion }: any) { + return jsonld.canonize(input, { + algorithm: 'URDNA2015', + format: 'application/n-quads', + documentLoader, + expansionMap, + skipExpansion, + useNative: this.useNativeCanonize, + }); + } + + async canonizeProof(proof, { document, documentLoader, expansionMap }) { + // `jws`,`signatureValue`,`proofValue` must not be included in the proof + // options + proof = { + '@context': document['@context'] || constants.SECURITY_CONTEXT_URL, + ...proof, + }; + delete proof.jws; + delete proof.signatureValue; + delete proof.proofValue; + return this.canonize(proof, { + documentLoader, + expansionMap, + skipExpansion: false, + }); + } + + /** + * @param document {object} to be signed/verified. + * @param proof {object} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise<{Uint8Array}>}. + */ + async createVerifyData({ document, proof, documentLoader, expansionMap }) { + // get cached document hash + let cachedDocHash; + const { _hashCache } = this; + if (_hashCache && _hashCache.document === document) { + cachedDocHash = _hashCache.hash; + } else { + this._hashCache = { + document, + // canonize and hash document + hash: (cachedDocHash = this.canonize(document, { + documentLoader, + expansionMap, + }).then((c14nDocument) => { + return sha256digest({ string: c14nDocument }); + })), + }; + } + + // await both c14n proof hash and c14n document hash + const [proofHash, docHash] = await Promise.all([ + // canonize and hash proof + this.canonizeProof(proof, { + document, + documentLoader, + expansionMap, + }).then((c14nProofOptions) => { + return sha256digest({ string: c14nProofOptions }); + }), + cachedDocHash, + ]); + + // concatenate hash of c14n proof options and hash of c14n document + return util.concat(proofHash, docHash); + } + + /** + * @param document {object} to be signed. + * @param proof {object} + * @param documentLoader {function} + */ + async getVerificationMethod({ proof, documentLoader }: any) { + let { verificationMethod } = proof; + + if (typeof verificationMethod === 'object') { + verificationMethod = verificationMethod.id; + } + + if (!verificationMethod) { + throw new Error('No "verificationMethod" found in proof.'); + } + + // Note: `expansionMap` is intentionally not passed; we can safely drop + // properties here and must allow for it + const framed = await jsonld.frame( + verificationMethod, + { + '@context': constants.SECURITY_CONTEXT_URL, + '@embed': '@always', + 'id': verificationMethod, + }, + { documentLoader, compactToRelative: false } + ); + if (!framed) { + throw new Error(`Verification method ${verificationMethod} not found.`); + } + + // ensure verification method has not been revoked + if (framed.revoked !== undefined) { + throw new Error('The verification method has been revoked.'); + } + + return framed; + } + + /** + * @param verifyData {Uint8Array}. + * @param document {object} to be signed. + * @param proof {object} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise<{object}>} the proof containing the signature value. + */ + async sign(params?: any) { + throw new Error('Must be implemented by a derived class.'); + } + + /** + * @param verifyData {Uint8Array}. + * @param verificationMethod {object}. + * @param document {object} to be signed. + * @param proof {object} + * @param documentLoader {function} + * @param expansionMap {function} + * + * @returns {Promise} + */ + async verifySignature(params?: any): Promise { + throw new Error('Must be implemented by a derived class.'); + } + + /** + * Ensures the document to be signed contains the required signature suite + * specific `@context`, by either adding it (if `addSuiteContext` is true), + * or throwing an error if it's missing. + * + * @param {object} options - Options hashmap. + * @param {object} options.document - JSON-LD document to be signed. + * @param {boolean} options.addSuiteContext - Add suite context? + */ + ensureSuiteContext({ document, addSuiteContext }) { + const { contextUrl } = this; + + if (_includesContext({ document, contextUrl })) { + // document already includes the required context + return; + } + + if (!addSuiteContext) { + throw new TypeError( + `The document to be signed must contain this suite's @context, ` + + `"${contextUrl}".` + ); + } + + // enforce the suite's context by adding it to the document + const existingContext = document['@context'] || []; + + document['@context'] = Array.isArray(existingContext) + ? [...existingContext, contextUrl] + : [existingContext, contextUrl]; + } +} + +/** + * Tests whether a provided JSON-LD document includes a context URL in its + * `@context` property. + * + * @param {object} options - Options hashmap. + * @param {object} options.document - A JSON-LD document. + * @param {string} options.contextUrl - A context URL. + * + * @returns {boolean} Returns true if document includes context. + */ +function _includesContext({ document, contextUrl }) { + const context = document['@context']; + return ( + context === contextUrl || + (Array.isArray(context) && context.includes(contextUrl)) + ); +} + +/** + * See constructor docstring for param details. + * + * @returns {{verificationMethod: string, key: LDKeyPair, + * signer: {sign: Function, id: string}, + * verifier: {verify: Function, id: string}}} - Validated and initialized + * key-related parameters. + */ +function _processSignatureParams({ key, signer, verifier }) { + // We are explicitly not requiring a key or signer/verifier param to be + // present, to support the verify() use case where the verificationMethod + // is being fetched by the documentLoader + + const vm: any = {}; + if (key) { + vm.key = key; + vm.verificationMethod = key.id; + if (typeof key.signer === 'function') { + vm.signer = key.signer(); + } + if (typeof key.verifier === 'function') { + vm.verifier = key.verifier(); + } + if (!(vm.signer || vm.verifier)) { + throw new TypeError( + 'The "key" parameter must contain a "signer" or "verifier" method.' + ); + } + } else { + vm.verificationMethod = (signer && signer.id) || (verifier && verifier.id); + vm.signer = signer; + vm.verifier = verifier; + } + + if (vm.signer) { + if (typeof vm.signer.sign !== 'function') { + throw new TypeError('A signer API has not been specified.'); + } + } + if (vm.verifier) { + if (typeof vm.verifier.verify !== 'function') { + throw new TypeError('A verifier API has not been specified.'); + } + } + + return vm; +} diff --git a/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts b/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts new file mode 100644 index 00000000..38f3dbb6 --- /dev/null +++ b/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts @@ -0,0 +1,53 @@ +/*! + * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved. + */ + +// import { Ed25519KeyPair } from 'crypto-ld'; +import { Ed25519VerificationKey2018 } from './Ed25519VerificationKey2018'; +import { JwsLinkedDataSignature } from '../JwsLinkedDataSignature'; + +export class Ed25519Signature2018 extends JwsLinkedDataSignature { + /** + * @param type {string} Provided by subclass. + * + * One of these parameters is required to use a suite for signing: + * + * @param [creator] {string} A key id URL to the paired public key. + * @param [verificationMethod] {string} A key id URL to the paired public key. + * + * This parameter is required for signing: + * + * @param [signer] {function} an optional signer. + * + * Advanced optional parameters and overrides: + * + * @param [proof] {object} a JSON-LD document with options to use for + * the `proof` node (e.g. any other custom fields can be provided here + * using a context different from security-v2). + * @param [date] {string|Date} signing date to use if not passed. + * @param [key] {LDKeyPair} an optional crypto-ld KeyPair. + * @param [useNativeCanonize] {boolean} true to use a native canonize + * algorithm. + */ + constructor({ + signer, + key, + verificationMethod, + proof, + date, + useNativeCanonize, + }: any = {}) { + super({ + type: 'Ed25519Signature2018', + alg: 'EdDSA', + LDKeyClass: Ed25519VerificationKey2018, + verificationMethod, + signer, + key, + proof, + date, + useNativeCanonize, + }); + this.requiredKeyType = 'Ed25519VerificationKey2018'; + } +} diff --git a/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts b/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts new file mode 100644 index 00000000..6d259b29 --- /dev/null +++ b/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts @@ -0,0 +1,370 @@ +/*! + * Copyright (c) 2018-2020 Digital Bazaar, Inc. All rights reserved. + */ +import * as bs58 from 'base58-universal/main'; +import * as util from './util'; +import ed25519 from './ed25519'; +import {LDKeyPair} from 'crypto-ld'; + +const SUITE_ID = 'Ed25519VerificationKey2018'; + +class Ed25519VerificationKey2018 extends LDKeyPair { + /** + * An implementation of the Ed25519VerificationKey spec, for use with + * Linked Data Proofs. + * @see https://w3c-dvcg.github.io/lds-ed25519-2018/ + * @see https://github.com/digitalbazaar/jsonld-signatures + * @example + * > const privateKeyBase58 = + * '3Mmk4UzTRJTEtxaKk61LxtgUxAa2Dg36jF6VogPtRiKvfpsQWKPCLesKSV182RMmvM' + * + 'JKk6QErH3wgdHp8itkSSiF'; + * > const options = { + * publicKeyBase58: 'GycSSui454dpYRKiFdsQ5uaE8Gy3ac6dSMPcAoQsk8yq', + * privateKeyBase58 + * }; + * > const EDKey = new Ed25519VerificationKey2018(options); + * > EDKey + * Ed25519VerificationKey2018 { ... + * @param {object} options - Options hashmap. + * @param {string} options.controller - Controller DID or document url. + * @param {string} [options.id] - The key ID. If not provided, will be + * @param {string} options.publicKeyBase58 - Base58btc encoded Public Key. + * @param {string} [options.privateKeyBase58] - Base58btc Private Key. + * @param {string} [options.revoked] - Timestamp of when the key has been + * revoked, in RFC3339 format. If not present, the key itself is considered + * not revoked. Note that this mechanism is slightly different than DID + * Document key revocation, where a DID controller can revoke a key from + * that DID by removing it from the DID Document. + */ + constructor(options: any = {}) { + super(options); + this.type = SUITE_ID; + this.publicKeyBase58 = options.publicKeyBase58; + if(!this.publicKeyBase58) { + throw new TypeError('The "publicKeyBase58" property is required.'); + } + this.privateKeyBase58 = options.privateKeyBase58; + if(this.controller && !this.id) { + this.id = `${this.controller}#${this.fingerprint()}`; + } + } + + /** + * Creates an instance of LDKeyPair from a key fingerprint. + * Note: Only key types that use their full public key in the fingerprint + * are supported (so, currently, only 'ed25519'). + * + * @param {string} fingerprint + * @returns {LDKeyPair} + * @throws Unsupported Fingerprint Type. + */ + static fromFingerprint({fingerprint} = {}) { + if(!fingerprint || + !(typeof fingerprint === 'string' && fingerprint[0] === 'z')) { + throw new Error('`fingerprint` must be a multibase encoded string.'); + } + + // skip leading `z` that indicates base58 encoding + const buffer = bs58.decode(fingerprint.substr(1)); + + // buffer is: 0xed 0x01 + if(buffer[0] === 0xed && buffer[1] === 0x01) { + return new Ed25519VerificationKey2018({ + publicKeyBase58: bs58.encode(buffer.slice(2)) + }); + } + + throw new Error(`Unsupported fingerprint "${fingerprint}".`); + } + + /** + * Generates a KeyPair with an optional deterministic seed. + * @example + * > const keyPair = await Ed25519VerificationKey2018.generate(); + * > keyPair + * Ed25519VerificationKey2018 { ... + * @param {object} [options={}] - See LDKeyPair + * docstring for full list. + * @param {Uint8Array|Buffer} [options.seed] - + * a 32-byte array seed for a deterministic key. + * + * @returns {Promise} Generates a key pair. + */ + static async generate(options = {}) { + let keyObject; + if(options.seed) { + keyObject = await ed25519.generateKeyPairFromSeed(options.seed); + } else { + keyObject = await ed25519.generateKeyPair(); + } + return new Ed25519VerificationKey2018({ + publicKeyBase58: bs58.encode(keyObject.publicKey), + privateKeyBase58: bs58.encode(keyObject.secretKey), + ...options + }); + } + + /** + * Creates an Ed25519 Key Pair from an existing serialized key pair. + * @example + * > const keyPair = await Ed25519VerificationKey2018.from({ + * controller: 'did:ex:1234', + * type: 'Ed25519VerificationKey2018', + * publicKeyBase58, + * privateKeyBase58 + * }); + * + * @returns {Promise} An Ed25519 Key Pair. + */ + static async from(options) { + return new Ed25519VerificationKey2018(options); + } + + /** + * Returns a signer object for use with Linked Data Proofs. + * @see https://github.com/digitalbazaar/jsonld-signatures + * @example + * > const signer = keyPair.signer(); + * > signer + * { sign: [AsyncFunction: sign] } + * > signer.sign({data}); + * + * @returns {{sign: Function}} A signer for the json-ld block. + */ + signer() { + const signer = ed25519SignerFactory(this); + signer.id = this.id; + return signer; + } + + /** + * Returns a verifier object for use with signature suites. + * @see https://github.com/digitalbazaar/jsonld-signatures + * + * @example + * > const verifier = keyPair.verifier(); + * > verifier + * { verify: [AsyncFunction: verify] } + * > verifier.verify(key); + * + * @returns {{verify: Function}} Used to verify jsonld-signatures. + */ + verifier() { + const verifier = ed25519VerifierFactory(this); + verifier.id = this.id; + return verifier; + } + + /** + * Exports the serialized representation of the KeyPair + * and other information that json-ld Signatures can use to form a proof. + * + * @param {object} [options={}] - Options hashmap. + * @param {boolean} [options.publicKey] - Export public key material? + * @param {boolean} [options.privateKey] - Export private key material? + * @param {boolean} [options.includeContext] - Include JSON-LD context? + * + * @returns {object} A public key object + * information used in verification methods by signatures. + */ + export({publicKey = false, privateKey = false, includeContext = false} = {}) { + if(!(publicKey || privateKey)) { + throw new TypeError( + 'Export requires specifying either "publicKey" or "privateKey".'); + } + const exportedKey = { + id: this.id, + type: this.type + }; + if(includeContext) { + exportedKey['@context'] = Ed25519VerificationKey2018.SUITE_CONTEXT; + } + if(this.controller) { + exportedKey.controller = this.controller; + } + if(publicKey) { + exportedKey.publicKeyBase58 = this.publicKeyBase58; + } + if(privateKey) { + exportedKey.privateKeyBase58 = this.privateKeyBase58; + } + if(this.revoked) { + exportedKey.revoked = this.revoked; + } + return exportedKey; + } + + /** + * Generates and returns a multiformats encoded + * ed25519 public key fingerprint (for use with cryptonyms, for example). + * @see https://github.com/multiformats/multicodec + * + * @param {string} publicKeyBase58 - The base58 encoded public key material. + * + * @returns {string} The fingerprint. + */ + static fingerprintFromPublicKey({publicKeyBase58} = {}) { + // ed25519 cryptonyms are multicodec encoded values, specifically: + // (multicodec ed25519-pub 0xed01 + key bytes) + const pubkeyBytes = util.base58Decode({ + decode: bs58.decode, + keyMaterial: publicKeyBase58, + type: 'public' + }); + const buffer = new Uint8Array(2 + pubkeyBytes.length); + buffer[0] = 0xed; + buffer[1] = 0x01; + buffer.set(pubkeyBytes, 2); + // prefix with `z` to indicate multi-base base58btc encoding + return `z${bs58.encode(buffer)}`; + } + + /** + * Generates and returns a multiformats encoded + * ed25519 public key fingerprint (for use with cryptonyms, for example). + * @see https://github.com/multiformats/multicodec + * + * @returns {string} The fingerprint. + */ + fingerprint() { + const {publicKeyBase58} = this; + return Ed25519VerificationKey2018 + .fingerprintFromPublicKey({publicKeyBase58}); + } + + /** + * Tests whether the fingerprint was generated from a given key pair. + * @example + * > edKeyPair.verifyFingerprint({fingerprint: 'z2S2Q6MkaFJewa'}); + * {valid: true}; + * @param {string} fingerprint - A Base58 public key. + * + * @returns {object} An object indicating valid is true or false. + */ + verifyFingerprint({fingerprint} = {}) { + // fingerprint should have `z` prefix indicating + // that it's multi-base encoded + if(!(typeof fingerprint === 'string' && fingerprint[0] === 'z')) { + return { + error: new Error('`fingerprint` must be a multibase encoded string.'), + valid: false + }; + } + let fingerprintBuffer; + try { + fingerprintBuffer = util.base58Decode({ + decode: bs58.decode, + keyMaterial: fingerprint.slice(1), + type: `fingerprint's` + }); + } catch(e) { + return {error: e, valid: false}; + } + let publicKeyBuffer; + try { + publicKeyBuffer = util.base58Decode({ + decode: bs58.decode, + keyMaterial: this.publicKeyBase58, + type: 'public' + }); + } catch(e) { + return {error: e, valid: false}; + } + + const buffersEqual = _isEqualBuffer( + publicKeyBuffer, fingerprintBuffer.slice(2)); + + // validate the first two multicodec bytes 0xed01 + const valid = fingerprintBuffer[0] === 0xed && + fingerprintBuffer[1] === 0x01 && + buffersEqual; + if(!valid) { + return { + error: new Error('The fingerprint does not match the public key.'), + valid: false + }; + } + return {valid}; + } +} + +/** + * @ignore + * Returns an object with an async sign function. + * The sign function is bound to the KeyPair + * and then returned by the KeyPair's signer method. + * @param {Ed25519VerificationKey2018} key - A key par instance. + * @example + * > const mySigner = ed25519SignerFactory(edKeyPair); + * > await mySigner.sign({data}) + * + * @returns {{sign: Function}} An object with an async function sign + * using the private key passed in. + */ +function ed25519SignerFactory(key) { + if(!key.privateKeyBase58) { + return { + async sign() { + throw new Error('No private key to sign with.'); + } + }; + } + const privateKeyBytes = util.base58Decode({ + decode: bs58.decode, + keyMaterial: key.privateKeyBase58, + type: 'private' + }); + return { + async sign({data}) { + const signature = ed25519.sign(privateKeyBytes, data); + return signature; + } + }; +} + +/** + * @ignore + * Returns an object with an async verify function. + * The verify function is bound to the KeyPair + * and then returned by the KeyPair's verifier method. + * @param {Ed25519VerificationKey2018} key - An Ed25519VerificationKey2018. + * @example + * > const myVerifier = ed25519Verifier(edKeyPair); + * > await myVerifier.verify({data, signature}); + * + * @returns {{verify: Function}} An async verifier specific + * to the key passed in. + */ +function ed25519VerifierFactory(key) { + const publicKeyBytes = util.base58Decode({ + decode: bs58.decode, + keyMaterial: key.publicKeyBase58, + type: 'public' + }); + return { + async verify({data, signature}) { + return ed25519.verify(publicKeyBytes, data, signature); + } + }; +} + +function _isEqualBuffer(buf1, buf2) { + if(buf1.length !== buf2.length) { + return false; + } + for(let i = 0; i < buf1.length; i++) { + if(buf1[i] !== buf2[i]) { + return false; + } + } + return true; +} +// Used by CryptoLD harness for dispatching. +Ed25519VerificationKey2018.suite = SUITE_ID; +// Used by CryptoLD harness's fromKeyId() method. +Ed25519VerificationKey2018.SUITE_CONTEXT = + 'https://w3id.org/security/suites/ed25519-2018/v1'; + +export { + Ed25519VerificationKey2018 +}; diff --git a/lib/jsonld-signatures/suites/ed255192018/ed25519.ts b/lib/jsonld-signatures/suites/ed255192018/ed25519.ts new file mode 100644 index 00000000..90f5bb82 --- /dev/null +++ b/lib/jsonld-signatures/suites/ed255192018/ed25519.ts @@ -0,0 +1,143 @@ +/*! + * Copyright (c) 2020 Digital Bazaar, Inc. All rights reserved. + */ +import { Buffer } from 'buffer'; + +// FIXME: Some methods is missing from crypto-js. +import { + sign, + verify, + createPrivateKey, + createPublicKey, + randomBytes +} from 'crypto-js'; + +// used to export node's public keys to buffers +const publicKeyEncoding = {format: 'der', type: 'spki'}; +// used to turn private key bytes into a buffer in DER format +const DER_PRIVATE_KEY_PREFIX = Buffer.from( + '302e020100300506032b657004220420', 'hex'); +// used to turn public key bytes into a buffer in DER format +const DER_PUBLIC_KEY_PREFIX = Buffer.from('302a300506032b6570032100', 'hex'); + +const api = { + /** + * Generates a key using a 32 byte Uint8Array. + * + * @param {Uint8Array} seedBytes - The bytes for the private key. + * + * @returns {object} The object with the public and private key material. + */ + async generateKeyPairFromSeed(seedBytes) { + const privateKey = await createPrivateKey({ + // node is more than happy to create a new private key using a DER + key: _privateKeyDerEncode({seedBytes}), + format: 'der', + type: 'pkcs8' + }); + // this expects either a PEM encoded key or a node privateKeyObject + const publicKey = await createPublicKey(privateKey); + const publicKeyBuffer = publicKey.export(publicKeyEncoding); + const publicKeyBytes = getKeyMaterial(publicKeyBuffer); + return { + publicKey: publicKeyBytes, + secretKey: Buffer.concat([seedBytes, publicKeyBytes]) + }; + }, + // generates an ed25519 key using a random seed + async generateKeyPair() { + const seed = randomBytes(32); + return api.generateKeyPairFromSeed(seed); + }, + async sign(privateKeyBytes, data) { + const privateKey = await createPrivateKey({ + key: _privateKeyDerEncode({privateKeyBytes}), + format: 'der', + type: 'pkcs8' + }); + return sign(null, data, privateKey); + }, + async verify(publicKeyBytes, data, signature) { + const publicKey = await createPublicKey({ + key: _publicKeyDerEncode({publicKeyBytes}), + format: 'der', + type: 'spki' + }); + return verify(null, data, publicKey, signature); + } +}; + +export default api; + +/** + * The key material is the part of the buffer after the DER Prefix. + * + * @param {Buffer} buffer - A DER encoded key buffer. + * + * @throws {Error} If the buffer does not contain a valid DER Prefix. + * + * @returns {Buffer} The key material part of the Buffer. +*/ +function getKeyMaterial(buffer) { + if(buffer.indexOf(DER_PUBLIC_KEY_PREFIX) === 0) { + return buffer.slice(DER_PUBLIC_KEY_PREFIX.length, buffer.length); + } + if(buffer.indexOf(DER_PRIVATE_KEY_PREFIX) === 0) { + return buffer.slice(DER_PRIVATE_KEY_PREFIX.length, buffer.length); + } + throw new Error('Expected Buffer to match Ed25519 Public or Private Prefix'); +} +/** + * Takes a Buffer or Uint8Array with the raw private key and encodes it + * in DER-encoded PKCS#8 format. + * Allows Uint8Arrays to be interoperable with node's crypto functions. + * + * @param {object} options - Options to use. + * @param {Buffer} [options.privateKeyBytes] - Required if no seedBytes. + * @param {Buffer} [options.seedBytes] - Required if no privateKeyBytes. + * + * @throws {TypeError} Throws if the supplied buffer is not of the right size + * or not a Uint8Array or Buffer. + * + * @returns {Buffer} DER private key prefix + key bytes. +*/ +export function _privateKeyDerEncode({privateKeyBytes, seedBytes}) { + if(!(privateKeyBytes || seedBytes)) { + throw new TypeError('`privateKeyBytes` or `seedBytes` is required.'); + } + if(!privateKeyBytes && !(seedBytes instanceof Uint8Array && + seedBytes.length === 32)) { + throw new TypeError('`seedBytes` must be a 32 byte Buffer.'); + } + if(!seedBytes && !(privateKeyBytes instanceof Uint8Array && + privateKeyBytes.length === 64)) { + throw new TypeError('`privateKeyBytes` must be a 64 byte Buffer.'); + } + let p; + if(seedBytes) { + p = seedBytes; + } else { + // extract the first 32 bytes of the 64 byte private key representation + p = privateKeyBytes.slice(0, 32); + } + return Buffer.concat([DER_PRIVATE_KEY_PREFIX, p]); +} + +/** + * Takes a Uint8Array of public key bytes and encodes it in DER-encoded + * SubjectPublicKeyInfo (SPKI) format. + * Allows Uint8Arrays to be interoperable with node's crypto functions. + * + * @param {object} options - Options to use. + * @param {Uint8Array} options.publicKeyBytes - The keyBytes. + * + * @throws {TypeError} Throws if the bytes are not Uint8Array or of length 32. + * + * @returns {Buffer} DER Public key Prefix + key bytes. +*/ +export function _publicKeyDerEncode({publicKeyBytes}) { + if(!(publicKeyBytes instanceof Uint8Array && publicKeyBytes.length === 32)) { + throw new TypeError('`publicKeyBytes` must be a 32 byte Buffer.'); + } + return Buffer.concat([DER_PUBLIC_KEY_PREFIX, publicKeyBytes]); +} diff --git a/lib/jsonld-signatures/suites/ed255192018/util.ts b/lib/jsonld-signatures/suites/ed255192018/util.ts new file mode 100644 index 00000000..df999f5d --- /dev/null +++ b/lib/jsonld-signatures/suites/ed255192018/util.ts @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018-2020 Digital Bazaar, Inc. All rights reserved. + */ + +/** + * Wraps Base58 decoding operations in + * order to provide consistent error messages. + * @ignore + * @example + * > const pubkeyBytes = _base58Decode({ + * decode: base58.decode, + * keyMaterial: this.publicKeyBase58, + * type: 'public' + * }); + * @param {object} options - The decoder options. + * @param {Function} options.decode - The decode function to use. + * @param {string} options.keyMaterial - The Base58 encoded + * key material to decode. + * @param {string} options.type - A description of the + * key material that will be included + * in an error message (e.g. 'public', 'private'). + * + * @returns {object} - The decoded bytes. The data structure for the bytes is + * determined by the provided decode function. + */ +export function base58Decode({decode, keyMaterial, type}) { + let bytes; + try { + bytes = decode(keyMaterial); + } catch(e) { + // do nothing + // this helper throws when no result is produced + } + if(bytes === undefined) { + throw new TypeError(`The ${type} key material must be Base58 encoded.`); + } + return bytes; +} diff --git a/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts b/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts new file mode 100644 index 00000000..b4ebffbc --- /dev/null +++ b/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts @@ -0,0 +1,57 @@ +/*!s + * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved. + */ + +// import { RSAKeyPair } from 'crypto-ld'; +import { RsaVerificationKey2018 } from '@digitalbazaar/rsa-verification-key-2018/lib/RsaVerificationKey2018'; +import { JwsLinkedDataSignature } from '../JwsLinkedDataSignature'; + +export interface RsaSignature2018 { + [key: string]: any; +} + +export class RsaSignature2018 extends JwsLinkedDataSignature { + /** + * @param type {string} Provided by subclass. + * + * One of these parameters is required to use a suite for signing: + * + * @param [creator] {string} A key id URL to the paired public key. + * @param [verificationMethod] {string} A key id URL to the paired public key. + * + * This parameter is required for signing: + * + * @param [signer] {function} an optional signer. + * + * Advanced optional parameters and overrides: + * + * @param [proof] {object} a JSON-LD document with options to use for + * the `proof` node (e.g. any other custom fields can be provided here + * using a context different from security-v2). + * @param [date] {string|Date} signing date to use if not passed. + * @param [key] {LDKeyPair} an optional crypto-ld KeyPair. + * @param [useNativeCanonize] {boolean} true to use a native canonize + * algorithm. + */ + constructor({ + signer, + key, + verificationMethod, + proof, + date, + useNativeCanonize, + }: any = {}) { + super({ + type: 'RsaSignature2018', + alg: 'PS256', + LDKeyClass: RsaVerificationKey2018, + verificationMethod, + signer, + key, + proof, + date, + useNativeCanonize, + }); + this.requiredKeyType = 'RsaVerificationKey2018'; + } +} diff --git a/machines/vcItem.ts b/machines/vcItem.ts index 81b77f96..6d94bc7b 100644 --- a/machines/vcItem.ts +++ b/machines/vcItem.ts @@ -11,6 +11,7 @@ import { } from '../types/vc'; import { StoreEvents } from './store'; import { ActivityLogEvents } from './activityLog'; +import { verifyCredential } from '../shared/verifyCredential'; const model = createModel( { @@ -22,6 +23,8 @@ const model = createModel( credential: null as DecodedCredential, verifiableCredential: null as VerifiableCredential, requestId: '', + isVerified: false, + lastVerifiedOn: null, }, { events: { @@ -34,6 +37,7 @@ const model = createModel( POLL: () => ({}), DOWNLOAD_READY: () => ({}), GET_VC_RESPONSE: (vc: VC) => ({ vc }), + VERIFY: () => ({}), }, } ); @@ -53,246 +57,309 @@ type RequestVcDataEvent = | CredentialDownloadedEvent | GetVcResponseEvent; -export const vcItemMachine = model.createMachine( - { - id: 'vc-item', - context: model.initialContext, - initial: 'checkingVc', - states: { - checkingVc: { - entry: ['requestVcContext'], - on: { - GET_VC_RESPONSE: [ - { - cond: 'hasCredential', - target: 'idle', - actions: ['setCredential'], - }, - { - target: 'checkingStore', - }, - ], - }, - }, - checkingStore: { - entry: ['requestStoredContext'], - on: { - STORE_RESPONSE: [ - { - cond: 'hasCredential', - target: 'idle', - actions: ['setCredential', 'updateVc'], - }, - { - target: 'checkingServerData', - }, - ], - }, - }, - checkingServerData: { - initial: 'checkingStatus', - states: { - checkingStatus: { - invoke: { - id: 'checkStatus', - src: 'checkStatus', - }, - on: { - POLL: { - actions: [send('POLL_STATUS', { to: 'checkStatus' })], - }, - DOWNLOAD_READY: 'downloadingCredential', - }, - }, - downloadingCredential: { - invoke: { - id: 'downloadCredential', - src: 'downloadCredential', - }, - on: { - POLL: { - actions: [send('POLL_DOWNLOAD', { to: 'downloadCredential' })], - }, - CREDENTIAL_DOWNLOADED: { - target: '#idle', - actions: [ - 'setCredential', - 'storeContext', - 'updateVc', - 'logDownloaded', - ], - }, - }, - }, - }, - }, - idle: { - id: 'idle', - on: { - EDIT_TAG: 'editingTag', - }, - }, - editingTag: { - on: { - DISMISS: 'idle', - SAVE_TAG: { - target: 'storingTag', - actions: ['setTag'], - }, - }, - }, - storingTag: { - entry: ['storeTag'], - on: { - STORE_RESPONSE: 'idle', - }, - }, - }, - }, - { - actions: { - updateVc: send( - (context) => { - const { serviceRefs, ...vc } = context; - return { type: 'VC_DOWNLOADED', vc }; - }, - { to: (context) => context.serviceRefs.vc } - ), - - requestVcContext: send( - (context) => ({ - type: 'GET_VC_ITEM', - vcKey: VC_ITEM_STORE_KEY(context), - }), - { - to: (context) => context.serviceRefs.vc, - } - ), - - requestStoredContext: send( - (context) => StoreEvents.GET(VC_ITEM_STORE_KEY(context)), - { - to: (context) => context.serviceRefs.store, - } - ), - - storeContext: send( - (context) => { - const { serviceRefs, ...data } = context; - return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); - }, - { - to: (context) => context.serviceRefs.store, - } - ), - - setTag: model.assign({ - tag: (_, event: SaveTagEvent) => event.tag, - }), - - storeTag: send( - (context) => { - const { serviceRefs, ...data } = context; - return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); - }, - { to: (context) => context.serviceRefs.store } - ), - - setCredential: model.assign((_, event: RequestVcDataEvent) => { - switch (event.type) { - case 'STORE_RESPONSE': - return event.response; - case 'GET_VC_RESPONSE': - case 'CREDENTIAL_DOWNLOADED': - return event.vc; - } - }), - - logDownloaded: send( - (_, event: CredentialDownloadedEvent) => - ActivityLogEvents.LOG_ACTIVITY({ - _vcKey: VC_ITEM_STORE_KEY(event.vc), - action: 'downloaded', - timestamp: Date.now(), - deviceName: '', - vcLabel: event.vc.tag || event.vc.id, - }), - { to: (context) => context.serviceRefs.activityLog } - ), - }, - - services: { - checkStatus: (context) => (callback, onReceive) => { - const pollInterval = setInterval( - () => callback(model.events.POLL()), - 5000 - ); - - onReceive(async (event) => { - if (event.type === 'POLL_STATUS') { - const response = await request( - 'GET', - `/credentialshare/request/status/${context.requestId}` - ); - switch (response.response?.statusCode) { - case 'NEW': - break; - case 'ISSUED': - case 'printing': - callback(model.events.DOWNLOAD_READY()); - break; - } - } - }); - - return () => clearInterval(pollInterval); - }, - - downloadCredential: (context) => (callback, onReceive) => { - const pollInterval = setInterval( - () => callback(model.events.POLL()), - 5000 - ); - - onReceive(async (event) => { - if (event.type === 'POLL_DOWNLOAD') { - const response: CredentialDownloadResponse = await request( - 'POST', - '/credentialshare/download', +export const vcItemMachine = + /** @xstate-layout N4IgpgJg5mDOIC5QDcDGBaAlgFzAWwDpUALMVAa0wDsoA1VAYgHEBRAFQH1aBhDgJRYBlAAoB5AHKCWiUAAcA9rByZ5VGSAAeiAMwAWAEwFtABmMB2ABwBGfQFYANCACeiK29sEAbLasBOMwbe2r5WFgC+YY5oWLiEJGSUNILY8gBOYAyCbKIC-EJiktJIIApK2CpqxVoI+v4Evr6elsbBtrbmFo4uCBZmZl4+DbbBtbqeEVEYOPhEpBTUUIJgqcjLACIAhtgbswkLyVsArrAMYgAyZ+qlyqrq1Vaehp5WxrX6umZW2mb6D12Inm02gItnepj6r10FlsExA0WmcTmiUWy1WqU22128yS22wxwYa1EAHVxGdRABBNZ5SkATSuihulVA1T0ngIAVsnmMtjGvQczkQAQsXjBLwsFg61lh8NiWORSxW6y2Owg8gA7lQADbyDYQBbcdIQMBUcobTWnUQXellCp3AG2YVNNpmJpc369f4ITy6KwgzwS-TGXTmfzSqay+LYlGK9HKgiqjXa3X6w3G03m7gCNYscRsACS5LOHEJJLJlJYa2tjLtCBCvuMoWM4uhBhd+k9ZhaA0DVkswf8+m0YZiM0wEE1GQrec4bHJTCr5VuVUQdYIDYlzZ5+jbnodugIVlBDf9jTGZl8w4RBDHE4YtBYfDzADE6cVroumZpXH5hZ8bHpjF8bcbF0T0TH3Q9A2MZ4TF8UErEvWVIGUGg2A2KACTzQQAFksMEBdbWXBBQn3CwDG0MigQsb4LF8T03GBNooL8YYbBhSI4XDGZkPKVD0Mycl7w4Wd5zfBkPxrVd1ybcUtx3AUam0NlvCgwJfF0YZ9EQmZYBSVIFjQjCshyFg8hECQpAIpdmW-XxfzcQd+2A95PTsNlINMAwfXUoFxg4mUZjRTAADMnBTSA00wM0GFVKgwGvKhkHkch4oCwggtC8KjRNKLNQQagktQLYKgAbWMABdKzP3uED6kHT5tHeEYoTA0EDyPJsGwaLlwn8rj0uWEKwpoA0Ipy6LllSNICFkTUtmCtJ0v6ggMuGqBRuy9N8sS+Qio-MrKrEm1rK-YjaqA74viaoCWoU3Q6g8w9oPeSxesmEdET2GhaEG4LMD2ioDjxE4qprKwoQghsvjcDSIU6BTrEMUEuW5OxaO3CIOKoeQjXgYo0rlBZ6FBoiDHow9+m8BoW1PD52Peq9I3lPSwBJmyEDJhTfD0dqGhCXpelGbTPqjBU0QxHYmf2XFjjZ06+g7OwQTBQDhm9AIEL6j7CaSVElUxBMtR1PURtTcbNTl6phl8AhoQ3QZfk8Tw6IUswgT9AN9HeFigOFnXo3F5VLcQYZd1eZXgj6Z2yMHC8tavG9WaO6siKem2XgYmHbDh+jtxBaxTG8Xs+k7Mw-Z4gz0ODjn2wUtz2X9Lqnc7Cj6c47XdLSSuoGrl4lK8blnm3HkLHdVz3dR0x9Fottub8hnZVWrLIrNaupMbTdW0eMCzA8SfALsUU24JqXvt+-7itUIHZeTiTU+L23uf-IFGs7eHul3m2+glEMAgacHha93fjoEER5gKHg0u0D4mMwhAA */ + model.createMachine( + { + context: model.initialContext, + description: 'VC', + id: 'vc-item', + initial: 'checkingVc', + states: { + checkingVc: { + entry: 'requestVcContext', + description: + 'Check if the VC data is in VC list already (in memory).', + on: { + GET_VC_RESPONSE: [ { - individualId: context.id, - requestId: context.requestId, - } - ); + actions: 'setCredential', + cond: 'hasCredential', + target: 'checkingVerificationStatus', + }, + { + target: 'checkingStore', + }, + ], + }, + }, + checkingStore: { + entry: 'requestStoredContext', + description: 'Check if VC data is in secured local storage.', + on: { + STORE_RESPONSE: [ + { + actions: ['setCredential', 'updateVc'], + cond: 'hasCredential', + target: 'checkingVerificationStatus', + }, + { + target: 'checkingServerData', + }, + ], + }, + }, + checkingServerData: { + description: + "Download VC data from the server. Uses polling method to check when it's available.", + initial: 'checkingStatus', + states: { + checkingStatus: { + invoke: { + src: 'checkStatus', + id: 'checkStatus', + }, + on: { + POLL: { + actions: send('POLL_STATUS', { to: 'checkStatus' }), + }, + DOWNLOAD_READY: { + target: 'downloadingCredential', + }, + }, + }, + downloadingCredential: { + invoke: { + src: 'downloadCredential', + id: 'downloadCredential', + }, + on: { + POLL: { + actions: send('POLL_DOWNLOAD', { to: 'downloadCredential' }), + }, + CREDENTIAL_DOWNLOADED: { + actions: [ + 'setCredential', + 'storeContext', + 'updateVc', + 'logDownloaded', + ], + target: '#vc-item.checkingVerificationStatus', + }, + }, + }, + }, + }, + idle: { + on: { + EDIT_TAG: { + target: 'editingTag', + }, + VERIFY: { + target: 'verifyingCredential', + }, + }, + }, + editingTag: { + on: { + DISMISS: { + target: 'idle', + }, + SAVE_TAG: { + actions: 'setTag', + target: 'storingTag', + }, + }, + }, + storingTag: { + entry: 'storeTag', + on: { + STORE_RESPONSE: { + target: 'idle', + }, + }, + }, + verifyingCredential: { + invoke: { + src: 'verifyCredential', + onDone: [ + { + actions: ['markVcValid', 'storeContext', 'updateVc'], + target: 'idle', + }, + ], + onError: [ + { + actions: 'logError', + target: 'idle', + }, + ], + }, + }, + checkingVerificationStatus: { + description: + 'Check if VC verification is still valid. VCs stored on the device must be re-checked once every [N] time has passed.', + always: [ + { + cond: 'isVcValid', + target: 'idle', + }, + { + target: 'verifyingCredential', + }, + ], + }, + }, + }, + { + actions: { + updateVc: send( + (context) => { + const { serviceRefs, ...vc } = context; + return { type: 'VC_DOWNLOADED', vc }; + }, + { to: (context) => context.serviceRefs.vc } + ), - callback( - model.events.CREDENTIAL_DOWNLOADED({ - credential: response.credential, - verifiableCredential: response.verifiableCredential, - generatedOn: new Date(), - id: context.id, - idType: context.idType, - tag: '', - requestId: context.requestId, - }) - ); + requestVcContext: send( + (context) => ({ + type: 'GET_VC_ITEM', + vcKey: VC_ITEM_STORE_KEY(context), + }), + { + to: (context) => context.serviceRefs.vc, } - }); + ), - return () => clearInterval(pollInterval); - }, - }, + requestStoredContext: send( + (context) => StoreEvents.GET(VC_ITEM_STORE_KEY(context)), + { + to: (context) => context.serviceRefs.store, + } + ), - guards: { - hasCredential: (_, event: StoreResponseEvent) => { - return ( - event.response?.credential != null && - event.response?.verifiableCredential != null - ); + storeContext: send( + (context) => { + const { serviceRefs, ...data } = context; + return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); + }, + { + to: (context) => context.serviceRefs.store, + } + ), + + setTag: model.assign({ + tag: (_, event: SaveTagEvent) => event.tag, + }), + + storeTag: send( + (context) => { + const { serviceRefs, ...data } = context; + return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); + }, + { to: (context) => context.serviceRefs.store } + ), + + setCredential: model.assign((_, event: RequestVcDataEvent) => { + switch (event.type) { + case 'STORE_RESPONSE': + return event.response; + case 'GET_VC_RESPONSE': + case 'CREDENTIAL_DOWNLOADED': + return event.vc; + } + }), + + logDownloaded: send( + (_, event: CredentialDownloadedEvent) => + ActivityLogEvents.LOG_ACTIVITY({ + _vcKey: VC_ITEM_STORE_KEY(event.vc), + action: 'downloaded', + timestamp: Date.now(), + deviceName: '', + vcLabel: event.vc.tag || event.vc.id, + }), + { to: (context) => context.serviceRefs.activityLog } + ), + + markVcValid: model.assign({ + isVerified: true, + lastVerifiedOn: () => Date.now(), + }), }, - }, - } -); + + services: { + checkStatus: (context) => (callback, onReceive) => { + const pollInterval = setInterval( + () => callback(model.events.POLL()), + 5000 + ); + + onReceive(async (event) => { + if (event.type === 'POLL_STATUS') { + const response = await request( + 'GET', + `/credentialshare/request/status/${context.requestId}` + ); + switch (response.response?.statusCode) { + case 'NEW': + break; + case 'ISSUED': + case 'printing': + callback(model.events.DOWNLOAD_READY()); + break; + } + } + }); + + return () => clearInterval(pollInterval); + }, + + downloadCredential: (context) => (callback, onReceive) => { + const pollInterval = setInterval( + () => callback(model.events.POLL()), + 5000 + ); + + onReceive(async (event) => { + if (event.type === 'POLL_DOWNLOAD') { + const response: CredentialDownloadResponse = await request( + 'POST', + '/credentialshare/download', + { + individualId: context.id, + requestId: context.requestId, + } + ); + + callback( + model.events.CREDENTIAL_DOWNLOADED({ + credential: response.credential, + verifiableCredential: response.verifiableCredential, + generatedOn: new Date(), + id: context.id, + idType: context.idType, + tag: '', + requestId: context.requestId, + isVerified: false, + lastVerifiedOn: null, + }) + ); + } + }); + + return () => clearInterval(pollInterval); + }, + + verifyCredential: async (context) => { + return verifyCredential(context.verifiableCredential); + }, + }, + + guards: { + hasCredential: (_, event: StoreResponseEvent) => { + return ( + event.response?.credential != null && + event.response?.verifiableCredential != null + ); + }, + + isVcValid: (context) => { + return context.isVerified; + }, + }, + } + ); export const createVcItemMachine = ( serviceRefs: AppServices, diff --git a/package-lock.json b/package-lock.json index 53db8522..68535e11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,11 @@ "name": "mosip-resident-app", "version": "1.0.0", "dependencies": { + "@digitalbazaar/ed25519-signature-2018": "digitalbazaar/ed25519-signature-2018", + "@digitalbazaar/ed25519-verification-key-2018": "digitalbazaar/ed25519-verification-key-2018", + "@digitalbazaar/rsa-signature-2018": "digitalbazaar/rsa-signature-2018#initial", + "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial", + "@digitalcredentials/vc": "^1.1.2", "@expo-google-fonts/poppins": "^0.2.0", "@idpass/smartshare-react-native": "^0.2.0", "@react-native-async-storage/async-storage": "~1.15.0", @@ -17,6 +22,8 @@ "@react-navigation/native": "^6.0.2", "@react-navigation/native-stack": "^6.1.0", "@xstate/react": "^1.6.1", + "base64url-universal": "^1.1.0", + "buffer": "^6.0.3", "crypto-js": "^3.3.0", "date-fns": "^2.26.0", "expo": "^43.0.0", @@ -32,12 +39,14 @@ "react-dom": "17.0.1", "react-native": "0.64.3", "react-native-app-intro-slider": "^4.0.4", + "react-native-blob-util": "^0.14.1", "react-native-bluetooth-state-manager": "^1.3.2", "react-native-device-info": "^8.4.8", "react-native-elements": "^3.4.2", "react-native-gesture-handler": "~1.10.2", "react-native-keychain": "^8.0.0", "react-native-location-enabler": "^4.1.0", + "react-native-polyfill-globals": "^3.1.0", "react-native-qrcode-svg": "^6.1.1", "react-native-reanimated": "~2.2.0", "react-native-safe-area-context": "3.3.2", @@ -55,6 +64,7 @@ "@types/react": "~17.0.21", "@types/react-native": "~0.64.12", "babel-plugin-inline-import": "^3.0.0", + "babel-plugin-module-resolver": "^4.1.0", "eas-cli": "^0.37.0", "expo-cli": "^4.13.0", "sharp": "^0.29.3", @@ -93,17 +103,17 @@ } }, "node_modules/@babel/core": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", - "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.7", "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.7", - "@babel/parser": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -435,9 +445,9 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", - "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", @@ -461,9 +471,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", - "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -549,11 +559,11 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz", + "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-create-class-features-plugin": "^7.17.6", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/plugin-syntax-decorators": "^7.17.0", @@ -1258,12 +1268,12 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", "dependencies": { "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" @@ -1751,9 +1761,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz", - "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1821,6 +1831,245 @@ "node": ">=0.1.95" } }, + "node_modules/@digitalbazaar/ed25519-signature-2018": { + "version": "2.1.1-0", + "resolved": "git+ssh://git@github.com/digitalbazaar/ed25519-signature-2018.git#759369965b5273f037e6a32f5da42ff9d2e14c60", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/ed25519-verification-key-2018": "^3.1.1", + "@digitalbazaar/ed25519-verification-key-2020": "^3.2.0", + "@digitalbazaar/jws-linked-data-signature": "^1.0.1", + "base58-universal": "^1.0.0", + "ed25519-signature-2018-context": "^1.0.1", + "ed25519-signature-2020-context": "^1.1.0", + "esm": "^3.2.25", + "jsonld": "^5.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/ed25519-signature-2018/node_modules/@digitalbazaar/ed25519-verification-key-2018": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2018/-/ed25519-verification-key-2018-3.1.2.tgz", + "integrity": "sha512-UD7rETyyaHtKYeKfQu/FoeZ00EmANInX0ftmMKQJsI1q8YcRHUAiMF0sIbVM/T73+VBR2dObtfLnZTNM+PkXug==", + "dependencies": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "crypto-ld": "^5.0.0", + "esm": "^3.2.25" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/ed25519-verification-key-2018": { + "version": "3.1.3-0", + "resolved": "git+ssh://git@github.com/digitalbazaar/ed25519-verification-key-2018.git#c106fc01108963b789b3366bc587d4992fe3770d", + "license": "BSD-3-Clause", + "dependencies": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "crypto-ld": "^5.0.0", + "esm": "^3.2.25" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/ed25519-verification-key-2020": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.0.tgz", + "integrity": "sha512-A+17sRJ+rRNuN6yG0zZMucbVUpxUkBRLTb503caoJv0GB5853HXSaZbl83kKl9LCh02ExbQWxD6o/aqeR012uA==", + "dependencies": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "base64url-universal": "^1.1.0", + "crypto-ld": "^5.1.0", + "esm": "^3.2.25" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "dependencies": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@digitalbazaar/jws-linked-data-signature": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/jws-linked-data-signature/-/jws-linked-data-signature-1.0.1.tgz", + "integrity": "sha512-6bj1q/gQgk7rCKGJqwIF7rrSHcqCl049hNwIoNRVHOJpD5pOdTVlJqjdd1/a49UFcoYqiIpb1Bq/5xg/iAsWbQ==", + "dependencies": { + "base64url-universal": "^1.1.0", + "esm": "^3.2.25", + "jsonld-signatures": "^9.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/rsa-signature-2018": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/digitalbazaar/rsa-signature-2018.git#47533f74a128cc29e5a6e8f96f466d0b5f3834b3", + "license": "BSD-3-Clause", + "dependencies": { + "@digitalbazaar/jws-linked-data-signature": "digitalbazaar/jws-linked-data-signature#initial", + "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial", + "esm": "^3.2.25" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/rsa-signature-2018/node_modules/@digitalbazaar/jws-linked-data-signature": { + "version": "0.0.1", + "resolved": "git+ssh://git@github.com/digitalbazaar/jws-linked-data-signature.git#2bf931e63d69d10e003f5c440cc7efde4e56d519", + "license": "BSD-3-Clause", + "dependencies": { + "base64url-universal": "^1.1.0", + "esm": "^3.2.25", + "jsonld": "^5.0.0", + "jsonld-signatures": "^8.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/rsa-signature-2018/node_modules/jsonld-signatures": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-8.0.2.tgz", + "integrity": "sha512-HfmlLJxGacTnBiI4v8Ok3ouNOpCMmsPanBD6rLq20XJFdEw1fLury8NddRmoVr3/vSxvheAqyKK9giUG33J6ag==", + "dependencies": { + "jsonld": "^5.0.0", + "security-context": "^4.0.0", + "serialize-error": "^8.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalbazaar/rsa-verification-key-2018": { + "version": "1.0.1-0", + "resolved": "git+ssh://git@github.com/digitalbazaar/rsa-verification-key-2018.git#5af38c1ba91ef5c2a3e0a3b55bec389fd2f973d9", + "license": "BSD-3-Clause", + "dependencies": { + "base64url-universal": "^1.1.0", + "bs58": "^4.0.1", + "crypto-ld": "^4.0.2", + "node-forge": "~0.9.1", + "semver": "^7.3.2" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esm": "^3.2.25", + "sodium-native": "^3.1.1" + } + }, + "node_modules/@digitalbazaar/rsa-verification-key-2018/node_modules/crypto-ld": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-4.0.3.tgz", + "integrity": "sha512-IeNCX1wv7kLjxhKrCV6Jee0CU84e2dSyVxTaM3SCuO8/fMbYzjsx1e1js+c7w8GlOslubOHJKvhJ1EI+aZ1MwQ==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@digitalbazaar/rsa-verification-key-2018/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@digitalbazaar/security-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.0.tgz", + "integrity": "sha512-mlj+UmodxTAdMCHGxnGVTRLHcSLyiEOVRiz3J6yiRliJWyrgeXs34wlWjBorDIEMDIjK2JwZrDuFEKO9bS5nKQ==" + }, + "node_modules/@digitalcredentials/http-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", + "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "dependencies": { + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@digitalcredentials/jsonld": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz", + "integrity": "sha512-pDiO1liw8xs+J/43qnMZsxyz0VOWOb7Q2yUlBt/tyjq6SlT9xPo+3716tJPbjGPnou2lQRw3H5/I++z+6oQ07w==", + "dependencies": { + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/jsonld-signatures": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz", + "integrity": "sha512-YMh1e1GpTeHDqq2a2Kd+pLcHsMiPeKyE2Zs17NSwqckij7UMRVDQ54S5VQhHvoXZ1mlkpVaI2xtj5M5N6rzylw==", + "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", + "@digitalcredentials/jsonld": "^5.2.1", + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8", + "serialize-error": "^8.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/rdf-canonize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", + "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "dependencies": { + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalcredentials/vc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-1.1.2.tgz", + "integrity": "sha512-TSgny9XUh+W7uFjdcpvZzN7I35F9YMTv6jVINXr7UaLNgrinIjy6A5RMGQH9ecpcaoLMemKB5XjtLOOOQ3vknQ==", + "dependencies": { + "@digitalcredentials/jsonld": "^5.2.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "credentials-context": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@egjs/hammerjs": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", @@ -1972,6 +2221,25 @@ "node": ">=10" } }, + "node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/config-plugins/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2027,6 +2295,26 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/config/node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -2267,6 +2555,26 @@ "node": ">=10" } }, + "node_modules/@expo/dev-server/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/dev-server/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2288,6 +2596,21 @@ "node": ">=10" } }, + "node_modules/@expo/dev-server/node_modules/serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "dev": true, + "dependencies": { + "type-fest": "^0.12.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@expo/dev-server/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2300,6 +2623,18 @@ "node": ">=8" } }, + "node_modules/@expo/dev-server/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@expo/dev-server/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -2496,6 +2831,26 @@ "node": ">=10" } }, + "node_modules/@expo/dev-tools/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/dev-tools/node_modules/graphql": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", @@ -2531,6 +2886,12 @@ "node": ">=8" } }, + "node_modules/@expo/dev-tools/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/@expo/dev-tools/node_modules/semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -3059,6 +3420,25 @@ "node": ">=10" } }, + "node_modules/@expo/metro-config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/metro-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3239,6 +3619,15 @@ "node-forge": "^0.10.0" } }, + "node_modules/@expo/pkcs12/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/@expo/plist": { "version": "0.0.14", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.14.tgz", @@ -3660,6 +4049,26 @@ "node": ">=10" } }, + "node_modules/@expo/webpack-config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@expo/webpack-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4499,6 +4908,43 @@ "node": ">=4" } }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.1.0.tgz", + "integrity": "sha512-D6g4C5YRKC/iPujMAOXuZ7YGdaoMx8GsvWzfVSyx2LYeL38ECOKNywlYAuwbqQvON64lgsYdAujWQPX8hhoBLw==", + "dependencies": { + "@types/asn1js": "^2.0.2", + "asn1js": "^2.3.1", + "pvtsutils": "^1.2.1", + "tslib": "^2.3.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.3.2.tgz", + "integrity": "sha512-oUgNj+8oT7uROEMEpZZ3U+kZjyxj1KXuvA8P5kiMUveTya9eyS8KTqu/dzdEtYC3u7dvjknVz+0sUfkWOBHfQg==", + "dependencies": { + "@peculiar/asn1-schema": "^2.0.44", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.2.2", + "tslib": "^2.3.1", + "webcrypto-core": "^1.7.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/@react-native-async-storage/async-storage": { "version": "1.15.17", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.17.tgz", @@ -5497,9 +5943,9 @@ } }, "node_modules/@react-native-picker/picker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.3.1.tgz", - "integrity": "sha512-DAw1o3bHNRnQPImsK53xCYkgC8bH+t9uTM+0JjNIlmMwvVLFnmDxi9v5iBTIWFMWG/pUHQaw66E29wW6oJG9Tw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.0.tgz", + "integrity": "sha512-duGZc3a8Qa21YPrA4U3oR9NAUzBA66FTjubGK2CodA6rNjiwN+xC32hOZ5unkf4qD3DqLWeoPjg3fYf54bVMjA==", "peerDependencies": { "react": "16 || 17", "react-native": ">=0.57" @@ -5579,9 +6025,9 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz", - "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.2.tgz", + "integrity": "sha512-aKnjDEljGPDbL8VflCRGVJ2SPD/6x5yuAWsxd1ouCuD+43clkMnz1e0piNf+t3EpNYIWdBNR66Xa+7U/UB4y3w==", "dependencies": { "@react-navigation/elements": "^1.3.1", "warn-once": "^0.1.0" @@ -5613,9 +6059,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -5642,6 +6088,58 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz", + "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==", + "dependencies": { + "@stablelib/random": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz", + "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -5663,6 +6161,11 @@ "node": ">= 6" } }, + "node_modules/@types/asn1js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz", + "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==" + }, "node_modules/@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -5738,9 +6241,9 @@ "dev": true }, "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "dependencies": { "@types/node": "*" @@ -5753,9 +6256,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" }, "node_modules/@types/prop-types": { "version": "15.7.4", @@ -5769,9 +6272,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.40", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz", - "integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==", + "version": "17.0.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz", + "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -5845,6 +6348,11 @@ "node": ">=0.10.0" } }, + "node_modules/@types/web": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.55.tgz", + "integrity": "sha512-YMH9aZrSJIMRMioCUwrgauI3iS/w2wRFN45Xxm0FE9Tt3hqaqkvOzjDFGsNjyKZzz7GJC0ilb+0tv59ytSUbrQ==" + }, "node_modules/@types/webpack": { "version": "4.41.32", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", @@ -5901,6 +6409,135 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, + "node_modules/@unimodules/core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", + "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", + "optional": true, + "dependencies": { + "compare-versions": "^3.4.0" + } + }, + "node_modules/@unimodules/react-native-adapter": { + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz", + "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==", + "optional": true, + "dependencies": { + "expo-modules-autolinking": "^0.0.3", + "invariant": "^2.2.4" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "node_modules/@unimodules/react-native-adapter/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/expo-modules-autolinking": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", + "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" + }, + "bin": { + "expo-modules-autolinking": "bin/expo-modules-autolinking.js" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "optional": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@unimodules/react-native-adapter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@urql/core": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.1.tgz", @@ -6578,6 +7215,11 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "node_modules/asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==" + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -6605,6 +7247,17 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "node_modules/asn1js": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.3.2.tgz", + "integrity": "sha512-IYzujqcOk7fHaePpTyvD3KPAA0AjT3qZlaQAw76zmPPAV/XTjhO+tbHjbFbIQZIhw+fk9wCSfb0Z6K+JHe8Q2g==", + "dependencies": { + "pvutils": "latest" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -6731,6 +7384,27 @@ "follow-redirects": "^1.10.0" } }, + "node_modules/b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "dependencies": { + "base-64": "^0.1.0" + } + }, + "node_modules/b64-lite/node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + }, + "node_modules/b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "dependencies": { + "b64-lite": "^1.4.0" + } + }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -6964,6 +7638,20 @@ "node": ">=0.10.0" } }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "peer": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", @@ -6984,6 +7672,17 @@ "node": ">=0.12.0" } }, + "node_modules/base58-universal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-1.0.0.tgz", + "integrity": "sha512-v0Ja4jwaQP8gBZPNXpfaXlLht2ed/Gp3AsVUZXtlZgY1qbKS0CjxvYs43U0Gh00zbVc1neMe+q/ULJ7ubVyB+w==", + "dependencies": { + "esm": "^3.2.25" + }, + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -7007,11 +7706,21 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true, "engines": { "node": ">=6.0.0" } }, + "node_modules/base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "dependencies": { + "base64url": "^3.0.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -7075,6 +7784,30 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7383,26 +8116,6 @@ "node": ">= 6" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -7440,6 +8153,14 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -7462,10 +8183,9 @@ } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -7482,7 +8202,7 @@ ], "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, "node_modules/buffer-alloc": { @@ -7595,12 +8315,6 @@ "node": ">=10" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -7732,13 +8446,24 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001317", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", - "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001320", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", + "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "node_modules/capture-exit": { "version": "2.0.0", @@ -8314,6 +9039,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8414,6 +9144,11 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -8640,6 +9375,11 @@ "object-assign": "^4.1.1" } }, + "node_modules/credentials-context": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==" + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -8726,6 +9466,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" }, + "node_modules/crypto-ld": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-5.1.0.tgz", + "integrity": "sha512-Dy1QoQzj+2K6UlGZ9l34cPp+g/YHOd+r3/DXXQTnnz5btGb0vqDlkZBn+icYmwntEmW0bvGVwFWvcwZSbk1EEQ==", + "engines": { + "node": ">=8.3.0" + } + }, "node_modules/crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -9045,6 +9793,14 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "engines": { + "node": ">= 6" + } + }, "node_modules/date-fns": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", @@ -9072,9 +9828,9 @@ "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==" }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -9335,6 +10091,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, "engines": { "node": ">= 0.6" } @@ -9366,7 +10123,8 @@ "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, "node_modules/detect-libc": { "version": "1.0.3", @@ -9755,6 +10513,15 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/eas-cli/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/eas-cli/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -9792,15 +10559,25 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==" + }, + "node_modules/ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.4.86", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz", - "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w==" + "version": "1.4.93", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.93.tgz", + "integrity": "sha512-ywq9Pc5Gwwpv7NG767CtoU8xF3aAUQJjH9//Wy3MBCg4w5JSLbJUq2L8IsCdzPMjvSgxuue9WcVaTOyyxCL0aQ==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -10090,6 +10867,14 @@ "node": ">=4.0.0" } }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "engines": { + "node": ">=6" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -10809,6 +11594,26 @@ "node": ">=10" } }, + "node_modules/expo-cli/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expo-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11276,6 +12081,25 @@ "node": ">=10" } }, + "node_modules/expo-constants/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expo-constants/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11706,6 +12530,26 @@ "node": ">=10" } }, + "node_modules/expo-pwa/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expo-pwa/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11748,6 +12592,18 @@ "node": ">= 10.0.0" } }, + "node_modules/expo-random": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", + "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0" + }, + "peerDependencies": { + "expo": "*" + } + }, "node_modules/expo-splash-screen": { "version": "0.13.5", "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.13.5.tgz", @@ -12008,6 +12864,25 @@ "node": ">=10" } }, + "node_modules/expo-splash-screen/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expo-splash-screen/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -12206,6 +13081,25 @@ "node": ">=10" } }, + "node_modules/expo-updates/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/expo-updates/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -12423,6 +13317,12 @@ "node": ">= 0.8" } }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/express/node_modules/serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", @@ -12513,6 +13413,12 @@ "node >=0.6.0" ] }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "peer": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -12539,6 +13445,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -12594,6 +13505,19 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "node_modules/fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "engines": { + "node": "^10.17.0 || >=12.3.0" + }, + "peerDependenciesMeta": { + "domexception": { + "optional": true + } + } + }, "node_modules/fetch-retry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", @@ -13193,12 +14117,6 @@ "node": ">=8" } }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -13397,9 +14315,9 @@ "dev": true }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13775,26 +14693,6 @@ "node": ">= 6" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -14052,9 +14950,9 @@ } }, "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -14093,9 +14991,9 @@ } }, "node_modules/htmlparser2/node_modules/domutils/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -14435,7 +15333,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -15529,6 +16426,38 @@ "is-stream": "^1.0.1" } }, + "node_modules/isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "dependencies": { + "@peculiar/webcrypto": "^1.0.22", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "msrcrypto": "^1.5.6", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" + }, + "optionalDependencies": { + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "expo-random": "*", + "react-native-securerandom": "^0.1.1" + } + }, + "node_modules/isomorphic-webcrypto/node_modules/react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=", + "optional": true, + "dependencies": { + "base64-js": "*" + }, + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -15813,6 +16742,15 @@ "node-rsa": "^1.0.7" } }, + "node_modules/jks-js/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/joi": { "version": "17.4.2", "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz", @@ -16104,12 +17042,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "bin": { "json5": "lib/cli.js" }, @@ -16136,6 +17071,33 @@ "node": "*" } }, + "node_modules/jsonld": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", + "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "dependencies": { + "@digitalbazaar/http-client": "^1.1.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsonld-signatures": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz", + "integrity": "sha512-OasKERvvbfbuItVFrb0pOHiclHPvT98IAorayZnEj48/E0Vz3rTPLzC14rDi1CEXjiiTGeNadLzTLdomdeZEAQ==", + "dependencies": { + "jsonld": "^5.0.0", + "security-context": "^4.0.0", + "serialize-error": "^8.0.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -16205,6 +17167,57 @@ "node": ">=6" } }, + "node_modules/ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "engines": { + "node": ">=10.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.17.0", + "web-streams-polyfill": ">=2.0.0" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/ky-universal/node_modules/node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "dependencies": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + }, + "engines": { + "node": "^10.17 || >=12.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -16533,11 +17546,6 @@ "node": ">=10" } }, - "node_modules/lru-cache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -16597,12 +17605,6 @@ "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -16623,6 +17625,15 @@ "node": ">=6" } }, + "node_modules/map-age-cleaner/node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -17357,12 +18368,12 @@ "dev": true }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -17554,12 +18565,6 @@ "node": ">=8" } }, - "node_modules/minipass-collect/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-fetch": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", @@ -17589,12 +18594,6 @@ "node": ">=8" } }, - "node_modules/minipass-fetch/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -17619,12 +18618,6 @@ "node": ">=8" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", @@ -17647,12 +18640,6 @@ "node": ">=8" } }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -17677,12 +18664,6 @@ "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -17707,10 +18688,10 @@ "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/minipass/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "node_modules/minizlib": { @@ -17738,12 +18719,6 @@ "node": ">=8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -17778,11 +18753,11 @@ } }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -17830,6 +18805,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==" + }, "node_modules/multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", @@ -18111,12 +19091,11 @@ } }, "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true, + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz", + "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==", "engines": { - "node": ">= 6.0.0" + "node": ">= 4.5.0" } }, "node_modules/node-gyp": { @@ -18143,6 +19122,17 @@ "node": ">= 10.12.0" } }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -18557,12 +19547,6 @@ "node": ">=10" } }, - "node_modules/npm-registry-fetch/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -19122,12 +20106,12 @@ } }, "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/p-finally": { @@ -19500,12 +20484,6 @@ "node": ">=10" } }, - "node_modules/pacote/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -19895,9 +20873,9 @@ } }, "node_modules/plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "dependencies": { "base64-js": "^1.5.1", "xmlbuilder": "^9.0.7" @@ -20889,11 +21867,26 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, "engines": { "node": ">=6" } }, + "node_modules/pvtsutils": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.2.tgz", + "integrity": "sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -21114,6 +22107,17 @@ "rc": "cli.js" } }, + "node_modules/rdf-canonize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.0.0.tgz", + "integrity": "sha512-LXRkhab1QaPJnhUIt1gtXXKswQCZ9zpflsSZFczG7mCLAkMvVjdqCGk9VXCUss0aOUeEyV2jtFxGcdX8DSkj9w==", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/react": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", @@ -21383,9 +22387,9 @@ } }, "node_modules/react-devtools-core": { - "version": "4.24.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.1.tgz", - "integrity": "sha512-skar+cqSg5Oz89n4lQ/aBQS8RGj93FMufg2TrMJqE+RSUTO9nLEYawRMXXCs8PnDVRSfG5pPVU5Nt1OegNflyA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.2.tgz", + "integrity": "sha512-UC3rvQCG/dnC95NPNWBFrUEtdAEiFZ9xZe1tTHFOELVR5qfNLroZ3w9tC51NQvvK5E10G2ko3lQ5Vrh3p0bHrA==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" @@ -21488,6 +22492,20 @@ "resolved": "https://registry.npmjs.org/react-native-app-intro-slider/-/react-native-app-intro-slider-4.0.4.tgz", "integrity": "sha512-Zkjaol6X3BbZkHUpVDj2LjdidpS6rCgKi0fx80xgGKa0pHxBRd4swWTv2bHnnvu5k1/HXwYk0mY2TbK+2jHl5w==" }, + "node_modules/react-native-blob-util": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.14.1.tgz", + "integrity": "sha512-Rf2aURRqM7j96fFdO5tbiVlAsfLOkSyBqrAPlG4VcJj9jT6G7bVHebwJg7BBfTKWTFwPjiOIAdUjsjkGaUUOyQ==", + "dependencies": { + "base-64": "0.1.0", + "glob": "^7.1.6" + } + }, + "node_modules/react-native-blob-util/node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + }, "node_modules/react-native-bluetooth-state-manager": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/react-native-bluetooth-state-manager/-/react-native-bluetooth-state-manager-1.3.2.tgz", @@ -21508,9 +22526,9 @@ } }, "node_modules/react-native-device-info": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.0.tgz", - "integrity": "sha512-Y5mSYWvVvlpKbN3hkA+mDBqXvcgeR/jiIFaJZrsYw4LF+e3fwFl+vQgPz21IroDi9JXkA26BpxaXu3lj1P1GGg==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.1.tgz", + "integrity": "sha512-VMEP1c/X0KSOqBZDzs9/GHbacgdsoQqaBqI/fK98S5oMmKAfuIFjAjb4kvcNjC2mklD6JrlgXPnqKQQaX+kklg==", "peerDependencies": { "react-native": "*" } @@ -21543,6 +22561,15 @@ "node": ">=0.10.0" } }, + "node_modules/react-native-fetch-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", + "peer": true, + "dependencies": { + "p-defer": "^3.0.0" + } + }, "node_modules/react-native-gesture-handler": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", @@ -21569,6 +22596,18 @@ "ua-parser-js": "^0.7.30" } }, + "node_modules/react-native-get-random-values": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.2.tgz", + "integrity": "sha512-28KRYGpIG/upV8+k/qFA+TwGW+yGjmtOHaCduJHpOQK1QUTyhiA6E2IgL4UvvU2dybeCTYFmUi9wcEQ0GiWe5g==", + "peer": true, + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, "node_modules/react-native-keychain": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.0.0.tgz", @@ -21583,6 +22622,19 @@ "react-native": "*" } }, + "node_modules/react-native-polyfill-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-native-polyfill-globals/-/react-native-polyfill-globals-3.1.0.tgz", + "integrity": "sha512-6ACmV1SjXvZP2LN6J2yK58yNACKddcvoiKLrSQdISx32IdYStfdmGXrbAfpd+TANrTlIaZ2SLoFXohNwhnqm/w==", + "peerDependencies": { + "base-64": "*", + "react-native-fetch-api": "*", + "react-native-get-random-values": "*", + "react-native-url-polyfill": "*", + "text-encoding": "*", + "web-streams-polyfill": "*" + } + }, "node_modules/react-native-qrcode-svg": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.1.2.tgz", @@ -21709,6 +22761,18 @@ "resolved": "https://registry.npmjs.org/react-native-system-setting/-/react-native-system-setting-1.7.6.tgz", "integrity": "sha512-nBnIK5Xnyu8XRRA3BMzRI54oYlSBKc0oOTQdZOCEeOvn4ltS1nk2shj/vtMQe6khXvuhai3vIc+g7DcsOcr5+w==" }, + "node_modules/react-native-url-polyfill": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz", + "integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==", + "peer": true, + "dependencies": { + "whatwg-url-without-unicode": "8.0.0-3" + }, + "peerDependencies": { + "react-native": "*" + } + }, "node_modules/react-native-vector-icons": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-8.1.0.tgz", @@ -21946,6 +23010,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -22220,9 +23289,9 @@ ] }, "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -22635,9 +23704,23 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safe-json-stringify": { "version": "1.2.0", @@ -22855,6 +23938,11 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -22870,6 +23958,15 @@ "node-forge": "^0.10.0" } }, + "node_modules/selfsigned/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -22948,12 +24045,11 @@ "dev": true }, "node_modules/serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "dependencies": { - "type-fest": "^0.12.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=10" @@ -22962,18 +24058,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -23038,14 +24122,14 @@ "dev": true }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -23064,19 +24148,36 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node_modules/serve-static/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/serve-static/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/serve-static/node_modules/mime": { @@ -23095,24 +24196,35 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/serve-static/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/serve-static/node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -23124,11 +24236,11 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/serve-static/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/serve-static/node_modules/toidentifier": { @@ -23257,9 +24369,9 @@ } }, "node_modules/sharp-cli/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "engines": { "node": ">=4" @@ -24091,6 +25203,16 @@ "node": ">= 10" } }, + "node_modules/sodium-native": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.3.0.tgz", + "integrity": "sha512-rg6lCDM/qa3p07YGqaVD+ciAbUqm6SoO4xmlcfkbU5r1zIGrguXztLiEtaLYTV5U6k8KSIUFmnU3yQUSKmf6DA==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -24270,12 +25392,6 @@ "node": ">=8" } }, - "node_modules/ssri/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -24412,6 +25528,11 @@ "node": ">= 0.6" } }, + "node_modules/str2buf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", + "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==" + }, "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -24499,6 +25620,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/string-hash-64": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", @@ -24682,6 +25808,25 @@ "node": ">= 6" } }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/sudo-prompt": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", @@ -24906,12 +26051,6 @@ "node": ">=10" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -25104,6 +26243,13 @@ "node": ">=0.10.0" } }, + "node_modules/text-encoding": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", + "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", + "deprecated": "no longer maintained", + "peer": true + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -25387,7 +26533,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -26280,10 +27425,41 @@ "defaults": "^1.0.3" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.1.tgz", + "integrity": "sha512-Gw2zLzYSJ7Imp5lLDu3CcWB5oTTACMDEE2PjoLfttGgIhd7BfackBdVgEzd9ZM/i65gpNq0+IelL0JZ48QwzNg==", + "dependencies": { + "@peculiar/asn1-schema": "^2.0.44", + "@peculiar/json-schema": "^1.1.12", + "@types/web": "^0.0.55", + "asn1js": "^2.2.0", + "pvtsutils": "^1.2.2", + "tslib": "^2.3.1" + } + }, + "node_modules/webcrypto-shim": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", + "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==" + }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "peer": true, + "engines": { + "node": ">=8" + } }, "node_modules/webpack": { "version": "4.43.0", @@ -26950,26 +28126,6 @@ "node": ">=0.10" } }, - "node_modules/webpack-dev-server/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -27023,6 +28179,21 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/webpack-dev-server/node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -27553,6 +28724,12 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/websocket-driver": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", @@ -27588,6 +28765,49 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "peer": true, + "dependencies": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url-without-unicode/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -28060,6 +29280,26 @@ "minipass": "^2.6.0" } }, + "node_modules/xdl/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/xdl/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -28088,6 +29328,15 @@ "minipass": "^2.9.0" } }, + "node_modules/xdl/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/xdl/node_modules/p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -28112,6 +29361,21 @@ "node": ">=10" } }, + "node_modules/xdl/node_modules/serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "dev": true, + "dependencies": { + "type-fest": "^0.12.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdl/node_modules/source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -28151,6 +29415,18 @@ "node": ">=4.5" } }, + "node_modules/xdl/node_modules/type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xdl/node_modules/universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -28160,6 +29436,12 @@ "node": ">= 10.0.0" } }, + "node_modules/xdl/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", @@ -28230,10 +29512,9 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "15.4.1", @@ -28389,17 +29670,17 @@ "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==" }, "@babel/core": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", - "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.7", "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.7", - "@babel/parser": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", @@ -28640,9 +29921,9 @@ } }, "@babel/helpers": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", - "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.3", @@ -28660,9 +29941,9 @@ } }, "@babel/parser": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", - "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==" + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", + "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.7", @@ -28712,11 +29993,11 @@ } }, "@babel/plugin-proposal-decorators": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", - "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz", + "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-create-class-features-plugin": "^7.17.6", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/plugin-syntax-decorators": "^7.17.0", @@ -29154,12 +30435,12 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", "requires": { "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" @@ -29482,9 +30763,9 @@ } }, "@babel/runtime": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz", - "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==", + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -29534,6 +30815,190 @@ "minimist": "^1.2.0" } }, + "@digitalbazaar/ed25519-signature-2018": { + "version": "git+ssh://git@github.com/digitalbazaar/ed25519-signature-2018.git#759369965b5273f037e6a32f5da42ff9d2e14c60", + "from": "@digitalbazaar/ed25519-signature-2018@digitalbazaar/ed25519-signature-2018", + "requires": { + "@digitalbazaar/ed25519-verification-key-2018": "^3.1.1", + "@digitalbazaar/ed25519-verification-key-2020": "^3.2.0", + "@digitalbazaar/jws-linked-data-signature": "^1.0.1", + "base58-universal": "^1.0.0", + "ed25519-signature-2018-context": "^1.0.1", + "ed25519-signature-2020-context": "^1.1.0", + "esm": "^3.2.25", + "jsonld": "^5.2.0" + }, + "dependencies": { + "@digitalbazaar/ed25519-verification-key-2018": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2018/-/ed25519-verification-key-2018-3.1.2.tgz", + "integrity": "sha512-UD7rETyyaHtKYeKfQu/FoeZ00EmANInX0ftmMKQJsI1q8YcRHUAiMF0sIbVM/T73+VBR2dObtfLnZTNM+PkXug==", + "requires": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "crypto-ld": "^5.0.0", + "esm": "^3.2.25" + } + } + } + }, + "@digitalbazaar/ed25519-verification-key-2018": { + "version": "git+ssh://git@github.com/digitalbazaar/ed25519-verification-key-2018.git#c106fc01108963b789b3366bc587d4992fe3770d", + "from": "@digitalbazaar/ed25519-verification-key-2018@digitalbazaar/ed25519-verification-key-2018", + "requires": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "crypto-ld": "^5.0.0", + "esm": "^3.2.25" + } + }, + "@digitalbazaar/ed25519-verification-key-2020": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.0.tgz", + "integrity": "sha512-A+17sRJ+rRNuN6yG0zZMucbVUpxUkBRLTb503caoJv0GB5853HXSaZbl83kKl9LCh02ExbQWxD6o/aqeR012uA==", + "requires": { + "@stablelib/ed25519": "^1.0.1", + "base58-universal": "^1.0.0", + "base64url-universal": "^1.1.0", + "crypto-ld": "^5.1.0", + "esm": "^3.2.25" + } + }, + "@digitalbazaar/http-client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", + "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "requires": { + "esm": "^3.2.22", + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + } + }, + "@digitalbazaar/jws-linked-data-signature": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/jws-linked-data-signature/-/jws-linked-data-signature-1.0.1.tgz", + "integrity": "sha512-6bj1q/gQgk7rCKGJqwIF7rrSHcqCl049hNwIoNRVHOJpD5pOdTVlJqjdd1/a49UFcoYqiIpb1Bq/5xg/iAsWbQ==", + "requires": { + "base64url-universal": "^1.1.0", + "esm": "^3.2.25", + "jsonld-signatures": "^9.0.2" + } + }, + "@digitalbazaar/rsa-signature-2018": { + "version": "git+ssh://git@github.com/digitalbazaar/rsa-signature-2018.git#47533f74a128cc29e5a6e8f96f466d0b5f3834b3", + "from": "@digitalbazaar/rsa-signature-2018@digitalbazaar/rsa-signature-2018#initial", + "requires": { + "@digitalbazaar/jws-linked-data-signature": "digitalbazaar/jws-linked-data-signature#initial", + "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial", + "esm": "^3.2.25" + }, + "dependencies": { + "@digitalbazaar/jws-linked-data-signature": { + "version": "git+ssh://git@github.com/digitalbazaar/jws-linked-data-signature.git#2bf931e63d69d10e003f5c440cc7efde4e56d519", + "from": "@digitalbazaar/jws-linked-data-signature@digitalbazaar/jws-linked-data-signature#initial", + "requires": { + "base64url-universal": "^1.1.0", + "esm": "^3.2.25", + "jsonld": "^5.0.0", + "jsonld-signatures": "^8.0.0" + } + }, + "jsonld-signatures": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-8.0.2.tgz", + "integrity": "sha512-HfmlLJxGacTnBiI4v8Ok3ouNOpCMmsPanBD6rLq20XJFdEw1fLury8NddRmoVr3/vSxvheAqyKK9giUG33J6ag==", + "requires": { + "jsonld": "^5.0.0", + "security-context": "^4.0.0", + "serialize-error": "^8.0.1" + } + } + } + }, + "@digitalbazaar/rsa-verification-key-2018": { + "version": "git+ssh://git@github.com/digitalbazaar/rsa-verification-key-2018.git#5af38c1ba91ef5c2a3e0a3b55bec389fd2f973d9", + "from": "@digitalbazaar/rsa-verification-key-2018@digitalbazaar/rsa-verification-key-2018#initial", + "requires": { + "base64url-universal": "^1.1.0", + "bs58": "^4.0.1", + "crypto-ld": "^4.0.2", + "esm": "^3.2.25", + "node-forge": "~0.9.1", + "semver": "^7.3.2", + "sodium-native": "^3.1.1" + }, + "dependencies": { + "crypto-ld": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-4.0.3.tgz", + "integrity": "sha512-IeNCX1wv7kLjxhKrCV6Jee0CU84e2dSyVxTaM3SCuO8/fMbYzjsx1e1js+c7w8GlOslubOHJKvhJ1EI+aZ1MwQ==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@digitalbazaar/security-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.0.tgz", + "integrity": "sha512-mlj+UmodxTAdMCHGxnGVTRLHcSLyiEOVRiz3J6yiRliJWyrgeXs34wlWjBorDIEMDIjK2JwZrDuFEKO9bS5nKQ==" + }, + "@digitalcredentials/http-client": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", + "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "requires": { + "ky": "^0.25.1", + "ky-universal": "^0.8.2" + } + }, + "@digitalcredentials/jsonld": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz", + "integrity": "sha512-pDiO1liw8xs+J/43qnMZsxyz0VOWOb7Q2yUlBt/tyjq6SlT9xPo+3716tJPbjGPnou2lQRw3H5/I++z+6oQ07w==", + "requires": { + "@digitalcredentials/http-client": "^1.0.0", + "@digitalcredentials/rdf-canonize": "^1.0.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0" + } + }, + "@digitalcredentials/jsonld-signatures": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz", + "integrity": "sha512-YMh1e1GpTeHDqq2a2Kd+pLcHsMiPeKyE2Zs17NSwqckij7UMRVDQ54S5VQhHvoXZ1mlkpVaI2xtj5M5N6rzylw==", + "requires": { + "@digitalbazaar/security-context": "^1.0.0", + "@digitalcredentials/jsonld": "^5.2.1", + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8", + "serialize-error": "^8.0.1" + } + }, + "@digitalcredentials/rdf-canonize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", + "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "requires": { + "fast-text-encoding": "^1.0.3", + "isomorphic-webcrypto": "^2.3.8" + } + }, + "@digitalcredentials/vc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-1.1.2.tgz", + "integrity": "sha512-TSgny9XUh+W7uFjdcpvZzN7I35F9YMTv6jVINXr7UaLNgrinIjy6A5RMGQH9ecpcaoLMemKB5XjtLOOOQ3vknQ==", + "requires": { + "@digitalcredentials/jsonld": "^5.2.1", + "@digitalcredentials/jsonld-signatures": "^9.3.1", + "credentials-context": "^2.0.0" + } + }, "@egjs/hammerjs": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", @@ -29592,6 +31057,20 @@ "@babel/highlight": "^7.10.4" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -29673,6 +31152,19 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -29898,6 +31390,20 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -29910,6 +31416,15 @@ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, + "serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "dev": true, + "requires": { + "type-fest": "^0.12.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29919,6 +31434,12 @@ "has-flag": "^4.0.0" } }, + "type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true + }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", @@ -30086,6 +31607,20 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "graphql": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", @@ -30114,6 +31649,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -30543,6 +32084,19 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -30680,6 +32234,14 @@ "dev": true, "requires": { "node-forge": "^0.10.0" + }, + "dependencies": { + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + } } }, "@expo/plist": { @@ -31046,6 +32608,20 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -31694,6 +33270,37 @@ } } }, + "@peculiar/asn1-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.1.0.tgz", + "integrity": "sha512-D6g4C5YRKC/iPujMAOXuZ7YGdaoMx8GsvWzfVSyx2LYeL38ECOKNywlYAuwbqQvON64lgsYdAujWQPX8hhoBLw==", + "requires": { + "@types/asn1js": "^2.0.2", + "asn1js": "^2.3.1", + "pvtsutils": "^1.2.1", + "tslib": "^2.3.1" + } + }, + "@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@peculiar/webcrypto": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.3.2.tgz", + "integrity": "sha512-oUgNj+8oT7uROEMEpZZ3U+kZjyxj1KXuvA8P5kiMUveTya9eyS8KTqu/dzdEtYC3u7dvjknVz+0sUfkWOBHfQg==", + "requires": { + "@peculiar/asn1-schema": "^2.0.44", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.2.2", + "tslib": "^2.3.1", + "webcrypto-core": "^1.7.1" + } + }, "@react-native-async-storage/async-storage": { "version": "1.15.17", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.17.tgz", @@ -32474,9 +34081,9 @@ "requires": {} }, "@react-native-picker/picker": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.3.1.tgz", - "integrity": "sha512-DAw1o3bHNRnQPImsK53xCYkgC8bH+t9uTM+0JjNIlmMwvVLFnmDxi9v5iBTIWFMWG/pUHQaw66E29wW6oJG9Tw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.0.tgz", + "integrity": "sha512-duGZc3a8Qa21YPrA4U3oR9NAUzBA66FTjubGK2CodA6rNjiwN+xC32hOZ5unkf4qD3DqLWeoPjg3fYf54bVMjA==", "requires": {} }, "@react-native/assets": { @@ -32534,9 +34141,9 @@ } }, "@react-navigation/native-stack": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz", - "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.2.tgz", + "integrity": "sha512-aKnjDEljGPDbL8VflCRGVJ2SPD/6x5yuAWsxd1ouCuD+43clkMnz1e0piNf+t3EpNYIWdBNR66Xa+7U/UB4y3w==", "requires": { "@react-navigation/elements": "^1.3.1", "warn-once": "^0.1.0" @@ -32561,9 +34168,9 @@ } }, "@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "requires": { "@hapi/hoek": "^9.0.0" } @@ -32584,6 +34191,58 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, + "@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "requires": { + "@stablelib/int": "^1.0.1" + } + }, + "@stablelib/ed25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz", + "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==", + "requires": { + "@stablelib/random": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "@stablelib/random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz", + "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -32599,6 +34258,11 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@types/asn1js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz", + "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA==" + }, "@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -32674,9 +34338,9 @@ "dev": true }, "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "requires": { "@types/node": "*" @@ -32689,9 +34353,9 @@ "dev": true }, "@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" }, "@types/prop-types": { "version": "15.7.4", @@ -32705,9 +34369,9 @@ "dev": true }, "@types/react": { - "version": "17.0.40", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz", - "integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==", + "version": "17.0.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz", + "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -32780,6 +34444,11 @@ } } }, + "@types/web": { + "version": "0.0.55", + "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.55.tgz", + "integrity": "sha512-YMH9aZrSJIMRMioCUwrgauI3iS/w2wRFN45Xxm0FE9Tt3hqaqkvOzjDFGsNjyKZzz7GJC0ilb+0tv59ytSUbrQ==" + }, "@types/webpack": { "version": "4.41.32", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", @@ -32834,6 +34503,107 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, + "@unimodules/core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", + "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", + "optional": true, + "requires": { + "compare-versions": "^3.4.0" + } + }, + "@unimodules/react-native-adapter": { + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz", + "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==", + "optional": true, + "requires": { + "expo-modules-autolinking": "^0.0.3", + "invariant": "^2.2.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "optional": true + }, + "expo-modules-autolinking": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", + "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", + "optional": true, + "requires": { + "chalk": "^4.1.0", + "commander": "^7.2.0", + "fast-glob": "^3.2.5", + "find-up": "~5.0.0", + "fs-extra": "^9.1.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "optional": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@urql/core": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.1.tgz", @@ -33401,6 +35171,11 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, + "asmcrypto.js": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", + "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==" + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -33430,6 +35205,14 @@ } } }, + "asn1js": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.3.2.tgz", + "integrity": "sha512-IYzujqcOk7fHaePpTyvD3KPAA0AjT3qZlaQAw76zmPPAV/XTjhO+tbHjbFbIQZIhw+fk9wCSfb0Z6K+JHe8Q2g==", + "requires": { + "pvutils": "latest" + } + }, "assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -33526,6 +35309,29 @@ "follow-redirects": "^1.10.0" } }, + "b64-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", + "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "requires": { + "base-64": "^0.1.0" + }, + "dependencies": { + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + } + } + }, + "b64u-lite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", + "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "requires": { + "b64-lite": "^1.4.0" + } + }, "babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -33731,12 +35537,34 @@ } } }, + "base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "peer": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "base32.js": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=", "dev": true }, + "base58-universal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-1.0.0.tgz", + "integrity": "sha512-v0Ja4jwaQP8gBZPNXpfaXlLht2ed/Gp3AsVUZXtlZgY1qbKS0CjxvYs43U0Gh00zbVc1neMe+q/ULJ7ubVyB+w==", + "requires": { + "esm": "^3.2.25" + } + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -33745,8 +35573,15 @@ "base64url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "base64url-universal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", + "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "requires": { + "base64url": "^3.0.0" + } }, "batch": { "version": "0.6.1", @@ -33802,6 +35637,16 @@ "readable-stream": "^3.4.0" }, "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -34075,12 +35920,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true } } }, @@ -34105,6 +35944,14 @@ "picocolors": "^1.0.0" } }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -34124,13 +35971,12 @@ } }, "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, "buffer-alloc": { @@ -34227,12 +36073,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -34337,9 +36177,14 @@ } }, "caniuse-lite": { - "version": "1.0.30001317", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", - "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==" + "version": "1.0.30001320", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", + "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==" + }, + "canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" }, "capture-exit": { "version": "2.0.0", @@ -34786,6 +36631,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -34874,6 +36724,13 @@ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "cookie": { @@ -35061,6 +36918,11 @@ "object-assign": "^4.1.1" } }, + "credentials-context": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", + "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==" + }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", @@ -35128,6 +36990,11 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" }, + "crypto-ld": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-5.1.0.tgz", + "integrity": "sha512-Dy1QoQzj+2K6UlGZ9l34cPp+g/YHOd+r3/DXXQTnnz5btGb0vqDlkZBn+icYmwntEmW0bvGVwFWvcwZSbk1EEQ==" + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -35374,6 +37241,11 @@ "assert-plus": "^1.0.0" } }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, "date-fns": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", @@ -35391,9 +37263,9 @@ "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==" }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -35588,7 +37460,8 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true }, "deprecated-decorator": { "version": "0.1.6", @@ -35614,7 +37487,8 @@ "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, "detect-libc": { "version": "1.0.3", @@ -35940,6 +37814,12 @@ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -35970,15 +37850,25 @@ "safer-buffer": "^2.1.0" } }, + "ed25519-signature-2018-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", + "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==" + }, + "ed25519-signature-2020-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", + "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.86", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz", - "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w==" + "version": "1.4.93", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.93.tgz", + "integrity": "sha512-ywq9Pc5Gwwpv7NG767CtoU8xF3aAUQJjH9//Wy3MBCg4w5JSLbJUq2L8IsCdzPMjvSgxuue9WcVaTOyyxCL0aQ==" }, "elliptic": { "version": "6.5.4", @@ -36214,6 +38104,11 @@ "estraverse": "^4.1.1" } }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -36495,12 +38390,13 @@ } }, "expo-barcode-scanner": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/expo-barcode-scanner/-/expo-barcode-scanner-11.2.1.tgz", - "integrity": "sha512-NLMnZA2aoPeCBaxJIOEFxbbHfQhZ25NViay1FFumbZOuQFLj1CwlGNyGSyyERbXpdqwQ4VKqYaCux/7UF+dwxA==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/expo-barcode-scanner/-/expo-barcode-scanner-11.1.2.tgz", + "integrity": "sha512-qRr6lf4jmNAQQm7iaocXzZ88J+QP2EAzjpR3c64woLa8upry4BRGKcaLcKuQ4eyM9F1x43RW24G+m34hFbPAnw==", "requires": { "@expo/config-plugins": "^4.0.2", - "expo-image-loader": "~3.1.0" + "expo-image-loader": "~3.0.0", + "expo-modules-core": "~0.4.4" } }, "expo-camera": { @@ -36810,6 +38706,20 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -37174,6 +39084,19 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -37237,10 +39160,9 @@ } }, "expo-image-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-3.1.1.tgz", - "integrity": "sha512-ZX4Bh3K4CCX1aZflnmbOgFNLS+c0/GUys4wdvqxO+4A4KU1NNb3jE7RVa/OFYNPDcGhEw20c1QjyE/WsVURJpg==", - "requires": {} + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-3.0.0.tgz", + "integrity": "sha512-r4D+uLCf5vm5A2JIbF1Bc9FjYKrYGSLShbFB1MUvZ4BpSXJPRsprYZ9veUBVzzhh8hr23ahTFjMzp3nC57iREw==" }, "expo-json-utils": { "version": "0.2.1", @@ -37518,6 +39440,20 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -37547,6 +39483,15 @@ } } }, + "expo-random": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz", + "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==", + "optional": true, + "requires": { + "base64-js": "^1.3.0" + } + }, "expo-splash-screen": { "version": "0.13.5", "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.13.5.tgz", @@ -37769,6 +39714,19 @@ "universalify": "^2.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -37929,6 +39887,19 @@ "universalify": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -38101,6 +40072,12 @@ "unpipe": "1.0.0" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "serve-static": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", @@ -38174,6 +40151,12 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "peer": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -38197,6 +40180,11 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -38249,6 +40237,11 @@ "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, + "fetch-blob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", + "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==" + }, "fetch-retry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", @@ -38709,12 +40702,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -38869,9 +40856,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -39151,12 +41138,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true } } }, @@ -39375,9 +41356,9 @@ }, "dependencies": { "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -39403,9 +41384,9 @@ }, "dependencies": { "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -39691,8 +41672,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "iferr": { "version": "0.1.5", @@ -40488,6 +42468,35 @@ } } }, + "isomorphic-webcrypto": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", + "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "requires": { + "@peculiar/webcrypto": "^1.0.22", + "@unimodules/core": "*", + "@unimodules/react-native-adapter": "*", + "asmcrypto.js": "^0.22.0", + "b64-lite": "^1.3.1", + "b64u-lite": "^1.0.1", + "expo-random": "*", + "msrcrypto": "^1.5.6", + "react-native-securerandom": "^0.1.1", + "str2buf": "^1.3.0", + "webcrypto-shim": "^0.1.4" + }, + "dependencies": { + "react-native-securerandom": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", + "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=", + "optional": true, + "requires": { + "base64-js": "*" + } + } + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -40700,6 +42709,14 @@ "node-forge": "^0.10.0", "node-int64": "^0.4.0", "node-rsa": "^1.0.7" + }, + "dependencies": { + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + } } }, "joi": { @@ -40955,12 +42972,9 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsonfile": { "version": "6.1.0", @@ -40976,6 +42990,27 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, + "jsonld": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", + "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "requires": { + "@digitalbazaar/http-client": "^1.1.0", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.0.0" + } + }, + "jsonld-signatures": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz", + "integrity": "sha512-OasKERvvbfbuItVFrb0pOHiclHPvT98IAorayZnEj48/E0Vz3rTPLzC14rDi1CEXjiiTGeNadLzTLdomdeZEAQ==", + "requires": { + "jsonld": "^5.0.0", + "security-context": "^4.0.0", + "serialize-error": "^8.0.1" + } + }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -41033,6 +43068,31 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, + "ky": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", + "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==" + }, + "ky-universal": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", + "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "requires": { + "abort-controller": "^3.0.0", + "node-fetch": "3.0.0-beta.9" + }, + "dependencies": { + "node-fetch": { + "version": "3.0.0-beta.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", + "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "requires": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^2.1.1" + } + } + } + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -41294,13 +43354,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "make-dir": { @@ -41351,12 +43404,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -41375,6 +43422,14 @@ "dev": true, "requires": { "p-defer": "^1.0.0" + }, + "dependencies": { + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + } } }, "map-cache": { @@ -42030,12 +44085,12 @@ "dev": true }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "miller-rabin": { @@ -42163,6 +44218,14 @@ "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "minipass-collect": { @@ -42182,12 +44245,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42211,12 +44268,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42237,12 +44288,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42264,12 +44309,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42290,12 +44329,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42316,12 +44349,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42343,12 +44370,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -42380,11 +44401,11 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "mkdirp-classic": { @@ -42428,6 +44449,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "msrcrypto": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", + "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==" + }, "multicast-dns": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", @@ -42662,10 +44688,9 @@ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz", + "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==" }, "node-gyp": { "version": "7.1.2", @@ -42705,6 +44730,12 @@ } } }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "optional": true + }, "node-html-parser": { "version": "1.4.9", "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz", @@ -43028,12 +45059,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -43456,10 +45481,10 @@ "dev": true }, "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "peer": true }, "p-finally": { "version": "1.0.0", @@ -43740,12 +45765,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -44057,9 +46076,9 @@ } }, "plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "requires": { "base64-js": "^1.5.1", "xmlbuilder": "^9.0.7" @@ -44926,8 +46945,20 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pvtsutils": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.2.tgz", + "integrity": "sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA==", + "requires": { + "tslib": "^2.3.1" + } + }, + "pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==" }, "q": { "version": "1.5.1", @@ -45082,6 +47113,14 @@ "strip-json-comments": "~2.0.1" } }, + "rdf-canonize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.0.0.tgz", + "integrity": "sha512-LXRkhab1QaPJnhUIt1gtXXKswQCZ9zpflsSZFczG7mCLAkMvVjdqCGk9VXCUss0aOUeEyV2jtFxGcdX8DSkj9w==", + "requires": { + "setimmediate": "^1.0.5" + } + }, "react": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", @@ -45283,9 +47322,9 @@ } }, "react-devtools-core": { - "version": "4.24.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.1.tgz", - "integrity": "sha512-skar+cqSg5Oz89n4lQ/aBQS8RGj93FMufg2TrMJqE+RSUTO9nLEYawRMXXCs8PnDVRSfG5pPVU5Nt1OegNflyA==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.2.tgz", + "integrity": "sha512-UC3rvQCG/dnC95NPNWBFrUEtdAEiFZ9xZe1tTHFOELVR5qfNLroZ3w9tC51NQvvK5E10G2ko3lQ5Vrh3p0bHrA==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" @@ -45443,6 +47482,22 @@ "resolved": "https://registry.npmjs.org/react-native-app-intro-slider/-/react-native-app-intro-slider-4.0.4.tgz", "integrity": "sha512-Zkjaol6X3BbZkHUpVDj2LjdidpS6rCgKi0fx80xgGKa0pHxBRd4swWTv2bHnnvu5k1/HXwYk0mY2TbK+2jHl5w==" }, + "react-native-blob-util": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.14.1.tgz", + "integrity": "sha512-Rf2aURRqM7j96fFdO5tbiVlAsfLOkSyBqrAPlG4VcJj9jT6G7bVHebwJg7BBfTKWTFwPjiOIAdUjsjkGaUUOyQ==", + "requires": { + "base-64": "0.1.0", + "glob": "^7.1.6" + }, + "dependencies": { + "base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" + } + } + }, "react-native-bluetooth-state-manager": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/react-native-bluetooth-state-manager/-/react-native-bluetooth-state-manager-1.3.2.tgz", @@ -45460,9 +47515,9 @@ } }, "react-native-device-info": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.0.tgz", - "integrity": "sha512-Y5mSYWvVvlpKbN3hkA+mDBqXvcgeR/jiIFaJZrsYw4LF+e3fwFl+vQgPz21IroDi9JXkA26BpxaXu3lj1P1GGg==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.1.tgz", + "integrity": "sha512-VMEP1c/X0KSOqBZDzs9/GHbacgdsoQqaBqI/fK98S5oMmKAfuIFjAjb4kvcNjC2mklD6JrlgXPnqKQQaX+kklg==", "requires": {} }, "react-native-elements": { @@ -45487,6 +47542,15 @@ } } }, + "react-native-fetch-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", + "peer": true, + "requires": { + "p-defer": "^3.0.0" + } + }, "react-native-gesture-handler": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", @@ -45515,6 +47579,15 @@ } } }, + "react-native-get-random-values": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.2.tgz", + "integrity": "sha512-28KRYGpIG/upV8+k/qFA+TwGW+yGjmtOHaCduJHpOQK1QUTyhiA6E2IgL4UvvU2dybeCTYFmUi9wcEQ0GiWe5g==", + "peer": true, + "requires": { + "fast-base64-decode": "^1.0.0" + } + }, "react-native-keychain": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.0.0.tgz", @@ -45526,6 +47599,12 @@ "integrity": "sha512-SKjO+ks2B+1l2lbRCMtZ9QQ5BEIsIAHEztAWvWRyKZKVHHkes4vwD1nLazOvGjkAEnDnqbnr6LGan8OiwmX9Ow==", "requires": {} }, + "react-native-polyfill-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-native-polyfill-globals/-/react-native-polyfill-globals-3.1.0.tgz", + "integrity": "sha512-6ACmV1SjXvZP2LN6J2yK58yNACKddcvoiKLrSQdISx32IdYStfdmGXrbAfpd+TANrTlIaZ2SLoFXohNwhnqm/w==", + "requires": {} + }, "react-native-qrcode-svg": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.1.2.tgz", @@ -45621,6 +47700,15 @@ "resolved": "https://registry.npmjs.org/react-native-system-setting/-/react-native-system-setting-1.7.6.tgz", "integrity": "sha512-nBnIK5Xnyu8XRRA3BMzRI54oYlSBKc0oOTQdZOCEeOvn4ltS1nk2shj/vtMQe6khXvuhai3vIc+g7DcsOcr5+w==" }, + "react-native-url-polyfill": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz", + "integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==", + "peer": true, + "requires": { + "whatwg-url-without-unicode": "8.0.0-3" + } + }, "react-native-vector-icons": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-8.1.0.tgz", @@ -45748,6 +47836,13 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "readdirp": { @@ -45965,9 +48060,9 @@ "dev": true }, "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -46279,9 +48374,9 @@ "dev": true }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-json-stringify": { "version": "1.2.0", @@ -46463,6 +48558,11 @@ "ajv-keywords": "^3.5.2" } }, + "security-context": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz", + "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -46476,6 +48576,14 @@ "dev": true, "requires": { "node-forge": "^0.10.0" + }, + "dependencies": { + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + } } }, "semver": { @@ -46546,20 +48654,11 @@ } }, "serialize-error": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", - "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", - "dev": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "requires": { - "type-fest": "^0.12.0" - }, - "dependencies": { - "type-fest": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", - "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", - "dev": true - } + "type-fest": "^0.20.2" } }, "serialize-javascript": { @@ -46622,14 +48721,14 @@ } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "dependencies": { "debug": { @@ -46647,15 +48746,25 @@ } } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" } }, @@ -46669,24 +48778,32 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" } }, "setprototypeof": { @@ -46695,9 +48812,9 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "toidentifier": { "version": "1.0.1", @@ -46834,9 +48951,9 @@ }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "camelcase": { @@ -47459,6 +49576,15 @@ "socks": "^2.6.1" } }, + "sodium-native": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.3.0.tgz", + "integrity": "sha512-rg6lCDM/qa3p07YGqaVD+ciAbUqm6SoO4xmlcfkbU5r1zIGrguXztLiEtaLYTV5U6k8KSIUFmnU3yQUSKmf6DA==", + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -47604,12 +49730,6 @@ "requires": { "yallist": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -47721,6 +49841,11 @@ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true }, + "str2buf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", + "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==" + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -47802,6 +49927,13 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "string-hash-64": { @@ -47935,6 +50067,19 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } } } }, @@ -48068,12 +50213,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -48258,6 +50397,12 @@ } } }, + "text-encoding": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", + "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", + "peer": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -48494,8 +50639,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" }, "type-is": { "version": "1.6.18", @@ -49218,10 +51362,35 @@ "defaults": "^1.0.3" } }, + "web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "peer": true + }, + "webcrypto-core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.1.tgz", + "integrity": "sha512-Gw2zLzYSJ7Imp5lLDu3CcWB5oTTACMDEE2PjoLfttGgIhd7BfackBdVgEzd9ZM/i65gpNq0+IelL0JZ48QwzNg==", + "requires": { + "@peculiar/asn1-schema": "^2.0.44", + "@peculiar/json-schema": "^1.1.12", + "@types/web": "^0.0.55", + "asn1js": "^2.2.0", + "pvtsutils": "^1.2.2", + "tslib": "^2.3.1" + } + }, + "webcrypto-shim": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", + "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==" + }, "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "peer": true }, "webpack": { "version": "4.43.0", @@ -49478,6 +51647,12 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1" } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -49985,12 +52160,6 @@ "readable-stream": "^2.0.2" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -50042,6 +52211,18 @@ } } }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -50286,6 +52467,36 @@ "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + } + } + }, + "whatwg-url-without-unicode": { + "version": "8.0.0-3", + "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", + "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "peer": true, + "requires": { + "buffer": "^5.4.3", + "punycode": "^2.1.1", + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "peer": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } } }, "which": { @@ -50694,6 +52905,20 @@ "minipass": "^2.6.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -50719,6 +52944,12 @@ "minipass": "^2.9.0" } }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, "p-map": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", @@ -50734,6 +52965,15 @@ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", "dev": true }, + "serialize-error": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz", + "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==", + "dev": true, + "requires": { + "type-fest": "^0.12.0" + } + }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -50767,11 +53007,23 @@ "yallist": "^3.0.2" } }, + "type-fest": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", + "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", + "dev": true + }, "universalify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -50828,10 +53080,9 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "15.4.1", diff --git a/package.json b/package.json index b513ce54..b5b620fd 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,11 @@ "build:android:newlogic": "cd android && ./gradlew :app:assembleNewlogicRelease && cd .." }, "dependencies": { + "@digitalbazaar/ed25519-signature-2018": "digitalbazaar/ed25519-signature-2018", + "@digitalbazaar/ed25519-verification-key-2018": "digitalbazaar/ed25519-verification-key-2018", + "@digitalbazaar/rsa-signature-2018": "digitalbazaar/rsa-signature-2018#initial", + "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial", + "@digitalcredentials/vc": "^1.1.2", "@expo-google-fonts/poppins": "^0.2.0", "@idpass/smartshare-react-native": "^0.2.0", "@react-native-async-storage/async-storage": "~1.15.0", @@ -19,6 +24,8 @@ "@react-navigation/native": "^6.0.2", "@react-navigation/native-stack": "^6.1.0", "@xstate/react": "^1.6.1", + "base64url-universal": "^1.1.0", + "buffer": "^6.0.3", "crypto-js": "^3.3.0", "date-fns": "^2.26.0", "expo": "^43.0.0", @@ -34,12 +41,14 @@ "react-dom": "17.0.1", "react-native": "0.64.3", "react-native-app-intro-slider": "^4.0.4", + "react-native-blob-util": "^0.14.1", "react-native-bluetooth-state-manager": "^1.3.2", "react-native-device-info": "^8.4.8", "react-native-elements": "^3.4.2", "react-native-gesture-handler": "~1.10.2", "react-native-keychain": "^8.0.0", "react-native-location-enabler": "^4.1.0", + "react-native-polyfill-globals": "^3.1.0", "react-native-qrcode-svg": "^6.1.1", "react-native-reanimated": "~2.2.0", "react-native-safe-area-context": "3.3.2", @@ -57,6 +66,7 @@ "@types/react": "~17.0.21", "@types/react-native": "~0.64.12", "babel-plugin-inline-import": "^3.0.0", + "babel-plugin-module-resolver": "^4.1.0", "eas-cli": "^0.37.0", "expo-cli": "^4.13.0", "sharp": "^0.29.3", diff --git a/shared/constants.ts b/shared/constants.ts index 7577977c..4139fcde 100644 --- a/shared/constants.ts +++ b/shared/constants.ts @@ -17,3 +17,5 @@ export const ACTIVITY_LOG_STORE_KEY = 'activityLog'; export const SETTINGS_STORE_KEY = 'settings'; export const ONBOARDING_STATUS_STORE_KEY = 'isOnboardingDone'; + +export const VC_VALIDITY_EXPIRATION_IN_DAYS = 7; diff --git a/shared/vc-ed25519.json b/shared/vc-ed25519.json new file mode 100644 index 00000000..16d87606 --- /dev/null +++ b/shared/vc-ed25519.json @@ -0,0 +1,26 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + ], + "id": "https://yqs3j2p1k9.execute-api.us-east-1.amazonaws.com/prod/credentials/d98b8f50-c472-11eb-97fb-cbf4e5918c09", + "type": [ + "VerifiableCredential", + "UniversityDegreeCredential" + ], + "issuer": "https://mercury-credentials-public-tb0172-prod.s3.us-east-1.amazonaws.com/controller.json", + "issuanceDate": "2021-06-01T12:00:00.000Z", + "credentialSubject": { + "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", + "degree": "Bachelor of Science", + "degreeType": "BachelorDegree", + "degreeSchool": "Mercury University" + }, + "proof": { + "type": "Ed25519Signature2018", + "created": "2021-06-03T13:51:52Z", + "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..8YIj2tG6HoiDKw476_ElxcCFiCTr89jHX24Osr1zgklp0Sgfkgx-ipu6Li5og4wtLGMoa7__xJpcHWHzwWZoCQ", + "proofPurpose": "assertionMethod", + "verificationMethod": "https://mercury-credentials-public-tb0172-prod.s3.us-east-1.amazonaws.com/publicKey.json" + } +} \ No newline at end of file diff --git a/shared/vc-rsa-mosip.json b/shared/vc-rsa-mosip.json new file mode 100644 index 00000000..d6130ea0 --- /dev/null +++ b/shared/vc-rsa-mosip.json @@ -0,0 +1,41 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://qa-triple-rc2.mosip.net/mosipvc/mosip-context.json", + { + "sec": "https://w3id.org/security#" + } + ], + "credentialSubject": { + "gender": "[{\"language\":\"eng\",\"value\":\"Male\"}]", + "city": "[{\"language\":\"eng\",\"value\":\"Kenitra\"}]", + "postalCode": "14022", + "fullName": "Test56rtt", + "dateOfBirth": "1999", + "biometrics": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxJbmRleD4xMmU2ODRlNC1mYjQ5LTQ3MTgtOTZlMC1jNWU4ZGE2OTNjZGI8L0luZGV4PgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMi0wMy0wM1QxMzoxNzo1NS43ODE5OTI5MDBaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4zMDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa0ZEQURBek1BQUFBRm9LQUFFQUFBQUFBRm41QitZREF4SXZMQUU0QUFBQUFBQUJBQUVEQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FQQUJRQUFBQVFBQUFBQlp3UUFBQUF4cVVDQWdEUXFIQ2dBQUFCUm1kSGx3YW5BeUlBQUFBQUJxY0RJZ0FBQUFSMnB3TW1nQUFBQVdhV2hrY2dBQUFVQUFBQUR3QUFNSEJ3QUFBQUFBRDJOdmJISUJBQUFBQUFBUUFBQUFHbkpsY3lBQUFBQVNjbVZ6WTVuS0FBR1p5Z0FCQUFBQUFBQUFhbkF5WS85UC8xRUFMd0FBQUFBQThBQUFBVUFBQUFBQUFBQUFBQUFBQVBBQUFBRkFBQUFBQUFBQUFBQUFBd2NCQVFjQkFRY0JBZjlrQUNNQUFVTnlaV0YwYjNJNklFcGhjMUJsY2lCV1pYSnphVzl1SURFdU9UQXdMakgvWkFBUUFBRkZibU5KUkRwSFVrSlVNREgvVWdBTUFBSUFDUUVGQkFRQUFQOWNBQ05DYnhCdTZHN29icmhtL0diOFp1QmZURjlNWDJKSUEwZ0RTRVZQMGsvU1QyRC9YUUFrQVVKdkVHN29idWh1dUdiOFp2eG00RjlNWDB4ZllrZ0RTQU5JUlUvU1Q5SlBZUDlkQUNRQ1FtOFFidWh1Nkc2NFp2eG0vR2JnWDB4ZlRGOWlTQU5JQTBoRlQ5SlAwazlnLzVBQUNnQUFBQUJZWndBQi81UEh4dHdBQTVNV0VQc1FiaE5LRC9HeEZUWFh0L2hCN2tHYlJNejlsVlk0djFweE9laFdaMHFPU0JOSktFN3Nka05VcUhSSEV4U2J0QXprOGNBNENTSVo3MStCM0h0QXB1clkzUEhBR2NvcW1EdFNNanI3bTRKQUFZT0E4Y0M4UDRzYnp5ZU9VRld4Z1d5SjVQR2dQYTBTbVF3TWxsMGdVdjJDSXZ4aXdFMFFHUmZLRlE3RWdvTHZnSURCNWNBKzl1K1cxQ2NrdXRQV0pMZ0FQdFF2Zkc0TGhrZkMyZlVRRUlWamRvcUhnWEtnWjhpVUV0cStrb1NBOGFEdUdsd0l6cGl5Yi9ac1dIU2ZnUEhBOTdURGpBU0RiVVpaRXlVUldxeUEvR1NBbGZIUlQ5MnpjZWZNM3NOOG40STkwbElYZ01Id1BpUVh1bjEzMUQzRmN3UGJPSjVtL1p3RGZLRFQ0VjY1NGd6MVFHUnVCZ2VBOGFDN1ByZHFCVTRqeVd4bC8zMlFnUEdnaG5meGNTSmZXNE5wUktMTTB2R2c3d0FpWmxNdXN4WlJia0Q4MklEeHdIajZSeWRjS0Y2QUtlWUxhYTVGL0FRQWlqN3RnZ2NXeU4vRDRrMFBpU3dlV0JUQXpKaEhUTW1nejB6eDBsNmJKdFdENGVNdDZGMkVIT2JVb2xEVjJpbDFjNlRZKzZvb0IxTU94Y0pkd1BSRFFBZVVLaDc2Q0NZMGZYZm93UVZ5TUVvNVAvZEJKaDBoREkxa3R3OWxzVkl1eVp2MFdLSFlpOUNhYTVJd0Q5b0FldS9KeHdBMkE4YjFuaVl5SzdRRnpwbkJ1emlpL0hUeDBuVXd0NXZ3MXhKUjF4enlqaFlhYkNZblgyaE5TeCt4Q1hYUE92UEdaNGk2UXo4RHcraGkrTGp1TkFJUTBFdUFGRHFnbm15T1ZFRFU0dEw5RTdUb0FhbUpERjNhWFBHZzJkOFJRUjJRdTNJR0NBaFNWdkdjZnhwM3VISTZkN0RHOXB1MFBoVVJMTkxjM0Q2WEVaRDFvNFdnbm05Z29qd240NTh6TUcyb1hmVWUvR0grTWg4WXdLYVRveDBTNG9OYlB6SmFZV2FocXgvbWprdGFsdy81RzdKb2s3VTlSekxGa2ZEOWdJQ0FnTUJrUUNxQU9lVWZ6Rjd0ejk4ZTFDV0FRb2lqWHp3MDhkRmdFZ0NKb2VNeVBNakhRcy84NUtybE9pcWh3cVFZUUh1cCsvRzhPNmlBUEVMd0xjY0ludEFDbVpwbTM3MjJreTVnMVRQRzJwL3QrcndqbnMrTFFFcDNYSEhPY0NhbDZsM0dyb1R4MFVDSmNIQXR0QXJzSGMwWlNDWmRkempuWHVJeXljTzQwR0pzYjJMUXIwV3FQekd0VjJCMnJPd2R1SFRoYThVZXdiU3hqVS9PajRQOEJId0VQaFRBYXhNQVE4RjlENGZUSUNsemZpOUpBTTNML3dQR0hadXZKQVBXV2phYVU3aVhlcGs3dk1KWTFEMWVpNENBd0ZSQVRCSVJhSkt1YkxqbVNVZlBVWHZDOUpJREtHMXlNU3RlSFY0bldoUEIwZ3BwR3NlQmM0UG9uWHIxT2h5d0ZjYTZrR1VYbTVlcmpyTVpMVXE1NHFjQUx5NSt2dkRId09nOUVvSEV4MmdueXFLQzJjcFZtaUFGNHZtNU5Lby9GVnczZk1qUVVPY3BodU1WcG00UjBsWDVHTVhxWUNEQUZNeSt3dEVTa05JTG1CZEF2WFQvQjhNZFdYN0VQUERlTytRY2grS0grbDlBdVBaaXhqd0FtSEYyRGU2KzNXTUk0QlppMllGVEU3ZS90N1ZxbzRnZThINjJEOWY4QWdESjRVMCtjNy9CbTc0REFIS0dYbzBtRGVmdWxIcGZmOFBWTVBocVlKUVRyYVdUL1FVVGsxYVdTVUYwaTFuYlNVZ1R4c3JxRDlpdDkyWjZkYlZSM2ZBa2lUallLb09meDZ0dWxld25yTjlWY0hncUxVVzZaWUtXbEhnbFJhd0NTVVNkcVhNZm1FSFFLRG8yaS84dkprdzJHbGRVbUJQeWdySGFNQzVzSU1OMm56TjZLZDVQeGxNTlBSU0VrOXMzdi81aWltMEJJMEdVQ2J3djBNTVEvb2xqQXYxRTg4ZWd5Z3NZT0d5VTJ4VjZlL3ZBdVVTUkxsazlSTVV3K09uV2I0VU9qREZVRm5FRk9RY3k2czJpYjJnem5hVVRZNEx3L0M0c1I1Y2JiU1hVVHBXNitWNjJ1a2tpOTNIQnJCTit5S1ZzSTBjQ2s0R2V4YldJSytpVVFVaVFzbWFYbXBEZWs1T3hibEdBZnp5Wi90bzhSQU0yejlqbnBDRi9aOUhxWHdnZjhTZnRRenV5dmNjeC9JTWIzdWlJT25PNVZtdTdSM3dTdDhZQ1BsTDdMNiszUGNEQzhUOFV6SUErUlJOTUJCelNxN1dTa3pGUWF2R3Fnc2YxSkkyQ3NCdDJzYkJzNEd4aUJ5bEcvSEdlcFZDRkFaMWZUVm5XY1V6aDFQeDVwVHF4NXF1blZrS01UUDVDZThScTBpaWRzYXlzaktMRXZGcEphOUZWMVJQSTl6NUFqbk8vbFA4VWlFSFRGVm44aXY4Zk5xTHhOeEp4UUVuVnJDRW9lZzBaOWlWNVZ3dGRJNEovM3B3RFV4cG5BTUxPd1MzWkI4citzUStHNEcyWjJHbzFmaVdUcjVPV2FOOC9CN0pXNlVsYVZvSmFBMUlaWmRrNTFhMDFYRXFqSW5vbml1dlVjOHJRZ1dBWmMxcnNBbUNrdGJjR1pmUm14V1l3c3Urd2FVUll4dUpmdzB4ZVFjMldzcWJsQUg0Z0dxN2V4R2F6bUt3Z2J6bkFEZWJibWRGQUtXQ0FKZkhXNy9kWitWNi9UUXFsYVR4SksvbG9xRkNRQWFzYzhUNFhpWUQ2elRETDNhOWpYSUNxeERSTzd1YkpnRHlhN3VlMHZWRjNMcXVadnZkcTU4WVZGUm1EMUpLM2lROUhmWVJnWlJ0cFFQcCtjTnliekxNc1UyOUNBcWxqUllXNURaTFVOUWNTQUdBTlc3eEJXd0UzcVRpVnpGT3dORlJUOENWQ3IvS3UrUm5WeTBEakhOa2hpMGdNTEJKcGtzc0hPQk5BZ3o1TzA3REVhYmRjREYvbHM1eG9KdWFkQS9uNEdSSUlFbjFKNUJpZTFuWEVlY1NteGtYbFBOYnVYNHRwQjcvTmdJMGV0ZFpSTjNYc2dJQ0F3SFhZRHJ4c3JaOTdnUmhBbkxCd0dWK0JVK21tell3c3VzdysyVi9lMG9nTDRYSGVodmc3MTVkTjhjT0g4SmZZUzVWKzRBRzBlcGtpTGp3UnlLbjE0TnEyc051R3VKUFFQTEFja3FzQ0hzTVdaVnB6eEVXZEQvVWxWSjNud1JMeWF3SzVuc1lINzl5SjZqbUtjSFB4ZnhsQVBhR0FaS1JSVUJNcFAxTFN1WFE3N0h4ZElYNm83dEZFQmNadi9HS2VBRi9BR0VjVEZmaThNSDVPTlpVeVNvWFZLUXRUYnlYYzZTbDlPMVpWc3hMRHVPRk9XaUJUMHcvdFRVN2lNSzNVcHlrTmV6d0dWdEZ2SC9XRUhTdmpubGs1dHZIbGlXdjByZ2Q2T0p1eEVlT3VGRjBIb1A2eEtqaFpiWW82MWpKRkRhek42WVNIM0drRmszUkt1QkZBMW1GQk95UTcyeGI1Q3BseUZRRjJUWWYxSFllQ0J6N1dOei9pR0hZYVRWdUhhNm1wWVN5YytmOEZSM3NNMXplcTIrQ0tDNmJ6VVl0YjNxcG9iZkxTUG1Hdy95bDdoY3JNaTh4TDFJQXlxVk0xRWtHbTR5SmJraGROdXlueG9Ma1duYTVoZTlzVTBGTDMyUFZORTRIMHp5Zm4zOVYzT3pId0QxRHhna01JcmcwZy8wRWFhMFJSTTI2MTdqOGljVkltZVUwSUUzY2xrdVhPMmFqUjFLMzdtL0VmRWZSd1hYWUJoR0NsMkJrd3pjaXpYblZFWFRLTkFxdjNqZnZXQ0lsWXQvQ0ZiYWZONXN0SHhMa25mOFJHWVdGVUt3dkpyNmxvdGtTS1FxbENVeGZoYzBBRnVydFBRVm1pTmtHandKMC9IRHVVbkxSYkRWQ1JTTEVsKzZzMHdieU00T0Nlc1k2d0w5d3FDNHptdmZsalRKMDdNTEpHR1JUZ25ELzAvWWZLR1ZTZmdLQk9xMzVWN3ZiRFJzSGx3TFgvUXQzRXNTZEx6MGQ0SEJWRTFzRmZtRzJwaXdMbThkOERrQmxncXhYWjhleDNkVW5VcFNsQnpHMDJ6TXJnSTdsVUw2M0hMZ1BrTkd5bW1uRWdXTThYNGhiaVRBY1pxNStPOU5QWldJZDE3TUh5aXlCNzh6REgxUzludGMxYXVuVDdwUHo5MjN1MjVoaHdlYUFwNVhsN2xvRGMxVHI3QkprYlB4UUc1ZU4vQWxPbXA2cEY5d1UyWTVBWDBzMVlWNVNhZXBJV2U1ZmlJRlJvcmxoZ2RDL20zMGwzM0pHbEMzaUlzc2pzNU1pMmsrYnJINGtVOHZWSUNBSDQwOUZPejlmcjNLcktHY1NiNy81dHdtN3FrOVU3MDBzOU0rR2VxV09IdW1peG5ML21leWJjSVhvaXNpMTB4SWRDQ2QyOXVjcW83bUZmYUIzWHh4Y1RHQUxpTW9DZWJqc2w2UUthaEUzY2k2N1Uydktma2xSaExCblBUa0hCbGhEYTVTb0Y0QmRaNkF2L1RIdStzVkZXOFM4VFQ0QzEvUnYvY1pFZEdzT0JBWVBzbVZsaEJ6UzdNYllNaXVKeVkrQ0pZQXJDWW5VYTBRNHZjR0EzemRpYS9BL1dVM3VHcTU5T0RiUTYwVU0rWVJEaVl3eUR6OEhhMzdEdERjUHIwMDRLS202N1pzekp3MG9rR2lSWVJFcFFKQVJpT3NSc0RCTWNtTHZzKzhoajhTY1VjU2dyaWpxZ0NSWDIyZG9UVDhOckdqTXhVVHIvZ0VwOFNEMXBTMExUZzAwYk9hR3RPc2hScDk0bk9yekIrV0tKZ2ZYZFg1akkzZncwV3JtZ05VcDJKaDJLREt5MVdHdUF0Z1dobzFXc1lUVWNocjlYaUp6anpRNWRnaWM5VExNNE1sVDRhcTlla05DUUE5LzJ6cTR4QThQbWxzTzNNS29BR3BxWXBBamFxN1pzNmNNNUloMGovY2tiUkRQNm05NzVMRER0WVlXemVxUnhkbFVucFRQdDBralBENktCNDdzUmd6aHZLYlpHTS9vLzRnME5SUDJ2cEtBd1VkVTR5RHIwRGZFSGRiTURtOHJTRVFCNEt5QnRDaW15S0tmYnBIUTVoN1FlaFl5bjQyL1d4c1Yrb1pBK0QrWEg5ZU5jcTRPdmdEblIrRzFBNUdRMk14K2QvdVgvRXJlY2RSanZvUWRpOEg1cGJ0NTlaZTYrajQ3dUhYbkQ2WFNVY001T1Vla3l5UW5yUjJFMnhISkVMUzlKMnQ1QWtrODZYc3RDUzR6T0hHem5HdGtleHhhYnptZVQxaS9kZ1NkVHVLWjk1cWt6ckNiRklQSG50VzZxRHFOR0NIOXdlZGFzNHA1WU5vblNkbUlnRjNVY21YMU4zWnJNdVc0MG1mVytDdXgwU3VMV0JuaU1lUEZ5dVEzUzFST3B6QzdXTnZ3UmJpZ1hSUHZGeGhBbWh1QVJZUUl0eUNhcGwyMzViSmJBVkFYNkFmOWlCZVNkeXdUMVdhWFlKKzhTeTBsT2Fqb0dmeDhISHRKbjlnem1oV0EwenNCZHVXSU9FRHd5bCtwUEZuWG9oL1FhUTRWSk1ud2RDYXV6b0NVNDZNOVpxRGZmZTNtQ2o5VnhNU3BvakhvWkgrWW9UUFpyMzl4TmN4K3JjUUN5MW1JWmx4bHJjcDNHbUsraXdaNzVIUUhjUHpNOWo4bEZpbmpKWlc0d2pneEJzTURUMUxqaHNjTXJMWnQ1RGxYakU1bGdaK0ZkVXNMRkdJQ2s2R1VSSDc4VFBOdjVMSmpuWG02OWxIdWpmRExqTzhZS1BFS2F4cTFkU2pZeFFwNWpWMGttcDlkczl5NEZGQ2w1Q0M2cmt4UG1Pa3ZjTHh6R3dSbzZBdVNza0QydGpZZXNtRmcrT0ZUelZmZ2h5MjhoeGZCM2g4MG1XcHhraWtJT2YzeHM3aEJGZ3kyYjdYS09zalBjcy80S251Tk1ZNVNBMWo3SU1hdmd6VlZocnVZZURma05Ed0NhQm5vcHF3a3FqV09hNkxqM010Qm1Wd1pyMmZZRFB0aEtsdWZ0dTkzY3hwVlNJQjNmNm0ycjg4aXMwdkZ0WEtQaGpqK1lrdVpRUTFxNWw0MG9zVFBkRUFpTnJraU9DVG9ZNjJBaG1SL0M0MzNVQkc5VStkV2FlNUx4MnRCLzMzQTdEZHovU2JyNTVuVHM1SVF3K2dCOGkzYnhTak8wRDVMazhPVWVHZktQNVNQTHlOeGNFcEY3eE01Uld6cmFVTXgwM1MwY2hTWE9WR05VTGRFSEV3blFiV1o2cFFseFIvaDc4TXJ3M0Zma1hjTlZhMWd6QnphU1hlazVmZjBLQjRHS2VoZ1MzdHlUQWNXcXhyekdCbkZDUXgxc0FSQitKMzB3N1llSW56TktFTmZYLzFNWXJ6dFVUM1B6S3ZEMXpNdGo1czNEQStrUDJNeFo1NUF0NUoxdDRFSUVvb3REL0hOZEJZcWdiUUpQb2RLUEtwb0w0Mk9VcG1Kc1lDcUxENlFSTnZQbUwyZGExeVhNVGZISjBEaXdsRURwd1UrMmlnUEVlT05rZTJYT2xRT2xiaWM2cEZuc2FBM0tqTER4OGROTXo3RllRSlIwYkpwck50Nk5kbGNuaGNqVFo4VXVCeUwvUGhMcDJjMG9ySXdVVlIvQkdFN2JEaC92bzQ2dVdWNW5WNmpJY0thdE5MQnh3czNDc3pML1JWSUJ1TkVsQmNmQ3pnYTVyN09kZklwVVBOdDBURnpwam5LK1ZhT3JzajNQa0NmZkw0YzNZSDJkcHYyV3czRm41cU1pdnFuNVBtMkpNZWpWMXNVZkxZTU43QkkvWG03RTdhNzBxdHQ2akU1ZUdTUGZBdjEwL096UDlQeHpCYmx0MCtHUng0eUZob29wNXVFZW5mRWhJRGhjU1d2N2hLTWo1cTQzditzYzRMMVBmVnI1eHJPME1FbXVqNDdLOHMxZ2xTaGlNZjZ6L3dyOSt2Q21TRGx5MURkSW5mbmw2ZTRWV0pOZmRIRjBvazBFaWpRSnloQnd5OGpneW8wTUZVc3F3VENyVEd1TVhGaW1vUWViYVRRc1MrVEVDelNhdE42RnFaQVBHWDJ5WkoxL25CZ1VwM3EwRXpDbmJPMEg4OGhudDhXNU54dWFuZEtaNW5PSjJsOGxnaUxwc0RNL2FkbC96RWpCdXcrOWlRcGg2U2xGYVY5Wkx3QXN1dTBzQlhQRHhxVmllaCtyamVRRWk3T2Y1V0ZZWXZEVHplaStWTUNPZmlmSDlwbHVsZkJQQzcwdjUvNkhIbHVjOFZJcmdUYU01dXVvRU1ienI0N2d1Q0JSK0FhTGI0bGVzZzZaWWhjYmpTWTZwSFlCbmNjNXU5Y0FsRHgwMGFNaDRLRUNuSm81NkJDVmFmcGN1b1Mvdm9FUHB2b09Xd2hjcVMydXFtYkNhU05KNlEwL01TTHhQOFQvQ2xDY0JvQm42SHNGRlduTHNGUlhXUHNxZUJ0RDZkUXRjcnplOHgzdTFTUk5jUTJmVmcxVnFZSm5yS21mckRRQlJuOG02ZHE4K0RLeTlkYWlLenk5T3hCeHVKLzM3RUdjWEtSZjNWSlBIL1ZTMkxDajBvNVkrTXI4OVhTVy90MyszMzdwSmpmYnNOcithSGttSFh5aVVjc25UWkp4UDZlK1Bxd09qWFBhVUsxOWhjOWpDOEFham9odG9aaWVxcXNCcDhlUlVUTWxTcDltOTJmdGg4UkFYZkZGRkw2NHVsQVZ2RnZkMTFYSFlRYjJSUXVndm5Ibmw2WVB2WTYwZzV1YjE2UHI1NVNmd0dmZWpZaEpOVllpMXZIaXQ1enM2YXRscXFzdEdjV1ptWjlTMjJqbzFPMXhvZVRnSkJMN0xPL3RsS3g1UTZSOHNhckx5UDdjcDJ2aDdKdUcwUkNOZVBNSXFQaTNsSGtXV1pCMS9qTTV5dWFyZjhMRUMzWFp2TnBxYlFwUlhJNC9JQ1d1K1loeU9HMXZKTWxyUE9JNFAzN1N2MWdHQUJ1SThVYWl2aW9wdS9oVEw4OTJkSlhWa0VWNWtkU1M3VU9zcjJKTC9Pb002akNpYzNOQWZwdUgwb0xKK0drdHJmbHQzdmZBSGxyRkIwd3hXYy9uK0VHSkgzSm0ybnI0c2xHWWRraVprc2VXQ1NVZ2c2R3R6NW5Jc3RXNVY0blpUMWdDczU2WlpxZWQ0Z0daaWdkTUprbDdVQkNBUnA0QWt4b2FJSkZsUmhhajJZTzZyMmpUMnRQOGplOEpYajBLT09CWjk1REc4WWluWWdKT1B1a1hMUHdheXUvSzJYQkp2aGlBZ0lDQXdHcEFoTnRpa09kYzE0ZUNyNnJpc09OVFFQMVE2aGdPM2dEeXlMdGZoRCs4dHI5aS9QaXJKQllzS2xSMGV0WkJlWExHY2VPdzhOS2U5ajdIRDZGYjMwRmhqVTBrSnhmTUZ3K0pkdEZtL3ZmZWlWM2JURk04WEUzZWpuZmgvVVdJSzVrR2gzZ294K3RpK3pBY0xDV2xES1NNRWJ4ejE5cnl4YzZDZ0hkQW1ORVNSa1BubXJzVHNWRktRZUU2V290cGtFbnJMNGJ1YzVRVEVVTEJUYjlpWi9VajBoOHFqUXVrbm1VZmFPSTZMQXl5b2Z2ZWlXODJTUFJkcDkvVkxVZnMvVDFmTzhjWFQ4L2xIL3VvcTZBdCtJQUoyWFNjNlk1ZFZ6NlF1bGdiSGE0RzV4UjFlZy8vTEZtaE15cUgrK0NjL1JKUjc1MThycDhEajBoTFNZVWZFWllyeG9UTkk4STZ1VVdJc08vL05YYUM5bFU3SHhDdUYxRmpURC8rV0Q1WFRCVEVxbVphSTdoTktWanNtZGIwNFhhYjlJM01CdU4vbnNINDVIb1AvWkNFTEMwcXNsbi9ab2NuOEdWd01pOHc4K0FOYjZSNE1qbW9iTFFGbjkyTzFBa08xZ29WSHFrSWxlb2NYWDJNVGozTGszbFlSYWtod01SREplcjBtbWo2L0puaEU1UjZpYS9rYmM0WGFPQ3pMSVIrUTJ3SFlGWkl2Y2FRWXExVnZSdk9pdGFxZ3E4QUtWSXpJYVlaZzRzcEF5cUl4UjJsWiszaEE5ZkhxbFMvTCtJaitITVQ1QVVaV244Y3ZSUjNLVlVTREJSSUtWM0NvUkZtc2gvcEdtQTJ0OFg3cHEveHN5dS9ybkRkaUwvUUx3OHZ0bHpTdXo2NnA4aCtocmVRMXJsWFVlbk52OE9FM3FLMmwrNlRDSjJ6YlMxdGJSVnpvQ3RpalhSeXR5K0pSNVVJbE4xeForeW9KVUtLcENPWkFHK25XeW45dmVxVm13VDZjVzlYT0J3bUxuTVhxbUlEWXc4bG85ais2SVBRTGliNzVsUGtmWGhzRVR5NHM4WHViR25zcTBrK080UHFqV2prRzI4STJVZ0l0M2NsbjBLYWlvYzREcDdkSnpyOGpiK21LUkRYL01nYmV5YnJZUFk2K0dvY0ZnWm1pS0NONmtBdnJJTjZiYVFpNVVrSTFkV1pVSzE1SlR2VE5EUlhpUkZQbVF6QSs4Wi9qekUvWXRuSE5jTHEzanV3NllSR3pzaDVob3BZNzlyeFdjS2p6OUEwcmw4RXN3R1k0dDhYOUVzM2NOWjV3NXpkeXp1dW5YN1RuTkZ5aXVFMXpqbDV5d25kVEltczRBRkZUZ3VCY1FDWVorbkVab3Rlc1VRQXg1WTE0YXZqTk5vNHBGNERwdFpHQWZLUjJYRGhmQ3VjMGdKR041QkdQbFlCYS9pQXNVTDdVWVY1YzJqQ2xFY3BjTTJHcTZFQXpyZWF5d3Z3YnlGV0ZDYlRpU2lkaXpLV0p3SmZWdVgwUVZTUzYyc1N1VmdQRHl4aFJpMTZBaGpFek4xeU4xeXdSWVF6ckZ5emNiL0NMWk5ta3ZJZk9weWRwYTV1dEJscmR6U3E0NUtKMnRSQ3VSTEd0QWE1VjFqZlhZbGQwZE83YzZPNFoyeUNSZHlWNlY0WmdhTm5CWms5ZjZpclowL29PVUZXQ3pjK1dxbXJiRmZnYWxld3ZhZEZDVTNBRXNmOTVBa21LWTE1NEtrbGxGdm95RjgrZEFqTlhHeWc5Y2N6dnlFek5lUzBjUzJzN3k4WXRXbmwreDNlOXEvZnhyTjJUTWNXNVNnRmloSlNCRFlzSHpvM0t6RXZMRkdldnVTcThXdlZWSS9pUkpMZENWVENhVXg5RTJNZXk3alBDRkxWSDRqcU5DVGd3T3A4ZlFZNjhNY3I4ZHRwNXd5Z044VWJzWGdXV3lPOUplUmVwK2d6NCs0Q0RwdWNNZVlmNmsxUTgvbXRFbkdTck5vaWZ5ejhpdERlRVVCS3lBb1llUU9MSS81VFZEak5VUnM2NFVGOWxiVTVYS3ovVVN2clVncDlNdkNCR0oySTNDRkRBZmlWdXZpV3BJYkNPeHFGMDBqN2c3TWRtRmRhQWJ3YndVOHVPNlEwT2FRWm9TV2MwR2xTS3RleXVmOHJGZDNvNkNmbHdRWkhvcW5lZnVQMHpTRUhNMStSb2VRWjFsWkNpOGd2ek9pSTBSeVIrMnkrSGpoVkRkVFhPMFVSSVlvMHVzVXpobFRvbS9iNzA2YWdSSlRyL3dpOFRoTkpVWEZENjdDSCtPdmlQbUlzTXN5R2V2U1pDWUNBd1pRQTVtUkpFWVAzOThqUDZQbUFUMFhZVVcxZmd3cFdNVVdsLzRmYUltQU1ZbCszcm5ubTE4QmFRSFZMcXFQdkcwZXlYQmVZd0JBeDVPSVB2VXRlaldSVnRNdzEyVTFKWGpFMFErVTQxZ01zWDVTSldDdHNiUVVWRjRVbVA1ZHE2WFZRMEFocHowYkJJdktWTWdYWktlMk1WWlhUTW1wOUwybGxGdUZjamExQTBUc3BhcWJJL3dKb2V4UjlUNkIrRmlzVU5oRWRNaW9XSnVTdk1PdUhpQUN3d01IOTEzbWhPV0FnTTNsZHo3QnFwSlJlbGVRVVpBQi9FQ0R2eWszTjQwTm9wNER5UC81T1Y5eFRrRTM4V2JxTEhNa0pSTmIzREZEdlF4N1QzQzBlcmtPVFRmNWxqZjZNeVUxQnprcEhOTWJoRnVjazJMOHkvZmYxNHF6c2JFWjBqZDdycXRCL09oSFVnYmYyeTdPVjBTSjY1MjhaQXFHSkk4cDM1TTN6N1JHY3FRMktoMUJvYTZiVkE4cjRqZkFpWE9Ydk1zbDREclBIQ1hmOXhSV0xCTjRVbklHQjEvYVVvcXFxait6dFJHZXVMMVpSVDgrUlZOdm02L2lZK0JUckVPbzdWZ0N6VkZEZ1RqaWlBZzJPRFd2YVBVbitKMjFLS1c4QTRuVktLZjdYTmZoTWlwVFVqdWwvUFRqYnZPQUgrbzJvUnpCeGNTWmNNMVU5VGkzdGhKdC9EM3U4VHBzTVNuM3YxbDZEM29NSmV3T2t4QlVONXVxck1temtlZXRQZWkwMmQ5MzZpQjNDdDFuYnNqT3hSQWZKQjQ1NVJUSmQ5b0gxRHU2Q2dFcjhiV1BhbVpPTWp6cHB4Nm5DN3Y4blNjTjRxTlU1b3RROFBkc2ptd1dhb1k2RmpGdmwzZWdIcFBnZHJUUmY2V2xpaDhKNjlaOE4zeXV5L09CL1F3ODA1S1BJTEl3cThneG9qMFozZ3ZjTlN6bDd4L1prSHVxNDJJbEg5blRxNEtvdnVvS09hYmswc0ZzTVhqQlQ1VGtwT2ZDSHE4S2t3RXZWenovR1NkNFJibnZxdkZMYTRIblgvV091ek1tVC9PRCt4UmYzUkhscHVwbkN2a09yV2dVRmZINFJNdkRDWkhYZjJkTFNaTUZveGxIN3RqK295ck41TStJS0Uzc2Z4RldGdVFYYkNFa1B6R1pTUDA2aitLMmR0STJzQmlBY1RGSmtEdzZEMlFwdTdPRDM3QmVpL1FUSzY1QWl1WFExRjZvN3ZvSXFHcllzdEs2NktOUGdXWmEwTnh6NlNQR2daVFdRVGxGZy9ML3FKM1pyajlZajJsY3FSUjQyUjVRM3oydlZ5amc5dEsySDlvOExvODA1NlM3NEQ1K2xya2NGemU2bUdqdnNiT3NLMllRL1hJSTl5WnhhSlIybmx5TjhsUFVRT1kyY29obzFxaG9DdEI5QmU4QndSRVVsWHVlY00wd1RTUnZlTzdvNlovWXhaeHNXM3FocGFTM29BcEJucUNsV0hhYkhpS2hoVzhJaC8zdlpnNTliVklxak9oMjVqQkVqNXhTamRBSnJYVTkxM2E3Mmx0WU5URERCbnRSMEJGY3h5YVgrT2NTVEZRUmtmWStud1NqbGs4NWh3THY1OVVPelVIM3cxckFZdjJtNW9oQ2gxeCs4ODdmT04zeEhHeFRqS2FWMEtLbm9ObHNsQ1ZVK0hBQjVmVXlqSktjTHRTRGtWLzRVeDhYRElRZm9aL2xibGdXSW1hbm1kSWd6WUV0R1lHL3B5K0J3OW9NaWR1bHBxWGZNVEZtSWNKVWU3SkVTbitaM1V4blFTUUx2L2Nka2xsME1KM092NXZEWDVuMThnMVh6VERBb21NYy9kSC9nUE03TzIwdngyZHAxMjFWQ1Nud1VaYUFDa0o1Ym9QQzNBS05wQmQvNEtkeGJtT2lkdTNNV0FkdDl5bXgvcm42TTU4UkR4K25LRWVPWWV4Q2FTY2xTNng5dDJJUHFOYStsbUo5NGpiUjJqTGRKQVJueUNKN1ZpRU9RQmdJS2NvZUpxRiszNUFMZXlSUEx2REtKamhqS3VUOUpKVlRqM1NXY25lYktoaWJ5cUYzU0tidURndnkwMlRYNVZzQUZnQTNvbm9FNlhtZ3VTMVQrZldhK2hjUklydHM3Nnczb1BOeUllVVZIWmJoLzZTb1ZabENZN282bDc0VWdzS3p0eXhMSFNsaTVzRVpWNTVPQTQ3UkFHV0RNbkhicUNEV3NDWmxnSVhNYmVGMEhWbEg4Sy9lbUNRV2cyUkRxWGc5UEkrTTFxWTlvNjBEMkZMenpXR0gzQ3IzcG81Z09zc2JpUG1lK3ZNYURIWSs1bXM0R1Q5MFFCY24yM2RCc0VMRk1TVm9zbCtoMkdIS3Jvb2ltdlZkS2FWOG5temlmTUZMK0ptRll5bEs0N2RaR00zcWNtVno2dzZwY3kxVXo4U2pWM2xWRmxPYkRhQ2J5aHhtVWlnRE0zeTJ5YitwQ0ZPOVdFYW9VenVDY2t2MkdkVXMzbDB0bGNKL2RzYWl0MFhNdVdDMXN2RlJ0OGl0YTlmTzhRZjJIWjRpcGxqbVp4NHVpdmpEZmRQV3lNQ2FCQWdnZlZVOHFIRHJsUkRPbkpodGVzZ3htZ0JvYVltV04xRTRML1NJemY1SUdRMmV2eUpZMjNzc1B6M0VkcFhUZkQxb0E5QXpMRHhVTWM2ZW81U3NodjZHb2g3RkxFbitPSVF0R09pYVlxU2VIcmxTOUVlekh2aHlOSkhqNm45V0ZJcUNyK2JCL0Juc0dzRmlZZmtvb2JRazVhSW5VWEkzbzJBUGRtc3JrTS9IN3d4Z3kxK1JZWVNWMkJOMStNdmVCOGtVUnl3TkJrVjRSOENDeUJmWXhrdmdGcm51cHZpb2NaVDVDSFE2WmdkQ0FpNlQ2RnBMQjhNMkhXN2Zza3hHQzU2Z29xZ0hqY3QyZFFFT25ReXRVUTY0VE1mdHNtRXVrbnptNm5MeThiSkFIcUhvUnZ6d0cyWUg2QkpvZjNtYk9rdTFoeHRmSUlLbkhqWXBLcjdzNm9sSWw4R0kwdzZtUmdPdzh6TUdhL3owa1pTNHovYmpMdExIL2IvN2tMamJHc3B6WVhiQWQzVVV0anJTaEw0aFFRTEZzUjk1eVo2N3hRcU83V0ozSnFOb1lIYWh2enNuaFNGL0VlcFF0YVBRRENzaGFzVHh6eHB5cnhNUU94WGVFSk56dXZhbkFldVVGTWJxSHFiL1FxbStrcGR6dFlvMWpRQkEyeWtlbkYvd01wRVhVeWtXY3hkMFdlQTdVZktGUjdCaFFMWnVvbGd1OG1SclFLSlllQWhyTWp5MDR3MFBWaFZENmhiSU9YVldKQVdXa3BPREw1OUxoRERNRU5QWU1ub2pwd2lHWXdGTFhXZGZUQjI1VGJOS0ZYS28yaVdWRFBMcVpXcm1KbjhiWGs2Qk1nNWNEbkl4L1ZuMUdScU5TNlI5ZW8xc2JBOFhGWE9VWGxBL1hVaVcwUlN2UU9jZkw3Q0RwcjlYSnFGM1NxQ3QxZzRPTHI2OHRmMFdJK212VGc2SkQvaFZUdm0yMVRidVI1V0VsQmJxWEpYSGh6eXMxK2g1V1NBMHFxV1plTTVQK2R6WlY4dC9sSTVabkt4elZQTkVBV1hGaEc0MmJjYkhOV01XbUo0RXU3VlpqN2t4RmV6TDNxeU5LL2pmdjQwTGxDMWNwbjFTVGhNQVJlcmpxZ0tXZzMwUGF5bTNvRVJTZGwwSjNPTkZJeFlySHFsYW9DYStrTWIvRlNVSTNqT0V6VVdwbGJWK1F4eEV2QWpkYktZaEh1TW9IR1h6akMvZG5lV2RRRjBJdHZjbDFUYTZYaFRGZTFhYUlmbElRVXloU2ZmUFA5YlI2UW9DSENUdWJSUTc1YS81VUhSdmNKRkp0Sk1tb01rd3R0ZlJjNU5NMDJxendCN25BZEVpRmdibWdpajBJZk9QTEJsc0xqOURLZE1ZUENKSCtaeU95dEN6TTY4ci9mQllXSlN1aUw0WTRoS1pOeVloTEV6TDJVRkJYVitpdm5hdktQRGY4TGtHaHFmVENPeWdXWWlqTkwrWUtPS3BsWWx2T29peE5rNTU4L3c0Y2Nkd0FZZ0c4RW9Qc2tSRTFDbFlOMm41WHRUMUZ4YWZqNmt1bHVOU2F4cjBIRnNQMUh0aVIrVnRWMVcwZU9hOHNxdm9KdjBDQ2JtYmJ3NCtvMllkNXFTa1hoNVJxZFdOOTFFUkpveGlkaVp1d252MTQ0Wkh3QlRITmdsVVZkcmExaUgzRUlMMVAzczl5eTFjK2pPMktrbElVWnRJTzJrQzB0M2dOdkhqUElDZDQvV2o4bU9pSmlVL2g1ME1pZUxpbnFPMXNIL0RZYy9OY0FWUERyNlBjby9MMGVpZTJuMzhJVkpHMzJhc0hBd1NKR0IvNlJUa2o5aUJQNEdDdWhYaWswWklXL2I2bnFHZEFjd3cvQzA0Q2lSOVRFMTZTQjZOOXVUMzhucXl5YUg3OWY2dkFNUnB5cVlWeGE2dmNmL0VMR21XSVhxNGs1aHhmQXEwWFZ5RDRGTXBoUUcrNE91NjlyS0hlOFEyWVJLTkhycGx5MXhRTHZPbFd4bmZObExUZ1lnczJnd0R3TlBoV0N2Wnd3N3Y2a0JrY00veWM5bWF3aDZZNFdCc29FUUZDQlgzbHF1SVF2cXpnNC9jVklrV01md2ZWZlRHWGdkbDY0SkQrcmd4b1BYYzVLcjdnb0dNUnhEOC9wdytiNU1DV2dWOUQ2MDAxU0ViUm8zY3E5ZHBtUDFMVXRYNFhjOFVsTHdKZ2dQWTV3cVlwNUUydzFrYkRNU0F4ZmRqNXAyc3ZLSWJYQmdYMElOSFBuS2FnUzZhWFBXclpWeXF1aXlXZng4ODVvSU1PaGZvN2pDY1NvRjArNDgyY2lwbkJNcjR0U0cxNStGN3lHYTdFb2RRK1JMWU9jcDNHZGZMTFEvWUNIR1ZrdXNuYThoM2IrKzhicUxQcE0velNTMEVMSEhIOEY4TUJQc0VGS1V6cWZPOEVEOWFYc1BNZ1Qxd2txMXY5cGd3N2JQdW5ZekZORFpmNTFCSXoyZ21oMGhNV1M1aldMTXF3cHNuNGNydFhid2xqRGdYdzh3eHdUTG9RWVB3ckZNL2U5Sm5HcUhWZjhmamd6cTRPdk16OVRpaEM0dmF2M2d5eXcrdk1NMnU4bDZVREhBWHVpdS9laHY4N0MyVTdTc0hMeWJjckp2SUV4aTNXTEwwWEJ1d0VzZEpSVG9BU3BrbnBlQ0R1ZEpCNXN0cHNqbnBpTldCRWlWKzdEcmk2ZGx4SGszVHl4MnhRSnFuMWtTdDJnRTNmMkdFaW1Kd3pocXlsR0d2WWwvdEh0UXBta2dlOTh0RnFIUzZZays4OUJ2SWV2aGJSOFlxVCtUVlhNcWI4dGdnVkt6aGN1L0M4U1NJZ0tvQXJTYVcwMG1wRFp4OTBIalZxMGNqT2JWWDdRNUwyQW5wMDROOTRZcmZyaFJDa2J0OFIvbkJ5MjNOL2Y0L1AxeENhWHZRQTFMckhhQW1UbW44WUdabjY3ejR3TCt2SWZLc052cmZndTRPR0hKeE5WTlhudXZVUkFjeW12MlhvdjZFemNkSHlGVTkxTWJ3OGl1c2MrbDdWSFZaZEhHNlBHNktKSWVsSFdWd3loMzN2U2JSNU5PSDl4RkdSb2w1cXFGN3A5bU1Iemx5empkU2VSVFNwZDJJWEVFQm43L254eTNPMVNsU1Z4M2tTRjA3ZCsvVklnWFRpQlZ0Q3NySkdZcVF6MGNMNkY0ZU9jTnRzdnpMMGY4Nk5hUGVwYTJJQVJ4UEI0OFhOVVowTWtldGZBU3FpWWZscVVmMTBDdGhmbFE2L2tDQnVTZktPVGMvazdnUkhFTG00VHhuTHJNaS9XVmh1K05xWWFSZE5PRHpVd2pHSzlRTnJBbWRsOHUrME5uT2MzNmtMWjRteVVqVDREbG1YOUE2aVBDUXMrd0phdXQydTE0d3ZzTnhvVU1kWXBvK0FSZml4UzVETjRraEJUajhPdGJGOHQ3R0M3cmZlQ2FNZkhRaHBMZ2lPREpadXBNajNMVDVydzZJUDhjWGpieHllUGZhVE9NcVVTTnlVYlRzRTlZTGZQOEtnOSt5YXdNYXZCZ3Z3aFNaakVIR1V0YkNMVWVNdnJnU3BMczBpZThkbGQ5Y0MxendYWnRWY2pWaDFQbWtsLzJqaS9XRkFvc1Bma0xxbVJtNjFuWmFSRUpaK2lHMGh3MVV4TXhDbW82bnIvdnZhdXJ1UzVkWmxzVlB4Q1RVbkFWWjVqZEpFS0paalI0Y2EyY0YzRHdqRUREaFl2dXNnWS9PZVdTU1hwb214SEx4cXlFT0dTTHhYaG9TRGVpY0dKM3p2Y1VRLzF4VzZSU01oVFBucVUwVlJmNEE1ajJUeWtXZTdnSkFjWjFkcG1wNzFabUw5aWN6dGFvU21DN3FCdXZrRVYvZzA1cEJpY3RCemFuS3NMTGoyNlhINEJwbEtnMVRXNUhveHZaOG5wSXhTeGJucG80NWpTcE43cVZHa3Q1QVJKQ290Wldyd1VMV3RCUm9qaldrSlhTbEZRbHhxTXRzRFdPd2JtWXRLaXE5WWl4YVA4cHc5SlpXVzJSWk5XZE55NGZBZUxoWVRXMVg1YTZnbWpPZUN1dnliYnBkVmFnSS9TcTVaZitwVVVHdVlTV0V0Y2NKZWNaM1JGcytKWkZEYnNxSGlLK0FEdU5JTVJNZG1qamFmQTB6SktuRmJMdXd3dlRNNG83clVLb2ZESGNOOUdLNE1saVo1ZEJZeFg0SnVVTFFYTm5aN3pOZExNOTJZUVljK3QrMU5xa1hqRERHWFpsbTZqdk93U1JMM0l0UUdDY2Y0M1Y1eHdWZTVqdUFsK2lQUkRoRmNOeGxPUEcvK3ltb3hzenhlRU5LakgzTlROMXA0dVRGQ1FLeUlWcFBDbkcxNGdNNlMrMlVFUVF3S3BLL3oyd28veld1TDdLUHZKUVFjMFkrZHV5RGc0Y05CU3l6VlkyV2FLbWdaaHhKWGRpdmtQL2l4QzFBeDVCanNhaStBUWRNTkVNNzFtalhYSndxVlBzR29jTXVKSi9UN3Zuc2twTXpadG5obzArbWRSNXo5THMwVjl3NDBwcFJ1d01DSUFmVHB2bTloeTUrdGJ0SldIY0hTQmpGVzBUMWFVVmtVZUlybTM2SDBXUDhjK0hHZXdPUDYxRkNmZDM3QVBKMWxhL3IrZWpVemFodmdOL0t0dFhQdGIzYU1QTVVYVDBCOEs0ZWlnS0d3a1k2MkJIT2NaYng5bW1SR1JjNEVicG9VSmxjNy96N3JKYlhKaUl1UXZsakNCbHBlYXRPV2wycldiNFY1SmhzRk1VVkpQTGxYbGg0V1lGd05veENybEtaTnNrSE5qK2dYdG91Y3g3UDlGTnc5UGQyZHN2QndzMEZxb09ZUlQxalZ3dUJXS2NWcHVIUFo1WHVLTkxUdWlpQVo3VDRJUy9zUndrU3ROaE80SVoyeHIzR0VJclg1YnlhKzh2QVZZWmRQWUZDL09PQ2ZoY1RSczhMd1drQ3lNVk4wNnpBSER6cklCTFVLTHlIV0dTVFQzYkpVL1h5SGVuWXlYTW9KSC9FUlZ5SmxLdE9hTEJoaXl3VVMxVkcwdm9KRyt1NmYwNDE5YUFBeUxEU2FSMi82WG9JSGZENkQ3dzBsOFJqaTc4TFJncFgyY2t0VEVTdktkbFZieEg5Nllic3IyUTBhalg3UWVNdWxQdXRWVXNvMUdJSWZLUzJDMWRPVC94N2NnTmdaWXN2cDA1YUFsRWVKZGVWY3NRS25RbGhsZ3pqWTBTT2NyNGV0VU9oQWRlN2MxVVVkaFlWSVgyWHJOdWpYY0xmUzBjZmQyaUlvYTRzejJwT24wRDdjT3EzeSs4cjFQTi9NR09sMElxdk1RSkNvOXN4a3NlbTBmSWRVNUNaWUxwRGVQRi9GOG1za3VZTXR2a0F4Wkl6dVJneEY5a0RsVVZ4ZVpXczM4ZGZNRjc5ZC9PRUJScnVRSmZNbzVNMTBaL3lWU0RBSG55cHVEK2lFamFRcUZDOHBnaFZ1OFZuRXBLcU9VbVZHak9ZNkF1WlpQNXhkaGh2MUpTZGFFR1hVU1U1blRFUDhoSjdRNm9HYXl1WTRWQVNNbkxtUnBtR1IyaUJ6d0xSS0U5NWFIakZmbklpQ1ZYcWJYb2RJQlRvVlZ1a256eUQ4blJUbzB5clAwQTNwcWFPVURPRmVXWFhGdDJ3aVY4NWVZeEYyRGxxd2R2cFdOUUNMaU1iWGNRZXpLQzhPMUd0MVhvVW1yWjBHTG5lcjBLZ1BxUnRCb2ptNkdUZ1R5UDRiSkgweEQ0Q0ZCSFEyckFsMUZHY1lmVFVxN0ZUMEcxSWxIeGVyOUtDSWNEZ25zQk9FOHNkTzdLWDIvWGdTbnBKbGJFM0tpa1Z0Z1EyNG9FdkxJNlJJNXJ5UmFjMSt5OGE5bndHSDJqTWt5aHpvUG5DNkNYWmU3SnliU1pYVkg1ZDNiOWx6Wmd6andDdEhSSHlzNmkwVm5TbDczRTkwbHVKcldkU0RJa3ljQW9PSFR3dDFIeE1wSnJaN3RoSGxVM2tTYUVPaVg5dndYQzhNTS93Z2FpcGcwcnpFbG1VeDVIL3d6ZVVSc2hIWUdsUlB1SXBKVmdqeFhnbXJRNmdWTzF3OWZ5NDlNVmVKay9zODJpOGN6eFZJU2duUUVtOFFVRUxjdkVqMVl3M2ZOUG54bGtlbDVlQU4ybXc0OUhUN0FZOUJQODZUTFJDbGc4WEluU0R1R2J5OFZOdDI0RVJBVkFDM0Z2TmUxUHRuZ2NGVnovUWdTVXFhRjdYeXpVMllNVHlmNWlRaGlrYWJheTJ4NnNpM3ZDcWF6WHlnSG5heVVEYThMOU1pM2owVGxuODVselRJOTZ0b2w0N1RCQVFOYmlwR2pPbXA0NURIc25PdHYrNEtsd2pmUU1tcldMZXZITUthTGZobU1KRWdvcm1XVXlRcWMxZEFzbG90Tll2WEZHNjNlaTVranBUL01Kd0IrakpZK1BMNHZQckkyUkN1MUhnTmQxQ2xRYXVJeGRQWTR5STNNZm1rdHBOYTgwc3NTQ3RVUlNpVzlYeGVYSklVOVpnNGMxaXNTNnRGTWVITDdyQk5VSi9Ud29YOE1zVzRrRnBRV1IxOWswVEVidGExZ242UVB5UkQ2ZDZRVVpobml2NW9FM0lmSVJTZFpiSjlOcDlNOGdtbkNZWHRMNUxzWEFheEl0S1ZOWFZGRkxHL2kwRzhUWmZrN0EwdlpBZWl5eVdZSHJQTTVMMEhkcEdhSVg4NlgwQklZRkc3Z0lDQWdJQ0FzRG0rdHVIbWRLdHN6NDFXTmpzZ0kzNno0R3IyZzgxYmtRUW9vS0dzTFRhQ2ZhY2xkNElTRWsvR1lpaTU2TUFpNzY0bUtiL3p0Rkt2UWk0MlVuaDdGVjFKSHpRWjJ1cVVFSGRkK1NrU1VDdWRDMUFmNXhwWXBlb3VBVlZ1SVpMUWdlSFQyZ0lMR3pUTzY0N3poeHR3OWRpZy9UQXp1YXNFMXZNUlRNZ2ZvMmZFOStUbjlwemF4NTAxRDRaMndscjV0ckt0dGVQWEQzSWhzbnB4WFkwSUsrNVlGOXlQLzNFWU0rQ3ZMU2JaMnFDajhvc3VhMXFqWVpreHNlQmZCM1orS2c5cEUrRHMyZ0cwQUtDelM4UDdrWU15aUNSRnFrOGxsb3lJNWVQOTFtZ1BRRll1eTlReFBMVnZ1d1hEYmVub0RDM1p0WnFxS3VqMW9hL2w0YUdhN2xuWEtjejM0dEN4YS9pQzdzdXdub3NmbGl5UzdxeUhJY09sRkVIOTh1YU5iazU2Nk5ndkQvd0I2Tk5RN05odHBVSGVGSkZ6c0xiVkVncE1Oc3BmZVZDOGN6RXRnRldtbEZKeVpVLytBclRWaG5kUXBRR3h5TjFYcUhncVJNTXlndTZBRzBKNW1sV3cvYmQ3S1ZxOWk5MWdrQjZIQXE2UGxveXpPTUVOaFpWendSYWtsalNURk9OQkMzbi9hSWwxM2thK3k2ZXlQcWVjL1QvVjQ2TnFNWXhWeFBqVE5USFdQTU5qMGdsSkpocVdqVmtsUlhjaXlqQ050UjVwRVVQMXFOVEs1UjlyV29mNVgyRk4yZVI5eldxV3JWWkdkd1BHRjZpU05WL2VJVUd5V1FRZnFtYU00V1FvRUFMeXljWk83ZDFFcWhYd2VWK3lnVjJma1A4RStJa0Y1TVFFbnpueldrZnhTcWxXY3FiRFMwMkd3Y3hKVngrQTdhejljYkRXbWxYV3pkWWlyZFlJeGVJQVV2RytrMmVxa2ZhVjFEUEZUemloNzJWc20xSFE5ejI4bFhCTnE5U0d4NVRuZjBGazJLYTlrNHdhVlRjQ2xQQXlKVWd3SVI5THBvamJxV1Q3YjZHYTlJNW5ZZWRuZE9rVlYrL2Q3Vi9XMG1SYTU3RHh3ZFVLeENZWHI2YkNnVnJHeUtOc2NVbHhYU2pZTGhzUkxUcDZkQ3IwZnhaQmJ2VU5YK1ordXRqN2RVSXNaVUMvWWZ2aXlJUE13K2djSWpMSlh4aFlyMy9LZURNZ1VZalJvc2pqZW5iNElqS3BYWENpaXVkMTZ2dWRKZVJhN3R5NFM1NHc1Z1F0aHhiaGcrNGlCVDdQVGxKekxFTHhvdVNnK2xGM0FzdFd4RHNyV0FkQ01kclV4WVlTcmJ3V3NxMFc3OXg2cExnMHNVeWpHM1p2UU1kS3IrbjErdElmMytSYXI3ZHNDOTJKM0E0UXQyZDN2TW0xOEkrZFFudS9CaGhwTWMwZ1dRWWJibFNadytXejhuZFhVUUxTYTQxUGZ2YWdYbUtBMGNpSkhiUTQyQTB0eEZvejg3aDRXQ0NJN0wwNmZyVmdnRmdDVGhqY3hXTHJDbGh4dmFpdWZoSWE4aHFBb25zSDI2Q090ZVJIVEdjL3ZTdStPZmIya2hyK0NFZm5KYnlSaitkdi9rK1M2MGkreTc0bFRiN29JdWlzZGRzZEUzdEg2ZCtBYzdhRlM5QTNMYjF4RURjZ00wZ1FGckI2a0ljRlhKVFpLWGEyK3VPT3BxL20ybmZRbmplalM2cVF3TUtFRFdaekJ0NHlVbmlsaGNiNmpZellvQ1pHUFozTDhDOG9reEkzSlJzeXp5MmlpdzJCcVVPam4vWjM2VStVZGh2ODBiVGZQblUxaXVrTG80U2NEekJSS0k2bmVyRjVuU3lyWkdINWhaZUJlQjU3L3hGbmxhV296R1NsajVYZkl3VWw3RHlabkQ2WW5rb0poT0ZyS3IwL2ExYjRjQ3pHMHEvR0ZsK0lRMWZ2L1hvTFVuYlUvUm41YzBaL2lNNmY0eFpsTjY5UDRGQWE5YlZ0Szc4elNhUzQ1Y0JSa0RMUVA4UmkySStBd1dnNDZ0MkFlYklGbmV2NnFsOTZXUjdGdVRvT2dXZmhRYWxkQm94K1ZRd2hiejhzZFRreXU1dHNNUkJhampOOTRZVm1pWVZYUU1WM21DS0RkZmRUUkoyK0NaemM5bUdnNS90MEVQTExkL3hSakVWRFVMSkk3Tk9IaUpzUVUvOGVpSWtIVXovSWtEWVJ6OG15Q2pPZTYyL3U1NXVOVW5nd0t4djZkcGQxK0dMMmtndUFnSUNBZ05BMnNEM01rMXFVdzQ4ZEs0RFVHM0xnMUxJaXZ2ZWpZRzdxSkdnL0RaajRQYVM2NUtudDlIRUwxQWgxOURtcnNKOUJZUnNHMU1lZzJ5VVdnYUM2WUJWczJQRFM5Qy9lY3ZTR3lEd2hnTllpaE5KQ2Y5QSswK2RncE5DRHE4b1lpZVFUc0NCa25QWm9zd3ZyOVZZYUFKMmQ3MUFSendCand4MkxUd01JY3hHbXZhRG1rMjNUWlJwd2VOc2MvSW13d3ZuZS9jQWZ5OW82bEY1RDhBYXNGZDF3MEpjY3BjanJ2ak8rUDA1OTFoZ0syUGFjL2UzNXAyRXlCVXdBU1QxczIvcG1XREM1WnZlNnNUUHNMY0hRLzFQbWJBSkdsdkc5MmFaMXdvdXhHQTFYMk5BTTI0NmVxdWV4aEdKQ0lwanAzbERDMUtaajVqNDA1Vy8vSUtMcE5MbHIrQWp3dVorOFYwV2FUbnBtOURHQ0p5MnRiTEN2MXFMRTVibU1WSDNRSTRMWnVsNnpOL3NrcXhuY2xIVVhTQVkwaloyczM2TW1WdkhHcEVqejRGL2x6b1N2cmZYTkUva2VmTGltWXFMblpXMVMrTnZZaFJDRVcvc1pSSFFDdTd2R0NxVnIyT2pUNlZQRDcwQ0F1U3RTN3dDUCtCVnNYTDFvWExYQ2puWnhMVHRFdVlSdmFtZGY3Qk0wWUkvcjE1UU9XRm9VNktpY2J6V3h3Rkh0ZUprUmEwT1N0Z3VEVHRPaEx0b05wRXkrcjlPZUdOZFpZRjJpS0kyc2l6MkxBcjBkaDg3ZlMzWmFraHRYR2hhOFhPdXBFRjdraFkwNDdndkNLcG9QMTVpTDA4YWo5TFRVVzcwRDZjZ002aW1Qa3R6TnVrajRlZzlxdWJ0WHByYms4cnNVcWJVdEFUaUJFdUQ0ZkZndGlXYTBTWXYxdCtKS2tCcE5BYzNSNGhyckJCTXArclJXa1FZVitiVWNhZEU1Y2h5SXM5c2pGd0tkL3drMVliMXk3SVpWaFpaNWJUekN5WnJBT0U2OWhRNVpxQWg2eTFCRnE3T0VVUzM3cEdoeGJyeVpkWHJ4VlhKaE03YU5LZThOZ2JHRnNNUGIxS3QxUDcrMzlUYXN0cTJXTUxDVXdwM0ovdyt2VGVoTjlHRWkzZHdsb3U2Sm16bEd3U2Jxb0YzaWRDZ0RGQjVGdy9GRWhEVHZjdCtIYS9Bc1pwN01WR01HYVRwWDRQOVJQR3d3OXlyQU15UDl3NHhybGdhaVpzeEFnM1h4WkxZNFUwS25sMTFaY0ZpOHV2SUIvaHJtT1VVM0JjblZZTUthbHJYTnFvVFk4eEE4aWJNV09LV1NlVHk5M1dNUmRHSm1mOHNUL2RSaXdxSWQ0TzJkWGdlb3grRkJpS21NY1lrWTlDSjZYazNiMGprUXZDRkM3N2UwNEhkRUFIZXlSQVQwQXZiNVhGSE5IdkF3VjlFQ2tWRTdzUFd2Vk9RNzNZUGxrWkIyTVFXWlVzOE8yS2VjNFJQMjY2dFArcTB4WWFGNWdtYWxuVUd1MEhwNEZYSEdjaGRWQnpaajRRYms4eVpFZWtDMHlucENSUDhJTWFxQ1RXWmVscDBtL3BHQlpwSE93MkR0N1lmNkRidUl6M2pXQ2VibU1lMG4yZHRyeDV5L3pDbEwvQUlQZXd2Q2RFd0doQ1IvK0VCdUtCaG1PeEUzcDJuRUdkbHhhVHNFRGNUNzhDQkN2RkFhOGZUL0owOStLZEZib0k4ZGpWemd5bi8reWNpdGlrNVo2a3hDVk9TNmk3dm0ydGFZaFd3bDVNSUZNdWlYSjh0ZHFyWU9pNlB0NWVkeWI0UStzbkJZOWJpMVRLQ3hVTHpoa1YrdFRhZ3VwYXFaUmpTUmk0ZHJTLzIyczdjM2xJNWcrNktoVCtvRy9YZStBQ1VwMHFZNFVSWUVNdnB6bFhMS2VnSjk2N0lDaGdXOUVaNW5paC9wUU1Xa2xaVmNLM1FOcWlCeEVmUThiS0FMcUtpVTEyZTBUeXY3QTRKMGlnL1NTcWJkZFNHVjNZQ0FnUEQ2d0FDZlVPTmNzNTJSTXdmWkRmSlhyTnFkdXlxKzMrV0d3TEhhSDRkYVczZGRYNFBXdTBSOVhCNnRmQyt6N3pHQmRVVnRjN0Q2eTlXWldaVVpvTzVnTDNoS2p0Z2xDTmZKVTlUSWZiUjRaYVQzR282MXNyQStvL3o5VG42Y2N5TCtKYnV4cmQyMFIvODJ1aEloZlB4M2lMYmlxTWNWbEVIY3lkblRxZ01BaDhhWHlhYlo0YVZ5d29WTXRvaWVMbHd2SElxRzh2Z2ZUT3VaUyt6TEZxdkhuMXd2L28xbTJhZk9hNFdJSHN6TEVEMG02Q3YwWXJ6S1VEZkhUT2pYNFczWjR0cWVzYUJ1c3d4NzQ4d3V6WWxoYWxjWlRiVXAyampBK1dVdThzMmRnREpuNFVXOXhsVnczVEQrTmNxTno4VWpzVXRneGtyTWNESXFEblVtOUNUSGFid2tkdzVadk9lb0d2VzFhaGhqRXBSN1l3K1dzS2tUOFhNUmNjWnA0MXAzMERDcFlCUWxjUkNJWVlJOEtYYjdXU2V5UUdhZVhrVGk1eW1OUlo3aXRueWZ0T0MzYkhxNkNCVHFTT2podEpCSkw2YncyTDVUSUc3WmxNZEhlR21VSkkvQUc1bENBb2hOVTA5bjkvRWFydEhoRWRGcnlKWUZ0anVOZVYrWEkxRnhBNzVIcXQxMTkxbzR6WC9OMkVZRFAwMGVENVBNSGVTREtEc3NlVDVqTWFrK0h3bVl2aTFaTENBTWd3WnNGNGRTOGFmVEk3QkZIc3ViQThlWXFDcWtEMVZtYXlwMy9FcWJBR1ozTkt0d1d2ajRMREZQaWwwSTM1dkllaE9wcHMyanlGc1ZrOE1RZVkydGg3WkxaWGVRczJkWkFsM3M2OU5kYW1CSUZaM2xQa0VIcU1vOG15b2xMSlBuY2xYRWU2SW9Wc0Q1eHpnNTNtamY2WEd2MEswYW8zbHFSMDRpanlkVWxhOXQzTGZ5VkdtZmhqTlJ1aGY1UWhrTDMyU3IrbFRpdXdib2xyeWdWejNxb3lSSDczMXE1OHFhNWZxS2lYNGRPNVpkVXcvMU4xTFA4MkFBSUwrYTZ0ZW84QUUwRFU3RTBZd1JoTDZ1RVp4dlZ2TWNySzNaaTArMDJCL3JDdUc3dFlDMTJtSUxWRGVVOVFtSlpubVJvYnpjVllZNWdPS0o2UkZyRWZkc3ZoRFg0bWdKd3g1ZStncEIyQTFCRlZYQlZRbHJ2M3RyNXIvQjZFdXozWXNpSEVOdEhvRTVoOWhHUkFDeDdzQXZxdHBJanpBeVllOWx3cFRJM3dEb0tiNlNxby93YlRJTnBTcmsvMmZVd0hBVHo3cEZTU0hGVzRUNWRodFNad2tKVzZIRG4zNkNMMjVJYXdvTFlHaks0SHE2emwxUzlGRml5a05PcmJXZXVlM1NldFJOZm5Ka2wvcDJIT0NUdUR2Tml0eFZMNWtYeitzNEttSWVPMnpHMi9DSFVWT0VCSVV1d2JadklYTUJvT1VvQlc1VldRUXJYVWY5MVFjUXBDNnhyVTYwT2h2YlBQb3JOenovYmp0bWtRMDgwN1Bxa2N3K1plVUpWZG16V0RUaVNwMlhPOURLNHA1dXphQkc0VGFmM0haNlkvd2UyT3ZmR0R3N0FyUVdXRzVTcDNFK2NnaElaclkzYjlXUDRsYmNFQjc4YXNaUlpyZVlzanFDTFRzNktxZDlCS2RJOS9EaThuUTZ0OU0waitlZVRTYmQ0OEpJNitjOXhpTFBOM0l2YWVMcTZJMTF0VzFBQzVFVXNNdjVqSjZxckhkV3pIcm9FQm1qZHZnUGhWSDRPNkhBWExNYkttQWxjbGMvNTdOaC9KdVFNa3JOSTR4N2VuZ2RRZDZGK1NCNE5PaXAzMmlkcVl4b1U2ajdNQ3BFd2lzZ1VYeFQzUUVFNktFTmlVQVlmalhHZFhuejg2aUlkaXdjRmJIMDRCWjA1VW1XUThJWmNoRHdvU2d3TFcxemw4dEFjV0s0bHdaN2RLMURQdlpvRmZyYmJpcUFJNHoyelhZM090WjVsbmRHeTRybGFOVW0xYmFIYk00SDJ1cnBucmY3UWUwSUZnTDltZ29sK0xHZ1Y4eUZkSjlJUnF1eVBmZ2h4NDNuWEtNaE5VdGlEYzY3aGp0WGhvWlo0eldNNGtLRER1VGdxZjJFUTJKd1ZZeHhxTGtoblZOQ3JUR2dqV2hkVnZkQUgyVmZSN2FOWUhhSTVtQkQ4WVlGdW5hRkVicXRmc3BVdVZmYnZsd3QxNDd5Rm5QQWthdGF5dTJqVGczMFJOYlRkVk4rSVZsTDBmUjdKYkhRQWxKc1VIRCtzSHNyaVYvOHYxc1ZTR3NwN2VUbnVFOVZEZHVYeWdFZlduOUh5VmVGZDQ0OTIwRjNqY21kbVNkWkxLOG96OVBEaExsaFpHTjZFandQZlhQV20wMHc3UmtYTkp1YWJML3VrTHNqOXQ1eFBnOW00SXFaSjEyOVJDWExXQWo2eGFDcjR3dy9TdVp3SFQxamp3WnV6SGRVSWJOdHZGeGxVcU5KRzlmTG80a0JiN1psaElsdThKWTYyQXl4dm1HOUk5VDFiRjJCNVFiKzBKcCsxT0lxUlpGUi9KU3hYaGhjTnlqUUZXcTBlU2VMcjJrMEN3K3FSbnpyRkxkM1RFaVhBeW1vanMwcldiWDFGamtqeHpjQ1pvMjVCWmUrZ1NySU5yLzZ5RXdIQ0R0NFE1ZUFZV0ZGN0dVOGV3V3pZRWhsYXFaRVN1QjE1V29CSWtiZnRsQkFvRjY5K2pWYTZscjg0SEc3MmZNci90UnBIS2pkcnhBcGlPOWFuejZ0eFVVR3Z2dEFGQ1hTb0dpOVhpQmxsTE5zVDZ3QnhDR2xacmswQ2kwbnh3WE53enh4VTZsdTRlMU5UbmdBd09GeWZ4WWtNYldFR0srbksrelVCM08zVXd2eW9YUmJYVzZqVTE4VXMraHRrQjdGbE12UkN6WTh4WUYyU21pV0xZSEY4MWt5WnBWUWdCOEwvTENXeTE3OTRBV0N6NFNmeDAyRWw0dFdNY3lYUHVPMml4MUZmK3JjYzhTRXAwZE1PcDVaSHVzMExYNDQ1TzFBSjlCalNBSzdDS3ZpVVpjMllGaFJhVmIxNkp4Kzd4ZnJwWkRvWmtLMmZkTTJuOW5IanRBa3Rad3VCQmo4cEw4Z2dlM05GYmJkUzUzMjhXcGVGT1VpWEJoSjY0YjIvd3BCRmVseGJrc3RGZHBuOFE3aGdoTzZkQ1dheEl0TDVBbjVKTThFQXZINE9WYnViZVNjVkhjNEhwaldpc3lqYWgxYi95dS9TTTQyMUFuQXdRYVM1R2VSeWFTbENDb3pJSUJyMWVZYTNyU1phVG4rOHdsVUlMSGVtMzlrWjhSTnE5Mi9ESnN4ZDhsRVp6V1ArT2tuOUNUZysyYnpCQUF4azJ0YlNHbHJidnE0R0tNK2tqT2hUaUhqb3JFSFcxdFlMOUFyNEZUUnlCdmFHUjJJRmZveWt6RzVHNENlckZjYVRrUC9nekh2Y0FUek45eFN0ZjZBQXZNYTdzVUlSaTFPNEE3MzZRM205TlNockxpalQ5SVlZTUd2WmRCa0hPTWRXUlN3R29Rb1lZWHdHTnhGOEx5MzcxYXhEZml2VjJFeXhHK25SUkwrTFQxR0xRVjV5bzJsZU94MVM2Mnd5SHFTREJQMWtwY1ZBd2lQVWY3NWtyQktsbnRHUjhpOVppaDZnZmJiYzBSOTBQOFd2MjQrTHpybWRwVDI3M2REZVVoMm9IZXBmbnBmQjZrOTY5OXJUdlFJYkpTTkh0MEVTd1BBLzRDWVhVK3M2T2p1YkJoeXh4aDhIZzd4SWk4eXk3MDN1bVRPQjM2Szg5Vmd6U1N4VmM5bVJKNTAzQUF2TXVJcEhieThkUEJtYzRzT1BaeTVPRDVYeHhndkxvakN4SFdBb2l0NXE0Y3l0YXlaMGR1RGgranBiRExOWkxNSEovRTNxbDhEZ0Z5QkV6dEowdFN1VldYRVllMmdhcS9iQWpvQ3ViZzZDYXY0UkQvM1FNbGQ5SkozUzNGWVRaZnRmRmgyT2RpU0UrdlN3NUhMVXlpa2owU1RGT1k4V0pWVElGcWRhd29OV0lIWlVJTVYydTBXc3FSVjdOWXN5U20vL2tXMThsbXJuN01JcldrTFNZcngxMTUzU2hRQXZMT1VycHJMdlVOWTZiamh0MWM4M3pNY2JZOGE5ZEcwVHpYVkdheGFrODhFcWdXT0w1aVFuMDhnYVNPbks5aW5sZFJDMEw5YktxTUhnbStqcHpOYkxScHRMTFlqcWptaVprbkF0VHlpeXFZSHVHeDJvWkVmMFF5dnVWTXNyNEpHYndaS1ZnUWFEekFhdnhlVzczRmY0YzRDQ3RtbjA5MDBJb1JmT3p2N1FlSjBHaGpVejFvWFM5YTV3WXJaM3dvOE1jTzZKYXNLQkZsQ3VKREVwTnFRbGNucG1ucEphaFpEZ28yOXdTa29CTHVVUGtEVkpnNUdGdGdqTHgwTGZKWFBjM05RcnEzMVlmUzFKTW9tMm5XTUtOVTRoQk9XR3FKTlhycXNGRnZpU01yZlBDYmlLa0Q2VEpZVVNvWkRGU25hZTNXVTkyRzU3YkZIa3lab1R4dU5DZ2M2QmxKUXZjMVRnMXVWZU8xNUdHWUpDYTBVUHdtd0hsWlVhbWNUaHB3VUJmOEd5WWJwVVEwbllWSWdQWnUvMThxc1RVNUxjR0pCZVJXYlVmQkRhSTZ2OW8ydG5GS1VsSWNudmcrT0U1aTkzV3o1cDdlbzVtSW1KK0VvK0Zwa3RNM29xRVg4SmpvVXFYS2h1MktHRStzaHdzeWQ4TDUxZjlCMWtPaTB4bnJLWGpYZ1Q3eXp4ZWpUa3EvRlUrNnhNTHdMVFZ2cnluaEFnZTl0SDFkejl2RmR6MUoxWUkxT1JaWFVSOS9COHJJV1R2YS9IZ0hOVzJwdkc2cElEUDBNRFdCaVcvaWg0enRpZXFJZ3hTdGZHRS84c3FPcWNwakxlSVZNY1FXSkgrY2c0WXhZTVc5czRST0xOWTdudUx0Tk5FWnZ3dmhwNWZQa3dWeXhmVEsvdGExaU9KYS9DWmxCRWZEMVA1VjAwc3dhTmVEb3M0WFlDUURGdlMxZHJiM3ZaUjVBbjh1NEt2Rkg2S0MzbFhDaGRTR1M5dXdnVWk4U1ZjM01WT2ZiWUY4eTdsa25JdmF2d09DVDc1Q1V3L0RtVDlwRVFGS0RiUDFtTmVvc1kzeG40UnZRRThsengvenp3aDl2RVVwQkcwS004Y1VVVCtkcTljV09jN0FWcWtSb01qSUpxc3ZOazcwSVFtczFOb1c0d1l6NEl6bndOdG5URkRaK0dLNTFHMURuSHV0RFlyMWsyekxUYmNlNWtWampNSWd5TVdLdExCYzYxYnR3NHJwWlN3ZlFWcUs5KzFBU0tWNlpES2w5VHpCNjYvemhOdWZ0R3g0TmtWUUN6T2RsUG5XSkNVeHpGVVMrM0tkdmFDVDBBVU1BVkZjTzBCMmRJZThrL1U5SHJJQ2VBamM0Ym9sM1VrSlhuUU40RnJGbjd3NnZyek1HTmMxOUc4Y1hCaGZCNEprSXYzR3A1cGdSWnp1K3VsTDlzdGxHNW5PdmVMU3dOT0puQ2Qwc2JwM2U3UUJTVzZRUXdJNzNFNlhleGV1YW9oSktkMGxiNlRSTGYzRndvN3Rtbzg2SVgraHpwV0NBZHZXby9wNE5NMW9YeHVScnRySDB6VFRObDdxZVAzbHVIemk4c1Y3aCttRE5hZ3B1WGdORGdIb2d3NktHYlVqV2t1QTRBbEpycENIL1dqRUZDUnpqbzV3cG40a0ttWmlJT3dWNG0wMmZDWkgzYmlWQ2pvRXNjNW0zNzZXRmZHNDhNZTRGT0tObEk4K3puV1AybFMzQlV6NGhsa3RRMmk2dTZVL05ocGtEYzNzSml1dlZBaGRZL3QvSTJPQmJhS1pXcmNXQkswVmRaMDVSeHFJTDRnVGR0NEJUeTZIZXgwUFh0VUcwNXBHN0R2aXhyc3IxQmgybUlsTDgyRkxySlR4cy9EUyt6SC9lMTVnYTlCNzVYblljbTZMV0lLV2J2L3pXVnh3ckt2OG54RUpGcGJIeExYRTJNdWN0NE1IbEdRWExoSXNlT0kvN09IS0ZmSEpKcHQ5bU5nMW0vWUFXd0Rsb2lHeGxReXI3V1F5QlIwZmM2WDhuc01pV0N1bVN1ZDhzV0MrdVl1cVdkSkhNY3g2emdJY1drS0ZjazNtVk04YUkvS1FORnljTkVadElpZkhVV3Z3YVAwM1FRQlZuR1NOd2drQUZCRUV2VVd1RXZSSlFKd0Ewc0pBMWhHR1pGUTlLRUpYQk5yVkFHeHBhS0pqVW5WWFhLSVZIZDE0M3dBRCtSUXdPcGJablR0Y3Z3aFRjQW1XMVlQbkM4Z2NtczBpaXhCbGJFRGxOTEYwNjFlbjdFR25qZnZKR0hrbUtqTy9EZERPa056M0FzMFVTa3AvSGw0eGhYcnNNR01sbCtJZmZINXpvdHA2REpyUVlRS0o3WlZueEN4TkJrS05nTVl5NVVJbTk4b1JrT3VLWnIveEhKNDVXTHF0bTlqSGNsOEZFa1JtUHFXeS9wbS94TTMzU3E0WXJ2NXZ4bHFzM3dYNThDV0FLeFZiS3d6V2RQdUZHdnJvMHNQZjY1dDBzUms4OFlUWXU5REdENlZmOU0rTllVVnB5aHR5bTBKN3cxSDA3SmJLWjZpZ1R3Wi9EdUR2MHNNdlp2SXFiVTFFenE4Nm1Pazk1dXh4U3hsMlRHQkxwc0M3N0NrMzdZZlBoVjlYL2NCQy9uRXdNdGRlTUlmdmRCYWNBRzY3ZXFuOUIwSmR1NjRjank4WFNkRzFIS1J1ajRqaVhJbFRaa29rZnZZdmdBaEdvRnlMR3J1SWZIdjBEbVhHVXY1bnd1NURnbTBKS1RQNnVVaU0waVFlRmZxblNFK2pHNVBNUjNjOGx1TElwM2FidmRsM0F5eSt5QkVYaW5VVUZUWXE0WHk5Q0dBNTY1M1R5MG4rL3RXQ0xwcG1qQmdIdmFBWXpDb09yRGxCMnIxZUVzQnljanhvbzU2KzVZR0RPTjczQ0tYUWQ1Y3J0VGo3VWJnczFxZ25kTjlleFVXYXJWMGlpcUxzMEJjdUpsT3FDL1J4bVJRV3VLTWgwWjJPYVBodU1MY0hWdVRXc2ZDNXRQS0tnUjVKeHY4WDRKQTI2b3FqR1VhMjJ3QUg4a0JhTEhhUW1Hd1JwZDVQWDUvaFpXRGVqb01JcVdBckRDL1I5c1hFU09nVkRHcUdKR2NvbnlSZFh6Tm9ZZW9FY2FFU1BwRU5kRVI4TWY5ZGNVVmNGNXlEYWNtbEtUZ1VSeXEzbUticGowSmNEYWdtM2d0YmtHV24xbWhkeXI5VnF6WEZxOWJHQnVQTThKdDU2RDQ5K1RGbkNjWXBGR2pUdXllRG9iWXdyRElsNzBqZ29YQkVybVJyMDB1aVNrS1JyZDV3UVJTUTBodW9EOG1BWTBuL09kYjVGQ3FpamI3ZXI4MGdKWGo4eUE4OWltUDVFaWlWRzhEcTA2MzhhM1lIbkttT0hxVkkwUFduSzBhaFZTNWRjRy9TSWlPdE1KOWNvWms5Z2N6aC9ZcVplZGQ3SjFHaThReUlaamRMYXRyZUFRSmFmcnQyOEFWbkppQjlNTWFZYVlReGE4N29GS3BIL1Mya2RxWktBV1dnTzFNNGlnT0VoamkwTXROV1Y3QzZvbkNMcG1scEpzb3lDdWpJSUplcnVaQ0JPYUt6ZDg4dHBHZlE0Ukx4YWZTc2lMUmplQjF2czlPaTBqcXo4TGpEejd1eGJTSTlITEF3NTFEMUhCVVg3ZFpQT1JCU1A4N0NwT25MWmVnZXpUK0E4RjlIY0R4TGNkbkVSWElTVGxmNWdLZVVsRWtSMFBPVkF6ZThWWEFOS005ZVI3dTlzTXpiMDYxOWNPWTFPMlo1S1hBbjN5NHJKbkkzeWZwMDY4bWRKeEx4SzRaUDZFMWpJMnlCTnZhUVhPUlVrUDF3Q3lvM2xqZWIzZllON3g1MC9qZjBZNjE3dWlEaUJVUjMyeTBOMUFvQXJBZG13eENxeUxsTXh1enhhdVNYc0txcWNJL2xYdGxkRGlnZVhtd0dDeGNhZHZMYklUNkdwT1B3T1FLMXEwTE52REFsK0Y0dXp2bU8zSEUyYjExQ0RpLzRmazVCMUM0VG9DYUhyQm1SblVwb3hCdE9jSG9IUkpzejJrTmdNdit6MUhHVTk4RWYyL1VvaW5UOGtSbGJEU2Z5ZS9BUHJJVllsM2JXOUZ6R3B2TmJZSlFCVjk5ZnNLdUhKN2VlVkhpSDlyMUdkRSt2L2lqZHhZdCt4cWpBRElRTDVyQUFNTjk3alQ3WnpWcGQrNk9rZTY1NjZITjRnT3JnY1d4eU5SWFBMTGhMREp4eVZnVTNqMGU1Ymh1V2ZiYVJJbDhXb29VblBrZmxaeXFNL1hzR04xUktnalp6NEphdHluYnZ1UG9kc0Y3QjNDdXJ5eEhORk1WUDBiTVpHblIrczFEdEpwS1I3cHNQd0wvOS81OEVTa2hjVzhqbjZzNzVleTdudU5NZ3MwREVjTW9NOElIdFdaN0lLdC9TZjRvU2FWZDJwRGh5bXVYM3VBOGVSMzlRWmw0cDE3RHNxRTVpZGF2REFPd0tRK1JoeGQzaG5PWFYwS3dkVmxtdnUyR1RiYTR5WkZGTmJtOTZxdkFwaXlVT2xiZjRHRmM1a1Y0cmxJUUQxWFdFNXRkTDhSbmFwYjhuTGRZUm1YMnFZcysvdnZxK3ordkE2TW9YL0NXcDJPOGhzeXlTMUZ0eWk5WFpSNTNZdDVaNzlsMUVOcE9pYkxrTUtuMG5VR004NlZHNEYyNHNOVDhvNVJ6bWxRUXFGbEU5cjlZVUV6TmpjeGtYZE5acVc1QnJYMXN3dkdOd3JyenI5VC9CTE9CMytPRklEa0VVcW5mdWM0OCtBNVNhbG1WSHZjejJEeURMZmVydGRseFYrdnBRMEFlclRBemNDL0w0N0tqQTFIOGc1MlhMMDF2VSsxcGNpWm1DWW1aeWdtS0hLUGlmK0ZBalhUd0hBL1A1YnJ3dys5TDhJK1RYVTR4S2s2WXg1QTZYSG9mV1RTWnZGLzJ4R1Njd1lTMU9ra1Q5NmN0bzJzMHZOVXBhK1dsV0YvYXc4SmVETUNtVG5WdVZBbWZjb1FhNE9Ob3R4b3U2Mm5OZUVpZGZPZ2dSaExQK0J4YmRUN20wM3JYNWgvMStvRHlSWHIveG9LNVMrc0NPKzlSVVZtZy9WMDRBWjlQY2pRM3NUVHBwSWpPVUJZVkdzNTR4Sm9jN0oyU2Q2c1JSenJnOXBtcU1VbTNLbXZJZ3VudGpFME5hUzhheXFzVjZBTnFyUk9iSUZsYjdMWlBHL3ZnU2s0RVFsdDlwMS9pUVRhMzIxQnNQQ0xqNEdxa1psbkQyczZxNXlRMDNyNTF6YWlWSXhMQTJ3SzRXb1V6UHh5VjNxVlpYZVkxdGxLNDNlRWIwTDNpb1VvYUhPY1dFWTJqeVZhVFBGUWttK3NWQzgydCt3N1p6bzdYQmhvN1daWnBOV2cxU3pXeWRBampySDZiQkNHcmgzMlZzL1hrVjVNK2w2aUhSZDNVc2JwZ2JlZGtQczJPOWtLVU44RTJyWW1yRCsrdWRTRm1PbEt2UXMwY1pPVmw4cUNkQWVpbzNGOTc1U3BLNWdlYmhKdlFYekVLdW1iNWYxazU0K3VGQkRmbXZBdUo1dk1rOWxQR1o0bCtpdVN2SmZ1OWZmUGovOExqejJIWmxxMkU5ajdJc3NIZHVNZ0cxaU4zelBwbjFVMmxmV0J2Q2g4SFVxUC9od1p0eW92bjFRL2J3bnY0UHBQTmdOVThMTWY0azAvYUtGbHBEN3hKdDc1NU1rckZ6ejZOVUpnZzAyOFpUbW44bzZWN2xRdCtGY01vRVJCKy9VNkcrQllWV0RCVk96bzFTV2h1b25ZNXA3NEdlamc2Wjg1NXlMQ1NpNFRzMy9QbmlYb1plV0VzN095RWdwWXEyckdISjRqNmY3NEM4Q3BnRWp0UVVyUnA1YnVQYTRpTlFRYU80TFZSbmY0ZGlWYnhQZ3BtcUJHNEtCdFQvbHY1OUVJKzZ6YmM1RWZKQ3ZiK05GcmJ1bm5LNy9RKzJhOWpIK0ZKbmxUdEw3QzR4Q1BWY2k2MFlwOXFTZ1ZNVytGdTNsL2JnVGsxN1FKNVg2TGFOM1ZtanVKTnFlTlBTcS9oMHlScEJvRC9mSDFpRnI3cHpYQmNtVFIza0kzcy9ER0tpNU9YVVNKY05TaEhQaUpHYUYwQ0swR2RRenhHb2pvK3A3S0F3NE1xdDRHKzUvK2FjNDZXbG1xcmRtaXB4azRwbGRieW5FeHQ1alRpWmM4SjdvOHUrN1RUSUhib3k1VFhrS05ReVhsWjR4YlUxbGpjNDVTd1FQOWx4UDhrYmE2cEhCVVY2OU52UTE2RjNoWkZ4Sm5XV1duSU8vSDV3MWYxRTNEeGdqRkY4bStKVjg1Z2VQNmdJaWFBWFJuUkViSlZHTFo0ZmdxREdWR3hsRVl3SkxGQTh1eXVjbjJOVXZWdjFLdWZMb080SVdVZFNGSThQeXhYWi9yd053TlQrTkp2TWhBak9YL2taRFF6MEZlVFpZb0IxT1dOdkRXSTF4S3pBSnFSbEZLcHNRYWk1UWYvUlRFN0h6RTVPM3VEc2FxV1FVSks5VnF1MlBPaFZxVVVBZW1SNE1zMEcrc3M5OTI3NnNOM2tJenk1WHQxUC9lMHpkZDY5RHZuNVpVVHNkMmdlNEM4V3BWSGVEQ081N3A2YnJHNUlNNVF5RkVOUnpVeExrWFBoNHhlRjdIWFdCVmdiVzBVWmtvY0U3QzVuNE9hdXlBS0F4RW5IT2hRUU9oZkpJWDVMOXlEYlFNM0g2bnlGNVg0VDhpenRPdVpJZnc0M1kwaFJrRmx0SU56QmFWZW1Fc21lQnJMQWhERWV1cHZieEhZLzFONWVKWjJ4VGZ2TWJSbFY2SCtBWHhJRE9PaytkdVU0THFXMlUvbUpHTFVueTNyQUdOQTRpUE81OVVuVkxaa2p5QWNLTkJQS3hwVVRqcW9nUGxPWEE3OUI2dzBpN1pTTnFkcEp2anB5VXN5eXY1ZThacWR5UkpReVpEWmdtbVdGenJ2bGZMTDlzVHIvWWs1NnhiZ1lscUlIQ21PUlBJN0hyT1FwbnB1bE94RktEWmZWR3VSd09OYzFlYVNQU01wTVNCd0hnU2k5b2dMTG0xQkMxb0NXQVRyVmM5WStCM3pKdGN4cncvQkVNM1dXcU5jWUlySXFOSnEzbktwYS9lL2JidXFPWU5CMG9YRUNqK1loQ09XcjNFRlJFUndBbm9qZXh6K3JhcjlQZXVDYWw5eUF6dUt2akZteEEwQWZnRlF6QUNHZktHNktzelVDUE41SWEvZTdvcCtVVFF0UFZWVkJBSDBOdnpyYTBKR04rUzROcHpnY2tHMWlCcXc0TXdTbllId2ljSm5ZTkxmcVZzRjI5czMycStXZmx3MFp1c3RtNTdOTXFBV0Foa0hXS2lwZzdWdzlZRTlQUnAzcVk2MlNNSkRaWFlWeVFPS0FSV3ZpNDB5M0h1UWVlRmVDUlpQbFpOSW96TjA2M1N0K1VGdEpwWDhNbWZ1c2pQeFA2MW1BaXQvWlpCVFIrRjBNWXVtSnBHZTRFQ1lxZDFPYVh1RjlTR0Z2MVQ4M24ydEdGVE93MHBxM0xQbFNHQ1V1WHRCMTFnWG41WFdFOUdiQWRVT3NRMFhPR1NhUVgwaVZjRmRmR3VsQmFlRVIzUS9oMDNGVHZudENjWmNoVXNNd0dkenFjTXJGRWUzQk9wVm9jS24yM3FsQjFKamdmUEQ4djRiMGZUS1NzTGIxaldnZ3oxWW9BeHpPVk5DWTNhWVhBWEdLbmJiVDhYZkZFWmNDSkVCblpmb0lOSVZ2SHdxdmV6eTBJdGJ5OURoSkErRHFzYTVDc0IvTnVZem9Yanl2WjR0Q0N2UERtYkxPNy9BdU9HRUpVUlBzenMrcWxzcFlBY29pejB5eVV0U0VrRkxOYmRyT3IxenhhRGMvWkcyMGlPU1hIWW5MT2RUUjBRQVFkaGY5RzBCN293ZHFtam1obmFmUGZJQ2Mxb2RHY3FPYlVaWEszUENqazFoa0hCT1V4WGRVMFBwWjJSTXkxUzhHWmlwLythUmxwRDVsQUxpb251SE85RUNuOVRNbkxVUnVpWGxOK1pJQ1dMMSs2RkthdVlBVlEwNnV3a0pMd1pzYVZKWEdvYUZ4cWhHWm16MjlFQnRaS2dBQURuODdUUkJFTVcwL1RNNStoUTdpbXRHMW1zemFYQ2plTElUQTdJNmZjczRYemVHYlRNd0U1TEVyZC9SUzU0OG9VTHpKZTMwbG4xSndzNitpc3JtdDVKTVpYQWY0QytDUVIxcS9veCtxZG5RcmZtWStBN0hUNjV1Uk5ZeG8zY2FjUFlhZHhuVW1SdWt0cm5pWVl1TFlrMEtoSlFZMDFRVE5LYUJseFRIMFc1NzEyUzJFdEsxc1BVWE5mcGdDcUEyYXIvdU5VMzRHTVVkbGVOZWJZc0QrZ08xbWt3QXpHR2M1RTMwNmlUWjR1elpJWUFEWjJlampnYVRjc00wNmV1K3ViYXZiM3dKME0xbnpKTHczOEMrMWlWQ3NEeXU1d1VaWjZzbzJORG8wVGNQcittbXhLcHVMQ0NvcWJ0d2VQazFQTHFzeHBmeUhCOUlJcGRoVDY2aGFSeC9Fa0NaNXhPWTRMTWdNYVgvWDlnbU9jbnRaY2VZc1REOENZLzBzajJiTnBZdGFYVjZmNzlmd0FKTjNEZ3ErNVUwWDJycW91ZGhneVBXQ0xHZkIwMWJXcDFsbEZLVjY3K2ZaT2p1ampQTXpGeWxjQkZqV21tN3h5WGVvM3U1Mm5ON1UveDcwL1lORTMxNTFOdHM5U1ZvMkgrQS9FTU95NUplcFV2MmhSQnY2TkdlU2ZjdnhtejROeEViU2Zha0xpQmd6Rm5MU0F5TlBkd1BHb0dkTlpyOVN2Z3RWQTY0Nzc1QzRTZW1jYU1aeWZoL0JKbERic29WUnVVUTJyc05JTS9qMWZqQXl4eGZHKzNzbytIL0x3WUNoNDFaV0U3YjM3OExQQlZWV1dMTjVRMzhpeEllL2NZZmxFRjZpM0hRZDUwMVJiVU41S25aVWNTNU5IKytwakxsZkZTMjB6R0R1OG4vOGtsYmQrY2d1UjE5YitjR3ZreWZFRWxEV0c4OWNDRTRDQWdJQ0FnSUNBOEJ1ZEcvQm90dWtmUGY0TkUvQmJhQTFzZlZ6clUrcUFJT0ZNZzB1WGs2Nzc5YUdMS2FTa29DSklsOThjODFJa0tKTWtaZXhUT05KMmJ1REp0d2FjL3ROcmkzd01JUktYdWZ1ZWlVTXIyYXdqbTlIT1VqQmJSaEl4QUtPNnd1K1dWWjZkYWpMNEdIbjNtakFHeTVyZmtienJxeTIvZEx2NTNFYXI5OUpSR2ZYY052YlRyWG1jTDJHZG9WUVZrVnRTTi85UUgwd0ZuWHhOWFBiOXZsc0Q3NXh4UEZxS0xOVi84dHlCWXE2ZzE0R2U5N01XMmZwUmIva2ZRVVpYVStEcmRtS3A0dTZlcENGMUh4UU8ybDVhM3M0N1pnTTV6VkpsckozSWdZY1BBbjZBVkVmOG1zejY1RC9rb1BlQktkbkdZUzBQTkNVcVlJLzhMczNjeGx6cHV4Z1ZPTWh3QnI1cGdId1RqM0JONEIxN0o1NVVXSmdrS0hvK2VsajljZ25DK3lMME9PelYyU0VRSXRPNzF3QklvUWNKVnpmek5JQk5NM2ZLTWdKVUVFWWh0ZHgwWS84dWJpUkJ0OTlWd1A3Mkk1aENSeHZsdjdXOGFwdWJlWnovZXNhV1hTU1VuYXFlK3RTOU5BNnp6YUg3em85YnV2YU4xNDV2c2RoODNPZ0gxNEpkeDNTZjRHRnE0bDMzQUxRS0ZFVmJ0SUdLWVoxVzBLTjN5SFlNNUhIeWp5S2J0RlZLbFNIOVpVQ21QY0hsSmUvVHR6NFF5NmpLaWVEVEFaZXFuSE1HaERSRzV3c0tnWUI3Nmo3K0hhZ1FNZXhPdXB1WFluS0N1OHppd1E4bkd4eFlWWUZUM0N3K0lSdklTMk9SNVNieHNJU1oybHR5NEpuZ1hZQ2hKSXVEKzlIQVNJQ0FnSUNBZ05nZmFMMnRBTC9UR0dOT1IwTkxCU1VUaW14WG41RVRmY1hxc1FnS3BLVHU0OFRRTm12OUx3dUtYTE5XY1RkWnAySmtmRzM3RFRhZE9qa3pUcm9XaU56UFh6Z0VJMXRRbGFkMDFZc1l3b2JRTHVocitTbkg1dFZ3OW9OY2tTRFkzZjZIYzZsZ0VHWTdkeTBxUi9ERVB6V1czQ1RUc2UrdXNqWkdhQnlWMXNtSytwRWlJbWtZeDB1UmtCL2RzcjJtU3Y1MERyN2xmc0QrR211MllNMUlIR20zUDcrTHR0bGRUTDJJNFJ0eG8wcWc3OFdtY2h1NUlBMHpCMFZDWUJucTJ4RDJsOVI2czZOdTZDT2p0YkZDeHVpYXpwWjE3cnpVQjN1TXo3akZRNU1qMzgxRGNaOUtuOHFwRmhIYVdCOXN3ajBHVnA5TDhjN3dJSkZCdDM5bVRET3FoY1luRjZ0Ynd3dEpQMkg0NzV6TllpVCszdUZONncxS2Q1VkhTWHRpc1hFUWdteXN6RkY4K2FuQzF4YzhrNlh2Y0MwV3p1eFVtaTBwS0FaQW1WLzNPcDVpN1JqZFNzZXk5WEZ3M0RrT2pVT2VWMVhoZ2kyYWQzMGtwZTYyZm84ZjFzYWFxRkJZanZLZFM2TDVmUlpFZ2VmdGVvdWJjNXpGOHF2SWFNMExQMS8wSnNoRVdnZzRUQ3RZUW4yZTBGWXFYdDRnSUJvaWtibGQ5anB0VVd4WUxtRXdWMkUrcllmR1FtQ29xNXRVT1lyZjQyM1dac25DTlA5dittcGl6em9kNEdxWEhGMWhoekdGTmg3V2Qyd3lTT0hPYVo0d1VqVjZSNFVGS2wxb3h6Q090ZnVncS9pSzNVNlhiTE9SWnUxL1huVWVHenljdkpheC8yU3plelZiSEtZblpRWVE4QjNCNXF2WmdmOC9rNUNxTTVaUVY4cWRtcENRcWhmUXhhUENKSkJ2Z0Y0OWM1YzEvelBPWHlzaXdhUHBOWXFXSWFiaTFKM3U5ekxHaHhtY29iUnJSOUxTMXNEZnllc2pockVYRmNLUFZmR0RacExhMlpDcmNCTC8yUT09PC9CREI-CiAgICAgICAgPFNCPlpYbEthR0pIWTJsUGFVcFRWWHBKTVU1cFNYTkpibEkxWTBOSk5rbHRjRE5rUTBselNXNW5NVmw1U1RaWGVVcE9VMVZzUmxNemNFUlJNRVkwVkRKa1FtUXdiRU5SVjJSS1VqQkdXVTlGTVcxamFrRXlWRlZGZDFJd1RsUmpWV1JVVTFkSmVsSkdSa1pSYTA0elZsVkdUbE5WWkRCVVZrWjZaREJPVWxkVlVsZFZWa1pJVWxoa1MxTnNVbkZTVms1T1VXdEdTRkZVUmxaU1ZVNUNaREJ3VkUxRldsUldSM1JIVmxaR1ZtUkZTazVWYTJ3elVsVkdXbEpHV2xKVlZXaEZVVmQ0UkZWV1ZURlRSa1pXWlVaQ1ZtRXhWalJVUmxKQ1kydEtibFJzV2tOUlZ6bE9VMnRhVDA1WFNuUlViV3hzVjBaS2MxTlZWbk5rVjBwMFQxUktXbGRHU25kWmFra3haV3RzUjFGdWJHaFhSbkJ2V2tWa1Zsb3hVa2hpU0ZKb1YwWktjMWRyVWtaWmF6RkRZVEJrUWsxV1ZrWlJNMlF6VlRGVmVVOVhNV3RUUjFKdldUSXhWbG94VlhsUFdFNXJWMFpLZDFscVNURmxhekZVWWpOa1RGRldiRVZXYkVaU1VrVlNSRkpzVW14V2VsWnhWMWMxYzAxR2NGUlJhelZwVFRBMWQxa3dUa05TVm5CWlYyNUNXazFzVm01VlZFcFhaVmRTU0dKSE1XaFdNRFZ2V2tWa1ZtUXdhRzlaTURWT1lXdHNNMVJYY0VaT1JURlZVbGhrVGxaR1JYbFdNbWhxVkdzeGNWTllaRTVsYTJ3elZGWlNSbVF3TVZWVlZFcFlZV3RPUTA1RlVrWk5NREZGVmxWa1FrMVdWa1pSV0dRelpGZE9kRlZ0V21GU01WbDVXVlprVDJKR2FEWlRXSEJoWWxack1WUXhVa3RpUlhoWVUxUldUMkpWVmpCVWExSnVaREZzTlUxWGJFNVdNR3cyVkVaU1NtVkZNWEZVV0doT1VrVlZlVmRzVW01T1JURlZVbFY0VGxGWGRFaFJWRVpXVWxWS2IxUlZUbFJXVkZJMFVsZHdRbFZWU201VWJGcERVVmRrVlZFeFZqQlJiRlp5VGxWS1YxSlZXazFWVmxKR1ZUQXhRMUZWWkVKTlZsWkdVVzVvVGxOc1JuUlNibFpoVFd0YWVsbHFUa3RpUlRGVVZWaGtTbG94YkV0VE1qbGhVMWRvTWxrd05VSlZWM1JEVW0xb1YyTldiRmhPVjJocVlsWktkbGRXWXpGUlYwMTZZa2hXV2sxcmJ6RmFSV1JXWkZkR1dFNUlhRWhsYTBaaFVXMWtUMVpyU2tKak1WSkdZa1UxTWxkdE5WTk5NV3haVTIxNFNsSnJOVEpaYTJoWFRVZEdXRTlZVm1wbGExWXdWRlZPZWxJd1JYaFdWVlpFWVVVeGNsWlVUbk5rVm10NVUycFdhMUl4Vm01Vk1XTXhaRmRKZWxkdGFHdFNNbmd5V1cwMVRsb3hWa2xUYmtKcllsVlpkMWRzVGtOVVYwWllUVmhDYTFJeFduSlVWV3hLVVd0c1ZWRlZOVU5hTW5SNFlVZDBjRko2YkROTlJVcENWVlZXUjFGVlJsQlJNRVpTVGtWR1RsTlZiRU5STVVaTVVUQkdVbEY2V21oU2EzUmFaRWRHY0ZGVVNtOU5WWE16V25wS05XVkhiRzlaVm1oR1kwZEtVMUZWTldsVU1VRjRaVWhzVGs1V1JtNWlhM1I1Vm01T2MyRnViR2hTUmtJd1dsWldTazR4VGxsVFEzUnZZak5zYVdORVpGRk5WMk41Vm01bk1GTkdSWHBUUjFseVpHeHdTMVpyTVZoaGVrWk9UbFZHTVdSVmRHeFJWRUpTVFZWa1VVMVZVa3hhYW1zMFVUQndWVTVxYUUxVmJrbHlUa1ZrZEZkVVVYcFdNMEoyV21wc2FsSnJPVXBWVldodVQxZEdjVmRFU21wbGJtdDVZbFpWY2xWdVNuUmtSazV0WXpCS1UxUXdVVEZTUkU0elZVaGtSMVZyY0hOU1YzTTBaRmRTUjJWc1pFMVNSVTUyV2tSV1RGZHFSbGhoZWtZMVZrUmtWVkpWTVROVWJHOHhXbGhLZWs5WGVGbE1NRXBRVDBVMWVXSnFVbTFVYmxJd1ltMTRURmRJVW5SUFdIQkdaRWhDZGxGWVJrbGhhMGt4VFRKR05tSnJjelJPYlRGQ1RqQm5lR1F5T0hoV1Ywa3hVVEE1Y21SdVVrNVpWVWw2VkdwYVZtSnNaR3BOYlU1NFdtMHdjbEp0VlRGTE1VWnhVbGRLVDJGcGRFWlpWa3B3WTFaR1JWbFdiRzFsUm1jd1kyeHNTbHBWTkRWalZteFhWVWMxUzFwcmNGcFJNblJ0VFROV2IxZHVjSFJTUlVweFVXMVpNMU5UT1RGT1NGcEdURE5yZDFKR1RUUlhXRXBRWTBWYWMxRlhaRTVSYTBaQ1VqSndTVlpGUm1sVVZVWXpVakJGZUZaWFVrWmtNVVpIVkZWR1RsRnJSbTFQU0dSRVpERnNSVlpzU1hkVlJVcENWVlZTUWxvd1pFaFVWVVYzVWpCT1ZHTlZaRlJUVjBsNlVrWkdSbEZyVGpOV1ZVWkNUa1ZzUTFGV1JrTlRSa1l3VDBac1YyVnJNVEZVYlRWNFVURkNNR05ZVGpSVFYyY3lWbGhPYUZGNlFuZFVNV1I0VDBkT05rdDZhR3BVYXpGS1ducEtiVlZXUmtaaFYwcFhWVmhLYTFZd2NEWlRTRVpYVVRBeGQxUXdXVFJTUmxaMFRrVk9iVTFZVWxoaVJ6RlBVMnBXY0U5Vk9VZGlSMXAyVERKU2RrMXJhSEppVjBaTVRraGtNbVZ0U2toUFEzUnlZekI0ZVVzeVdUVlZNazV5WkRGR2IxWlZUVEZhYkVKeFpWZHdRbFl6WkZwbFdGWmFUVmhXU21OdFpHMWthekF5WW01Q1JXSkZlSFZWZWxKclpFZE5NMUp1Umt4bFZURjBVMFU0TUUweVJqSlZNMWw0WTJ4b05tTlhlRUpQUkdoU1dWVldhMXBZVlhaV00xWnVWMFZrVFUweWNGWlVibFp6VFcxNFJsVnVaRmROYXpWVFdsVldNVlJyV21sYVJrSkZZa1JXVmxReU5YbFRTR3QzVXpGck5WcFlaSGxrYlVwYVZHMDFSRm93WkRSVVZVWllZMjFhVGxwV1FrOWFXSEJ3VW1zNGRsRnFRbFJpU0VKTlZGWmtSMUpVYkZGWmEwWnJXbFZTY2t3d1VsQmhibWhoVm5wS1RreDZZekZrTTFsMldrZG5lazV0ZEVwaFJrWnJVbXR3TUdOcmNIcGhhM0JFWTFkRk5WUnJNV3RaYm1ob1pXeFdORlF3ZEVsa1IxcDVZVEJ3U0dFeFZUVmxWVXAyVWtac1UySnRSa2RsV0d4NVZtNUdSV05XU1dsWVdEQXVMa05wWDA5MlZWRlFTbUpaVWxWdmNEazJRMUZDYW0xclIwNUtOVTFJTm1zMGFHSlRSV0ZyWVdGVWRGUlFlRFJVVmxjME1qQktXVk5UVEhOU1pUTmlVak5EZW1zeFoyNWlTbXByWTJGRmQyTmlZV3QwVTBSSE5ERlBiemRPTWw5V2VtcFdYMnRYWHpaZlZIcEdNV2g1WkhVMWFESXdlVXBUT0dGVFVtMXpRM2MxTFU0NFEweHhkVVZRUlVsaGNVbHJOMlIyYldKakxYRXpaR3RHTUc4NVRFTmpURlpxT0U5Uk0wbEVVRkUzUkY5Vk9UZEdZVzFvY1ZBdFYyMWhibWhoVVRsMmQzcFhXazFrYUc1Q1RXbFRVRFV4YzNwSGNHOXhlV1JMV0VORVNscHNSMk5LTFdKNWRuQXdNRFZvV0ZKcVdFNDNZMFJRVm5GdmFtcHFaalpmVGpodE5ESjZaRXhrTWtGNlVWaGxTVFJ5ZUhGcFpFNUNSR3BrYjJKaU1tRkZaelJaYVVaUGFuWjZUWFIzY2toSmJsUm5SQzF6VTIxVVNtMVdXazlXYTI5eGNtMTFObUZMUVZkbVZFWjBUMlpXU0hZMlEyRXpkdz09PC9TQj4KICAgICAgICA8b3RoZXJzPgogICAgICAgICAgICA8ZW50cnkga2V5PSJTUEVDX1ZFUlNJT04iPjAuOS41PC9lbnRyeT4KICAgICAgICAgICAgPGVudHJ5IGtleT0iUkVUUklFUyI-MTwvZW50cnk-CiAgICAgICAgICAgIDxlbnRyeSBrZXk9IkZPUkNFX0NBUFRVUkVEIj5mYWxzZTwvZW50cnk-CiAgICAgICAgICAgIDxlbnRyeSBrZXk9IkVYQ0VQVElPTiI-ZmFsc2U8L2VudHJ5PgogICAgICAgICAgICA8ZW50cnkga2V5PSJQQVlMT0FEIj57ImRpZ2l0YWxJZCI6ImV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSTZJbXAzZENJc0luZzFZeUk2V3lKTlNVbEZTM3BEUTBGNFQyZEJkMGxDUVdkSlIwRllPRTFtY2pBMlRVRXdSME5UY1VkVFNXSXpSRkZGUWtOM1ZVRk5TVWQwVFZGemQwTlJXVVJXVVZGSFJYZEtTbFJxUlZOTlFrRkhRVEZWUlVOQmQwcFRNRVpUVkd0R1ZWRlZkRUpOVWtsM1JVRlpSRlpSVVVoRVFXeERVVlUxU0ZGVmVGQlZhMVY0VEZSQmNrSm5UbFpDUVc5TlNrWk9OV0p0VG1sbFdGSnNTVVZzZFdKdE9USlpXRkp3WWpJMWVrbEdRbmxoV0Zwb1pFZFZaMVJIYkhSaFdGSnNXa1JGWWsxQ2EwZEJNVlZGUTNkM1UxVXlPVzFrU0dSb1kyMVZaMVV5T1hOa1dGSndZakkxZWsxVGIzZExRVmxFVmxGUlJFUkRSbFJsVnpWcVdXNXNNRnBUUWs1aU0wNXdZME5DUlZwWVduQlpNbFZuVVRKV2VXUkhiRzFoVjA1b1pFZFZkMGhvWTA1TmFrbDNUV3BGTkUxVVJYZE5WRkV5VjJoalRrMXFTWGROZWtsM1RWUkZkMDFVVVRKWGFrTkNORVJGTTAxRVZVZEJNVlZGUVhkM2RXTnRVbVphUjFZeVlWZE9iRmg2U1hwYWJWazFUMVJLYkV4WFNUVk9iVVYwVGtSbmQxbDVNV2xOVjBsNlRGUkplRTFxVFhoTlJFVXlXbFJuTkUxVVJVeE5RV3RIUVRGVlJVSm9UVU5UVlRSNFJXcEJVVUpuVGxaQ1FXZFVRMVYwUWxWck5VSldSVVpNVVZSRlUwMUNRVWRCTVZWRlFuaE5TbEZ0Um5WYU1rWnpZak5LYkUxVFVYZEpaMWxLUzI5YVNXaDJZMDVCVVd0Q1JtaFdjVmxYTldoamJWSnZXVmMxUVdNemJIVlpNa28xWkVkVmRXRlhOSGhIZWtGYVFtZE9Wa0pCYzFSRmJFNTJXbTVTTTFsWVNteEpSazUyWWtoV01HRlhPWFZqZWtWMFRVTnpSMEV4VlVWRGFFMXJWVE5zZFZreVNqVmtSMVZuVTFjMWRXSXpXbWhrUjJ4MlltNU5aMVZJU25Ca2JVWXdXbE5DVFdGWE1YQmtSMVpyVFVsSlFrbFVRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk5FRk5TVWxDUTFGTFEwRlJRelpoUmt0WmRHRnBRVEpvTVVzM1p6SjVlR2xvWVZoRmNHSlNRVTVpVDFBeGVIbE5OVkZuYmt0eVZuTnNhbmxoUkZCMFpWVkpOMU5ZU0N0b2IzbGljRGRRTVdjeVZuZzBTRkV6U0dZcmRscEtWazFYYXpGTk5VRjFkVXRsUVRCUk1VZFFNVVJMWmprNFEwcFVOamhNVW5Jck5FZHRXVFF6VjNCdlpqbGpSazlKVVVobk9XRnFXREpqZW5reWJWVXJVbkp0ZEZObWMwSlNUMFExUkROM1VIZEdVa3BzUldzNGRXUkdlbGRNUkVOdlpEVkxXakZYYXpGNVZEZFVSVTEzVGxvMVpYSnpPV3hZTDBKUE9FNXlialJtVG5SMGJteExXSFJ0T1hwRmRIQnZRWEZJYWtJMU0yRjZia3M0Tm0xQk4wZ3hkMjh4VldJMVEwOXJkblJOWVVJelRqWlZibGRqTW1OeFptMHJSbVUxSzFGcVJXSk9haXRGWVZKcGNWRkVZVmxtZUZnMGNsbEpaVTQ1Y1ZsV1VHNUtaa3BaUTJ0bU0zVm9XbnB0UkVKcVFtWTNTUzkxTkhaRkwza3dSRk00V1hKUGNFWnNRV2ROUWtGQlIycElWRUZpVFVGM1IwRXhWV1JGZDFGR1RVRk5Ra0ZtT0hkRGQxbEVWbEl3VUVKQlVVUkJaMGRIVFVFd1IwTlRjVWRUU1dJelJGRkZRa04zVlVGQk5FbENRVkZDU0ZGME9GbFdlazExVG01eFExQjBjWE40U1dnMlZYTmhRekJ3VDFkeE9HTjZLemhqVGsxSlp6Sm1VVkZGYVdKV1VYSmtWMHA2U0hGV1EwMXdUMFk0UkZWdE5FTm1NWFJYYkcxT1NqVnBPVTlHYkdadkwyUnZNa2hyYldGTE5IZDJlbUpIT0N0cmMweHlLMlk1VTJOcmQxRm9WVU0xWmxCcWVXcEJWM2RaZVhWWk1YVkpjbWRtZGswMmJuQkViRXh1VXpSa2RHTTNSbkZMZVUxdFNFODBNMkYyVTNZeGNsaDZjV3hCT0RoUllVVmtaWFV2VjNWbldFZE1NMnBWVG5Wc01teEZVbmRXTWs1U1pVVjFUa1ppWkZCRWJEVlZUMjV5U0hrd1MxazVaWGR5ZG1KWlRtNURaMGQ0VFVGWGNtWk5aVkJPWlhwcFJrOHZRakJUYkhCTVRWZEdSVGxRWWtGa1pVUnJMMFJQYW5oYVZ6Sk5MemMxZDNZdlpHZ3pObXRKYUZGa1JrcDBja3B6YWtwRGNXRTVUazFrWW5oaGVsVjRUMHRJZEdaeWEwcEhhMVU1ZVVKdlJGbFNibUZHZVhseVZuRkVjVklpWFgwLmV5SnpaWEpwWVd4T2J5STZJak14TVRneU9Ua3hPU0lzSW0xaGEyVWlPaUpNYjJkcGRHVmphQ0lzSW0xdlpHVnNJam9pVjJWaUlFTmhiV1Z5WVNJc0luUjVjR1VpT2lKR1lXTmxJaXdpWkdWMmFXTmxVM1ZpVkhsd1pTSTZJa1oxYkd3Z1ptRmpaU0lzSW1SbGRtbGpaVkJ5YjNacFpHVnlJam9pVTNsdVkySjVkR1VpTENKa1pYWnBZMlZRY205MmFXUmxja2xrSWpvaVUzbHVZMko1ZEdVaUxDSmtZWFJsVkdsdFpTSTZJakl3TWpJdE1ETXRNRE5VTVRNNk1UYzZNemhhSW4wLm9maTlWNVNhNUlyZGlGNVlhdVhPNFRuVm1YcGwwVXlaVTlucGhPQVRINnN5UWZNaTNTdzlKLW41TjViVVM4S3EzTGJodkplaWhFYVdPdm9BVlVaY3dEdldvclNpa195ZXpfQWNzMmdDai1OMnF2dmRPeEoyakFURVFOTU5JOGJ1TTR4b0U5bUE1T08wZEsxdnhKYXRPWC1SSUVuZGhDWnBiU3RLMWJ5VHp6QUJUaDB4dkc1eVRWLWZTMjQ4bDcyR2tOUHJBaV9rdE9PTWs0UF9PRDhzMXZpNTk4eUlWcnZaSV94a3ZwSW0xXzFYaUZvcVNhOXFQR1k0SnVRZkNzYkhRdV9CNWVLRG44TzcxLVFJdkFGMWljRnpuR3YyaVpLaEtLeHZZUDVUYXRwN0RraFlKbjAyMm0yc2l5NlFwTEVoZGZDOFM5TzNwbWpCNnVHdUtpYTA3QSIsImRldmljZUNvZGUiOiIyM2ZmOTkyZS1iOTZhLTQ4MGMtYjFiMy0yMTIzMTAxNmU4ODEiLCJkZXZpY2VTZXJ2aWNlVmVyc2lvbiI6IjEuMC4xIiwiYmlvVHlwZSI6IkZhY2UiLCJwdXJwb3NlIjoiUmVnaXN0cmF0aW9uIiwiZW52IjoiU3RhZ2luZyIsImJpb1ZhbHVlIjoiJmx0O2Jpb1ZhbHVlJmd0OyIsInRyYW5zYWN0aW9uSWQiOiIzM2Y3ZjcwYi1kYzUwLTQ2YmItOGNlNC1jMzMyYmNjMGQ5NDciLCJ0aW1lc3RhbXAiOiIyMDIyLTAzLTAzVDEzOjE3OjQ0WiIsInJlcXVlc3RlZFNjb3JlIjozMCwicXVhbGl0eVNjb3JlIjozMH08L2VudHJ5PgogICAgICAgICAgICA8ZW50cnkga2V5PSJTREtfU0NPUkUiPjAuMDwvZW50cnk-CiAgICAgICAgPC9vdGhlcnM-CiAgICA8L0JJUj4KPC9CSVI-Cg", + "province": "[{\"language\":\"eng\",\"value\":\"Kenitra\"}]", + "phone": "9000000000", + "addressLine1": "[{\"language\":\"eng\",\"value\":\"Add\"}]", + "addressLine2": "[{\"language\":\"eng\",\"value\":\"add\"}]", + "id": "https://qa-triple-rc2.mosip.net/credentials/9538159029", + "vcVer": "VC-V1", + "addressLine3": "[{\"language\":\"eng\",\"value\":\"add\"}]", + "UIN": "9538159029", + "region": "[{\"language\":\"eng\",\"value\":\"Rabat Sale Kenitra\"}]", + "email": "chaitu6636@gmail.com" + }, + "id": "https://qa-triple-rc2.mosip.net/credentials/958e3ffd-ceec-40b4-8a9b-3577907c0406", + "issuanceDate": "2022-03-21T11:41:35.418Z", + "issuer": "https://qa-triple-rc2.mosip.net/mosipvc/controller.json", + "proof": { + "type": "RsaSignature2018", + "created": "2022-03-21T11:41:35Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "https://qa-triple-rc2.mosip.net/mosipvc/public-key.json", + "jws": "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJQUzI1NiJ9..HW7SGwm6yZdoojA91RJuOcSKuQ6zRNJyLWkpKdEZNbFacm42LYkWROYOUtndgtscn1w3Krv30MjA6Gq69DYYqrCIXcgJVj5NCWEm4yNETdm_4YrxelEVMN8XAa0WTN6Tc3uaE94qWzrDy3dHuz9fqnNQKYxWWyE8pQvCQ6VHVbpM5_u5Kavd-6LkbvLOXzA67833cJ1VN4fdL22_zx2E9INZuLxQBXVQAEmS1646JHWsow3hOA45sGYDm02cklfNrO5hc1MHXBGWiiWA_vfx1M8IPAF5_0qbJOwqDDcZITTSKMgcUQb2r6EcaHVGOlhbvdM67LLDmlXeSQMVS8ENSg" + }, + "type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ] +} \ No newline at end of file diff --git a/shared/verifyCredential.ts b/shared/verifyCredential.ts new file mode 100644 index 00000000..261c2312 --- /dev/null +++ b/shared/verifyCredential.ts @@ -0,0 +1,59 @@ +import vcjs from '@digitalcredentials/vc'; +import jsonld from '@digitalcredentials/jsonld'; +import { RsaSignature2018 } from '../lib/jsonld-signatures/suites/rsa2018/RsaSignature2018'; +import { Ed25519Signature2018 } from '../lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018'; +import { AssertionProofPurpose } from '../lib/jsonld-signatures/purposes/AssertionProofPurpose'; +import { PublicKeyProofPurpose } from '../lib/jsonld-signatures/purposes/PublicKeyProofPurpose'; +import { VerifiableCredential } from '../types/vc'; + +// FIXME: Ed25519Signature2018 not fully supported yet. +const ProofType = { + ED25519: 'Ed25519Signature2018', + RSA: 'RsaSignature2018', +}; + +const ProofPurpose = { + Assertion: 'assertionMethod', + PublicKey: 'publicKey', +}; + +export async function verifyCredential( + verifiableCredential: VerifiableCredential +): Promise { + let purpose: PublicKeyProofPurpose | AssertionProofPurpose; + switch (verifiableCredential.proof.proofPurpose) { + case ProofPurpose.PublicKey: + purpose = new PublicKeyProofPurpose(); + break; + case ProofPurpose.Assertion: + purpose = new AssertionProofPurpose(); + break; + } + + let suite: Ed25519Signature2018 | RsaSignature2018; + const suiteOptions = { + verificationMethod: verifiableCredential.proof.verificationMethod, + date: verifiableCredential.proof.created, + }; + switch (verifiableCredential.proof.type) { + case ProofType.ED25519: { + suite = new Ed25519Signature2018(suiteOptions); + break; + } + case ProofType.RSA: { + suite = new RsaSignature2018(suiteOptions); + break; + } + } + + const vcjsOptions = { + purpose, + suite, + credential: verifiableCredential, + documentLoader: jsonld.documentLoaders.xhr(), + }; + + const result = await vcjs.verifyCredential(vcjsOptions); + + return result.verified; +} diff --git a/types/vc.ts b/types/vc.ts index 938f2393..1cdcda26 100644 --- a/types/vc.ts +++ b/types/vc.ts @@ -6,6 +6,8 @@ export interface VC { verifiableCredential: VerifiableCredential; generatedOn: Date; requestId: string; + isVerified: boolean; + lastVerifiedOn: number; reason?: string; }