From 165c13a39e76bdd35b8f73a5ccb049a7113bcf4c Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 15:43:28 -0800 Subject: [PATCH 1/8] Initial session key implementation --- .eslintrc | 2 +- .prettierignore | 4 + package.json | 4 +- src/index-module.ts | 1 + src/kit.ts | 110 +- src/login.ts | 9 + src/session.ts | 284 +++- src/sessionkey/index.ts | 5 + src/sessionkey/login.ts | 96 ++ src/sessionkey/manager.ts | 725 ++++++++++ src/sessionkey/systemcontract.ts | 2110 ++++++++++++++++++++++++++++++ src/sessionkey/types.ts | 110 ++ src/sessionkey/wallet.ts | 363 +++++ src/ui.ts | 70 + src/utils.ts | 108 +- yarn.lock | 1046 +++++++-------- 16 files changed, 4464 insertions(+), 583 deletions(-) create mode 100644 .prettierignore create mode 100644 src/sessionkey/index.ts create mode 100644 src/sessionkey/login.ts create mode 100644 src/sessionkey/manager.ts create mode 100644 src/sessionkey/systemcontract.ts create mode 100644 src/sessionkey/types.ts create mode 100644 src/sessionkey/wallet.ts diff --git a/.eslintrc b/.eslintrc index e8305310..dc58b2f9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,6 @@ { "root": true, - "ignorePatterns": ["lib/*", "tests/*", "node_modules/**"], + "ignorePatterns": ["lib/*", "tests/*", "node_modules/**", "src/sessionkey/systemcontract.ts"], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..f83d8674 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +lib/* +tests/* +node_modules/** +src/sessionkey/systemcontract.ts diff --git a/package.json b/package.json index c558b76a..7239b04c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/session", "description": "Create account-based sessions, perform transactions, and allow users to login using Antelope-based blockchains.", - "version": "1.6.1", + "version": "2.0.0-rc1", "homepage": "https://github.com/wharfkit/session", "license": "BSD-3-Clause", "main": "lib/session.js", @@ -20,6 +20,7 @@ "@wharfkit/abicache": "^1.2.1", "@wharfkit/antelope": "^1.0.11", "@wharfkit/common": "^1.2.0", + "@wharfkit/contract": "^1.2.1", "@wharfkit/signing-request": "^3.1.0", "pako": "^2.0.4", "tslib": "^2.1.0" @@ -39,7 +40,6 @@ "@types/node": "^18.7.18", "@typescript-eslint/eslint-plugin": "^5.20.0", "@typescript-eslint/parser": "^5.20.0", - "@wharfkit/contract": "^1.0.0", "@wharfkit/mock-data": "^1.2.1", "@wharfkit/transact-plugin-resource-provider": "^1.1.0", "@wharfkit/wallet-plugin-privatekey": "^1.1.0", diff --git a/src/index-module.ts b/src/index-module.ts index aeadb8f4..e256cfb0 100644 --- a/src/index-module.ts +++ b/src/index-module.ts @@ -1,6 +1,7 @@ export * from './kit' export * from './login' export * from './session' +export * from './sessionkey' export * from './storage' export * from './transact' export * from './ui' diff --git a/src/kit.ts b/src/kit.ts index 1ae8b978..5ad97096 100644 --- a/src/kit.ts +++ b/src/kit.ts @@ -3,7 +3,6 @@ import type {Contract} from '@wharfkit/contract' import { Checksum256, Checksum256Type, - Name, NameType, PermissionLevel, PermissionLevelType, @@ -34,6 +33,9 @@ import { CreateAccountOptions, CreateAccountResponse, } from './account-creation' +import {SessionKeyManager} from './sessionkey/manager' +import {SessionKeyWalletPlugin} from './sessionkey/wallet' +import {SessionKeyConfig} from './sessionkey/types' export interface LoginOptions { arbitrary?: Record // Arbitrary data that will be passed via context to wallet plugin @@ -56,6 +58,7 @@ export interface LoginResult { export interface LogoutContext { session: Session appName: string + ui?: UserInterface } export interface RestoreArgs { @@ -84,6 +87,7 @@ export interface SessionKitOptions { transactPlugins?: TransactPlugin[] transactPluginsOptions?: TransactPluginsOptions accountCreationPlugins?: AccountCreationPlugin[] + sessionKey?: SessionKeyConfig } /** @@ -102,6 +106,7 @@ export class SessionKit { readonly ui: UserInterface readonly walletPlugins: WalletPlugin[] readonly accountCreationPlugins: AccountCreationPlugin[] = [] + readonly sessionKeyManager?: SessionKeyManager public chains: ChainDefinition[] constructor(args: SessionKitArgs, options: SessionKitOptions = {}) { @@ -161,6 +166,17 @@ export class SessionKit { if (options.accountCreationPlugins) { this.accountCreationPlugins = options.accountCreationPlugins } + + // Initialize session key support if configured + if (options.sessionKey) { + this.sessionKeyManager = new SessionKeyManager(options.sessionKey, this.ui) + this.walletPlugins = [ + ...this.walletPlugins, + new SessionKeyWalletPlugin({ + walletPlugins: this.walletPlugins, + }), + ] + } } /** @@ -187,6 +203,16 @@ export class SessionKit { return chain } + /** + * Find a wallet plugin by its ID. + * + * @param id The wallet plugin ID to search for + * @returns The wallet plugin if found, undefined otherwise + */ + getWalletPlugin(id: string): WalletPlugin | undefined { + return this.walletPlugins.find((plugin) => plugin.id === id) + } + /** * Request account creation. */ @@ -350,6 +376,7 @@ export class SessionKit { retrievePublicKey: plugin.retrievePublicKey?.bind(plugin), } }), + sessionKeyManager: this.sessionKeyManager, }) // Tell the UI a login request is beginning. @@ -362,10 +389,9 @@ export class SessionKit { context.walletPluginIndex = 0 context.uiRequirements.requiresWalletSelect = false } else if (options?.walletPlugin) { - const index = this.walletPlugins.findIndex((p) => p.id === options.walletPlugin) - if (index >= 0) { - walletPlugin = this.walletPlugins[index] - context.walletPluginIndex = index + walletPlugin = this.getWalletPlugin(options.walletPlugin) + if (walletPlugin) { + context.walletPluginIndex = this.walletPlugins.indexOf(walletPlugin) context.uiRequirements.requiresWalletSelect = false } } @@ -470,6 +496,9 @@ export class SessionKit { this.getSessionOptions(options) ) + // Make session available to afterLogin hooks + context.session = session + // Call the `afterLogin` hooks that were registered by the LoginPlugins for (const hook of context.hooks.afterLogin) await hook(context) @@ -496,6 +525,7 @@ export class SessionKit { return { session, appName: this.appName, + ui: this.ui, } } else { return { @@ -508,6 +538,7 @@ export class SessionKit { walletPlugin, }), appName: this.appName, + ui: this.ui, } } } @@ -516,53 +547,40 @@ export class SessionKit { if (!this.storage) { throw new Error('An instance of Storage must be provided to utilize the logout method.') } - await this.storage.remove('session') if (session) { - const walletPlugin = this.walletPlugins.find( - (wPlugin) => session?.walletPlugin.id === wPlugin.id - ) + // Use the session's wallet plugin directly if it's a Session instance + // (it may be a wrapped SessionKeyWalletPlugin with data) + const walletPlugin = + session instanceof Session + ? session.walletPlugin + : this.getWalletPlugin(session.walletPlugin.id) if (walletPlugin?.logout) { await walletPlugin.logout(this.logoutParams(session, walletPlugin)) } + await this.storage.remove('session') + const sessions = await this.getSessions() if (sessions) { - let serialized = session - if (session instanceof Session) { - serialized = session.serialize() - } - const other = sessions.filter((s: Record) => { - return ( - !Checksum256.from(s.chain).equals( - Checksum256.from(String(serialized.chain)) - ) || - !Name.from(s.actor).equals(Name.from(serialized.actor)) || - !Name.from(s.permission).equals(Name.from(serialized.permission)) - ) - }) + const other = sessions.filter((s) => !Session.matches(s, session)) await this.storage.write('sessions', JSON.stringify(other)) } } else { const sessions = await this.getSessions() - await this.storage.remove('sessions') - if (sessions) { - Promise.all( - sessions.map((s) => { - const walletPlugin = this.walletPlugins.find( - (wPlugin) => s.walletPlugin.id === wPlugin.id - ) + for (const s of sessions) { + const walletPlugin = this.getWalletPlugin(s.walletPlugin.id) - if (walletPlugin?.logout) { - return walletPlugin.logout(this.logoutParams(s, walletPlugin)) - } else { - return Promise.resolve() - } - }) - ) + if (walletPlugin?.logout) { + await walletPlugin.logout(this.logoutParams(s, walletPlugin)) + } + } } + + await this.storage.remove('session') + await this.storage.remove('sessions') } } @@ -633,13 +651,7 @@ export class SessionKit { return } - // Ensure a WalletPlugin was found with the provided ID. - const walletPlugin = this.walletPlugins.find((p) => { - if (!args) { - return false - } - return p.id === serializedSession.walletPlugin.id - }) + const walletPlugin = this.getWalletPlugin(serializedSession.walletPlugin.id) if (!walletPlugin) { throw new Error( @@ -719,15 +731,7 @@ export class SessionKit { if (existing) { const stored = JSON.parse(existing) const sessions: SerializedSession[] = stored - // Filter out any matching session to ensure no duplicates - .filter((s: SerializedSession): boolean => { - return ( - !Checksum256.from(s.chain).equals(Checksum256.from(serialized.chain)) || - !Name.from(s.actor).equals(Name.from(serialized.actor)) || - !Name.from(s.permission).equals(Name.from(serialized.permission)) - ) - }) - // Remove the default status from all other sessions for this chain + .filter((s: SerializedSession) => !Session.matches(s, serialized)) .map((s: SerializedSession): SerializedSession => { if (session.chain.id.equals(s.chain)) { s.default = false @@ -783,6 +787,8 @@ export class SessionKit { transactPlugins: options?.transactPlugins || this.transactPlugins, transactPluginsOptions: options?.transactPluginsOptions || this.transactPluginsOptions, ui: this.ui, + sessionKeyManager: this.sessionKeyManager, + onPersist: (session: Session) => this.persistSession(session), } } } diff --git a/src/login.ts b/src/login.ts index 6bfde2c0..27bc65a4 100644 --- a/src/login.ts +++ b/src/login.ts @@ -10,6 +10,7 @@ import type {ChainDefinition, Fetch} from '@wharfkit/common' import {SigningRequestEncodingOptions} from '@wharfkit/signing-request' import zlib from 'pako' +import type {Session} from './session' import {UserInterface} from './ui' import {WalletPluginConfig, WalletPluginMetadata} from './wallet' @@ -39,6 +40,7 @@ export interface LoginContextOptions { permissionLevel?: PermissionLevel walletPlugins?: UserInterfaceWalletPlugin[] ui: UserInterface + sessionKeyManager?: any } export interface UserInterfaceRequirements { @@ -72,6 +74,11 @@ export class LoginContext { beforeLogin: [], } permissionLevel?: PermissionLevel + /** + * The session created during login. + * Only available in afterLogin hooks. + */ + session?: Session ui: UserInterface uiRequirements: UserInterfaceRequirements = { requiresChainSelect: true, @@ -81,6 +88,7 @@ export class LoginContext { } walletPluginIndex?: number walletPlugins: UserInterfaceWalletPlugin[] = [] + sessionKeyManager?: any constructor(options: LoginContextOptions) { this.appName = String(options.appName) if (options.arbitrary) { @@ -96,6 +104,7 @@ export class LoginContext { this.fetch = options.fetch this.permissionLevel = options.permissionLevel this.walletPlugins = options.walletPlugins || [] + this.sessionKeyManager = options.sessionKeyManager this.ui = options.ui options.loginPlugins?.forEach((plugin: AbstractLoginPlugin) => { plugin.register(this) diff --git a/src/session.ts b/src/session.ts index b51efa5d..d87b324a 100644 --- a/src/session.ts +++ b/src/session.ts @@ -4,6 +4,7 @@ import type {Contract} from '@wharfkit/contract' import zlib from 'pako' import { APIClient, + Checksum256, Checksum256Type, FetchProvider, Name, @@ -41,9 +42,23 @@ import { TransactRevisions, } from './transact' import {SessionStorage} from './storage' -import {getFetch, getPluginTranslations} from './utils' +import { + actionMatchesPermission, + extractActions, + getFetch, + getPluginTranslations, + rewriteAuthorizations, +} from './utils' import {SerializedWalletPlugin, WalletPlugin, WalletPluginSignResponse} from './wallet' import {UserInterface} from './ui' +import {SessionKeyManager} from './sessionkey/manager' +import { + isSessionKeyWallet, + SessionKeyMismatch, + SessionKeySetupResult, + SessionKeyStatus, + SessionKeyWalletInterface, +} from './sessionkey/types' /** * Arguments required to create a new [[Session]]. @@ -72,6 +87,8 @@ export interface SessionOptions { transactPlugins?: AbstractTransactPlugin[] transactPluginsOptions?: TransactPluginsOptions ui?: UserInterface + sessionKeyManager?: SessionKeyManager + onPersist?: (session: Session) => Promise } export interface SerializedSession { @@ -100,9 +117,36 @@ export class Session { readonly transactPlugins: TransactPlugin[] readonly transactPluginsOptions: TransactPluginsOptions = {} readonly ui?: UserInterface - readonly walletPlugin: WalletPlugin + readonly sessionKeyManager?: SessionKeyManager + readonly onPersist?: (session: Session) => Promise + private _walletPlugin: WalletPlugin private _data: Record = {} + /** + * Get the wallet plugin for this session. + */ + get walletPlugin(): WalletPlugin { + return this._walletPlugin + } + + /** + * Check if two sessions match by comparing chain, actor, and permission. + * + * @param s1 Session or SerializedSession + * @param s2 Session or SerializedSession + * @returns boolean indicating if the sessions match + */ + static matches(s1: SerializedSession | Session, s2: SerializedSession | Session): boolean { + const ser1 = s1 instanceof Session ? s1.serialize() : s1 + const ser2 = s2 instanceof Session ? s2.serialize() : s2 + + return ( + Checksum256.from(ser1.chain).equals(Checksum256.from(ser2.chain)) && + Name.from(ser1.actor).equals(Name.from(ser2.actor)) && + Name.from(ser1.permission).equals(Name.from(ser2.permission)) + ) + } + /** * Get the data stored in this session instance. */ @@ -138,7 +182,7 @@ export class Session { } // Set the WalletPlugin for this session - this.walletPlugin = args.walletPlugin + this._walletPlugin = args.walletPlugin // Handle all the optional values provided if (options.appName) { @@ -184,6 +228,12 @@ export class Session { if (options.ui) { this.ui = options.ui } + if (options.sessionKeyManager) { + this.sessionKeyManager = options.sessionKeyManager + } + if (options.onPersist) { + this.onPersist = options.onPersist + } } /** @@ -381,6 +431,12 @@ export class Session { * F --> G[TransactResult] */ async transact(args: TransactArgs, options?: TransactOptions): Promise { + // Check if this transaction will be signed by session key (declared outside try for finally block) + const willUseSessionKey = this.willUseSessionKey(args) + + // Save original minimal state to restore later + let originalMinimalState: boolean | undefined + try { // The number of seconds before this transaction expires const expireSeconds = @@ -406,6 +462,11 @@ export class Session { ? options.allowModify : this.allowModify + // Rewrite authorizations for session key if applicable + if (willUseSessionKey) { + args = this.rewriteAuthorizationsForSessionKey(args) + } + // The context object for this transaction const context = new TransactContext({ abiCache, @@ -422,6 +483,14 @@ export class Session { }) if (context.ui) { + // Enable minimal mode for session key transactions + if (willUseSessionKey && context.ui.setMinimal) { + // Save current minimal state to restore later + if (context.ui.getMinimal) { + originalMinimalState = context.ui.getMinimal() + } + context.ui.setMinimal(true) + } // Notify the UI that a transaction is about to begin await context.ui.onTransact() // Merge in any new localization strings from the plugins @@ -569,6 +638,10 @@ export class Session { } } throw new Error(error) + } finally { + if (willUseSessionKey && this.ui?.setMinimal) { + this.ui.setMinimal(originalMinimalState ?? false) + } } } @@ -617,6 +690,11 @@ export class Session { return walletResponse.signatures } + /** + * Serialize the session to a plain object for storage. + * + * @returns SerializedSession object containing chain, actor, permission, and wallet plugin data + */ serialize = (): SerializedSession => { const serializableData: Record = { chain: this.chain.id, @@ -636,6 +714,78 @@ export class Session { return Serializer.objectify(serializableData) } + /** + * Check if this session has a session key wallet. + * Type guard that narrows walletPlugin to SessionKeyWalletInterface. + * + * @returns True if the wallet plugin is a session key wallet + */ + hasSessionKey(): this is Session & {walletPlugin: SessionKeyWalletInterface} { + return isSessionKeyWallet(this.walletPlugin) + } + + /** + * Determine if the given transaction will be signed using the session key. + * Checks if session has a session key and all relevant actions are whitelisted. + * + * @param args The transaction arguments to check + * @returns True if the session key will be used for signing + */ + willUseSessionKey(args: TransactArgs): boolean { + if (!this.hasSessionKey()) { + return false + } + + const actions = extractActions(args) + if (actions.length === 0) { + return false + } + + const actionsMatchingSession = actions.filter((action) => + actionMatchesPermission(action, this.permissionLevel) + ) + + if (actionsMatchingSession.length === 0) { + return false + } + + return this.walletPlugin.allActionsWhitelisted(actionsMatchingSession) + } + + /** + * Rewrite action authorizations to use the session key permission instead of the primary permission. + * Only rewrites actions that match the session permission and are whitelisted. + * + * @param args The transaction arguments to rewrite + * @returns Modified TransactArgs with session key permissions, or original args if not applicable + */ + rewriteAuthorizationsForSessionKey(args: TransactArgs): TransactArgs { + if (!isSessionKeyWallet(this.walletPlugin)) { + return args + } + + const sessionKeyPermission = this.walletPlugin.getPermission() + const actions = extractActions(args) + + if (actions.length === 0) { + return args + } + + const actionsMatchingSession = actions.filter((action) => + actionMatchesPermission(action, this.permissionLevel) + ) + + if (actionsMatchingSession.length === 0) { + return args + } + + if (!this.walletPlugin.allActionsWhitelisted(actionsMatchingSession)) { + return args + } + + return rewriteAuthorizations(args, this.permissionLevel, sessionKeyPermission) + } + getMergedAbiCache(args: TransactArgs, options?: TransactOptions): ABICacheInterface { const abiCache = options?.abiCache || this.abiCache @@ -682,6 +832,134 @@ export class Session { return abiCache } + + /** + * Get the current status of the session key for this session. + * + * @returns SessionKeyStatus indicating whether a session key is active, inactive, has a mismatch, or is not set up + */ + async getSessionKeyStatus(): Promise { + const status: SessionKeyStatus = {active: false, exists: false, state: 'not-setup'} + + if (!this.sessionKeyManager) { + return status + } + + if (this.sessionKeyManager.hasSessionKey(this)) { + status.active = true + status.exists = true + status.state = 'active' + if (isSessionKeyWallet(this.walletPlugin)) { + status.permission = this.walletPlugin.getPermission() + status.publicKey = this.walletPlugin.getPublicKey() + } + return status + } + + const result = await this.sessionKeyManager.checkExistingSessionKey(this) + + if (result.exists) { + status.exists = true + status.state = result.mismatch ? 'mismatch' : 'inactive' + status.permission = result.permission + status.mismatch = result.mismatch + } + + return status + } + + /** + * Set up a session key for this session, creating a new permission with a generated key. + * Shows consent UI if configured, handles conflicts with existing keys, and persists the session. + * + * @returns SessionKeySetupResult containing the public key and permission name + * @throws Error if session keys are not configured or if setup is cancelled by user + */ + async setupSessionKey(): Promise { + if (!this.sessionKeyManager) { + throw new Error('Session keys are not configured. Add sessionKey to SessionKitOptions.') + } + + if (!this.sessionKeyManager.config.skipConsent && this.ui?.onSessionKeyConsent) { + const consent = await this.ui.onSessionKeyConsent({ + appName: String(this.appName || 'this app'), + whitelist: this.sessionKeyManager.whitelist.map((e) => ({ + contract: String(e.contract), + actions: e.actions?.map((a) => String(a)), + })), + }) + + if (!consent) { + throw new Error('Session key setup cancelled by user') + } + } + + const result = await this.sessionKeyManager.setup(this, async (existingKeys) => { + if (!this.ui?.onSessionKeyConflict) { + return 'replace' + } + return this.ui.onSessionKeyConflict({ + appName: String(this.appName || 'this app'), + existingKeyCount: existingKeys.length, + }) + }) + + if (this.onPersist) { + await this.onPersist(this) + } + + return result + } + + /** + * Remove the session key from this session, reverting to the primary wallet. + * Removes the key from the blockchain permission and persists the session. + * + * @throws Error if session keys are not configured or if the session does not have a session key + */ + async removeSessionKey(): Promise { + if (!this.sessionKeyManager) { + throw new Error('Session keys are not configured. Add sessionKey to SessionKitOptions.') + } + + await this.sessionKeyManager.remove(this) + + if (this.onPersist) { + await this.onPersist(this) + } + } + + /** + * Validate the session key whitelist against the on-chain permission links. + * Returns any mismatches between configured whitelist and actual blockchain state. + * + * @returns SessionKeyMismatch if there are differences, undefined if in sync or no session key + */ + async validateSessionKeyWhitelist(): Promise { + if (!this.sessionKeyManager) { + return undefined + } + + return this.sessionKeyManager.validateWhitelist(this) + } + + /** + * Update the on-chain permission links to match the configured whitelist. + * Adds missing links and removes extra links, then persists the session. + * + * @throws Error if session keys are not configured or if the session does not have a session key + */ + async updateSessionKeyLinks(): Promise { + if (!this.sessionKeyManager) { + throw new Error('Session keys are not configured. Add sessionKey to SessionKitOptions.') + } + + await this.sessionKeyManager.updateLinks(this) + + if (this.onPersist) { + await this.onPersist(this) + } + } } async function processReturnValues( diff --git a/src/sessionkey/index.ts b/src/sessionkey/index.ts new file mode 100644 index 00000000..ae0a202f --- /dev/null +++ b/src/sessionkey/index.ts @@ -0,0 +1,5 @@ +export * from './types' +export * from './wallet' +export * from './manager' +export * from './login' +export {Types as SystemContractTypes} from './systemcontract' diff --git a/src/sessionkey/login.ts b/src/sessionkey/login.ts new file mode 100644 index 00000000..aa40404d --- /dev/null +++ b/src/sessionkey/login.ts @@ -0,0 +1,96 @@ +import {AbstractLoginPlugin, LoginContext, LoginHookTypes} from '../login' +import {SessionKeyConfig} from './types' +import {SessionKeyManager} from './manager' + +/** + * Configuration options for the [[SessionKeyLoginPlugin]]. + */ +export interface SessionKeyLoginPluginOptions extends SessionKeyConfig {} + +/** + * Login plugin that automatically handles session key setup and validation during login flow. + * Prompts for consent, handles conflicts, and validates whitelist mismatches. + */ +export class SessionKeyLoginPlugin extends AbstractLoginPlugin { + private config?: SessionKeyLoginPluginOptions + private manager?: SessionKeyManager + + constructor(options?: SessionKeyLoginPluginOptions) { + super() + this.config = options + if (options) { + this.manager = new SessionKeyManager(options) + } + } + + register(context: LoginContext): void { + context.addHook(LoginHookTypes.afterLogin, async () => { + if (!context.session) { + return + } + + const manager = this.manager || context.sessionKeyManager + if (!manager) { + return + } + + const session = context.session + const result = await manager.checkExistingSessionKey(session) + + if (result.exists && result.mismatch) { + if (context.ui?.onSessionKeyMismatch) { + const choice = await context.ui.onSessionKeyMismatch({ + appName: String(session.appName || 'this app'), + added: result.mismatch.added.map((e) => ({ + contract: String(e.contract), + actions: e.actions?.map((a) => String(a)), + })), + removed: result.mismatch.removed.map((e) => ({ + contract: String(e.contract), + actions: e.actions?.map((a) => String(a)), + })), + }) + + if (choice === 'update') { + await manager.updateLinks(session) + } + } + return + } + + if (!manager.config.skipConsent && context.ui?.onSessionKeyConsent) { + const consent = await context.ui.onSessionKeyConsent({ + appName: String(session.appName || 'this app'), + whitelist: manager.whitelist.map((e) => ({ + contract: String(e.contract), + actions: e.actions?.map((a) => String(a)), + })), + }) + + if (!consent) { + return + } + } + + const onConflict = context.ui?.onSessionKeyConflict + ? async (existingKeys: any[]) => { + const choice = await context.ui!.onSessionKeyConflict!({ + appName: String(session.appName || 'this app'), + existingKeyCount: existingKeys.length, + }) + return choice + } + : undefined + + await manager.setup(session, onConflict) + }) + } + + getConfig(): SessionKeyLoginPluginOptions | undefined { + return this.config + } + + getManager(): SessionKeyManager | undefined { + return this.manager + } +} diff --git a/src/sessionkey/manager.ts b/src/sessionkey/manager.ts new file mode 100644 index 00000000..7b760b99 --- /dev/null +++ b/src/sessionkey/manager.ts @@ -0,0 +1,725 @@ +import { + AnyAction, + API, + APIClient, + Authority, + KeyWeight, + Name, + NameType, + PermissionLevel, + PrivateKey, + PublicKey, +} from '@wharfkit/antelope' + +import {Session, SessionArgs, SessionOptions} from '../session' +import { + isSessionKeyWallet, + SessionKeyConfig, + SessionKeyConflictChoice, + SessionKeyMismatch, + SessionKeySetupResult, + SessionKeyWalletInterface, + SessionKeyWhitelistEntry, +} from './types' +import {SessionKeyWalletPlugin} from './wallet' +import {Contract as SystemContract} from './systemcontract' +import {UserInterface} from '../ui' + +function createPrimaryWalletSession(session: Session, ui?: UserInterface): Session { + if (!isSessionKeyWallet(session.walletPlugin)) { + throw new Error('Session does not have a session key wallet') + } + + const args: SessionArgs = { + chain: session.chain, + permissionLevel: session.permissionLevel, + walletPlugin: session.walletPlugin.getPrimaryWallet(), + } + + const options: SessionOptions = { + fetch: session.fetch, + ui, + } + + return new Session(args, options) +} + +/** + * Manages session key lifecycle including setup, validation, and removal. + */ +export class SessionKeyManager { + config: SessionKeyConfig + whitelist: SessionKeyWhitelistEntry[] + ui?: UserInterface + + constructor(config: SessionKeyConfig, ui?: UserInterface) { + this.config = config + this.ui = ui + this.whitelist = config.whitelist.map((entry) => ({ + contract: Name.from(entry.contract), + actions: entry.actions?.map((a) => Name.from(a)), + })) + } + + private getSystemContract(client: APIClient): SystemContract { + return new SystemContract({client}) + } + + private allowsAllActions(entry: SessionKeyWhitelistEntry): boolean { + return !entry.actions || entry.actions.length === 0 + } + + private hasSpecificActions( + entry: SessionKeyWhitelistEntry + ): entry is SessionKeyWhitelistEntry & {actions: Name[]} { + return !!entry.actions && entry.actions.length > 0 + } + + /** + * Get the permission name for the session key. + * Uses config.permission if set, otherwise generates from app name or defaults to 'sessionkey'. + * + * @param appName Optional application name to generate permission from + * @returns The permission name + */ + getPermissionName(appName?: string): Name { + if (this.config.permission) { + return Name.from(this.config.permission) + } + if (appName) { + const sanitized = appName + .toLowerCase() + .replace(/[^a-z1-5.]/g, '') + .slice(0, 12) + return Name.from(sanitized || 'sessionkey') + } + return Name.from('sessionkey') + } + + /** + * Check if an action is whitelisted for signing with the session key. + * + * @param action The action to check + * @returns True if the action is whitelisted + */ + isWhitelisted(action: AnyAction): boolean { + const actionContract = Name.from(action.account) + const actionName = Name.from(action.name) + + for (const entry of this.whitelist) { + if (actionContract.equals(entry.contract)) { + if (this.allowsAllActions(entry)) { + return true + } + if (this.hasSpecificActions(entry)) { + for (const allowedAction of entry.actions) { + if (actionName.equals(allowedAction)) { + return true + } + } + } + } + } + return false + } + + /** + * Type guard to check if a session has an active session key wallet. + * + * @param session The session to check + * @returns True if the session has a session key wallet + */ + hasSessionKey( + session: Session + ): session is Session & {walletPlugin: SessionKeyWalletInterface} { + return isSessionKeyWallet(session.walletPlugin) + } + + /** + * Fetch permission data from the blockchain. + * Uses custom fetchPermission function if provided in config, otherwise uses default implementation. + * + * @param client API client to use for fetching + * @param account Account name + * @param permission Permission name + * @returns Permission data or undefined if not found + */ + async fetchPermission( + client: APIClient, + account: Name, + permission: Name + ): Promise { + if (this.config.fetchPermission) { + return this.config.fetchPermission(client, account, permission) + } + return this.defaultFetchPermission(client, account, permission) + } + + private async defaultFetchPermission( + client: APIClient, + account: Name, + permission: Name + ): Promise { + try { + const accountData = await client.v1.chain.get_account(account) + return accountData.permissions.find((p: any) => permission.equals(p.perm_name)) + } catch { + return undefined + } + } + + /** + * Check if a session key permission exists on-chain and validate its whitelist. + * + * @param session The session to check + * @returns Object with exists flag, permission name, and optional mismatch details + */ + async checkExistingSessionKey( + session: Session + ): Promise<{exists: boolean; permission?: Name; mismatch?: SessionKeyMismatch}> { + const permissionName = this.getPermissionName(session.appName) + const permData = await this.fetchPermission(session.client, session.actor, permissionName) + + if (!permData) { + return {exists: false} + } + + if (!permData.linked_actions || permData.linked_actions.length === 0) { + return {exists: false} + } + + const added = this.findMissingLinks(this.whitelist, permData.linked_actions) + const removed = this.findExtraLinks(this.whitelist, permData.linked_actions) + + if (added.length === 0 && removed.length === 0) { + return {exists: true, permission: permissionName} + } + + return { + exists: true, + permission: permissionName, + mismatch: {added, removed}, + } + } + + /** + * Validate that the session's whitelist matches the on-chain linked actions. + * + * @param session The session with an active session key to validate + * @returns Mismatch details if whitelist differs from on-chain state, undefined if they match + */ + async validateWhitelist(session: Session): Promise { + if (!this.hasSessionKey(session)) { + return undefined + } + + const permission = session.walletPlugin.getPermission() + const permData = await this.fetchPermission(session.client, session.actor, permission) + if (!permData || !permData.linked_actions) { + return undefined + } + + const added = this.findMissingLinks(this.whitelist, permData.linked_actions) + const removed = this.findExtraLinks(this.whitelist, permData.linked_actions) + + if (added.length === 0 && removed.length === 0) { + return undefined + } + + return {added, removed} + } + + private findMissingLinks( + whitelist: SessionKeyWhitelistEntry[], + onChainLinks: API.v1.AccountLinkedAction[] + ): SessionKeyWhitelistEntry[] { + const missing: SessionKeyWhitelistEntry[] = [] + + for (const entry of whitelist) { + if (this.allowsAllActions(entry)) { + if (!this.hasLinkOnChain(entry.contract, undefined, onChainLinks)) { + missing.push(entry) + } + } else if (this.hasSpecificActions(entry)) { + for (const action of entry.actions) { + if (!this.hasLinkOnChain(entry.contract, action, onChainLinks)) { + missing.push({contract: entry.contract, actions: [action]}) + } + } + } + } + + return missing + } + + private findExtraLinks( + whitelist: SessionKeyWhitelistEntry[], + onChainLinks: API.v1.AccountLinkedAction[] + ): SessionKeyWhitelistEntry[] { + const extra: SessionKeyWhitelistEntry[] = [] + + for (const link of onChainLinks) { + const linkAction = link.action ? Name.from(link.action) : undefined + + if (!this.isLinkInWhitelist(link.account, linkAction, whitelist)) { + extra.push({ + contract: link.account, + actions: link.action ? [link.action] : undefined, + }) + } + } + + return extra + } + + private hasLinkOnChain( + contract: Name, + action: Name | undefined, + onChainLinks: API.v1.AccountLinkedAction[] + ): boolean { + return onChainLinks.some((link) => { + if (!contract.equals(link.account)) { + return false + } + if (!action) { + return !link.action + } + return link.action && action.equals(link.action) + }) + } + + private isLinkInWhitelist( + contract: NameType, + action: Name | undefined, + whitelist: SessionKeyWhitelistEntry[] + ): boolean { + return whitelist.some((entry) => { + if (!Name.from(contract).equals(entry.contract)) { + return false + } + if (this.allowsAllActions(entry)) { + return !action + } + if (!action) { + return false + } + if (this.hasSpecificActions(entry)) { + return entry.actions.some((a) => action.equals(a)) + } + return false + }) + } + + /** + * Set up a new session key for the given session. + * Generates a new K1 key, creates the permission on-chain, and wraps the session wallet. + * + * @param session The session to set up a session key for + * @param onConflict Optional callback if the permission already exists with other keys + * @returns The public key and permission name of the created session key + * @throws If the session already has an active session key + */ + async setup( + session: Session, + onConflict?: (existingKeys: KeyWeight[]) => Promise + ): Promise { + if (this.hasSessionKey(session)) { + throw new Error( + 'Session already has a session key. Remove it first before setting up a new one.' + ) + } + + const permissionName = this.getPermissionName(session.appName) + const privateKey = PrivateKey.generate('K1') + const publicKey = privateKey.toPublic() + const keyWeight = KeyWeight.from({key: publicKey, weight: 1}) + + const existingPerm = await this.fetchPermission( + session.client, + session.actor, + permissionName + ) + + const keys = await this.resolveKeys(existingPerm, keyWeight, onConflict) + + const systemContract = this.getSystemContract(session.client) + const actions = this.buildSetupActions( + systemContract, + session.actor, + permissionName, + session.permissionLevel, + keys, + existingPerm?.linked_actions + ) + + await session.transact({actions}) + + this.wrapSessionWallet(session, privateKey, permissionName) + + return { + publicKey, + permission: permissionName, + } + } + + private async resolveKeys( + existingPerm: API.v1.AccountPermission | undefined, + keyWeight: KeyWeight, + onConflict?: (existingKeys: KeyWeight[]) => Promise + ): Promise { + if (!existingPerm) { + return [keyWeight] + } + + if (!onConflict) { + const auth = Authority.from({ + threshold: 1, + keys: [...existingPerm.required_auth.keys, keyWeight], + accounts: [], + waits: [], + }) + return auth.keys + } + + const choice = await onConflict(existingPerm.required_auth.keys) + if (choice === 'cancel') { + throw new Error('Session key setup cancelled by user') + } + + if (choice === 'add') { + const auth = Authority.from({ + threshold: 1, + keys: [...existingPerm.required_auth.keys, keyWeight], + accounts: [], + waits: [], + }) + return auth.keys + } + + return [keyWeight] + } + + private buildSetupActions( + systemContract: SystemContract, + actor: Name, + permissionName: Name, + authorization: PermissionLevel, + keys: KeyWeight[], + existingLinks?: API.v1.AccountLinkedAction[] + ): AnyAction[] { + const auth = Authority.from({ + threshold: 1, + keys, + accounts: [], + waits: [], + }) + + const updateAuthAction = systemContract.action( + 'updateauth', + { + account: actor, + permission: permissionName, + parent: 'active', + auth, + }, + {authorization: [authorization]} + ) + + const linkAuthActions = this.buildLinkAuthActions( + systemContract, + actor, + permissionName, + authorization, + existingLinks + ) + + return [updateAuthAction, ...linkAuthActions] + } + + private wrapSessionWallet(session: Session, privateKey: PrivateKey, permission: Name): void { + const wrappedWallet = new SessionKeyWalletPlugin({ + primaryWallet: session.walletPlugin, + privateKey, + permission, + whitelist: this.whitelist, + }) + + session['_walletPlugin'] = wrappedWallet + } + + private buildLinkAuthActions( + systemContract: SystemContract, + actor: Name, + permissionName: Name, + authorization: PermissionLevel, + existingLinks?: API.v1.AccountLinkedAction[] + ): AnyAction[] { + const actions: AnyAction[] = [] + const existingSet = new Set() + + if (existingLinks) { + for (const link of existingLinks) { + const key = `${link.account}:${link.action || ''}` + existingSet.add(key) + } + } + + for (const entry of this.whitelist) { + const contract = Name.from(entry.contract) + + if (this.allowsAllActions(entry)) { + const key = `${contract}:` + if (!existingSet.has(key)) { + actions.push( + systemContract.action( + 'linkauth', + { + account: actor, + code: contract, + type: '', + requirement: permissionName, + }, + {authorization: [authorization]} + ) + ) + } + } else if (this.hasSpecificActions(entry)) { + for (const action of entry.actions) { + const actionName = Name.from(action) + const key = `${contract}:${actionName}` + if (!existingSet.has(key)) { + actions.push( + systemContract.action( + 'linkauth', + { + account: actor, + code: contract, + type: actionName, + requirement: permissionName, + }, + {authorization: [authorization]} + ) + ) + } + } + } + } + + return actions + } + + /** + * Remove the session key from the given session. + * Removes the key from on-chain permission and unlinks/deletes as needed. + * + * @param session The session to remove the session key from + * @throws If the session does not have an active session key + * @throws If the permission or key is not found on-chain + */ + async remove(session: Session): Promise { + if (!this.hasSessionKey(session)) { + throw new Error('Session does not have a session key') + } + + const primaryWallet = session.walletPlugin.getPrimaryWallet() + const permission = session.walletPlugin.getPermission() + const publicKey = PublicKey.from(session.walletPlugin.getPublicKey()) + + const actor = session.actor + + const permData = await this.fetchPermission(session.client, actor, permission) + if (!permData) { + throw new Error('Permission not found on chain') + } + + const ourKeyIndex = permData.required_auth.keys.findIndex((k) => + PublicKey.from(k.key).equals(publicKey) + ) + + if (ourKeyIndex === -1) { + throw new Error('Session key not found in permission') + } + + const remainingKeys = permData.required_auth.keys.filter((_, i) => i !== ourKeyIndex) + + const actions: AnyAction[] = [] + + const tempSession = createPrimaryWalletSession(session, this.ui) + const systemContract = this.getSystemContract(session.client) + + if (remainingKeys.length > 0) { + actions.push( + systemContract.action( + 'updateauth', + { + account: actor, + permission, + parent: 'active', + auth: permData.required_auth, + }, + {authorization: [session.permissionLevel]} + ) + ) + } else { + const linkedActions = permData.linked_actions || [] + for (const link of linkedActions) { + actions.push( + systemContract.action( + 'unlinkauth', + { + account: actor, + code: link.account, + type: link.action || '', + }, + {authorization: [session.permissionLevel]} + ) + ) + } + + actions.push( + systemContract.action( + 'deleteauth', + { + account: actor, + permission, + }, + {authorization: [session.permissionLevel]} + ) + ) + } + + await tempSession.transact({actions}) + session['_walletPlugin'] = primaryWallet + } + + private buildLinkAuthActionsFromEntries( + systemContract: SystemContract, + entries: SessionKeyWhitelistEntry[], + actor: Name, + permission: Name, + authorization: PermissionLevel + ): AnyAction[] { + const actions: AnyAction[] = [] + + for (const entry of entries) { + const contract = Name.from(entry.contract) + if (this.allowsAllActions(entry)) { + actions.push( + systemContract.action( + 'linkauth', + { + account: actor, + code: contract, + type: '', + requirement: permission, + }, + {authorization: [authorization]} + ) + ) + } else if (this.hasSpecificActions(entry)) { + for (const action of entry.actions) { + actions.push( + systemContract.action( + 'linkauth', + { + account: actor, + code: contract, + type: action, + requirement: permission, + }, + {authorization: [authorization]} + ) + ) + } + } + } + + return actions + } + + private buildUnlinkAuthActionsFromEntries( + systemContract: SystemContract, + entries: SessionKeyWhitelistEntry[], + actor: Name, + authorization: PermissionLevel + ): AnyAction[] { + const actions: AnyAction[] = [] + + for (const entry of entries) { + const contract = Name.from(entry.contract) + if (this.allowsAllActions(entry)) { + actions.push( + systemContract.action( + 'unlinkauth', + { + account: actor, + code: contract, + type: '', + }, + {authorization: [authorization]} + ) + ) + } else if (this.hasSpecificActions(entry)) { + for (const action of entry.actions) { + actions.push( + systemContract.action( + 'unlinkauth', + { + account: actor, + code: contract, + type: action, + }, + {authorization: [authorization]} + ) + ) + } + } + } + + return actions + } + + /** + * Update the on-chain linkauth actions to match the current whitelist. + * Removes extra links and adds missing links to synchronize state. + * + * @param session The session with an active session key + * @throws If the session does not have an active session key + */ + async updateLinks(session: Session): Promise { + if (!this.hasSessionKey(session)) { + throw new Error('Session does not have a session key') + } + + const permission = session.walletPlugin.getPermission() + + const mismatch = await this.validateWhitelist(session) + if (!mismatch) { + return + } + + const tempSession = createPrimaryWalletSession(session, this.ui) + const systemContract = this.getSystemContract(session.client) + + const unlinkActions = this.buildUnlinkAuthActionsFromEntries( + systemContract, + mismatch.removed, + session.actor, + session.permissionLevel + ) + + const linkActions = this.buildLinkAuthActionsFromEntries( + systemContract, + mismatch.added, + session.actor, + permission, + session.permissionLevel + ) + + const actions = [...unlinkActions, ...linkActions] + + if (actions.length > 0) { + await tempSession.transact({actions}) + } + } +} diff --git a/src/sessionkey/systemcontract.ts b/src/sessionkey/systemcontract.ts new file mode 100644 index 00000000..538829cb --- /dev/null +++ b/src/sessionkey/systemcontract.ts @@ -0,0 +1,2110 @@ +import type { + Action, + AssetType, + BytesType, + Checksum256Type, + Float64Type, + Int64Type, + NameType, + PublicKeyType, + UInt128Type, + UInt16Type, + UInt32Type, + UInt64Type, + UInt8Type, + VarUIntType, +} from '@wharfkit/antelope' +import { + ABI, + Asset, + Blob, + BlockTimestamp, + Bytes, + Checksum256, + Float64, + Int64, + Name, + PublicKey, + Struct, + TimePoint, + TimePointSec, + UInt128, + UInt16, + UInt32, + UInt64, + UInt8, + VarUInt, + Variant, +} from '@wharfkit/antelope' +import type {ActionOptions, ContractArgs, PartialBy, Table} from '@wharfkit/contract' +import {Contract as BaseContract} from '@wharfkit/contract' +export const abiBlob = Blob.from( + 'DmVvc2lvOjphYmkvMS4yAxdibG9ja19zaWduaW5nX2F1dGhvcml0eSJ2YXJpYW50X2Jsb2NrX3NpZ25pbmdfYXV0aG9yaXR5X3YwF2Jsb2NrY2hhaW5fcGFyYW1ldGVyc190GGJsb2NrY2hhaW5fcGFyYW1ldGVyc192MRFnZXRwZWVya2V5c19yZXNfdAxwZWVya2V5c190W12VAQhhYmlfaGFzaAACBW93bmVyBG5hbWUEaGFzaAtjaGVja3N1bTI1NhZhY2NvdW50X25hbWVfYmxhY2tsaXN0AAEKZGlzYWxsb3dlZAZuYW1lW10JYWN0Zmlua2V5AAIOZmluYWxpemVyX25hbWUEbmFtZQ1maW5hbGl6ZXJfa2V5BnN0cmluZxRhY3Rpb25fcmV0dXJuX2J1eXJhbQAGBXBheWVyBG5hbWUIcmVjZWl2ZXIEbmFtZQhxdWFudGl0eQVhc3NldA9ieXRlc19wdXJjaGFzZWQFaW50NjQJcmFtX2J5dGVzBWludDY0A2ZlZQVhc3NldBlhY3Rpb25fcmV0dXJuX3JhbXRyYW5zZmVyAAUEZnJvbQRuYW1lAnRvBG5hbWUFYnl0ZXMFaW50NjQOZnJvbV9yYW1fYnl0ZXMFaW50NjQMdG9fcmFtX2J5dGVzBWludDY0FWFjdGlvbl9yZXR1cm5fc2VsbHJhbQAFB2FjY291bnQEbmFtZQhxdWFudGl0eQVhc3NldApieXRlc19zb2xkBWludDY0CXJhbV9ieXRlcwVpbnQ2NANmZWUFYXNzZXQIYWN0aXZhdGUAAQ5mZWF0dXJlX2RpZ2VzdAtjaGVja3N1bTI1NglhdXRob3JpdHkABAl0aHJlc2hvbGQGdWludDMyBGtleXMMa2V5X3dlaWdodFtdCGFjY291bnRzGXBlcm1pc3Npb25fbGV2ZWxfd2VpZ2h0W10Fd2FpdHMNd2FpdF93ZWlnaHRbXQpiaWRfcmVmdW5kAAIGYmlkZGVyBG5hbWUGYW1vdW50BWFzc2V0B2JpZG5hbWUAAwZiaWRkZXIEbmFtZQduZXduYW1lBG5hbWUDYmlkBWFzc2V0CWJpZHJlZnVuZAACBmJpZGRlcgRuYW1lB25ld25hbWUEbmFtZQxibG9ja19oZWFkZXIACAl0aW1lc3RhbXAGdWludDMyCHByb2R1Y2VyBG5hbWUJY29uZmlybWVkBnVpbnQxNghwcmV2aW91cwtjaGVja3N1bTI1NhF0cmFuc2FjdGlvbl9tcm9vdAtjaGVja3N1bTI1NgxhY3Rpb25fbXJvb3QLY2hlY2tzdW0yNTYQc2NoZWR1bGVfdmVyc2lvbgZ1aW50MzINbmV3X3Byb2R1Y2VycxJwcm9kdWNlcl9zY2hlZHVsZT8RYmxvY2tfaW5mb19yZWNvcmQAAwd2ZXJzaW9uBXVpbnQ4DGJsb2NrX2hlaWdodAZ1aW50MzIPYmxvY2tfdGltZXN0YW1wCnRpbWVfcG9pbnQaYmxvY2tfc2lnbmluZ19hdXRob3JpdHlfdjAAAgl0aHJlc2hvbGQGdWludDMyBGtleXMMa2V5X3dlaWdodFtdFWJsb2NrY2hhaW5fcGFyYW1ldGVycwARE21heF9ibG9ja19uZXRfdXNhZ2UGdWludDY0GnRhcmdldF9ibG9ja19uZXRfdXNhZ2VfcGN0BnVpbnQzMhltYXhfdHJhbnNhY3Rpb25fbmV0X3VzYWdlBnVpbnQzMh5iYXNlX3Blcl90cmFuc2FjdGlvbl9uZXRfdXNhZ2UGdWludDMyEG5ldF91c2FnZV9sZWV3YXkGdWludDMyI2NvbnRleHRfZnJlZV9kaXNjb3VudF9uZXRfdXNhZ2VfbnVtBnVpbnQzMiNjb250ZXh0X2ZyZWVfZGlzY291bnRfbmV0X3VzYWdlX2RlbgZ1aW50MzITbWF4X2Jsb2NrX2NwdV91c2FnZQZ1aW50MzIadGFyZ2V0X2Jsb2NrX2NwdV91c2FnZV9wY3QGdWludDMyGW1heF90cmFuc2FjdGlvbl9jcHVfdXNhZ2UGdWludDMyGW1pbl90cmFuc2FjdGlvbl9jcHVfdXNhZ2UGdWludDMyGG1heF90cmFuc2FjdGlvbl9saWZldGltZQZ1aW50MzIeZGVmZXJyZWRfdHJ4X2V4cGlyYXRpb25fd2luZG93BnVpbnQzMhVtYXhfdHJhbnNhY3Rpb25fZGVsYXkGdWludDMyFm1heF9pbmxpbmVfYWN0aW9uX3NpemUGdWludDMyF21heF9pbmxpbmVfYWN0aW9uX2RlcHRoBnVpbnQxNhNtYXhfYXV0aG9yaXR5X2RlcHRoBnVpbnQxNhhibG9ja2NoYWluX3BhcmFtZXRlcnNfdjEVYmxvY2tjaGFpbl9wYXJhbWV0ZXJzARxtYXhfYWN0aW9uX3JldHVybl92YWx1ZV9zaXplB3VpbnQzMiQGYnV5cmFtAAMFcGF5ZXIEbmFtZQhyZWNlaXZlcgRuYW1lBXF1YW50BWFzc2V0CmJ1eXJhbWJ1cm4AAwVwYXllcgRuYW1lCHF1YW50aXR5BWFzc2V0BG1lbW8Gc3RyaW5nC2J1eXJhbWJ5dGVzAAMFcGF5ZXIEbmFtZQhyZWNlaXZlcgRuYW1lBWJ5dGVzBnVpbnQzMgpidXlyYW1zZWxmAAIHYWNjb3VudARuYW1lBXF1YW50BWFzc2V0BmJ1eXJleAACBGZyb20EbmFtZQZhbW91bnQFYXNzZXQLY2FuY2VsZGVsYXkAAg5jYW5jZWxpbmdfYXV0aBBwZXJtaXNzaW9uX2xldmVsBnRyeF9pZAtjaGVja3N1bTI1NgpjZmdwb3dlcnVwAAEEYXJncw5wb3dlcnVwX2NvbmZpZwxjbGFpbXJld2FyZHMAAQVvd25lcgRuYW1lCGNsb3NlcmV4AAEFb3duZXIEbmFtZQxjbmNscmV4b3JkZXIAAQVvd25lcgRuYW1lCWNvbm5lY3RvcgACB2JhbGFuY2UFYXNzZXQGd2VpZ2h0B2Zsb2F0NjQLY29uc29saWRhdGUAAQVvd25lcgRuYW1lCmRlZmNwdWxvYW4AAwRmcm9tBG5hbWUIbG9hbl9udW0GdWludDY0BmFtb3VudAVhc3NldApkZWZuZXRsb2FuAAMEZnJvbQRuYW1lCGxvYW5fbnVtBnVpbnQ2NAZhbW91bnQFYXNzZXQKZGVsZWdhdGVidwAFBGZyb20EbmFtZQhyZWNlaXZlcgRuYW1lEnN0YWtlX25ldF9xdWFudGl0eQVhc3NldBJzdGFrZV9jcHVfcXVhbnRpdHkFYXNzZXQIdHJhbnNmZXIEYm9vbBNkZWxlZ2F0ZWRfYmFuZHdpZHRoAAQEZnJvbQRuYW1lAnRvBG5hbWUKbmV0X3dlaWdodAVhc3NldApjcHVfd2VpZ2h0BWFzc2V0CmRlbGV0ZWF1dGgAAwdhY2NvdW50BG5hbWUKcGVybWlzc2lvbgRuYW1lDWF1dGhvcml6ZWRfYnkFbmFtZSQJZGVsZmlua2V5AAIOZmluYWxpemVyX25hbWUEbmFtZQ1maW5hbGl6ZXJfa2V5BnN0cmluZwtkZWxzY2hlZHVsZQABCnN0YXJ0X3RpbWUOdGltZV9wb2ludF9zZWMJZGVueV9oYXNoAAICaWQGdWludDY0BGhhc2gLY2hlY2tzdW0yNTYLZGVueWhhc2hhZGQAAQRoYXNoC2NoZWNrc3VtMjU2DGRlbnloYXNoY2FsYwABCHBhdHRlcm5zBm5hbWVbXQpkZW55aGFzaHJtAAEEaGFzaAtjaGVja3N1bTI1NglkZW55bmFtZXMAAQhwYXR0ZXJucwZuYW1lW10HZGVwb3NpdAACBW93bmVyBG5hbWUGYW1vdW50BWFzc2V0C2RvbmF0ZXRvcmV4AAMFcGF5ZXIEbmFtZQhxdWFudGl0eQVhc3NldARtZW1vBnN0cmluZxJlb3Npb19nbG9iYWxfc3RhdGUVYmxvY2tjaGFpbl9wYXJhbWV0ZXJzDQxtYXhfcmFtX3NpemUGdWludDY0GHRvdGFsX3JhbV9ieXRlc19yZXNlcnZlZAZ1aW50NjQPdG90YWxfcmFtX3N0YWtlBWludDY0HWxhc3RfcHJvZHVjZXJfc2NoZWR1bGVfdXBkYXRlFGJsb2NrX3RpbWVzdGFtcF90eXBlGGxhc3RfcGVydm90ZV9idWNrZXRfZmlsbAp0aW1lX3BvaW50DnBlcnZvdGVfYnVja2V0BWludDY0D3BlcmJsb2NrX2J1Y2tldAVpbnQ2NBN0b3RhbF91bnBhaWRfYmxvY2tzBnVpbnQzMhV0b3RhbF9hY3RpdmF0ZWRfc3Rha2UFaW50NjQbdGhyZXNoX2FjdGl2YXRlZF9zdGFrZV90aW1lCnRpbWVfcG9pbnQbbGFzdF9wcm9kdWNlcl9zY2hlZHVsZV9zaXplBnVpbnQxNhp0b3RhbF9wcm9kdWNlcl92b3RlX3dlaWdodAdmbG9hdDY0D2xhc3RfbmFtZV9jbG9zZRRibG9ja190aW1lc3RhbXBfdHlwZRNlb3Npb19nbG9iYWxfc3RhdGUyAAURbmV3X3JhbV9wZXJfYmxvY2sGdWludDE2EWxhc3RfcmFtX2luY3JlYXNlFGJsb2NrX3RpbWVzdGFtcF90eXBlDmxhc3RfYmxvY2tfbnVtFGJsb2NrX3RpbWVzdGFtcF90eXBlHHRvdGFsX3Byb2R1Y2VyX3ZvdGVwYXlfc2hhcmUHZmxvYXQ2NAhyZXZpc2lvbgV1aW50OBNlb3Npb19nbG9iYWxfc3RhdGUzAAIWbGFzdF92cGF5X3N0YXRlX3VwZGF0ZQp0aW1lX3BvaW50HHRvdGFsX3ZwYXlfc2hhcmVfY2hhbmdlX3JhdGUHZmxvYXQ2NBNlb3Npb19nbG9iYWxfc3RhdGU0AAMPY29udGludW91c19yYXRlB2Zsb2F0NjQUaW5mbGF0aW9uX3BheV9mYWN0b3IFaW50NjQOdm90ZXBheV9mYWN0b3IFaW50NjQOZXhjaGFuZ2Vfc3RhdGUAAwZzdXBwbHkFYXNzZXQEYmFzZQljb25uZWN0b3IFcXVvdGUJY29ubmVjdG9yDGV4ZWNzY2hlZHVsZQAAGWZpbl9rZXlfaWRfZ2VuZXJhdG9yX2luZm8AARVuZXh0X2ZpbmFsaXplcl9rZXlfaWQGdWludDY0E2ZpbmFsaXplcl9hdXRoX2luZm8AAgZrZXlfaWQGdWludDY0DWZpbl9hdXRob3JpdHkTZmluYWxpemVyX2F1dGhvcml0eRNmaW5hbGl6ZXJfYXV0aG9yaXR5AAMLZGVzY3JpcHRpb24Gc3RyaW5nBndlaWdodAZ1aW50NjQKcHVibGljX2tleQVieXRlcw5maW5hbGl6ZXJfaW5mbwAEDmZpbmFsaXplcl9uYW1lBG5hbWUNYWN0aXZlX2tleV9pZAZ1aW50NjQRYWN0aXZlX2tleV9iaW5hcnkFYnl0ZXMTZmluYWxpemVyX2tleV9jb3VudAZ1aW50MzISZmluYWxpemVyX2tleV9pbmZvAAQCaWQGdWludDY0DmZpbmFsaXplcl9uYW1lBG5hbWUNZmluYWxpemVyX2tleQZzdHJpbmcUZmluYWxpemVyX2tleV9iaW5hcnkFYnl0ZXMLZnVuZGNwdWxvYW4AAwRmcm9tBG5hbWUIbG9hbl9udW0GdWludDY0B3BheW1lbnQFYXNzZXQLZnVuZG5ldGxvYW4AAwRmcm9tBG5hbWUIbG9hbl9udW0GdWludDY0B3BheW1lbnQFYXNzZXQKZ2lmdGVkX3JhbQADBmdpZnRlZQRuYW1lBmdpZnRlcgRuYW1lCXJhbV9ieXRlcwVpbnQ2NAdnaWZ0cmFtAAQEZnJvbQRuYW1lAnRvBG5hbWUFYnl0ZXMFaW50NjQEbWVtbwZzdHJpbmcEaW5pdAACB3ZlcnNpb24JdmFydWludDMyBGNvcmUGc3ltYm9sCmtleV93ZWlnaHQAAgNrZXkKcHVibGljX2tleQZ3ZWlnaHQGdWludDE2GWxhc3RfcHJvcF9maW5hbGl6ZXJzX2luZm8AARhsYXN0X3Byb3Bvc2VkX2ZpbmFsaXplcnMVZmluYWxpemVyX2F1dGhfaW5mb1tdDGxpbWl0YXV0aGNoZwADB2FjY291bnQEbmFtZQthbGxvd19wZXJtcwZuYW1lW10OZGlzYWxsb3dfcGVybXMGbmFtZVtdCGxpbmthdXRoAAUHYWNjb3VudARuYW1lBGNvZGUEbmFtZQR0eXBlBG5hbWULcmVxdWlyZW1lbnQEbmFtZQ1hdXRob3JpemVkX2J5BW5hbWUkCWxvZ2J1eXJhbQAGBXBheWVyBG5hbWUIcmVjZWl2ZXIEbmFtZQhxdWFudGl0eQVhc3NldAVieXRlcwVpbnQ2NAlyYW1fYnl0ZXMFaW50NjQDZmVlBWFzc2V0DGxvZ3JhbWNoYW5nZQADBW93bmVyBG5hbWUFYnl0ZXMFaW50NjQJcmFtX2J5dGVzBWludDY0CmxvZ3NlbGxyYW0ABQdhY2NvdW50BG5hbWUIcXVhbnRpdHkFYXNzZXQFYnl0ZXMFaW50NjQJcmFtX2J5dGVzBWludDY0A2ZlZQVhc3NldAxsb2dzeXN0ZW1mZWUAAwhwcm90b2NvbARuYW1lA2ZlZQVhc3NldARtZW1vBnN0cmluZwttdmZyc2F2aW5ncwACBW93bmVyBG5hbWUDcmV4BWFzc2V0C212dG9zYXZpbmdzAAIFb3duZXIEbmFtZQNyZXgFYXNzZXQIbmFtZV9iaWQABAduZXduYW1lBG5hbWULaGlnaF9iaWRkZXIEbmFtZQhoaWdoX2JpZAVpbnQ2NA1sYXN0X2JpZF90aW1lCnRpbWVfcG9pbnQKbmV3YWNjb3VudAAEB2NyZWF0b3IEbmFtZQRuYW1lBG5hbWUFb3duZXIJYXV0aG9yaXR5BmFjdGl2ZQlhdXRob3JpdHkHb25ibG9jawABBmhlYWRlcgxibG9ja19oZWFkZXIHb25lcnJvcgACCXNlbmRlcl9pZAd1aW50MTI4CHNlbnRfdHJ4BWJ5dGVzGXBhaXJfdGltZV9wb2ludF9zZWNfaW50NjQAAgVmaXJzdA50aW1lX3BvaW50X3NlYwZzZWNvbmQFaW50NjQQcGVybWlzc2lvbl9sZXZlbAACBWFjdG9yBG5hbWUKcGVybWlzc2lvbgRuYW1lF3Blcm1pc3Npb25fbGV2ZWxfd2VpZ2h0AAIKcGVybWlzc2lvbhBwZXJtaXNzaW9uX2xldmVsBndlaWdodAZ1aW50MTYHcG93ZXJ1cAAGBXBheWVyBG5hbWUIcmVjZWl2ZXIEbmFtZQRkYXlzBnVpbnQzMghuZXRfZnJhYwVpbnQ2NAhjcHVfZnJhYwVpbnQ2NAttYXhfcGF5bWVudAVhc3NldA5wb3dlcnVwX2NvbmZpZwAEA25ldBdwb3dlcnVwX2NvbmZpZ19yZXNvdXJjZQNjcHUXcG93ZXJ1cF9jb25maWdfcmVzb3VyY2UMcG93ZXJ1cF9kYXlzB3VpbnQzMj8PbWluX3Bvd2VydXBfZmVlBmFzc2V0Pxdwb3dlcnVwX2NvbmZpZ19yZXNvdXJjZQAIFGN1cnJlbnRfd2VpZ2h0X3JhdGlvBmludDY0PxN0YXJnZXRfd2VpZ2h0X3JhdGlvBmludDY0PxRhc3N1bWVkX3N0YWtlX3dlaWdodAZpbnQ2ND8QdGFyZ2V0X3RpbWVzdGFtcA90aW1lX3BvaW50X3NlYz8IZXhwb25lbnQIZmxvYXQ2ND8KZGVjYXlfc2Vjcwd1aW50MzI/CW1pbl9wcmljZQZhc3NldD8JbWF4X3ByaWNlBmFzc2V0Pw1wb3dlcnVwX29yZGVyAAYHdmVyc2lvbgV1aW50OAJpZAZ1aW50NjQFb3duZXIEbmFtZQpuZXRfd2VpZ2h0BWludDY0CmNwdV93ZWlnaHQFaW50NjQHZXhwaXJlcw50aW1lX3BvaW50X3NlYw1wb3dlcnVwX3N0YXRlAAUHdmVyc2lvbgV1aW50OANuZXQWcG93ZXJ1cF9zdGF0ZV9yZXNvdXJjZQNjcHUWcG93ZXJ1cF9zdGF0ZV9yZXNvdXJjZQxwb3dlcnVwX2RheXMGdWludDMyD21pbl9wb3dlcnVwX2ZlZQVhc3NldBZwb3dlcnVwX3N0YXRlX3Jlc291cmNlAA8HdmVyc2lvbgV1aW50OAZ3ZWlnaHQFaW50NjQMd2VpZ2h0X3JhdGlvBWludDY0FGFzc3VtZWRfc3Rha2Vfd2VpZ2h0BWludDY0FGluaXRpYWxfd2VpZ2h0X3JhdGlvBWludDY0E3RhcmdldF93ZWlnaHRfcmF0aW8FaW50NjQRaW5pdGlhbF90aW1lc3RhbXAOdGltZV9wb2ludF9zZWMQdGFyZ2V0X3RpbWVzdGFtcA50aW1lX3BvaW50X3NlYwhleHBvbmVudAdmbG9hdDY0CmRlY2F5X3NlY3MGdWludDMyCW1pbl9wcmljZQVhc3NldAltYXhfcHJpY2UFYXNzZXQLdXRpbGl6YXRpb24FaW50NjQUYWRqdXN0ZWRfdXRpbGl6YXRpb24FaW50NjQVdXRpbGl6YXRpb25fdGltZXN0YW1wDnRpbWVfcG9pbnRfc2VjC3Bvd2VydXBleGVjAAIEdXNlcgRuYW1lA21heAZ1aW50MTYNcHJvZHVjZXJfaW5mbwAJBW93bmVyBG5hbWULdG90YWxfdm90ZXMHZmxvYXQ2NAxwcm9kdWNlcl9rZXkKcHVibGljX2tleQlpc19hY3RpdmUEYm9vbAN1cmwGc3RyaW5nDXVucGFpZF9ibG9ja3MGdWludDMyD2xhc3RfY2xhaW1fdGltZQp0aW1lX3BvaW50CGxvY2F0aW9uBnVpbnQxNhJwcm9kdWNlcl9hdXRob3JpdHkYYmxvY2tfc2lnbmluZ19hdXRob3JpdHkkDnByb2R1Y2VyX2luZm8yAAMFb3duZXIEbmFtZQ12b3RlcGF5X3NoYXJlB2Zsb2F0NjQZbGFzdF92b3RlcGF5X3NoYXJlX3VwZGF0ZQp0aW1lX3BvaW50DHByb2R1Y2VyX2tleQACDXByb2R1Y2VyX25hbWUEbmFtZRFibG9ja19zaWduaW5nX2tleQpwdWJsaWNfa2V5EXByb2R1Y2VyX3NjaGVkdWxlAAIHdmVyc2lvbgZ1aW50MzIJcHJvZHVjZXJzDnByb2R1Y2VyX2tleVtdB3JhbWJ1cm4AAwVvd25lcgRuYW1lBWJ5dGVzBWludDY0BG1lbW8Gc3RyaW5nC3JhbXRyYW5zZmVyAAQEZnJvbQRuYW1lAnRvBG5hbWUFYnl0ZXMFaW50NjQEbWVtbwZzdHJpbmcGcmVmdW5kAAEFb3duZXIEbmFtZQ5yZWZ1bmRfcmVxdWVzdAAEBW93bmVyBG5hbWUMcmVxdWVzdF90aW1lDnRpbWVfcG9pbnRfc2VjCm5ldF9hbW91bnQFYXNzZXQKY3B1X2Ftb3VudAVhc3NldAlyZWdmaW5rZXkAAw5maW5hbGl6ZXJfbmFtZQRuYW1lDWZpbmFsaXplcl9rZXkGc3RyaW5nE3Byb29mX29mX3Bvc3Nlc3Npb24Gc3RyaW5nC3JlZ3Byb2R1Y2VyAAQIcHJvZHVjZXIEbmFtZQxwcm9kdWNlcl9rZXkKcHVibGljX2tleQN1cmwGc3RyaW5nCGxvY2F0aW9uBnVpbnQxNgxyZWdwcm9kdWNlcjIABAhwcm9kdWNlcgRuYW1lEnByb2R1Y2VyX2F1dGhvcml0eRdibG9ja19zaWduaW5nX2F1dGhvcml0eQN1cmwGc3RyaW5nCGxvY2F0aW9uBnVpbnQxNghyZWdwcm94eQACBXByb3h5BG5hbWUHaXNwcm94eQRib29sB3JlbnRjcHUABARmcm9tBG5hbWUIcmVjZWl2ZXIEbmFtZQxsb2FuX3BheW1lbnQFYXNzZXQJbG9hbl9mdW5kBWFzc2V0B3JlbnRuZXQABARmcm9tBG5hbWUIcmVjZWl2ZXIEbmFtZQxsb2FuX3BheW1lbnQFYXNzZXQJbG9hbl9mdW5kBWFzc2V0C3JleF9iYWxhbmNlAAYHdmVyc2lvbgV1aW50OAVvd25lcgRuYW1lCnZvdGVfc3Rha2UFYXNzZXQLcmV4X2JhbGFuY2UFYXNzZXQLbWF0dXJlZF9yZXgFaW50NjQOcmV4X21hdHVyaXRpZXMbcGFpcl90aW1lX3BvaW50X3NlY19pbnQ2NFtdCHJleF9mdW5kAAMHdmVyc2lvbgV1aW50OAVvd25lcgRuYW1lB2JhbGFuY2UFYXNzZXQIcmV4X2xvYW4ACAd2ZXJzaW9uBXVpbnQ4BGZyb20EbmFtZQhyZWNlaXZlcgRuYW1lB3BheW1lbnQFYXNzZXQHYmFsYW5jZQVhc3NldAx0b3RhbF9zdGFrZWQFYXNzZXQIbG9hbl9udW0GdWludDY0CmV4cGlyYXRpb24KdGltZV9wb2ludAxyZXhfbWF0dXJpdHkAAxdudW1fb2ZfbWF0dXJpdHlfYnVja2V0cwZ1aW50MzIQc2VsbF9tYXR1cmVkX3JleARib29sEmJ1eV9yZXhfdG9fc2F2aW5ncwRib29sCXJleF9vcmRlcgAHB3ZlcnNpb24FdWludDgFb3duZXIEbmFtZQ1yZXhfcmVxdWVzdGVkBWFzc2V0CHByb2NlZWRzBWFzc2V0DHN0YWtlX2NoYW5nZQVhc3NldApvcmRlcl90aW1lCnRpbWVfcG9pbnQHaXNfb3BlbgRib29sCHJleF9wb29sAAgHdmVyc2lvbgV1aW50OAp0b3RhbF9sZW50BWFzc2V0DHRvdGFsX3VubGVudAVhc3NldAp0b3RhbF9yZW50BWFzc2V0DnRvdGFsX2xlbmRhYmxlBWFzc2V0CXRvdGFsX3JleAVhc3NldBBuYW1lYmlkX3Byb2NlZWRzBWFzc2V0CGxvYW5fbnVtBnVpbnQ2NBJyZXhfcmV0dXJuX2J1Y2tldHMAAgd2ZXJzaW9uBXVpbnQ4DnJldHVybl9idWNrZXRzG3BhaXJfdGltZV9wb2ludF9zZWNfaW50NjRbXQ9yZXhfcmV0dXJuX3Bvb2wABwd2ZXJzaW9uBXVpbnQ4Dmxhc3RfZGlzdF90aW1lDnRpbWVfcG9pbnRfc2VjE3BlbmRpbmdfYnVja2V0X3RpbWUOdGltZV9wb2ludF9zZWMSb2xkZXN0X2J1Y2tldF90aW1lDnRpbWVfcG9pbnRfc2VjF3BlbmRpbmdfYnVja2V0X3Byb2NlZWRzBWludDY0GGN1cnJlbnRfcmF0ZV9vZl9pbmNyZWFzZQVpbnQ2NAhwcm9jZWVkcwVpbnQ2NAdyZXhleGVjAAIEdXNlcgRuYW1lA21heAZ1aW50MTYLcm12cHJvZHVjZXIAAQhwcm9kdWNlcgRuYW1lDnNjaGVkdWxlc19pbmZvAAIKc3RhcnRfdGltZQ50aW1lX3BvaW50X3NlYw9jb250aW51b3VzX3JhdGUHZmxvYXQ2NAdzZWxscmFtAAIHYWNjb3VudARuYW1lBWJ5dGVzBWludDY0B3NlbGxyZXgAAgRmcm9tBG5hbWUDcmV4BWFzc2V0BnNldGFiaQADB2FjY291bnQEbmFtZQNhYmkFYnl0ZXMEbWVtbwdzdHJpbmckCnNldGFjY3RjcHUAAgdhY2NvdW50BG5hbWUKY3B1X3dlaWdodAZpbnQ2ND8Kc2V0YWNjdG5ldAACB2FjY291bnQEbmFtZQpuZXRfd2VpZ2h0BmludDY0PwpzZXRhY2N0cmFtAAIHYWNjb3VudARuYW1lCXJhbV9ieXRlcwZpbnQ2ND8Kc2V0YWxpbWl0cwAEB2FjY291bnQEbmFtZQlyYW1fYnl0ZXMFaW50NjQKbmV0X3dlaWdodAVpbnQ2NApjcHVfd2VpZ2h0BWludDY0B3NldGNvZGUABQdhY2NvdW50BG5hbWUGdm10eXBlBXVpbnQ4CXZtdmVyc2lvbgV1aW50OARjb2RlBWJ5dGVzBG1lbW8Hc3RyaW5nJAxzZXRpbmZsYXRpb24AAwthbm51YWxfcmF0ZQVpbnQ2NBRpbmZsYXRpb25fcGF5X2ZhY3RvcgVpbnQ2NA52b3RlcGF5X2ZhY3RvcgVpbnQ2NAlzZXRwYXJhbXMAAQZwYXJhbXMXYmxvY2tjaGFpbl9wYXJhbWV0ZXJzX3QMc2V0cGF5ZmFjdG9yAAIUaW5mbGF0aW9uX3BheV9mYWN0b3IFaW50NjQOdm90ZXBheV9mYWN0b3IFaW50NjQHc2V0cHJpdgACB2FjY291bnQEbmFtZQdpc19wcml2BXVpbnQ4BnNldHJhbQABDG1heF9yYW1fc2l6ZQZ1aW50NjQKc2V0cmFtcmF0ZQABD2J5dGVzX3Blcl9ibG9jawZ1aW50MTYGc2V0cmV4AAEHYmFsYW5jZQVhc3NldAxzZXRyZXhtYXR1cmUAAxdudW1fb2ZfbWF0dXJpdHlfYnVja2V0cwd1aW50MzI/EHNlbGxfbWF0dXJlZF9yZXgFYm9vbD8SYnV5X3JleF90b19zYXZpbmdzBWJvb2w/C3NldHNjaGVkdWxlAAIKc3RhcnRfdGltZQ50aW1lX3BvaW50X3NlYw9jb250aW51b3VzX3JhdGUHZmxvYXQ2NAxzd2l0Y2h0b3N2bm4AAAx1bmRlbGVnYXRlYncABARmcm9tBG5hbWUIcmVjZWl2ZXIEbmFtZRR1bnN0YWtlX25ldF9xdWFudGl0eQVhc3NldBR1bnN0YWtlX2NwdV9xdWFudGl0eQVhc3NldAt1bmRlbnluYW1lcwABCHBhdHRlcm5zBm5hbWVbXQl1bmdpZnRyYW0AAwRmcm9tBG5hbWUCdG8EbmFtZQRtZW1vBnN0cmluZwp1bmxpbmthdXRoAAQHYWNjb3VudARuYW1lBGNvZGUEbmFtZQR0eXBlBG5hbWUNYXV0aG9yaXplZF9ieQVuYW1lJAl1bnJlZ3Byb2QAAQhwcm9kdWNlcgRuYW1lDHVuc3Rha2V0b3JleAAEBW93bmVyBG5hbWUIcmVjZWl2ZXIEbmFtZQhmcm9tX25ldAVhc3NldAhmcm9tX2NwdQVhc3NldAZ1bnZlc3QAAwdhY2NvdW50BG5hbWUTdW52ZXN0X25ldF9xdWFudGl0eQVhc3NldBN1bnZlc3RfY3B1X3F1YW50aXR5BWFzc2V0CnVwZGF0ZWF1dGgABQdhY2NvdW50BG5hbWUKcGVybWlzc2lvbgRuYW1lBnBhcmVudARuYW1lBGF1dGgJYXV0aG9yaXR5DWF1dGhvcml6ZWRfYnkFbmFtZSQJdXBkYXRlcmV4AAEFb3duZXIEbmFtZQx1cGR0cmV2aXNpb24AAQhyZXZpc2lvbgV1aW50OA51c2VyX3Jlc291cmNlcwAEBW93bmVyBG5hbWUKbmV0X3dlaWdodAVhc3NldApjcHVfd2VpZ2h0BWFzc2V0CXJhbV9ieXRlcwVpbnQ2NAx2b3RlcHJvZHVjZXIAAwV2b3RlcgRuYW1lBXByb3h5BG5hbWUJcHJvZHVjZXJzBm5hbWVbXQp2b3Rlcl9pbmZvAAoFb3duZXIEbmFtZQVwcm94eQRuYW1lCXByb2R1Y2VycwZuYW1lW10Gc3Rha2VkBWludDY0EGxhc3Rfdm90ZV93ZWlnaHQHZmxvYXQ2NBNwcm94aWVkX3ZvdGVfd2VpZ2h0B2Zsb2F0NjQIaXNfcHJveHkEYm9vbAZmbGFnczEGdWludDMyCXJlc2VydmVkMgZ1aW50MzIJcmVzZXJ2ZWQzBWFzc2V0CnZvdGV1cGRhdGUAAQp2b3Rlcl9uYW1lBG5hbWULd2FpdF93ZWlnaHQAAgh3YWl0X3NlYwZ1aW50MzIGd2VpZ2h0BnVpbnQxNgd3YXNtY2ZnAAEIc2V0dGluZ3MEbmFtZQh3aXRoZHJhdwACBW93bmVyBG5hbWUGYW1vdW50BWFzc2V0CmRlbHBlZXJrZXkAAhdwcm9wb3Nlcl9maW5hbGl6ZXJfbmFtZQRuYW1lA2tleQpwdWJsaWNfa2V5C2dldHBlZXJrZXlzAAAIcGVlcl9rZXkAAgdhY2NvdW50BG5hbWUEZGF0YQ92YXJpYW50X3YwX2RhdGEKcGVlcmtleXNfdAACDXByb2R1Y2VyX25hbWUEbmFtZQhwZWVyX2tleQtwdWJsaWNfa2V5PwpyZWdwZWVya2V5AAIXcHJvcG9zZXJfZmluYWxpemVyX25hbWUEbmFtZQNrZXkKcHVibGljX2tleQd2MF9kYXRhAAEGcHVia2V5C3B1YmxpY19rZXk/EWxpbWl0X2F1dGhfY2hhbmdlAAQHdmVyc2lvbgV1aW50OAdhY2NvdW50BG5hbWULYWxsb3dfcGVybXMGbmFtZVtdDmRpc2FsbG93X3Blcm1zBm5hbWVbXVsAAPAKTrcyMglhY3RmaW5rZXkAAAAAKpvtMjIIYWN0aXZhdGWIAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEFjdGl2YXRlIFByb3RvY29sIEZlYXR1cmUKc3VtbWFyeTogJ0FjdGl2YXRlIHByb3RvY29sIGZlYXR1cmUge3tub3dyYXAgZmVhdHVyZV9kaWdlc3R9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FkbWluLnBuZyM5YmYxY2VjNjY0ODYzYmQ2YWFhYzBmODE0YjIzNWY4Nzk5ZmIwMmM4NTBlOWFhNWRhMzRlOGEwMDRiZDY1MThlCi0tLQoKe3skYWN0aW9uLmFjY291bnR9fSBhY3RpdmF0ZXMgdGhlIHByb3RvY29sIGZlYXR1cmUgd2l0aCBhIGRpZ2VzdCBvZiB7e2ZlYXR1cmVfZGlnZXN0fX0uAAAAQEkzkzsHYmlkbmFtZakOLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQmlkIE9uIGEgUHJlbWl1bSBBY2NvdW50IE5hbWUKc3VtbWFyeTogJ3t7bm93cmFwIGJpZGRlcn19IGJpZHMgb24gdGhlIHByZW1pdW0gYWNjb3VudCBuYW1lIHt7bm93cmFwIG5ld25hbWV9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FjY291bnQucG5nIzNkNTVhMmZjM2E1YzIwYjQ1NmY1NjU3ZmFmNjY2YmMyNWZmZDA2ZjQ4MzZjNWU4MjU2Zjc0MTE0OWIwYjI5NGYKLS0tCgp7e2JpZGRlcn19IGJpZHMge3tiaWR9fSBvbiBhbiBhdWN0aW9uIHRvIG93biB0aGUgcHJlbWl1bSBhY2NvdW50IG5hbWUge3tuZXduYW1lfX0uCgp7e2JpZGRlcn19IHRyYW5zZmVycyB7e2JpZH19IHRvIHRoZSBzeXN0ZW0gdG8gY292ZXIgdGhlIGNvc3Qgb2YgdGhlIGJpZCwgd2hpY2ggd2lsbCBiZSByZXR1cm5lZCB0byB7e2JpZGRlcn19IG9ubHkgaWYge3tiaWRkZXJ9fSBpcyBsYXRlciBvdXRiaWQgaW4gdGhlIGF1Y3Rpb24gZm9yIHt7bmV3bmFtZX19IGJ5IGFub3RoZXIgYWNjb3VudC4KCklmIHRoZSBhdWN0aW9uIGZvciB7e25ld25hbWV9fSBjbG9zZXMgd2l0aCB7e2JpZGRlcn19IHJlbWFpbmluZyBhcyB0aGUgaGlnaGVzdCBiaWRkZXIsIHt7YmlkZGVyfX0gd2lsbCBiZSBhdXRob3JpemVkIHRvIGNyZWF0ZSB0aGUgYWNjb3VudCB3aXRoIG5hbWUge3tuZXduYW1lfX0uCgojIyBCaWQgcmVmdW5kIGJlaGF2aW9yCgpJZiB7e2JpZGRlcn194oCZcyBiaWQgb24ge3tuZXduYW1lfX0gaXMgbGF0ZXIgb3V0YmlkIGJ5IGFub3RoZXIgYWNjb3VudCwge3tiaWRkZXJ9fSB3aWxsIGJlIGFibGUgdG8gY2xhaW0gYmFjayB0aGUgdHJhbnNmZXJyZWQgYW1vdW50IG9mIHt7YmlkfX0uIFRoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgZG8gdGhpcyBvbiBiZWhhbGYgb2Yge3tiaWRkZXJ9fSwgYnV0IHRoZSBhdXRvbWF0aWMgcmVmdW5kIG1heSBvY2Nhc2lvbmFsbHkgZmFpbCB3aGljaCB3aWxsIHRoZW4gcmVxdWlyZSB7e2JpZGRlcn19IHRvIG1hbnVhbGx5IGNsYWltIHRoZSByZWZ1bmQgd2l0aCB0aGUgYmlkcmVmdW5kIGFjdGlvbi4KCiMjIEF1Y3Rpb24gY2xvc2UgY3JpdGVyaWEKClRoZSBzeXN0ZW0gc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGF1Y3Rpb24gZm9yIHt7bmV3bmFtZX19IGlmIGl0IHNhdGlzZmllcyB0aGUgY29uZGl0aW9uIHRoYXQgb3ZlciBhIHBlcmlvZCBvZiB0d28gbWludXRlcyB0aGUgZm9sbG93aW5nIHR3byBwcm9wZXJ0aWVzIGNvbnRpbnVvdXNseSBob2xkOgoKLSBubyBvbmUgaGFzIGJpZCBvbiB7e25ld25hbWV9fSB3aXRoaW4gdGhlIGxhc3QgMjQgaG91cnM7Ci0gYW5kLCB0aGUgdmFsdWUgb2YgdGhlIGxhdGVzdCBiaWQgb24ge3tuZXduYW1lfX0gaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiB0aGUgYmlkcyBvbiBlYWNoIG9mIHRoZSBvdGhlciBvcGVuIGF1Y3Rpb25zLgoKQmUgYXdhcmUgdGhhdCB0aGUgY29uZGl0aW9uIHRvIGNsb3NlIHRoZSBhdWN0aW9uIGRlc2NyaWJlZCBhYm92ZSBhcmUgc3VmZmljaWVudCBidXQgbm90IG5lY2Vzc2FyeS4gVGhlIGF1Y3Rpb24gZm9yIHt7bmV3bmFtZX19IGNhbm5vdCBjbG9zZSB1bmxlc3MgYm90aCBvZiB0aGUgcHJvcGVydGllcyBhcmUgc2ltdWx0YW5lb3VzbHkgc2F0aXNmaWVkLCBidXQgaXQgbWF5IGJlIGNsb3NlZCB3aXRob3V0IHJlcXVpcmluZyB0aGUgcHJvcGVydGllcyB0byBob2xkIGZvciBhIHBlcmlvZCBvZiAyIG1pbnV0ZXMuAABIUy91kzsJYmlkcmVmdW5k9AItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBDbGFpbSBSZWZ1bmQgb24gTmFtZSBCaWQKc3VtbWFyeTogJ0NsYWltIHJlZnVuZCBvbiB7e25vd3JhcCBuZXduYW1lfX0gYmlkJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWNjb3VudC5wbmcjM2Q1NWEyZmMzYTVjMjBiNDU2ZjU2NTdmYWY2NjZiYzI1ZmZkMDZmNDgzNmM1ZTgyNTZmNzQxMTQ5YjBiMjk0ZgotLS0KCnt7YmlkZGVyfX0gY2xhaW1zIHJlZnVuZCBvbiB7e25ld25hbWV9fSBiaWQgYWZ0ZXIgYmVpbmcgb3V0YmlkIGJ5IHNvbWVvbmUgZWxzZS4AAAAASHO9PgZidXlyYW36Ay0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEJ1eSBSQU0Kc3VtbWFyeTogJ3t7bm93cmFwIHBheWVyfX0gYnV5cyBSQU0gb24gYmVoYWxmIG9mIHt7bm93cmFwIHJlY2VpdmVyfX0gYnkgcGF5aW5nIHt7bm93cmFwIHF1YW50fX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXNvdXJjZS5wbmcjMzgzMGYxY2U4Y2IwN2Y3NzU3ZGJjZjM4M2IxZWMxYjExOTE0YWMzNGExZjlkOGIwNjVmMDc2MDBmYTlkYWMxOQotLS0KCnt7cGF5ZXJ9fSBidXlzIFJBTSBvbiBiZWhhbGYgb2Yge3tyZWNlaXZlcn19IGJ5IHBheWluZyB7e3F1YW50fX0uIFRoaXMgdHJhbnNhY3Rpb24gd2lsbCBpbmN1ciBhIDAuNSUgZmVlIG91dCBvZiB7e3F1YW50fX0gYW5kIHRoZSBhbW91bnQgb2YgUkFNIGRlbGl2ZXJlZCB3aWxsIGRlcGVuZCBvbiBtYXJrZXQgcmF0ZXMuAMC8+khzvT4KYnV5cmFtYnVybsADLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQnV5IGFuZCBCdXJuIFJBTQpzdW1tYXJ5OiAnQnV5IGFuZCBpbW1lZGlhdGVseSBCdXJuIHt7cXVhbnRpdHl9fSBvZiBSQU0gZnJvbSB7e25vd3JhcCBwYXllcn19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmVzb3VyY2UucG5nIzM4MzBmMWNlOGNiMDdmNzc1N2RiY2YzODNiMWVjMWIxMTkxNGFjMzRhMWY5ZDhiMDY1ZjA3NjAwZmE5ZGFjMTkKLS0tCgpCdXkgYW5kIEJ1cm4ge3txdWFudGl0eX19IG9mIFJBTSBmcm9tIGFjY291bnQge3twYXllcn19LgoKe3sjaWYgbWVtb319VGhlcmUgaXMgYSBtZW1vIGF0dGFjaGVkIHRvIHRoZSBhY3Rpb24gc3RhdGluZzoKe3ttZW1vfX0Ke3svaWZ9fQCwyv5Ic70+C2J1eXJhbWJ5dGVzgQQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBCdXkgUkFNCnN1bW1hcnk6ICd7e25vd3JhcCBwYXllcn19IGJ1eXMge3tub3dyYXAgYnl0ZXN9fSBieXRlcyBvZiBSQU0gb24gYmVoYWxmIG9mIHt7bm93cmFwIHJlY2VpdmVyfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXNvdXJjZS5wbmcjMzgzMGYxY2U4Y2IwN2Y3NzU3ZGJjZjM4M2IxZWMxYjExOTE0YWMzNGExZjlkOGIwNjVmMDc2MDBmYTlkYWMxOQotLS0KCnt7cGF5ZXJ9fSBidXlzIGFwcHJveGltYXRlbHkge3tieXRlc319IGJ5dGVzIG9mIFJBTSBvbiBiZWhhbGYgb2Yge3tyZWNlaXZlcn19IGJ5IHBheWluZyBtYXJrZXQgcmF0ZXMgZm9yIFJBTS4gVGhpcyB0cmFuc2FjdGlvbiB3aWxsIGluY3VyIGEgMC41JSBmZWUgYW5kIHRoZSBjb3N0IHdpbGwgZGVwZW5kIG9uIG1hcmtldCByYXRlcy4AwIoKS3O9PgpidXlyYW1zZWxm2AMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBCdXkgUkFNIHNlbGYKc3VtbWFyeTogJ3t7bm93cmFwIGFjY291bnR9fSBidXlzIFJBTSB0byBzZWxmIGJ5IHBheWluZyB7e25vd3JhcCBxdWFudH19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmVzb3VyY2UucG5nIzM4MzBmMWNlOGNiMDdmNzc1N2RiY2YzODNiMWVjMWIxMTkxNGFjMzRhMWY5ZDhiMDY1ZjA3NjAwZmE5ZGFjMTkKLS0tCgp7e2FjY291bnR9fSBidXlzIFJBTSB0byBzZWxmIGJ5IHBheWluZyB7e3F1YW50fX0uIFRoaXMgdHJhbnNhY3Rpb24gd2lsbCBpbmN1ciBhIDAuNSUgZmVlIG91dCBvZiB7e3F1YW50fX0gYW5kIHRoZSBhbW91bnQgb2YgUkFNIGRlbGl2ZXJlZCB3aWxsIGRlcGVuZCBvbiBtYXJrZXQgcmF0ZXMuAAAAAHR1vT4GYnV5cmV41wYtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBCdXkgUkVYIFRva2VucwpzdW1tYXJ5OiAne3tub3dyYXAgZnJvbX19IGJ1eXMgUkVYIHRva2VucyBpbiBleGNoYW5nZSBmb3Ige3tub3dyYXAgYW1vdW50fX0gYW5kIHRoZWlyIHZvdGUgc3Rha2UgaW5jcmVhc2VzIGJ5IHt7bm93cmFwIGFtb3VudH19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3thbW91bnR9fSBpcyB0YWtlbiBvdXQgb2Yge3tmcm9tfX3igJlzIFJFWCBmdW5kIGFuZCB1c2VkIHRvIHB1cmNoYXNlIFJFWCB0b2tlbnMgYXQgdGhlIGN1cnJlbnQgbWFya2V0IGV4Y2hhbmdlIHJhdGUuIEluIG9yZGVyIGZvciB0aGUgYWN0aW9uIHRvIHN1Y2NlZWQsIHt7ZnJvbX19IG11c3QgaGF2ZSB2b3RlZCBmb3IgYSBwcm94eSBvciBhdCBsZWFzdCAyMSBibG9jayBwcm9kdWNlcnMuIHt7YW1vdW50fX0gaXMgYWRkZWQgdG8ge3tmcm9tfX3igJlzIHZvdGUgc3Rha2UuCgpBIHNlbGwgb3JkZXIgb2YgdGhlIHB1cmNoYXNlZCBhbW91bnQgY2FuIG9ubHkgYmUgaW5pdGlhdGVkIGFmdGVyIHdhaXRpbmcgZm9yIHRoZSBtYXR1cml0eSBwZXJpb2Qgb2YgNCB0byA1IGRheXMgdG8gcGFzcy4gRXZlbiB0aGVuLCBkZXBlbmRpbmcgb24gdGhlIG1hcmtldCBjb25kaXRpb25zLCB0aGUgaW5pdGlhdGVkIHNlbGwgb3JkZXIgbWF5IG5vdCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4AvIkqRYWmQQtjYW5jZWxkZWxheYoDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ2FuY2VsIERlbGF5ZWQgVHJhbnNhY3Rpb24Kc3VtbWFyeTogJ3t7bm93cmFwIGNhbmNlbGluZ19hdXRoLmFjdG9yfX0gY2FuY2VscyBhIGRlbGF5ZWQgdHJhbnNhY3Rpb24nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hY2NvdW50LnBuZyMzZDU1YTJmYzNhNWMyMGI0NTZmNTY1N2ZhZjY2NmJjMjVmZmQwNmY0ODM2YzVlODI1NmY3NDExNDliMGIyOTRmCi0tLQoKe3tjYW5jZWxpbmdfYXV0aC5hY3Rvcn19IGNhbmNlbHMgdGhlIGRlbGF5ZWQgdHJhbnNhY3Rpb24gd2l0aCBpZCB7e3RyeF9pZH19LgBA1VdxWtlCCmNmZ3Bvd2VydXAAgNM1XF3pTEQMY2xhaW1yZXdhcmRz5wItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBDbGFpbSBCbG9jayBQcm9kdWNlciBSZXdhcmRzCnN1bW1hcnk6ICd7e25vd3JhcCBvd25lcn19IGNsYWltcyBibG9jayBhbmQgdm90ZSByZXdhcmRzJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgp7e293bmVyfX0gY2xhaW1zIGJsb2NrIGFuZCB2b3RlIHJld2FyZHMgZnJvbSB0aGUgc3lzdGVtLgAAAF1dhWlECGNsb3NlcmV4lAQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBDbGVhbnVwIFVudXNlZCBSRVggRGF0YQpzdW1tYXJ5OiAnRGVsZXRlIFJFWCByZWxhdGVkIERCIGVudHJpZXMgYW5kIGZyZWUgYXNzb2NpYXRlZCBSQU0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXgucG5nI2QyMjk4MzdmYTYyYTQ2NGI5YzcxZTA2MDYwYWE4NjE3OWFkZjBiM2Y0ZTNiOGM0Zjk3MDJmNGY0YjBjMzQwYTgKLS0tCgpEZWxldGUgUkVYIHJlbGF0ZWQgREIgZW50cmllcyBhbmQgZnJlZSBhc3NvY2lhdGVkIFJBTSBmb3Ige3tvd25lcn19LgoKVG8gZnVsbHkgZGVsZXRlIGFsbCBSRVggcmVsYXRlZCBEQiBlbnRyaWVzLCB7e293bmVyfX0gbXVzdCBlbnN1cmUgdGhhdCB0aGVpciBSRVggYmFsYW5jZSBhbmQgUkVYIGZ1bmQgYW1vdW50cyBhcmUgYm90aCB6ZXJvIGFuZCB0aGV5IGhhdmUgbm8gb3V0c3RhbmRpbmcgbG9hbnMucFW6tKsb0UQMY25jbHJleG9yZGVy6wItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBDYW5jZWwgU2NoZWR1bGVkIFJFWCBTZWxsIE9yZGVyCnN1bW1hcnk6ICd7e25vd3JhcCBvd25lcn19IGNhbmNlbHMgYSBzY2hlZHVsZWQgc2VsbCBvcmRlciBpZiBub3QgeWV0IGZpbGxlZCcKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7b3duZXJ9fSBjYW5jZWxzIHRoZWlyIG9wZW4gc2VsbCBvcmRlci4AVDbJRYonRQtjb25zb2xpZGF0ZaYDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ29uc29saWRhdGUgUkVYIE1hdHVyaXR5IEJ1Y2tldHMgSW50byBPbmUKc3VtbWFyeTogJ0NvbnNvbGlkYXRlIFJFWCBtYXR1cml0eSBidWNrZXRzIGludG8gb25lJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKQ29uc29saWRhdGUgUkVYIG1hdHVyaXR5IGJ1Y2tldHMgaW50byBvbmUgYnVja2V0IHRoYXQge3tvd25lcn19IHdpbGwgbm90IGJlIGFibGUgdG8gc2VsbCB1bnRpbCA0IHRvIDUgZGF5cyBsYXRlci4AwDQ06oqWSgpkZWZjcHVsb2Fu3gMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBXaXRoZHJhdyBmcm9tIHRoZSBGdW5kIG9mIGEgU3BlY2lmaWMgQ1BVIExvYW4Kc3VtbWFyeTogJ3t7bm93cmFwIGZyb219fSB0cmFuc2ZlcnMge3tub3dyYXAgYW1vdW50fX0gZnJvbSB0aGUgZnVuZCBvZiBDUFUgbG9hbiBudW1iZXIge3tub3dyYXAgbG9hbl9udW19fSBiYWNrIHRvIFJFWCBmdW5kJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3tmcm9tfX0gdHJhbnNmZXJzIHt7YW1vdW50fX0gZnJvbSB0aGUgZnVuZCBvZiBDUFUgbG9hbiBudW1iZXIge3tsb2FuX251bX19IGJhY2sgdG8gUkVYIGZ1bmQuAMA0NGY1l0oKZGVmbmV0bG9hbt4DLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogV2l0aGRyYXcgZnJvbSB0aGUgRnVuZCBvZiBhIFNwZWNpZmljIE5FVCBMb2FuCnN1bW1hcnk6ICd7e25vd3JhcCBmcm9tfX0gdHJhbnNmZXJzIHt7bm93cmFwIGFtb3VudH19IGZyb20gdGhlIGZ1bmQgb2YgTkVUIGxvYW4gbnVtYmVyIHt7bm93cmFwIGxvYW5fbnVtfX0gYmFjayB0byBSRVggZnVuZCcKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7ZnJvbX19IHRyYW5zZmVycyB7e2Ftb3VudH19IGZyb20gdGhlIGZ1bmQgb2YgTkVUIGxvYW4gbnVtYmVyIHt7bG9hbl9udW19fSBiYWNrIHRvIFJFWCBmdW5kLgAAPyobpqJKCmRlbGVnYXRlYnfzBi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFN0YWtlIFRva2VucyBmb3IgTkVUIGFuZC9vciBDUFUKc3VtbWFyeTogJ1N0YWtlIHRva2VucyBmb3IgTkVUIGFuZC9vciBDUFUgYW5kIG9wdGlvbmFsbHkgdHJhbnNmZXIgb3duZXJzaGlwJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmVzb3VyY2UucG5nIzM4MzBmMWNlOGNiMDdmNzc1N2RiY2YzODNiMWVjMWIxMTkxNGFjMzRhMWY5ZDhiMDY1ZjA3NjAwZmE5ZGFjMTkKLS0tCgp7eyNpZiB0cmFuc2Zlcn19IHt7ZnJvbX19IHN0YWtlcyBvbiBiZWhhbGYgb2Yge3tyZWNlaXZlcn19IHt7c3Rha2VfbmV0X3F1YW50aXR5fX0gZm9yIE5FVCBiYW5kd2lkdGggYW5kIHt7c3Rha2VfY3B1X3F1YW50aXR5fX0gZm9yIENQVSBiYW5kd2lkdGguCgpTdGFrZWQgdG9rZW5zIHdpbGwgYWxzbyBiZSB0cmFuc2ZlcnJlZCB0byB7e3JlY2VpdmVyfX0uIFRoZSBzdW0gb2YgdGhlc2UgdHdvIHF1YW50aXRpZXMgd2lsbCBiZSBkZWR1Y3RlZCBmcm9tIHt7ZnJvbX194oCZcyBsaXF1aWQgYmFsYW5jZSBhbmQgYWRkIHRvIHRoZSB2b3RlIHdlaWdodCBvZiB7e3JlY2VpdmVyfX0uCnt7ZWxzZX19Cnt7ZnJvbX19IHN0YWtlcyB0byBzZWxmIGFuZCBkZWxlZ2F0ZXMgdG8ge3tyZWNlaXZlcn19IHt7c3Rha2VfbmV0X3F1YW50aXR5fX0gZm9yIE5FVCBiYW5kd2lkdGggYW5kIHt7c3Rha2VfY3B1X3F1YW50aXR5fX0gZm9yIENQVSBiYW5kd2lkdGguCgpUaGUgc3VtIG9mIHRoZXNlIHR3byBxdWFudGl0aWVzIGFkZCB0byB0aGUgdm90ZSB3ZWlnaHQgb2Yge3tmcm9tfX0uCnt7L2lmfX0AQMvaqKyiSgpkZWxldGVhdXRo9QItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEZWxldGUgQWNjb3VudCBQZXJtaXNzaW9uCnN1bW1hcnk6ICdEZWxldGUgdGhlIHt7bm93cmFwIHBlcm1pc3Npb259fSBwZXJtaXNzaW9uIG9mIHt7bm93cmFwIGFjY291bnR9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FjY291bnQucG5nIzNkNTVhMmZjM2E1YzIwYjQ1NmY1NjU3ZmFmNjY2YmMyNWZmZDA2ZjQ4MzZjNWU4MjU2Zjc0MTE0OWIwYjI5NGYKLS0tCgpEZWxldGUgdGhlIHt7cGVybWlzc2lvbn19IHBlcm1pc3Npb24gb2Yge3thY2NvdW50fX0uAADwCk63okoJZGVsZmlua2V5AABU1Ek1hKNKC2RlbHNjaGVkdWxl/AItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEZWxldGUgQW5udWFsIFJhdGUgU2NoZWR1bGUKc3VtbWFyeTogJ0RlbGV0ZSBhbm51YWwgcmF0ZSBzY2hlZHVsZScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FkbWluLnBuZyM5YmYxY2VjNjY0ODYzYmQ2YWFhYzBmODE0YjIzNWY4Nzk5ZmIwMmM4NTBlOWFhNWRhMzRlOGEwMDRiZDY1MThlCi0tLQoKe3skYWN0aW9uLmFjY291bnR9fSB0byBkZWxldGUgYSBwcmUtZGV0ZXJtaW5lZCBpbmZsYXRpb24gc2NoZWR1bGUgZnJvbSB7e3N0YXJ0X3RpbWV9fSBzdGFydCB0aW1lLgBSMg2b5qdKC2RlbnloYXNoYWRkAICiQQ2b5qdKDGRlbnloYXNoY2FsYwAAgLwNm+anSgpkZW55aGFzaHJtAAAAwEqa6adKCWRlbnluYW1lcwAAAAAgO0yrSgdkZXBvc2l0iAQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEZXBvc2l0IEludG8gUkVYIEZ1bmQKc3VtbWFyeTogJ0FkZCB0byB7e25vd3JhcCBvd25lcn194oCZcyBSRVggZnVuZCBieSB0cmFuc2ZlcnJpbmcge3tub3dyYXAgYW1vdW50fX0gZnJvbSB7e25vd3JhcCBvd25lcn194oCZcyBsaXF1aWQgYmFsYW5jZScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KClRyYW5zZmVyIHt7YW1vdW50fX0gZnJvbSB7e293bmVyfX3igJlzIGxpcXVpZCBiYWxhbmNlIHRvIHt7b3duZXJ9feKAmXMgUkVYIGZ1bmQuIEFsbCBwcm9jZWVkcyBhbmQgZXhwZW5zZXMgcmVsYXRlZCB0byBSRVggYXJlIGFkZGVkIHRvIG9yIHRha2VuIG91dCBvZiB0aGlzIGZ1bmQuALq6NKtsJk0LZG9uYXRldG9yZXilAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IERvbmF0ZSBzeXN0ZW0gdG9rZW5zIHRvIFJFWApzdW1tYXJ5OiAne3tub3dyYXAgcGF5ZXJ9fSBkb25hdGVzIHt7bm93cmFwIHF1YW50aXR5fX0gdG9rZW5zIHRvIFJFWCcKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7cXVhbnRpdHl9fSBpcyB0YWtlbiBvdXQgb2Yge3twYXllcn194oCZcyB0b2tlbiBiYWxhbmNlIGFuZCBnaXZlbiB0byBSRVggd2l0aCB0aGUgaW5jbHVkZWQgbWVtbzogInt7bWVtb319Ii6gok6qIYxUVwxleGVjc2NoZWR1bGXtAi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEV4ZWN1dGUgTmV4dCBBbm51YWwgUmF0ZSBTY2hlZHVsZQpzdW1tYXJ5OiAnRXhlY3V0ZSBuZXh0IGFubnVhbCByYXRlIHNjaGVkdWxlJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgp7eyRhY3Rpb24uYWNjb3VudH19IHRvIGV4ZWN1dGUgdGhlIG5leHQgdXBjb21pbmcgYW5udWFsIHJhdGUgc2NoZWR1bGUuAKahUVeUpl4LZnVuZGNwdWxvYW78Ay0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IERlcG9zaXQgaW50byB0aGUgRnVuZCBvZiBhIFNwZWNpZmljIENQVSBMb2FuCnN1bW1hcnk6ICd7e25vd3JhcCBmcm9tfX0gZnVuZHMgYSBDUFUgbG9hbicKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7ZnJvbX19IHRyYW5zZmVycyB7e3BheW1lbnR9fSBmcm9tIFJFWCBmdW5kIHRvIHRoZSBmdW5kIG9mIENQVSBsb2FuIG51bWJlciB7e2xvYW5fbnVtfX0gaW4gb3JkZXIgdG8gYmUgdXNlZCBpbiBsb2FuIHJlbmV3YWwgYXQgZXhwaXJ5LiB7e2Zyb219fSBjYW4gd2l0aGRyYXcgdGhlIHRvdGFsIGJhbGFuY2Ugb2YgdGhlIGxvYW4gZnVuZCBhdCBhbnkgdGltZS4ApqExq5mmXgtmdW5kbmV0bG9hbvwDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogRGVwb3NpdCBpbnRvIHRoZSBGdW5kIG9mIGEgU3BlY2lmaWMgTkVUIExvYW4Kc3VtbWFyeTogJ3t7bm93cmFwIGZyb219fSBmdW5kcyBhIE5FVCBsb2FuJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3tmcm9tfX0gdHJhbnNmZXJzIHt7cGF5bWVudH19IGZyb20gUkVYIGZ1bmQgdG8gdGhlIGZ1bmQgb2YgTkVUIGxvYW4gbnVtYmVyIHt7bG9hbl9udW19fSBpbiBvcmRlciB0byBiZSB1c2VkIGluIGxvYW4gcmVuZXdhbCBhdCBleHBpcnkuIHt7ZnJvbX19IGNhbiB3aXRoZHJhdyB0aGUgdG90YWwgYmFsYW5jZSBvZiB0aGUgbG9hbiBmdW5kIGF0IGFueSB0aW1lLgAAAECam5djB2dpZnRyYW0AAAAAAACQ3XQEaW5pdOMCLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogSW5pdGlhbGl6ZSBTeXN0ZW0gQ29udHJhY3QKc3VtbWFyeTogJ0luaXRpYWxpemUgc3lzdGVtIGNvbnRyYWN0JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgpJbml0aWFsaXplIHN5c3RlbSBjb250cmFjdC4gVGhlIGNvcmUgdG9rZW4gc3ltYm9sIHdpbGwgYmUgc2V0IHRvIHt7Y29yZX19LsAaalmb7KSLDGxpbWl0YXV0aGNoZwAAAAAtawOniwhsaW5rYXV0aJ0FLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogTGluayBBY3Rpb24gdG8gUGVybWlzc2lvbgpzdW1tYXJ5OiAne3tub3dyYXAgYWNjb3VudH19IHNldHMgdGhlIG1pbmltdW0gcmVxdWlyZWQgcGVybWlzc2lvbiBmb3IgdGhlIHt7I2lmIHR5cGV9fXt7bm93cmFwIHR5cGV9fSBhY3Rpb24gb2YgdGhle3svaWZ9fSB7e25vd3JhcCBjb2RlfX0gY29udHJhY3QgdG8ge3tub3dyYXAgcmVxdWlyZW1lbnR9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FjY291bnQucG5nIzNkNTVhMmZjM2E1YzIwYjQ1NmY1NjU3ZmFmNjY2YmMyNWZmZDA2ZjQ4MzZjNWU4MjU2Zjc0MTE0OWIwYjI5NGYKLS0tCgp7e2FjY291bnR9fSBzZXRzIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHBlcm1pc3Npb24gZm9yIHRoZSB7eyNpZiB0eXBlfX17e3R5cGV9fSBhY3Rpb24gb2YgdGhle3svaWZ9fSB7e2NvZGV9fSBjb250cmFjdCB0byB7e3JlcXVpcmVtZW50fX0uCgp7eyNpZiB0eXBlfX17e2Vsc2V9fUFueSBsaW5rcyBleHBsaWNpdGx5IGFzc29jaWF0ZWQgdG8gc3BlY2lmaWMgYWN0aW9ucyBvZiB7e2NvZGV9fSB3aWxsIHRha2UgcHJlY2VkZW5jZS57ey9pZn19AACQ5np9GI0JbG9nYnV5cmFtAKDYNA1JcxmNDGxvZ3JhbWNoYW5nZQAAgDQ3RoUZjQpsb2dzZWxscmFtAKDUkipjjxmNDGxvZ3N5c3RlbWZlZQAAMJtuG3zXlgttdmZyc2F2aW5nc5wDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogVW5sb2NrIFJFWCBUb2tlbnMKc3VtbWFyeTogJ3t7bm93cmFwIG93bmVyfX0gdW5sb2NrcyBSRVggVG9rZW5zJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3tvd25lcn19IHVubG9ja3Mge3tyZXh9fSBieSBtb3ZpbmcgaXQgb3V0IG9mIHRoZSBSRVggc2F2aW5ncyBidWNrZXQuIFRoZSB1bmxvY2tlZCBSRVggdG9rZW5zIGNhbm5vdCBiZSBzb2xkIHVudGlsIDQgdG8gNSBkYXlzIGxhdGVyLgAwm24bTPOWC212dG9zYXZpbmdzugMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBMb2NrIFJFWCBUb2tlbnMKc3VtbWFyeTogJ3t7bm93cmFwIG93bmVyfX0gbG9ja3MgUkVYIFRva2VucycKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7b3duZXJ9fSBsb2NrcyB7e3JleH19IGJ5IG1vdmluZyBpdCBpbnRvIHRoZSBSRVggc2F2aW5ncyBidWNrZXQuIFRoZSBsb2NrZWQgUkVYIHRva2VucyBjYW5ub3QgYmUgc29sZCBkaXJlY3RseSBhbmQgd2lsbCBoYXZlIHRvIGJlIHVubG9ja2VkIGV4cGxpY2l0bHkgYmVmb3JlIHNlbGxpbmcuAECemiJkuJoKbmV3YWNjb3VudIAELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ3JlYXRlIE5ldyBBY2NvdW50CnN1bW1hcnk6ICd7e25vd3JhcCBjcmVhdG9yfX0gY3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggdGhlIG5hbWUge3tub3dyYXAgbmFtZX19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWNjb3VudC5wbmcjM2Q1NWEyZmMzYTVjMjBiNDU2ZjU2NTdmYWY2NjZiYzI1ZmZkMDZmNDgzNmM1ZTgyNTZmNzQxMTQ5YjBiMjk0ZgotLS0KCnt7Y3JlYXRvcn19IGNyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIHRoZSBuYW1lIHt7bmFtZX19IGFuZCB0aGUgZm9sbG93aW5nIHBlcm1pc3Npb25zOgoKb3duZXIgcGVybWlzc2lvbiB3aXRoIGF1dGhvcml0eToKe3t0b19qc29uIG93bmVyfX0KCmFjdGl2ZSBwZXJtaXNzaW9uIHdpdGggYXV0aG9yaXR5Ogp7e3RvX2pzb24gYWN0aXZlfX0AAAAAIhrPpAdvbmJsb2NrAAAAAODSe9WkB29uZXJyb3IAAAAAoOqrOK0HcG93ZXJ1cNQCLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUG93ZXJ1cCByZXNvdXJjZXMKc3VtbWFyeTogJ1VzZXIgbWF5IHBvd2VydXAgdG8gcmVzZXJ2ZSByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXNvdXJjZS5wbmcjMzgzMGYxY2U4Y2IwN2Y3NzU3ZGJjZjM4M2IxZWMxYjExOTE0YWMzNGExZjlkOGIwNjVmMDc2MDBmYTlkYWMxOQotLS0KClVzZXJzIG1heSB1c2UgdGhlIHBvd2VydXAgYWN0aW9uIHRvIHJlc2VydmUgcmVzb3VyY2VzLgCQ6qrqqzitC3Bvd2VydXBleGVjAAAAAGBefaS5B3JhbWJ1cm6oAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEJ1cm4gUkFNIGZyb20gQWNjb3VudApzdW1tYXJ5OiAnQnVybiB1bnVzZWQgUkFNIGZyb20ge3tub3dyYXAgb3duZXJ9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3Jlc291cmNlLnBuZyMzODMwZjFjZThjYjA3Zjc3NTdkYmNmMzgzYjFlYzFiMTE5MTRhYzM0YTFmOWQ4YjA2NWYwNzYwMGZhOWRhYzE5Ci0tLQoKQnVybiB7e2J5dGVzfX0gYnl0ZXMgb2YgdW51c2VkIFJBTSBmcm9tIGFjY291bnQge3tvd25lcn19LgoKe3sjaWYgbWVtb319VGhlcmUgaXMgYSBtZW1vIGF0dGFjaGVkIHRvIHRoZSBidXJuIHN0YXRpbmc6Cnt7bWVtb319Cnt7L2lmfX0Arlp4mpuluQtyYW10cmFuc2ZlctkDLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogVHJhbnNmZXIgUkFNIGZyb20gQWNjb3VudApzdW1tYXJ5OiAnVHJhbnNmZXIgdW51c2VkIFJBTSBmcm9tIHt7bm93cmFwIGZyb219fSB0byB7e25vd3JhcCB0b319JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmVzb3VyY2UucG5nIzM4MzBmMWNlOGNiMDdmNzc1N2RiY2YzODNiMWVjMWIxMTkxNGFjMzRhMWY5ZDhiMDY1ZjA3NjAwZmE5ZGFjMTkKLS0tCgpUcmFuc2ZlciB7e2J5dGVzfX0gYnl0ZXMgb2YgdW51c2VkIFJBTSBmcm9tIGFjY291bnQge3tmcm9tfX0gdG8gYWNjb3VudCB7e3RvfX0uCgp7eyNpZiBtZW1vfX1UaGVyZSBpcyBhIG1lbW8gYXR0YWNoZWQgdG8gdGhlIHRyYW5zZmVyIHN0YXRpbmc6Cnt7bWVtb319Cnt7L2lmfX0AAAAApKmXugZyZWZ1bmSHAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IENsYWltIFVuc3Rha2VkIFRva2VucwpzdW1tYXJ5OiAnUmV0dXJuIHByZXZpb3VzbHkgdW5zdGFrZWQgdG9rZW5zIHRvIHt7bm93cmFwIG93bmVyfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hY2NvdW50LnBuZyMzZDU1YTJmYzNhNWMyMGI0NTZmNTY1N2ZhZjY2NmJjMjVmZmQwNmY0ODM2YzVlODI1NmY3NDExNDliMGIyOTRmCi0tLQoKUmV0dXJuIHByZXZpb3VzbHkgdW5zdGFrZWQgdG9rZW5zIHRvIHt7b3duZXJ9fSBhZnRlciB0aGUgdW5zdGFraW5nIHBlcmlvZCBoYXMgZWxhcHNlZC4AAPAKTreYuglyZWdmaW5rZXkAAK5COtFbmboLcmVncHJvZHVjZXKZBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFJlZ2lzdGVyIGFzIGEgQmxvY2sgUHJvZHVjZXIgQ2FuZGlkYXRlCnN1bW1hcnk6ICdSZWdpc3RlciB7e25vd3JhcCBwcm9kdWNlcn19IGFjY291bnQgYXMgYSBibG9jayBwcm9kdWNlciBjYW5kaWRhdGUnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy92b3RpbmcucG5nI2RiMjhjZDNkYjZlNjJkNDUwOWFmMzY0NGNlN2QzNzczMjk0ODJhMTRiYjRiZmFjYTJhYTVmMTQwMGQ4ZThhODQKLS0tCgpSZWdpc3RlciB7e3Byb2R1Y2VyfX0gYWNjb3VudCBhcyBhIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZS4KClVSTDoge3t1cmx9fQpMb2NhdGlvbiBjb2RlOiB7e2xvY2F0aW9ufX0KQmxvY2sgc2lnbmluZyBrZXk6IHt7cHJvZHVjZXJfa2V5fX0KCiMjIEJsb2NrIFByb2R1Y2VyIEFncmVlbWVudAp7eyRjbGF1c2VzLkJsb2NrUHJvZHVjZXJBZ3JlZW1lbnR9fSCuQjrRW5m6DHJlZ3Byb2R1Y2VyMq0ELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUmVnaXN0ZXIgYXMgYSBCbG9jayBQcm9kdWNlciBDYW5kaWRhdGUKc3VtbWFyeTogJ1JlZ2lzdGVyIHt7bm93cmFwIHByb2R1Y2VyfX0gYWNjb3VudCBhcyBhIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3ZvdGluZy5wbmcjZGIyOGNkM2RiNmU2MmQ0NTA5YWYzNjQ0Y2U3ZDM3NzMyOTQ4MmExNGJiNGJmYWNhMmFhNWYxNDAwZDhlOGE4NAotLS0KClJlZ2lzdGVyIHt7cHJvZHVjZXJ9fSBhY2NvdW50IGFzIGEgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRlLgoKVVJMOiB7e3VybH19CkxvY2F0aW9uIGNvZGU6IHt7bG9jYXRpb259fQpCbG9jayBzaWduaW5nIGF1dGhvcml0eToKe3t0b19qc29uIHByb2R1Y2VyX2F1dGhvcml0eX19CgojIyBCbG9jayBQcm9kdWNlciBBZ3JlZW1lbnQKe3skY2xhdXNlcy5CbG9ja1Byb2R1Y2VyQWdyZWVtZW50fX0AAAC+01uZughyZWdwcm94eaMELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUmVnaXN0ZXIvdW5yZWdpc3RlciBhcyBhIFByb3h5CnN1bW1hcnk6ICdSZWdpc3Rlci91bnJlZ2lzdGVyIHt7bm93cmFwIHByb3h5fX0gYXMgYSBwcm94eSBhY2NvdW50JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvdm90aW5nLnBuZyNkYjI4Y2QzZGI2ZTYyZDQ1MDlhZjM2NDRjZTdkMzc3MzI5NDgyYTE0YmI0YmZhY2EyYWE1ZjE0MDBkOGU4YTg0Ci0tLQoKe3sjaWYgaXNwcm94eX19Cnt7cHJveHl9fSByZWdpc3RlcnMgYXMgYSBwcm94eSB0aGF0IGNhbiB2b3RlIG9uIGJlaGFsZiBvZiBhY2NvdW50cyB0aGF0IGFwcG9pbnQgaXQgYXMgdGhlaXIgcHJveHkuCnt7ZWxzZX19Cnt7cHJveHl9fSB1bnJlZ2lzdGVycyBhcyBhIHByb3h5IHRoYXQgY2FuIHZvdGUgb24gYmVoYWxmIG9mIGFjY291bnRzIHRoYXQgYXBwb2ludCBpdCBhcyB0aGVpciBwcm94eS4Ke3svaWZ9fQAAAEBXlKe6B3JlbnRjcHXcCS0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFJlbnQgQ1BVIEJhbmR3aWR0aCBmb3IgMzAgRGF5cwpzdW1tYXJ5OiAne3tub3dyYXAgZnJvbX19IHBheXMge3tub3dyYXAgbG9hbl9wYXltZW50fX0gdG8gcmVudCBDUFUgYmFuZHdpZHRoIGZvciB7e25vd3JhcCByZWNlaXZlcn19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3tmcm9tfX0gcGF5cyB7e2xvYW5fcGF5bWVudH19IHRvIHJlbnQgQ1BVIGJhbmR3aWR0aCBvbiBiZWhhbGYgb2Yge3tyZWNlaXZlcn19IGZvciBhIHBlcmlvZCBvZiAzMCBkYXlzLgoKe3tsb2FuX3BheW1lbnR9fSBpcyB0YWtlbiBvdXQgb2Yge3tmcm9tfX3igJlzIFJFWCBmdW5kLiBUaGUgbWFya2V0IHByaWNlIGRldGVybWluZXMgdGhlIG51bWJlciBvZiB0b2tlbnMgdG8gYmUgc3Rha2VkIHRvIHt7cmVjZWl2ZXJ9feKAmXMgQ1BVIHJlc291cmNlcy4gSW4gYWRkaXRpb24sIHt7ZnJvbX19IHByb3ZpZGVzIHt7bG9hbl9mdW5kfX0sIHdoaWNoIGlzIGFsc28gdGFrZW4gb3V0IG9mIHt7ZnJvbX194oCZcyBSRVggZnVuZCwgdG8gYmUgdXNlZCBmb3IgYXV0b21hdGljIHJlbmV3YWwgb2YgdGhlIGxvYW4uCgpBdCBleHBpcmF0aW9uLCBpZiB0aGUgbG9hbiBoYXMgbGVzcyBmdW5kcyB0aGFuIHt7bG9hbl9wYXltZW50fX0sIGl0IGlzIGNsb3NlZCBhbmQgbGVudCB0b2tlbnMgdGhhdCBoYXZlIGJlZW4gc3Rha2VkIGFyZSB0YWtlbiBvdXQgb2Yge3tyZWNlaXZlcn194oCZcyBDUFUgYmFuZHdpZHRoLiBPdGhlcndpc2UsIGl0IGlzIHJlbmV3ZWQgYXQgdGhlIG1hcmtldCBwcmljZSBhdCB0aGUgdGltZSBvZiByZW5ld2FsLCB0aGF0IGlzLCB0aGUgbnVtYmVyIG9mIHN0YWtlZCB0b2tlbnMgaXMgcmVjYWxjdWxhdGVkIGFuZCB7e3JlY2VpdmVyfX3igJlzIENQVSBiYW5kd2lkdGggaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4ge3tmcm9tfX0gY2FuIGZ1bmQgb3IgZGVmdW5kIGEgbG9hbiBhdCBhbnkgdGltZSBiZWZvcmUgZXhwaXJhdGlvbi4gV2hlbiB0aGUgbG9hbiBpcyBjbG9zZWQsIHt7ZnJvbX19IGlzIHJlZnVuZGVkIGFueSB0b2tlbnMgcmVtYWluaW5nIGluIHRoZSBsb2FuIGZ1bmQuAAAAIKuZp7oHcmVudG5ldOgJLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogUmVudCBORVQgQmFuZHdpZHRoIGZvciAzMCBEYXlzCnN1bW1hcnk6ICd7e25vd3JhcCBmcm9tfX0gcGF5cyB7e25vd3JhcCBsb2FuX3BheW1lbnR9fSB0byByZW50IE5FVCBiYW5kd2lkdGggZm9yIHt7bm93cmFwIHJlY2VpdmVyfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXgucG5nI2QyMjk4MzdmYTYyYTQ2NGI5YzcxZTA2MDYwYWE4NjE3OWFkZjBiM2Y0ZTNiOGM0Zjk3MDJmNGY0YjBjMzQwYTgKLS0tCgp7e2Zyb219fSBwYXlzIHt7bG9hbl9wYXltZW50fX0gdG8gcmVudCBORVQgYmFuZHdpZHRoIG9uIGJlaGFsZiBvZiB7e3JlY2VpdmVyfX0gZm9yIGEgcGVyaW9kIG9mIDMwIGRheXMuCgp7e2xvYW5fcGF5bWVudH19IGlzIHRha2VuIG91dCBvZiB7e2Zyb219feKAmXMgUkVYIGZ1bmQuIFRoZSBtYXJrZXQgcHJpY2UgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHRva2VucyB0byBiZSBzdGFrZWQgdG8ge3tyZWNlaXZlcn194oCZcyBORVQgcmVzb3VyY2VzIGZvciAzMCBkYXlzLiBJbiBhZGRpdGlvbiwge3tmcm9tfX0gcHJvdmlkZXMge3tsb2FuX2Z1bmR9fSwgd2hpY2ggaXMgYWxzbyB0YWtlbiBvdXQgb2Yge3tmcm9tfX3igJlzIFJFWCBmdW5kLCB0byBiZSB1c2VkIGZvciBhdXRvbWF0aWMgcmVuZXdhbCBvZiB0aGUgbG9hbi4KCkF0IGV4cGlyYXRpb24sIGlmIHRoZSBsb2FuIGhhcyBsZXNzIGZ1bmRzIHRoYW4ge3tsb2FuX3BheW1lbnR9fSwgaXQgaXMgY2xvc2VkIGFuZCBsZW50IHRva2VucyB0aGF0IGhhdmUgYmVlbiBzdGFrZWQgYXJlIHRha2VuIG91dCBvZiB7e3JlY2VpdmVyfX3igJlzIE5FVCBiYW5kd2lkdGguIE90aGVyd2lzZSwgaXQgaXMgcmVuZXdlZCBhdCB0aGUgbWFya2V0IHByaWNlIGF0IHRoZSB0aW1lIG9mIHJlbmV3YWwsIHRoYXQgaXMsIHRoZSBudW1iZXIgb2Ygc3Rha2VkIHRva2VucyBpcyByZWNhbGN1bGF0ZWQgYW5kIHt7cmVjZWl2ZXJ9feKAmXMgTkVUIGJhbmR3aWR0aCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LiB7e2Zyb219fSBjYW4gZnVuZCBvciBkZWZ1bmQgYSBsb2FuIGF0IGFueSB0aW1lIGJlZm9yZSBleHBpcmF0aW9uLiBXaGVuIHRoZSBsb2FuIGlzIGNsb3NlZCwge3tmcm9tfX0gaXMgcmVmdW5kZWQgYW55IHRva2VucyByZW1haW5pbmcgaW4gdGhlIGxvYW4gZnVuZC4AAAAAqa66ugdyZXhleGVjogMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBQZXJmb3JtIFJFWCBNYWludGVuYW5jZQpzdW1tYXJ5OiAnUHJvY2VzcyBzZWxsIG9yZGVycyBhbmQgZXhwaXJlZCBsb2FucycKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KClBlcmZvcm1zIFJFWCBtYWludGVuYW5jZSBieSBwcm9jZXNzaW5nIGEgbWF4aW11bSBvZiB7e21heH19IFJFWCBzZWxsIG9yZGVycyBhbmQgZXhwaXJlZCBsb2Fucy4gQW55IGFjY291bnQgY2FuIGV4ZWN1dGUgdGhpcyBhY3Rpb24uAK5COtFbt7wLcm12cHJvZHVjZXKCBS0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEZvcmNpYmx5IFVucmVnaXN0ZXIgYSBCbG9jayBQcm9kdWNlciBDYW5kaWRhdGUKc3VtbWFyeTogJ3t7bm93cmFwIHByb2R1Y2VyfX0gaXMgdW5yZWdpc3RlcmVkIGFzIGEgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRlJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgp7eyRhY3Rpb24uYWNjb3VudH19IHVucmVnaXN0ZXJzIHt7cHJvZHVjZXJ9fSBhcyBhIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZS4ge3twcm9kdWNlcn19IGFjY291bnQgd2lsbCByZXRhaW4gaXRzIHZvdGVzIGFuZCB0aG9zZSB2b3RlcyBjYW4gY2hhbmdlIGJhc2VkIG9uIHZvdGVyIHN0YWtlIGNoYW5nZXMgb3Igdm90ZXMgcmVtb3ZlZCBmcm9tIHt7cHJvZHVjZXJ9fS4gSG93ZXZlciBuZXcgdm90ZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gdm90ZSBmb3Ige3twcm9kdWNlcn19IHdoaWxlIGl0IHJlbWFpbnMgdW5yZWdpc3RlcmVkLgAAAECaG6PCB3NlbGxyYW3FAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFNlbGwgUkFNIEZyb20gQWNjb3VudApzdW1tYXJ5OiAnU2VsbCB1bnVzZWQgUkFNIGZyb20ge3tub3dyYXAgYWNjb3VudH19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmVzb3VyY2UucG5nIzM4MzBmMWNlOGNiMDdmNzc1N2RiY2YzODNiMWVjMWIxMTkxNGFjMzRhMWY5ZDhiMDY1ZjA3NjAwZmE5ZGFjMTkKLS0tCgpTZWxsIHt7Ynl0ZXN9fSBieXRlcyBvZiB1bnVzZWQgUkFNIGZyb20gYWNjb3VudCB7e2FjY291bnR9fSBhdCBtYXJrZXQgcHJpY2UuIFRoaXMgdHJhbnNhY3Rpb24gd2lsbCBpbmN1ciBhIDAuNSUgZmVlIG9uIHRoZSBwcm9jZWVkcyB3aGljaCBkZXBlbmQgb24gbWFya2V0IHJhdGVzLgAAAKCrG6PCB3NlbGxyZXjsCi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFNlbGwgUkVYIFRva2VucyBpbiBFeGNoYW5nZSBmb3IgRU9TCnN1bW1hcnk6ICd7e25vd3JhcCBmcm9tfX0gc2VsbHMge3tub3dyYXAgcmV4fX0gdG9rZW5zJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKVGhlICdyZXgnIHBhcmFtZXRlciBubyBsb25nZXIgaGFzIGFuIGVmZmVjdC4KCnt7ZnJvbX19IGluaXRpYXRlcyBhIHNlbGwgb3JkZXIgdG8gc2VsbCBhbGwgb2YgdGhlaXIgbWF0dXJlZCBSRVggdG9rZW5zIGF0IHRoZSBtYXJrZXQgZXhjaGFuZ2UgcmF0ZSBkdXJpbmcgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIG9yZGVyIGlzIHVsdGltYXRlbHkgZXhlY3V0ZWQuIApJZiB7e2Zyb219fSBhbHJlYWR5IGhhcyBhbiBvcGVuIHNlbGwgb3JkZXIgaW4gdGhlIHNlbGwgcXVldWUsIHt7cmV4fX0gd2lsbCBiZSBhZGRlZCB0byB0aGUgYW1vdW50IG9mIHRoZSBzZWxsIG9yZGVyIHdpdGhvdXQgY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2VsbCBvcmRlciB3aXRoaW4gdGhlIHF1ZXVlLiAKT25jZSB0aGUgc2VsbCBvcmRlciBpcyBleGVjdXRlZCwgcHJvY2VlZHMgYXJlIGFkZGVkIHRvIHt7ZnJvbX194oCZcyBSRVggZnVuZCwgdGhlIHZhbHVlIG9mIHNvbGQgUkVYIHRva2VucyBpcyBkZWR1Y3RlZCBmcm9tIHt7ZnJvbX194oCZcyB2b3RlIHN0YWtlLCBhbmQgdm90ZXMgYXJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpEZXBlbmRpbmcgb24gdGhlIG1hcmtldCBjb25kaXRpb25zLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGZpbGwgdGhlIGVudGlyZSBzZWxsIG9yZGVyIGltbWVkaWF0ZWx5LiBJbiBzdWNoIGEgY2FzZSwgdGhlIHNlbGwgb3JkZXIgaXMgYWRkZWQgdG8gdGhlIGJhY2sgb2YgYSBzZWxsIHF1ZXVlLiAKQSBzZWxsIG9yZGVyIGF0IHRoZSBmcm9udCBvZiB0aGUgc2VsbCBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbWFya2V0IGNvbmRpdGlvbnMgYWxsb3cgZm9yIHRoZSBlbnRpcmUgb3JkZXIgdG8gYmUgZmlsbGVkLiBSZWdhcmRsZXNzIG9mIHRoZSBtYXJrZXQgY29uZGl0aW9ucywgCnRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gZXhlY3V0ZSB0aGlzIHNlbGwgb3JkZXIgd2l0aGluIDMwIGRheXMuIHt7ZnJvbX19IGNhbiBjYW5jZWwgdGhlIG9yZGVyIGF0IGFueSB0aW1lIGJlZm9yZSBpdCBpcyBmaWxsZWQgdXNpbmcgdGhlIGNuY2xyZXhvcmRlciBhY3Rpb24uAAAAALhjssIGc2V0YWJp8wItLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBEZXBsb3kgQ29udHJhY3QgQUJJCnN1bW1hcnk6ICdEZXBsb3kgY29udHJhY3QgQUJJIG9uIGFjY291bnQge3tub3dyYXAgYWNjb3VudH19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWNjb3VudC5wbmcjM2Q1NWEyZmMzYTVjMjBiNDU2ZjU2NTdmYWY2NjZiYzI1ZmZkMDZmNDgzNmM1ZTgyNTZmNzQxMTQ5YjBiMjk0ZgotLS0KCkRlcGxveSB0aGUgQUJJIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250cmFjdCBvbiBhY2NvdW50IHt7YWNjb3VudH19LgCArigjZLLCCnNldGFjY3RjcHWeBi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEV4cGxpY2l0bHkgTWFuYWdlIHRoZSBDUFUgUXVvdGEgb2YgQWNjb3VudApzdW1tYXJ5OiAnRXhwbGljaXRseSBtYW5hZ2UgdGhlIENQVSBiYW5kd2lkdGggcXVvdGEgb2YgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50fX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7I2lmX2hhc192YWx1ZSBjcHVfd2VpZ2h0fX0KRXhwbGljaXRseSBtYW5hZ2UgdGhlIENQVSBiYW5kd2lkdGggcXVvdGEgb2YgYWNjb3VudCB7e2FjY291bnR9fSBieSBwaW5uaW5nIGl0IHRvIGEgd2VpZ2h0IG9mIHt7Y3B1X3dlaWdodH19LgoKe3thY2NvdW50fX0gY2FuIHN0YWtlIGFuZCB1bnN0YWtlLCBob3dldmVyLCBpdCB3aWxsIG5vdCBjaGFuZ2UgdGhlaXIgQ1BVIGJhbmR3aWR0aCBxdW90YSBhcyBsb25nIGFzIGl0IHJlbWFpbnMgcGlubmVkLgp7e2Vsc2V9fQpVbnBpbiB0aGUgQ1BVIGJhbmR3aWR0aCBxdW90YSBvZiBhY2NvdW50IHt7YWNjb3VudH19LiBUaGUgQ1BVIGJhbmR3aWR0aCBxdW90YSBvZiB7e2FjY291bnR9fSB3aWxsIGJlIGRyaXZlbiBieSB0aGUgY3VycmVudCB0b2tlbnMgc3Rha2VkIGZvciBDUFUgYmFuZHdpZHRoIGJ5IHt7YWNjb3VudH19Lgp7ey9pZl9oYXNfdmFsdWV9fQBAVjMjZLLCCnNldGFjY3RuZXSiBi0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IEV4cGxpY2l0bHkgTWFuYWdlIHRoZSBORVQgUXVvdGEgb2YgQWNjb3VudApzdW1tYXJ5OiAnRXhwbGljaXRseSBtYW5hZ2UgdGhlIE5FVCBiYW5kd2lkdGggcXVvdGEgb2YgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50fX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7I2lmX2hhc192YWx1ZSBuZXRfd2VpZ2h0fX0KRXhwbGljaXRseSBtYW5hZ2UgdGhlIG5ldHdvcmsgYmFuZHdpZHRoIHF1b3RhIG9mIGFjY291bnQge3thY2NvdW50fX0gYnkgcGlubmluZyBpdCB0byBhIHdlaWdodCBvZiB7e25ldF93ZWlnaHR9fS4KCnt7YWNjb3VudH19IGNhbiBzdGFrZSBhbmQgdW5zdGFrZSwgaG93ZXZlciwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZWlyIE5FVCBiYW5kd2lkdGggcXVvdGEgYXMgbG9uZyBhcyBpdCByZW1haW5zIHBpbm5lZC4Ke3tlbHNlfX0KVW5waW4gdGhlIE5FVCBiYW5kd2lkdGggcXVvdGEgb2YgYWNjb3VudCB7e2FjY291bnR9fS4gVGhlIE5FVCBiYW5kd2lkdGggcXVvdGEgb2Yge3thY2NvdW50fX0gd2lsbCBiZSBkcml2ZW4gYnkgdGhlIGN1cnJlbnQgdG9rZW5zIHN0YWtlZCBmb3IgTkVUIGJhbmR3aWR0aCBieSB7e2FjY291bnR9fS4Ke3svaWZfaGFzX3ZhbHVlfX0AgDQ3I2SywgpzZXRhY2N0cmFt0AUtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBFeHBsaWNpdGx5IE1hbmFnZSB0aGUgUkFNIFF1b3RhIG9mIEFjY291bnQKc3VtbWFyeTogJ0V4cGxpY2l0bHkgbWFuYWdlIHRoZSBSQU0gcXVvdGEgb2YgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50fX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7I2lmX2hhc192YWx1ZSByYW1fYnl0ZXN9fQpFeHBsaWNpdGx5IG1hbmFnZSB0aGUgUkFNIHF1b3RhIG9mIGFjY291bnQge3thY2NvdW50fX0gYnkgcGlubmluZyBpdCB0byB7e3JhbV9ieXRlc319IGJ5dGVzLgoKe3thY2NvdW50fX0gY2FuIGJ1eSBhbmQgc2VsbCBSQU0sIGhvd2V2ZXIsIGl0IHdpbGwgbm90IGNoYW5nZSB0aGVpciBSQU0gcXVvdGEgYXMgbG9uZyBhcyBpdCByZW1haW5zIHBpbm5lZC4Ke3tlbHNlfX0KVW5waW4gdGhlIFJBTSBxdW90YSBvZiBhY2NvdW50IHt7YWNjb3VudH19LiBUaGUgUkFNIHF1b3RhIG9mIHt7YWNjb3VudH19IHdpbGwgYmUgZHJpdmVuIGJ5IHRoZSBjdXJyZW50IFJBTSBob2xkaW5ncyBvZiB7e2FjY291bnR9fS4Ke3svaWZfaGFzX3ZhbHVlfX0AAM5OumiywgpzZXRhbGltaXRz9gMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBBZGp1c3QgUmVzb3VyY2UgTGltaXRzIG9mIEFjY291bnQKc3VtbWFyeTogJ0FkanVzdCByZXNvdXJjZSBsaW1pdHMgb2YgYWNjb3VudCB7e25vd3JhcCBhY2NvdW50fX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7JGFjdGlvbi5hY2NvdW50fX0gdXBkYXRlcyB7e2FjY291bnR9feKAmXMgcmVzb3VyY2UgbGltaXRzIHRvIGhhdmUgYSBSQU0gcXVvdGEgb2Yge3tyYW1fYnl0ZXN9fSBieXRlcywgYSBORVQgYmFuZHdpZHRoIHF1b3RhIG9mIHt7bmV0X3dlaWdodH19IGFuZCBhIENQVSBiYW5kd2lkdGggcXVvdGEgb2Yge3tjcHVfd2VpZ2h0fX0uAAAAQCWKssIHc2V0Y29kZeYCLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogRGVwbG95IENvbnRyYWN0IENvZGUKc3VtbWFyeTogJ0RlcGxveSBjb250cmFjdCBjb2RlIG9uIGFjY291bnQge3tub3dyYXAgYWNjb3VudH19JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWNjb3VudC5wbmcjM2Q1NWEyZmMzYTVjMjBiNDU2ZjU2NTdmYWY2NjZiYzI1ZmZkMDZmNDgzNmM1ZTgyNTZmNzQxMTQ5YjBiMjk0ZgotLS0KCkRlcGxveSBjb21waWxlZCBjb250cmFjdCBjb2RlIHRvIHRoZSBhY2NvdW50IHt7YWNjb3VudH19LjCpyyau6bLCDHNldGluZmxhdGlvbusELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogU2V0IEluZmxhdGlvbiBQYXJhbWV0ZXJzCnN1bW1hcnk6ICdTZXQgaW5mbGF0aW9uIHBhcmFtZXRlcnMnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7JGFjdGlvbi5hY2NvdW50fX0gc2V0cyB0aGUgaW5mbGF0aW9uIHBhcmFtZXRlcnMgYXMgZm9sbG93czoKCiogQW5udWFsIGluZmxhdGlvbiByYXRlIChpbiB1bml0cyBvZiBhIGh1bmRyZWR0aCBvZiBhIHBlcmNlbnQpOiB7e2FubnVhbF9yYXRlfX0KKiBGcmFjdGlvbiBvZiBpbmZsYXRpb24gdXNlZCB0byByZXdhcmQgYmxvY2sgcHJvZHVjZXJzOiAxMDAwMC97e2luZmxhdGlvbl9wYXlfZmFjdG9yfX0KKiBGcmFjdGlvbiBvZiBibG9jayBwcm9kdWNlciByZXdhcmRzIHRvIGJlIGRpc3RyaWJ1dGVkIHByb3BvcnRpb25hbCB0byBibG9ja3MgcHJvZHVjZWQ6IDEwMDAwL3t7dm90ZXBheV9mYWN0b3J9fQAAwNJcU7PCCXNldHBhcmFtc9ACLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogU2V0IFN5c3RlbSBQYXJhbWV0ZXJzCnN1bW1hcnk6ICdTZXQgU3lzdGVtIFBhcmFtZXRlcnMnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7JGFjdGlvbi5hY2NvdW50fX0gc2V0cyBzeXN0ZW0gcGFyYW1ldGVycyB0bzoKe3t0b19qc29uIHBhcmFtc319cGlGZnlTs8IMc2V0cGF5ZmFjdG9yiQQtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBTZXQgUGF5IEZhY3RvcnMKc3VtbWFyeTogJ1NldCBwYXkgZmFjdG9ycycKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FkbWluLnBuZyM5YmYxY2VjNjY0ODYzYmQ2YWFhYzBmODE0YjIzNWY4Nzk5ZmIwMmM4NTBlOWFhNWRhMzRlOGEwMDRiZDY1MThlCi0tLQoKe3skYWN0aW9uLmFjY291bnR9fSBzZXRzIHRoZSBpbmZsYXRpb24gcGFyYW1ldGVycyBhcyBmb2xsb3dzOgoKKiBGcmFjdGlvbiBvZiBpbmZsYXRpb24gdXNlZCB0byByZXdhcmQgYmxvY2sgcHJvZHVjZXJzOiAxMDAwMC97e2luZmxhdGlvbl9wYXlfZmFjdG9yfX0KKiBGcmFjdGlvbiBvZiBibG9jayBwcm9kdWNlciByZXdhcmRzIHRvIGJlIGRpc3RyaWJ1dGVkIHByb3BvcnRpb25hbCB0byBibG9ja3MgcHJvZHVjZWQ6IDEwMDAwL3t7dm90ZXBheV9mYWN0b3J9fQAAAGC7W7PCB3NldHByaXaNBC0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IE1ha2UgYW4gQWNjb3VudCBQcml2aWxlZ2VkIG9yIFVucHJpdmlsZWdlZApzdW1tYXJ5OiAne3sjaWYgaXNfcHJpdn19TWFrZSB7e25vd3JhcCBhY2NvdW50fX0gcHJpdmlsZWdlZHt7ZWxzZX19UmVtb3ZlIHByaXZpbGVnZWQgc3RhdHVzIG9mIHt7bm93cmFwIGFjY291bnR9fXt7L2lmfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7I2lmIGlzX3ByaXZ9fQp7eyRhY3Rpb24uYWNjb3VudH19IG1ha2VzIHt7YWNjb3VudH19IHByaXZpbGVnZWQuCnt7ZWxzZX19Cnt7JGFjdGlvbi5hY2NvdW50fX0gcmVtb3ZlcyBwcml2aWxlZ2VkIHN0YXR1cyBvZiB7e2FjY291bnR9fS4Ke3svaWZ9fQAAAABIc7PCBnNldHJhbeYCLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQ29uZmlndXJlIHRoZSBBdmFpbGFibGUgUkFNCnN1bW1hcnk6ICdDb25maWd1cmUgdGhlIGF2YWlsYWJsZSBSQU0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7JGFjdGlvbi5hY2NvdW50fX0gY29uZmlndXJlcyB0aGUgYXZhaWxhYmxlIFJBTSB0byB7e21heF9yYW1fc2l6ZX19IGJ5dGVzLgCAyuZKc7PCCnNldHJhbXJhdGWFAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFNldCB0aGUgUmF0ZSBvZiBJbmNyZWFzZSBvZiBSQU0Kc3VtbWFyeTogJ1NldCB0aGUgcmF0ZSBvZiBpbmNyZWFzZSBvZiBSQU0gcGVyIGJsb2NrJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgp7eyRhY3Rpb24uYWNjb3VudH19IHNldHMgdGhlIHJhdGUgb2YgaW5jcmVhc2Ugb2YgUkFNIHRvIHt7Ynl0ZXNfcGVyX2Jsb2NrfX0gYnl0ZXMvYmxvY2suAAAAAHR1s8IGc2V0cmV4twMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBBZGp1c3QgUkVYIFBvb2wgVmlydHVhbCBCYWxhbmNlCnN1bW1hcnk6ICdBZGp1c3QgUkVYIFBvb2wgVmlydHVhbCBCYWxhbmNlJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgp7eyRhY3Rpb24uYWNjb3VudH19IGFkanVzdHMgUkVYIGxvYW4gcmF0ZSBieSBzZXR0aW5nIFJFWCBwb29sIHZpcnR1YWwgYmFsYW5jZSB0byB7e2JhbGFuY2V9fS4gTm8gdG9rZW4gdHJhbnNmZXIgb3IgaXNzdWUgaXMgZXhlY3V0ZWQgaW4gdGhpcyBhY3Rpb24uoK7ORnZ1s8IMc2V0cmV4bWF0dXJliQUtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBTZXQgUkVYIE1hdHVyaXR5IFNldHRpbmdzCnN1bW1hcnk6ICdTZXRzIHRoZSBvcHRpb25zIGZvciBSRVggbWF0dXJpdHkgYnVja2V0cycKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KCnt7I2lmIG51bV9vZl9tYXR1cml0eV9idWNrZXRzfX0KICBTZXRzIHRoZSBudW1iZXJzIG9mIG1hdHVyaXR5IGJ1Y2tldHMgdG8gJ3t7bnVtX29mX21hdHVyaXR5X2J1Y2tldHN9fScKe3svaWZ9fQoKe3sjaWYgc2VsbF9tYXR1cmVkX3JleH19CiAgU2V0cyB3aGV0aGVyIG9yIG5vdCB0byBpbW1lZGlhdGVseSBzZWxsIG1hdHVyZWQgUkVYIHRvICd7e3NlbGxfbWF0dXJlZF9yZXh9fScKe3svaWZ9fQoKe3sjaWYgYnV5X3JleF90b19zYXZpbmdzfX0KICBTZXRzIHdoZXRoZXIgb3Igbm90IHRvIGltbWVkaWF0ZWx5IG1vdmUgcHVyY2hhc2VkIFJFWCB0byBzYXZpbmdzIHRvICd7e2J1eV9yZXhfdG9fc2F2aW5nc319Jwp7ey9pZn19AFTUSTWEs8ILc2V0c2NoZWR1bGXaAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFNldCBBbm51YWwgUmF0ZSBTY2hlZHVsZQpzdW1tYXJ5OiAnU2V0IGFubnVhbCByYXRlIHBhcmFtZXRlcnMnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9hZG1pbi5wbmcjOWJmMWNlYzY2NDg2M2JkNmFhYWMwZjgxNGIyMzVmODc5OWZiMDJjODUwZTlhYTVkYTM0ZThhMDA0YmQ2NTE4ZQotLS0KCnt7JGFjdGlvbi5hY2NvdW50fX0gc2V0cyBhIHByZS1kZXRlcm1pbmVkIGluZmxhdGlvbiBzY2hlZHVsZSB0byBhZGp1c3QgcGFyYW1ldGVycyBhcyBmb2xsb3dzOgoKKiBTdGFydCB0aW1lIG9mIHRoZSBzY2hlZHVsZToge3tzdGFydF90aW1lfX0KKiBUaGUgY29udGludW91cyByYXRlIG9mIGluZmxhdGlvbjoge3tjb250aW51b3VzX3JhdGV9fTDnxjQ3lB3HDHN3aXRjaHRvc3ZubgDAj8qGqajS1Ax1bmRlbGVnYXRlYnehBy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFVuc3Rha2UgVG9rZW5zIGZvciBORVQgYW5kL29yIENQVQpzdW1tYXJ5OiAnVW5zdGFrZSB0b2tlbnMgZm9yIE5FVCBhbmQvb3IgQ1BVIGZyb20ge3tub3dyYXAgcmVjZWl2ZXJ9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3Jlc291cmNlLnBuZyMzODMwZjFjZThjYjA3Zjc3NTdkYmNmMzgzYjFlYzFiMTE5MTRhYzM0YTFmOWQ4YjA2NWYwNzYwMGZhOWRhYzE5Ci0tLQoKe3tmcm9tfX0gdW5zdGFrZXMgZnJvbSB7e3JlY2VpdmVyfX0ge3t1bnN0YWtlX25ldF9xdWFudGl0eX19IGZvciBORVQgYmFuZHdpZHRoIGFuZCB7e3Vuc3Rha2VfY3B1X3F1YW50aXR5fX0gZm9yIENQVSBiYW5kd2lkdGguCgpUaGUgc3VtIG9mIHRoZXNlIHR3byBxdWFudGl0aWVzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSB2b3RlIHdlaWdodCBvZiB7e3JlY2VpdmVyfX0gYW5kIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8ge3tmcm9tfX0gYWZ0ZXIgYW4gdW5pbnRlcnJ1cHRlZCAzIGRheSBwZXJpb2Qgd2l0aG91dCBmdXJ0aGVyIHVuc3Rha2luZyBieSB7e2Zyb219fS4gQWZ0ZXIgdGhlIHVuaW50ZXJydXB0ZWQgMyBkYXkgcGVyaW9kIHBhc3NlcywgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSByZXR1cm4gdGhlIGZ1bmRzIHRvIHt7ZnJvbX194oCZcyByZWd1bGFyIHRva2VuIGJhbGFuY2UuIEhvd2V2ZXIsIHRoaXMgYXV0b21hdGljIHJlZnVuZCBtYXkgb2NjYXNpb25hbGx5IGZhaWwgd2hpY2ggd2lsbCB0aGVuIHJlcXVpcmUge3tmcm9tfX0gdG8gbWFudWFsbHkgY2xhaW0gdGhlIGZ1bmRzIHdpdGggdGhlIHJlZnVuZCBhY3Rpb24uALCSZvqp0tQLdW5kZW55bmFtZXMAAACQ5ubl2NQJdW5naWZ0cmFtAABAy9rA6eLUCnVubGlua2F1dGiRBS0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFVubGluayBBY3Rpb24gZnJvbSBQZXJtaXNzaW9uCnN1bW1hcnk6ICd7e25vd3JhcCBhY2NvdW50fX0gdW5zZXRzIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHBlcm1pc3Npb24gZm9yIHRoZSB7eyNpZiB0eXBlfX17e25vd3JhcCB0eXBlfX0gYWN0aW9uIG9mIHRoZXt7L2lmfX0ge3tub3dyYXAgY29kZX19IGNvbnRyYWN0JwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWNjb3VudC5wbmcjM2Q1NWEyZmMzYTVjMjBiNDU2ZjU2NTdmYWY2NjZiYzI1ZmZkMDZmNDgzNmM1ZTgyNTZmNzQxMTQ5YjBiMjk0ZgotLS0KCnt7YWNjb3VudH19IHJlbW92ZXMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHt7I2lmIHR5cGV9fXt7dHlwZX19IGFjdGlvbiBvZiB0aGV7ey9pZn19IHt7Y29kZX19IGNvbnRyYWN0IGFuZCBpdHMgbWluaW11bSByZXF1aXJlZCBwZXJtaXNzaW9uLgoKe3sjaWYgdHlwZX19e3tlbHNlfX1UaGlzIHdpbGwgbm90IHJlbW92ZSBhbnkgbGlua3MgZXhwbGljaXRseSBhc3NvY2lhdGVkIHRvIHNwZWNpZmljIGFjdGlvbnMgb2Yge3tjb2RlfX0ue3svaWZ9fQAASPRWpu7UCXVucmVncHJvZOUELS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogVW5yZWdpc3RlciBhcyBhIEJsb2NrIFByb2R1Y2VyIENhbmRpZGF0ZQpzdW1tYXJ5OiAne3tub3dyYXAgcHJvZHVjZXJ9fSB1bnJlZ2lzdGVycyBhcyBhIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3ZvdGluZy5wbmcjZGIyOGNkM2RiNmU2MmQ0NTA5YWYzNjQ0Y2U3ZDM3NzMyOTQ4MmExNGJiNGJmYWNhMmFhNWYxNDAwZDhlOGE4NAotLS0KCnt7cHJvZHVjZXJ9fSB1bnJlZ2lzdGVycyBhcyBhIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZS4ge3twcm9kdWNlcn19IGFjY291bnQgd2lsbCByZXRhaW4gaXRzIHZvdGVzIGFuZCB0aG9zZSB2b3RlcyBjYW4gY2hhbmdlIGJhc2VkIG9uIHZvdGVyIHN0YWtlIGNoYW5nZXMgb3Igdm90ZXMgcmVtb3ZlZCBmcm9tIHt7cHJvZHVjZXJ9fS4gSG93ZXZlciBuZXcgdm90ZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gdm90ZSBmb3Ige3twcm9kdWNlcn19IHdoaWxlIGl0IHJlbWFpbnMgdW5yZWdpc3RlcmVkLtDVpVlBk/HUDHVuc3Rha2V0b3JleOMGLS0tCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogQnV5IFJFWCBUb2tlbnMgVXNpbmcgU3Rha2VkIFRva2VucwpzdW1tYXJ5OiAne3tub3dyYXAgb3duZXJ9fSBidXlzIFJFWCB0b2tlbnMgaW4gZXhjaGFuZ2UgZm9yIHRva2VucyBjdXJyZW50bHkgc3Rha2VkIHRvIE5FVCBhbmQvb3IgQ1BVJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvcmV4LnBuZyNkMjI5ODM3ZmE2MmE0NjRiOWM3MWUwNjA2MGFhODYxNzlhZGYwYjNmNGUzYjhjNGY5NzAyZjRmNGIwYzM0MGE4Ci0tLQoKe3tmcm9tX25ldH19IGFuZCB7e2Zyb21fY3B1fX0gYXJlIHdpdGhkcmF3biBmcm9tIHt7cmVjZWl2ZXJ9feKAmXMgTkVUIGFuZCBDUFUgYmFuZHdpZHRocyByZXNwZWN0aXZlbHkuIFRoZXNlIGZ1bmRzIGFyZSB1c2VkIHRvIHB1cmNoYXNlIFJFWCB0b2tlbnMgYXQgdGhlIGN1cnJlbnQgbWFya2V0IGV4Y2hhbmdlIHJhdGUuIEluIG9yZGVyIGZvciB0aGUgYWN0aW9uIHRvIHN1Y2NlZWQsIHt7b3duZXJ9fSBtdXN0IGhhdmUgdm90ZWQgZm9yIGEgcHJveHkgb3IgYXQgbGVhc3QgMjEgYmxvY2sgcHJvZHVjZXJzLgoKQSBzZWxsIG9yZGVyIG9mIHRoZSBwdXJjaGFzZWQgYW1vdW50IGNhbiBvbmx5IGJlIGluaXRpYXRlZCBhZnRlciB3YWl0aW5nIGZvciB0aGUgbWF0dXJpdHkgcGVyaW9kIG9mIDQgdG8gNSBkYXlzIHRvIHBhc3MuIEV2ZW4gdGhlbiwgZGVwZW5kaW5nIG9uIHRoZSBtYXJrZXQgY29uZGl0aW9ucywgdGhlIGluaXRpYXRlZCBzZWxsIG9yZGVyIG1heSBub3QgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkuAAAAAGSs9tQGdW52ZXN0qQMtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBVbnZlc3QgVG9rZW5zCnN1bW1hcnk6ICdSZWNsYWltIGFuZCByZXRpcmUgdW52ZXN0ZWQgdG9rZW5zJwppY29uOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZW9zbmV0d29ya2ZvdW5kYXRpb24vZW9zLXN5c3RlbS1jb250cmFjdHMvbWFpbi9jb250cmFjdHMvaWNvbnMvYWRtaW4ucG5nIzliZjFjZWM2NjQ4NjNiZDZhYWFjMGY4MTRiMjM1Zjg3OTlmYjAyYzg1MGU5YWE1ZGEzNGU4YTAwNGJkNjUxOGUKLS0tCgpSZWNsYWltIGFuZCByZXRpcmUge3skYWN0aW9uLnVudmVzdF9uZXRfcXVhbnRpdHl9fSBhbmQge3skYWN0aW9uLnVudmVzdF9jcHVfcXVhbnRpdHl9fSB3b3J0aCBvZiB1bnZlc3RlZCB0b2tlbnMgZnJvbSB0aGUgYWNjb3VudCB7eyRhY3Rpb24uYWNjb3VudH19LgBAy9qobFLVCnVwZGF0ZWF1dGjtAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IE1vZGlmeSBBY2NvdW50IFBlcm1pc3Npb24Kc3VtbWFyeTogJ0FkZCBvciB1cGRhdGUgdGhlIHt7bm93cmFwIHBlcm1pc3Npb259fSBwZXJtaXNzaW9uIG9mIHt7bm93cmFwIGFjY291bnR9fScKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FjY291bnQucG5nIzNkNTVhMmZjM2E1YzIwYjQ1NmY1NjU3ZmFmNjY2YmMyNWZmZDA2ZjQ4MzZjNWU4MjU2Zjc0MTE0OWIwYjI5NGYKLS0tCgpNb2RpZnksIGFuZCBjcmVhdGUgaWYgbmVjZXNzYXJ5LCB0aGUge3twZXJtaXNzaW9ufX0gcGVybWlzc2lvbiBvZiB7e2FjY291bnR9fSB0byBoYXZlIGEgcGFyZW50IHBlcm1pc3Npb24gb2Yge3twYXJlbnR9fSBhbmQgdGhlIGZvbGxvd2luZyBhdXRob3JpdHk6Cnt7dG9fanNvbiBhdXRofX0AAOjqqmxS1Ql1cGRhdGVyZXiBAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFVwZGF0ZSBSRVggT3duZXIgVm90ZSBXZWlnaHQKc3VtbWFyeTogJ1VwZGF0ZSB2b3RlIHdlaWdodCB0byBjdXJyZW50IHZhbHVlIG9mIGhlbGQgUkVYIHRva2VucycKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL3JleC5wbmcjZDIyOTgzN2ZhNjJhNDY0YjljNzFlMDYwNjBhYTg2MTc5YWRmMGIzZjRlM2I4YzRmOTcwMmY0ZjRiMGMzNDBhOAotLS0KClVwZGF0ZSB2b3RlIHdlaWdodCBvZiB7e293bmVyfX0gYWNjb3VudCB0byBjdXJyZW50IHZhbHVlIG9mIGhlbGQgUkVYIHRva2Vucy4wqcNuq5tT1Qx1cGR0cmV2aXNpb26CAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFVwZGF0ZSBTeXN0ZW0gQ29udHJhY3QgUmV2aXNpb24gTnVtYmVyCnN1bW1hcnk6ICdVcGRhdGUgc3lzdGVtIGNvbnRyYWN0IHJldmlzaW9uIG51bWJlcicKaWNvbjogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vvc25ldHdvcmtmb3VuZGF0aW9uL2Vvcy1zeXN0ZW0tY29udHJhY3RzL21haW4vY29udHJhY3RzL2ljb25zL2FkbWluLnBuZyM5YmYxY2VjNjY0ODYzYmQ2YWFhYzBmODE0YjIzNWY4Nzk5ZmIwMmM4NTBlOWFhNWRhMzRlOGEwMDRiZDY1MThlCi0tLQoKe3skYWN0aW9uLmFjY291bnR9fSBhZHZhbmNlcyB0aGUgc3lzdGVtIGNvbnRyYWN0IHJldmlzaW9uIG51bWJlciB0byB7e3JldmlzaW9ufX0ucBXSid6qMt0Mdm90ZXByb2R1Y2VyrQYtLS0Kc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBWb3RlIGZvciBCbG9jayBQcm9kdWNlcnMKc3VtbWFyeTogJ3t7bm93cmFwIHZvdGVyfX0gdm90ZXMgZm9yIHt7I2lmIHByb3h5fX10aGUgcHJveHkge3tub3dyYXAgcHJveHl9fXt7ZWxzZX19dXAgdG8gMzAgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRlc3t7L2lmfX0nCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy92b3RpbmcucG5nI2RiMjhjZDNkYjZlNjJkNDUwOWFmMzY0NGNlN2QzNzczMjk0ODJhMTRiYjRiZmFjYTJhYTVmMTQwMGQ4ZThhODQKLS0tCgp7eyNpZiBwcm94eX19Cnt7dm90ZXJ9fSB2b3RlcyBmb3IgdGhlIHByb3h5IHt7cHJveHl9fS4KQXQgdGhlIHRpbWUgb2Ygdm90aW5nIHRoZSBmdWxsIHdlaWdodCBvZiB2b3RlcuKAmXMgc3Rha2VkIChDUFUgKyBORVQpIHRva2VucyB3aWxsIGJlIGNhc3QgdG93YXJkcyBlYWNoIG9mIHRoZSBwcm9kdWNlcnMgdm90ZWQgYnkge3twcm94eX19Lgp7e2Vsc2V9fQp7e3ZvdGVyfX0gdm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRlczoKCnt7I2VhY2ggcHJvZHVjZXJzfX0KICArIHt7dGhpc319Cnt7L2VhY2h9fQoKQXQgdGhlIHRpbWUgb2Ygdm90aW5nIHRoZSBmdWxsIHdlaWdodCBvZiB2b3RlcuKAmXMgc3Rha2VkIChDUFUgKyBORVQpIHRva2VucyB3aWxsIGJlIGNhc3QgdG93YXJkcyBlYWNoIG9mIHRoZSBhYm92ZSBwcm9kdWNlcnMuCnt7L2lmfX0AgMomVa0y3Qp2b3RldXBkYXRlAAAAAIAtJLHhB3dhc21jZmcAAAAA3NzUsuMId2l0aGRyYXfJAy0tLQpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IFdpdGhkcmF3IGZyb20gUkVYIEZ1bmQKc3VtbWFyeTogJ1dpdGhkcmF3IHt7bm93cmFwIGFtb3VudH19IGZyb20ge3tub3dyYXAgb3duZXJ9feKAmXMgUkVYIGZ1bmQgYnkgdHJhbnNmZXJyaW5nIHRvIHt7b3duZXJ9feKAmXMgbGlxdWlkIGJhbGFuY2UnCmljb246IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lb3NuZXR3b3JrZm91bmRhdGlvbi9lb3Mtc3lzdGVtLWNvbnRyYWN0cy9tYWluL2NvbnRyYWN0cy9pY29ucy9yZXgucG5nI2QyMjk4MzdmYTYyYTQ2NGI5YzcxZTA2MDYwYWE4NjE3OWFkZjBiM2Y0ZTNiOGM0Zjk3MDJmNGY0YjBjMzQwYTgKLS0tCgpXaXRoZHJhd3Mge3thbW91bnR9fSBmcm9tIHt7b3duZXJ9feKAmXMgUkVYIGZ1bmQgYW5kIHRyYW5zZmVyIHRoZW0gdG8ge3tvd25lcn194oCZcyBsaXF1aWQgYmFsYW5jZS4AgFfwKlWjSgpkZWxwZWVya2V5AACwV/AqVbNiC2dldHBlZXJrZXlzAACAV/AqVZm6CnJlZ3BlZXJrZXkAJAAAAKBh09wxA2k2NAAACGFiaV9oYXNokLGLfqqUETIDaTY0AAAWYWNjb3VudF9uYW1lX2JsYWNrbGlzdAAATlMvdZM7A2k2NAAACmJpZF9yZWZ1bmQAAKBrOohoPANpNjQAABFibG9ja19pbmZvX3JlY29yZAAAAGAaGnVFA2k2NAAACHJleF9sb2FuAAAAIE1zokoDaTY0AAATZGVsZWdhdGVkX2JhbmR3aWR0aJCxiw2b5qdKA2k2NAAACWRlbnlfaGFzaAAAvuq7aKZbA2k2NAAADmZpbmFsaXplcl9pbmZvAKZiyXkFp1sDaTY0AAAZZmluX2tleV9pZF9nZW5lcmF0b3JfaW5mbwAAAAB7BadbA2k2NAAAEmZpbmFsaXplcl9rZXlfaW5mbwAAkOYmlZdjA2k2NAAACmdpZnRlZF9yYW0AAAAARHNoZANpNjQAABJlb3Npb19nbG9iYWxfc3RhdGUAAABARHNoZANpNjQAABNlb3Npb19nbG9iYWxfc3RhdGUyAAAAYERzaGQDaTY0AAATZW9zaW9fZ2xvYmFsX3N0YXRlMwAAAIBEc2hkA2k2NAAAE2Vvc2lvX2dsb2JhbF9zdGF0ZTSAp1uV3pqxiQNpNjQAABlsYXN0X3Byb3BfZmluYWxpemVyc19pbmZvAAAAOLmjpJkDaTY0AAAIbmFtZV9iaWQAAABgGhqzmgNpNjQAAAhyZXhfbG9hbgCuSpeCqjmtA2k2NAAADXBvd2VydXBfb3JkZXIAVDYZg6o5rQNpNjQAAA1wb3dlcnVwX3N0YXRlAADAVyGd6K0DaTY0AAANcHJvZHVjZXJfaW5mbwCAwFchneitA2k2NAAADnByb2R1Y2VyX2luZm8yAADICl4jpbkDaTY0AAAOZXhjaGFuZ2Vfc3RhdGUAAAAAp6mXugNpNjQAAA5yZWZ1bmRfcmVxdWVzdAAAzgoifbK6A2k2NAAAEnJleF9yZXR1cm5fYnVja2V0cwAAAABEc7q6A2k2NAAAC3JleF9iYWxhbmNlAAAAIE29uroDaTY0AAAIcmV4X2Z1bmQAfHZXZyO7ugNpNjQAAAxyZXhfbWF0dXJpdHkAAAAgUlq7ugNpNjQAAAhyZXhfcG9vbAAAAEorbbu6A2k2NAAACXJleF9vcmRlcgBApLRmdbu6A2k2NAAAD3JleF9yZXR1cm5fcG9vbAAAwCrqpBrCA2k2NAAADnNjaGVkdWxlc19pbmZvAAAAAKt7FdYDaTY0AAAOdXNlcl9yZXNvdXJjZXMAAAAA4Ksy3QNpNjQAAAp2b3Rlcl9pbmZvAAAA2Ct4laoDaTY0AAAIcGVlcl9rZXnAGmpZm+ykiwNpNjQAABFsaW1pdF9hdXRoX2NoYW5nZQINVXNlckFncmVlbWVudOx/IyBFT1MgVXNlciBBZ3JlZW1lbnQKCiMjIERlZmluaXRpb25zCgogQWxsIGNhcGl0YWxpemVkLCBpdGFsaWNpemVkLCBvciBpbmxpbmUgY29kZSB0ZXJtcyBpbiAqVGhlIEVPUyBVc2VyIEFncmVlbWVudCogd2lsbCBiZSBnaXZlbiB0aGUgc2FtZSBlZmZlY3QgYW5kIG1lYW5pbmcgYXMgaW4gKkRlZmluaXRpb25zKi4KCiogRU9TIFVzZXIgQWdyZWVtZW50OiBUaGlzIGRvY3VtZW50ICgqRVVBKikKCiogQ2hhaW4gSUQ6IGBjaGFpbl9pZGDigIot4oCKYWNhMzc2ZjIwNmI4ZmMyNWE2ZWQ0NGRiZGM2NjU0N2MzNmM2YzMzZTNhMTE5ZmZiZWFlZjk0MzY0MmYwZTkwNgoKKiBVc2VyOiBBbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBvZiBwZXJzb25zIHdobyBtYWludGFpbihzKSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb3duZXJzaGlwIG9mIGFuIEVPUyBhY2NvdW50LCBvciBFT1MtYmFzZWQgcHJvcGVydHkgY29ubmVjdGVkIHRvIGFuIEVPUyBhY2NvdW50LgoKKiBPd25lcnNoaXA6IERpcmVjdCBvciBpbmRpcmVjdCBhY2Nlc3MgdG8gYW4gRU9TIGFjY291bnQgdGhyb3VnaCBvbmUgb3IgbW9yZSB2YWxpZCBwZXJtaXNzaW9ucyBjaGVja3MuIE93bmVyc2hpcCBtYXkgYmUgcGFydGlhbGx5IHNoYXJlZCBiZXR3ZWVuIFVzZXJzIHRocm91Z2ggdGhlIHVzZSBvZiBtdWx0aS1zaWduYXR1cmUgcGVybWlzc2lvbnMuCgoqIEJsb2NrIFByb2R1Y2VyOiBVc2VycyB3aG8gaGF2ZSBjYWxsZWQgYHJlZ3Byb2R1Y2VyYCBhbmQgcmVjZWl2ZSByZXdhcmRzIGZyb20gZW9zaW8udnBheS4KCiogYGVvc2lvLnByb2RzYDogQW4gRU9TIGFjY291bnQgd2l0aCBhIGR5bmFtaWMgcGVybWlzc2lvbnMgc3RydWN0dXJlIHRoYXQgY2FuIGFzc3VtZSB0aGUgcHJpdmlsZWdlcyBvZiB0aGUgYGVvc2lvYCBhY2NvdW50IHdoZW4gMTUvMjEgQmxvY2sgUHJvZHVjZXJzIGFncmVlIHRvIGRvIHNvLgoKKiBOZXR3b3JrIEZ1bmRzOiBUb2tlbnMgY29udGFpbmVkIHdpdGhpbiB0aGUgZm9sbG93aW5nIGFjY291bnRzOiBgZW9zaW8ubmFtZXNgLCBgZW9zaW8ucmFtZmVlYCwgYGVvc2lvLnNhdmluZ2AuCgoqIEdvdmVybmluZyBEb2N1bWVudHM6ICpyZWdwcm9kdWNlciogaXMgY29uc2lkZXJlZCBhIGdvdmVybmluZyBkb2N1bWVudC4KCiogT24tQ2hhaW46IEFueSB0cmFuc2FjdGlvbiwgc21hcnQgY29udHJhY3QsIG9yIFJpY2FyZGlhbiBjb250cmFjdCB3aGljaCBpcyBsb2NhdGVkIHdpdGhpbiBhIGJsb2NrIHRoYXQgaXMgaXJyZXZlcnNpYmxlIGFuZCBhcHBlbmRlZCB0byB0aGUgRU9TIGJsb2NrY2hhaW4gYGNoYWluX2lkYC4KCiogRU9TLWJhc2VkIFByb3BlcnR5OiBBbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgdmFsaWQgcGVybWlzc2lvbiBpbiBvcmRlciB0byBkaXJlY3RseSBtYW5pcHVsYXRlLCBhbHRlciwgdHJhbnNmZXIsIGluZmx1ZW5jZSwgb3Igb3RoZXJ3aXNlIGVmZmVjdCBvbiB0aGUgRU9TIEJsb2NrY2hhaW4KCiogQ2FsbDogVG8gc3VibWl0IGFuIGFjdGlvbiB0byB0aGUgRU9TIEJsb2NrY2hhaW4gYGNoYWluX2lkYC4KCiogQXV0aG9yaXphdGlvbnMgJiBQZXJtaXNzaW9uczogUGVybWlzc2lvbnMgYXJlIGFyYml0cmFyeSBuYW1lcyB1c2VkIHRvIGRlZmluZSB0aGUgcmVxdWlyZW1lbnRzIGZvciBhIHRyYW5zYWN0aW9uIHNlbnQgb24gYmVoYWxmIG9mIHRoYXQgcGVybWlzc2lvbi4gUGVybWlzc2lvbnMgY2FuIGJlIGFzc2lnbmVkIGZvciBhdXRob3JpdHkgb3ZlciBzcGVjaWZpYyBjb250cmFjdCBhY3Rpb25zLgoKKiBSaWNhcmRpYW4gQ29udHJhY3Q6IEEgY29udHJhY3QgdGhhdCBwbGFjZXMgdGhlIGRlZmluaW5nIGVsZW1lbnRzIG9mIGEgbGVnYWwgYWdyZWVtZW50IGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGV4cHJlc3NlZCBhbmQgZXhlY3V0ZWQgaW4gc29mdHdhcmUuCgojIyBBcnRpY2xlIEkgLeKAiiBVc2VyIEFja25vd2xlZGdlbWVudCBvZiBSaXNrcwpJZiBVc2VyIGxvc2VzIGFjY2VzcyB0byB0aGVpciBFT1MgYWNjb3VudCBvbiBgY2hhaW5faWRgIGFuZCBoYXMgbm90IHRha2VuIGFwcHJvcHJpYXRlIG1lYXN1cmVzIHRvIHNlY3VyZSBhY2Nlc3MgdG8gdGhlaXIgRU9TIGFjY291bnQgYnkgb3RoZXIgbWVhbnMsIHRoZSBVc2VyIGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQgdGhhdCBFT1MgYWNjb3VudCB3aWxsIGJlY29tZSBpbmFjY2Vzc2libGUuIFVzZXJzIGFja25vd2xlZGdlIHRoYXQgdGhlIFVzZXIgaGFzIGFuIGFkZXF1YXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJpc2tzLCB1c2FnZSBhbmQgaW50cmljYWNpZXMgb2YgY3J5cHRvZ3JhcGhpYyB0b2tlbnMgYW5kIGJsb2NrY2hhaW4tYmFzZWQgc29mdHdhcmUuIFRoZSBVc2VyIGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQgdGhlIFVzZXIgaXMgdXNpbmcgdGhlIEVPUyBibG9ja2NoYWluIGF0IHRoZWlyIHNvbGUgcmlzay4KCiMjIEFydGljbGUgSUnigIot4oCKU3BlY2lhbCBVc2VyIFR5cGVzClVzZXJzIHdobyBjYWxsIGByZWdwcm9kdWNlcmAgYWdyZWUgdG8sIGFuZCBhcmUgYm91bmQgYnksIHRoZSAqcmVncHJvZHVjZXIqIFJpY2FyZGlhbiBDb250cmFjdC4KCiMjIEFydGljbGUgSUlJ4oCKLeKAikNvbnNlbnQgb2YgdGhlIEVVQQpUaGUgbmF0dXJlIG9mIHRoZSAqRU9TIFVzZXIgQWdyZWVtZW50KiBpcyBzdWNoIHRoYXQgaXQgc2VydmVzIGFzIGEgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnQgRU9TIE1haW5uZXQgZ292ZXJuYW5jZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW4gcGxhY2UuIFRoZXNlIGZ1bmN0aW9ucywgZW5mb3JjZWQgYnkgY29kZSwgZG8gbm90IHJlcXVpcmUgdGhlIGNvbnNlbnQgb2YgVXNlcnMgYXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmhlcmVudCBhbmQgc3lzdGVtaWMgdG8gdGhlIEVPUyBNYWlubmV0IGl0c2VsZi4KCiMjIEFydGljbGUgSVbigIot4oCKR292ZXJuaW5nIERvY3VtZW50cwpBbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgKkVVQSogYW5kICpnb3Zlcm5pbmcgZG9jdW1lbnRzKiBtYXkgYmUgbWFkZSBieSBgZW9zaW8ucHJvZHNgLiBJdCBpcyBhZG1vbmlzaGVkIHRoYXQgYSBzdGF0ZW1lbnQgYmUgY3JhZnRlZCBhbmQgaXNzdWVkIHRocm91Z2ggYGVvc2lvLnByb2RzYCB2aWEgZW9zaW8uZm9ydW0gcmVmZXJlbmR1bSBjb250cmFjdCBkZXNjcmliaW5nIHN1Y2ggYSBtb2RpZmljYXRpb24gaW4gYWR2YW5jZS4KCiMjIEFydGljbGUgVuKAii3igIpOYXRpdmUgVW5pdCBvZiBWYWx1ZQpUaGUgbmF0aXZlIHVuaXQgb2YgdmFsdWUgb24gRU9TIGNoYWluX2lkIHNoYWxsIGJlIHRoZSBFT1MgdG9rZW4gYXMgZGVmaW5lZCBhbmQgY3JlYXRlZCBieSB0aGUgYGVvc2lvLnRva2VuYCBzbWFydCBjb250cmFjdC4KCiMjIEFydGljbGUgVknigIot4oCKTWFpbnRhaW5pbmcgdGhlIEVPUyBibG9ja2NoYWluCmBlb3Npby5wcm9kc2Agd2lsbCBtYWludGFpbiB0aGUgYWN0aXZlIGJsb2NrY2hhaW4gY29kZWJhc2Ugd2hpY2ggaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFsbCBtb2RpZmljYXRpb25zIG9mIGFsbCBmZWF0dXJlcywgb3B0aW1pemF0aW9ucywgYW5kIHVwZ3JhZGVzOiBwcmVzZW50IGFuZCBmdXR1cmUuCgojIyBBcnRpY2xlIFZJSeKAii3igIpOZXR3b3JrIEZ1bmRzCkl0IGlzIGFkbW9uaXNoZWQgdGhhdCBhbnkgYWx0ZXJpbmcgb2YgdGhlIHN0YXRlIG9mIGFueSB0b2tlbnMgY29udGFpbmVkIHdpdGhpbiBuZXR3b3JrIGZ1bmQgYWNjb3VudHMsIG9yIGFsdGVyaW5nIGFueSBwcmUtZXhpc3RpbmcgY29kZSB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZ292ZXJucyB0aGUgYWxsb2NhdGlvbiwgZnVsZmlsbG1lbnQsIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkgKm5ldHdvcmsgZnVuZHMqIGJlIHByZWNlZGVkIGJ5IGEgc3RhdGVtZW50IGNyYWZ0ZWQgYW5kIGlzc3VlZCBieSBgZW9zaW8ucHJvZHNgIHRvIHRoZSAqZW9zaW8uZm9ydW0qIHJlZmVyZW5kdW0gc3lzdGVtIGNvbnRyYWN0IGRlc2NyaWJpbmcgdGhlIGVmZmVjdCBpbiBhZHZhbmNlLgoKIyMgQXJ0aWNsZSBWSUlJ4oCKLeKAikZyZWVkb20gb2YgQWNjb3VudCBDcmVhdGlvbgpBbnkgY3VycmVudCBvciBmdXR1cmUgVXNlciBpcyBhYmxlIHRvIGNyZWF0ZSBhbiBFT1MgQWNjb3VudCB3aXRob3V0IHRoZSBwZXJtaXNzaW9uIGJ5IGFueSBvdGhlciBVc2VyLiBgZW9zaW8ucHJvZHNgIG1heSBuZXZlciBhZmZlY3QgYW4gRU9TIFVzZXIgQWNjb3VudChzKSB3aXRob3V0IHZhbGlkIHBlcm1pc3Npb24ocykgd2hpY2ggaGF2ZSBiZWVuIHNoYXJlZCB3aXRoIGBlb3Npby5wcm9kc2AgYnkgYW4gRU9TIGFjY291bnQuIGBlb3Npby5wcm9kc2AgbWF5IGNoYXJnZSBhIGZlZSBmb3IgYW55IGFjdGlvbnMgdGhhdCBhcmUgcmVxdWVzdGVkIGJ5IG90aGVyIFVzZXJzIHBlcnRhaW5pbmcgdG8gYW4gRU9TIGFjY291bnQgd2hlcmUgcGVybWlzc2lvbnMgYXJlIHNoYXJlZC4KCiMjIEFydGljbGUgSVjigIot4oCKTm8gRmlkdWNpYXJ5Ck5vIFVzZXIgc2hhbGwgaGF2ZSBhIGZpZHVjaWFyeSBwdXJwb3NlIHRvIHN1cHBvcnQgdGhlIHZhbHVlIG9mIHRoZSBFT1MgdG9rZW4uIE5vIFVzZXIgY2FuIGF1dGhvcml6ZSBhbnlvbmUgdG8gaG9sZCBhc3NldHMsIGJvcnJvdywgc3BlYWssIGNvbnRyYWN0IG9uIGJlaGFsZiBvZiBvdGhlciBFT1MgVXNlcnMgb3IgdGhlIEVPUyBibG9ja2NoYWluIGBjaGFpbl9pZGAgY29sbGVjdGl2ZWx5LiBUaGlzIEVPUyBibG9ja2NoYWluIHNoYWxsIGhhdmUgbm8gb3duZXJzLCBtYW5hZ2Vycywgb3IgZmlkdWNpYXJpZXMuCgojIyBBcnRpY2xlIFjigIot4oCKVXNlciBTZWN1cml0eQpBbGwgaXRlbXMgcGVydGFpbmluZyB0byBwZXJzb25hbCBhY2NvdW50IHNlY3VyaXR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBzYWZla2VlcGluZyBvZiBwcml2YXRlIGtleXMsIGlzIHNvbGVseSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIFVzZXIgdG8gc2VjdXJlLgoKIyMgQXJ0aWNsZSBYSSAtIGBlb3Npby5wcm9kc2AgTGltaXRlZCBMaWFiaWxpdHkKVGhlIFVzZXIgYWNrbm93bGVkZ2VzIGFuZCBhZ3JlZXMgdGhhdCwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBhbnkgYXBwbGljYWJsZSBsYXcsIHRoaXMgZGlzY2xhaW1lciBvZiBsaWFiaWxpdHkgYXBwbGllcyB0byBhbnkgYW5kIGFsbCBkYW1hZ2VzIG9yIGluanVyeSB3aGF0c29ldmVyIGNhdXNlZCBieSBvciByZWxhdGVkIHRvIHJpc2tzIG9mLCB1c2Ugb2YsIG9yIGluYWJpbGl0eSB0byB1c2UsIHRoZSBFT1MgdG9rZW4gb3IgdGhlIEVPUyBibG9ja2NoYWluIGBjaGFpbl9pZGAgdW5kZXIgYW55IGNhdXNlIG9mIGFjdGlvbiB3aGF0c29ldmVyIG9mIGFueSBraW5kIGluIGFueSBqdXJpc2RpY3Rpb24sIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhY3Rpb25zIGZvciBicmVhY2ggb2Ygd2FycmFudHksIGJyZWFjaCBvZiBjb250cmFjdCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSkgYW5kIHRoYXQgYGVvc2lvLnByb2RzYCwgbm9yIHRoZSBpbmRpdmlkdWFsIHBlcm1pc3Npb25zIHRoYXQgb3BlcmF0ZSBpdCwgc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnkgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgZm9yIGxvc3Mgb2YgcHJvZml0cywgZ29vZHdpbGwgb3IgZGF0YS4KCiMgRU9TIOyCrOyaqeyekCDrj5nsnZjshJwKCiMjIOygleydmAoKRU9TIOyCrOyaqeyekCDrj5nsnZjshJzsnZgg66qo65OgIOuMgOusuOyekCwg6riw7Jq47J6EIOq8tCwg65iQ64qUIOyduOudvOyduCDsvZTrk5wg7Jqp7Ja064qUIOygleydmOyXkOyEnOyZgCDrj5nsnbztlZwg7Zqo6rO87JmAIOydmOuvuOqwgCDrtoDsl6zrkKnri4jri6QuCgotICAgRU9TIOyCrOyaqeyekCDrj5nsnZjshJw6IOuzuCDrrLjshJwgKEVVQSkKLSAgIOyytOyduCBJRDogY2hhaW5faWTigIotLS3igIphY2EzNzZmMjA2YjhmYzI1YTZlZDQ0ZGJkYzY2NTQ3YzM2YzZjMzNlM2ExMTlmZmJlYWVmOTQzNjQyZjBlOTA2Ci0gICDsgqzsmqnsnpA6IEVPUyDqs4TsoJXsnYQg7KeB7KCRIOuYkOuKlCDqsITsoJHsoIHsnLzroZwg7IaM7Jyg7ZWY6rGw64KYIEVPUyDqs4TsoJXsl5Ag7Jew6rKw65CcIEVPUyDquLDrsJgg7IaN7ISx7J2EIOycoOyngO2VmOqxsOuCmCDqtIDrpqztlZjripQg7IKs656MLCDsobDsp4EsIOuYkOuKlCDsobDsp4HsnZgg66qo65OgIOyCrOuejC4KLSAgIOyGjOycoOq2jDog7ZWY64KYIOydtOyDgeydmCDsnKDtmqjtlZwg7IKs7Jqp6raM7ZWcIO2ZleyduOydhCDthrXtlbQgRU9TIOqzhOygleyXkCDsp4HsoJEg65iQ64qUIOqwhOygkeyggeycvOuhnCDsoJHqt7ztlanri4jri6QuIOyGjOycoOq2jOydgCDri6TspJEg7ISc66qF6raM7ZWc7J2EIOyCrOyaqe2VmOyXrCDsgqzsmqnsnpDqsITsl5Ag67aA67aE7KCB7Jy866GcIOqzteycoCDrkKAg7IiYIOyeiOyKteuLiOuLpC4KLSAgIOu4lOuhnSDtlITroZzrk4DshJw6IHJlZ3Byb2R1Y2Vy66W8IOyLpO2Wie2VmOqzoCBlb3Npby52cGF566Gc67aA7YSwIOuztOyDgeydhCDrsJvripQg7IKs7Jqp7J6QLgotICAgZW9zaW8ucHJvZHM6IDE1LzIxIOu4lOuhnSDtlITroZzrk4DshJzrk6TsnbQg64+Z7J2YIO2VoCDrlYwgZW9zaW8g6rOE7KCV7J2YIOq2jO2VnOydhCDqsIDsp4gg7IiYIOyeiOuKlCDrj5nsoIEg6raM7ZWcIOq1rOyhsOulvCDqsIDsp4QgRU9TIOqzhOyglS4KLSAgIOuEpO2KuOybjO2BrCDsnpDquIg6IOuLpOydjCDqs4TsoJXsl5Ag7Y+s7ZWoIOuQnCDthqDtgbA6IGVvc2lvLm5hbWVzLCBlb3Npby5yYW1mZWUsIGVvc2lvLnNhdmluZy4KLSAgIOq0gOumrCDrrLjshJw6IHJlZ3Byb2R1Y2Vy64qUIOq0gOumrCDrrLjshJzroZwg6rCE7KO865Cp64uI64ukLgotICAg7Jio7LK07J24OiBFT1Mg67iU66Gd7LK07J24IGNoYWluX2lk7JeQIOu5hOqwgOyXreyggeydtOupsCDstpTqsIAg7ZWgIOyImCDsnojripQg67iU66GdIOuCtOyXkCDsnITsuZjtlZwg66qo65OgIOqxsOuemCwg7Iqk66eI7Yq4IOqzhOyVvSDrmJDripQg66as7Lm066W065SU7JWIIOqzhOyVvS4KLSAgIEVPUyDquLDrsJgg7IaN7ISxOiBFT1Mg67iU66Gd7LK07J247J2EIOyngeygkSDsobDsnpEsIOuzgOqyvSwg7KCE7IahLCDsmIHtlqUg65iQ64qUIOuLrOumrCDsoIHsmqntlZjquLAg7JyE7ZW0IOycoO2aqO2VnCDsgqzsmqkg6raM7ZWc7J20IO2VhOyalO2VnCDrqqjrk6Ag6rKDCi0gICDsvZw6IEVPUyDruJTroZ3ssrTsnbggY2hhaW5faWTsl5Ag7J6R7JeF7J2EIOyLoOyyre2VmOuKlCDqsoMuCi0gICDtl4jqsIAg67CPIOq2jO2VnDogJ+2XiOqwgCfripQg7ZW064u5IOq2jO2VnOydhCDrjIDsi6DtlZjsl6wg7KCE7Iah65CY64qUIO2KuOuenOyereyFmOydmCDsmpTqtazsgqztla3snYQg7KCV7J2Y7ZWY64qUIOuNsCDsgqzsmqnrkKnri4jri6QuICfqtoztlZwn7J2AIO2KueyglSDqs4Tslb0g7KGw7LmY7JeQIOuMgO2VnCDqtoztlZzsnYQg67aA7Jes7ZWp64uI64ukLgotICAg66as7Lm066W065SU7JWIIOqzhOyVvTog7ZWp67KV7KCBIOqzhOyVveydmCDsoJXsnZgg7JqU7IaM66W8IOyGjO2UhO2KuOybqOyWtOuhnCDtkZztmITtlZjqs6Ag7Iuk7ZaJ7ZWgIOyImCDsnojripQg7ZiV7Iud7Jy866GcIOuwsOy5mO2VmOuKlCDqs4Tslb0uCgojIyDsoJwgMeyhsOKAii0tLeKAiuychO2XmOyXkCDrjIDtlZwg7IKs7Jqp7J6Q65Ok7J2YIOyduOyngAoK7IKs7Jqp7J6Q6rCAIGNoYWluX2lk7JeQ7IScIEVPUyDqs4TsoJXsl5Ag64yA7ZWcIOygkeq3vCDqtoztlZzsnYQg7J6D6rOgLCDri6Trpbgg67Cp67KV7Jy866GcIEVPUyDqs4TsoJXsl5Ag64yA7ZWcIOygkeq3vOydhCDrs7TtmLjtlZjquLAg7JyE7ZW0IOyggeygiO2VnCDsobDsuZjrpbwg7Leo7ZWY7KeAIOyViuuKlCDqsr3smrDsl5DripQgRU9TIOqzhOygleyXkCDsoJHqt7ztlaAg7IiYIOyXhuqyjCDrkJzri6TripQg6rKD7J2EIOyduOygle2VmOqzoCDrj5nsnZjtlanri4jri6QuIOyCrOyaqeyekOuKlCDslZTtmLjtmZQg7Yag7YGw6rO8IOu4lOuhneyytOyduCDquLDrsJgg7IaM7ZSE7Yq47Juo7Ja07J2YIOychO2XmCwg7IKs7Jqp67KVLCDqt7jrpqzqs6Ag67O17J6h7ISx7JeQIOuMgO2VtCDstqnrtoTtnogg7J207ZW07ZWY6rOgIOyeiOydjOydhCDsnbjsoJXtlanri4jri6QuIOyCrOyaqeyekOuKlCBFT1Mg67iU66Gd7LK07J247J2YIOyCrOyaqeyXkCDrjIDtlZwg7KCE7KCB7J24IOyxheyehOydhCDsp4Tri6TripQg6rKD7JeQIOyduOygle2VmOqzoCDrj5nsnZjtlanri4jri6QuCgojIyDsoJwgMuyhsOKAii0tLeKAiu2KueuzhO2VnCDsgqzsmqnsnpAg7Jyg7ZiVCgpyZWdwcm9kdWNlcuulvCDsi6TtlontlZjripQg7IKs7Jqp7J6Q64qUIHJlZ3Byb2R1Y2VyIOumrOy5tOultOuUlOyViCDqs4Tslb3sl5Ag64+Z7J2Y7ZWY6rOgLCDsnbTsl5Ag6rWs7IaN65Cp64uI64ukLgoKIyMg7KCcIDPsobDigIotLS3igIpFVUHsnZgg64+Z7J2YCgpFT1Mg7IKs7Jqp7J6QIOuPmeydmOyEnOuKlCDtmITsnqwg7Iuc7ZaJ7KSR7J24IEVPUyDrqZTsnbjrhLcg6rGw67KE64SM7Iqk7JeQIOuMgO2VnCDshKTrqoXsnLzroZwg7IKs7Jqp65Cp64uI64ukLiDsvZTrk5zsl5Ag7J2Y7ZW0IOyLnO2WieuQmOuKlCDsnbTrn6ztlZwg6riw64ql7J2AIEVPUyDrqZTsnbjrhLcg7J6Q7LK07J2YIOyytOqzhOyggeydtOqzoCDqs6DsnKDtlZwg6riw64ql7J2066+A66GcIOyCrOyaqeyekOydmCDrj5nsnZjrpbwg7ZWE7JqU66GcIO2VmOyngCDslYrsirXri4jri6QuCgojIyDsoJwgNOyhsOKAii0tLeKAiuq0gOumrCDrrLjshJwKCkVVQeyZgCDqtIDrpqwg66y47ISc64qUIGVvc2lvLnByb2Rz66W8IO2Gte2VtCDsiJjsoJXsnbQg6rCA64ql7ZWp64uI64ukLiDtirnsoJUg67OA6rK97IKs7ZWt7J2EIOyCrOyghOyXkCDshKTrqoXtlZjripQgZW9zaW8uZm9ydW0g7Yis7ZGcIOqzhOyVveydhCDthrXtlbQgZW9zaW8ucHJvZHPqsIAg7ISx66qF7ISc66W8IOyekeyEse2VmOqzoCDrsJzquIntlaAg6rKD7J2EIOq2jOqzoO2VqeuLiOuLpC4KCiMjIOygnCA17KGw4oCKLS0t4oCK6rCA7LmY7J2YIOq4sOuzuCDri6jsnIQKCkVPUyBjaGFpbl9pZOydmCDquLDrs7gg64uo7JyE64qUIGVvc2lvLnRva2VuIOyKpOuniO2KuCDqs4Tslb3sl5Ag7J2Y7ZW0IOygleydmOuQmOqzoCDsnpHshLHrkJwgRU9TIO2GoO2BsOyeheuLiOuLpC4KCiMjIOygnCA27KGw4oCKLS0t4oCKRU9TIOu4lOuhneyytOyduCDsnKDsp4AKCmVvc2lvLnByb2Rz64qUIOuqqOuToCDquLDriqUsIOy1nOygge2ZlCwg6re466as6rOgIOyXheq3uOugiOydtOuTnOydmCDtmITsnqzsmYAg66+4656Y7J2YIOuqqOuToCDsiJjsoJXsgqztla3snYQg6rWs7ZiE7ZWY64qUIOqyg+ydhCDtj6ztlajtlZjrkJgsIOydtOyXkCDqta3tlZzrkJjsp4Ag7JWK64qUIO2ZnOyEse2ZlOuQnCDruJTroZ3ssrTsnbgg7L2U65Oc67Kg7J207Iqk66W8IOycoOyngO2VqeuLiOuLpAoKIyMg7KCcIDfsobDigIotLS3igIrrhKTtirjsm4ztgawg7J6Q6riICgrrhKTtirjsm4ztgawg7J6Q6riIIOqzhOygleyXkCDtj6ztlajrkJwg7Yag7YGw7J2YIOyDge2DnOulvCDrs4Dqsr3tlZjqsbDrgpgsIOuEpO2KuOybjO2BrCDsnpDquIjsnZgg67Cw67aELCDsnbTtloksIOuYkOuKlCDrsLDtj6zrpbwg7KeBL+qwhOygkeyggeycvOuhnCDqtIDrpqztlZjripQg6riw7KG0IOy9lOuTnOulvCDrs4Dqsr3tlZjripQg6rK97Jqw7JeQ64qUIGVvc2lvLnByb2Rz66W8IGVvc2lvLmZvcnVtIOy0nSDtiKztkZwg7Iuc7Iqk7YWcIOqzhOyVveyXkCDstpTqsIDtlZjsl6wg7IKs7KCE7JeQIOy2qeu2hO2VnCDshKTrqoXsnbQg7J2066Oo7Ja07KC47JW8IO2VqeuLiOuLpC4KCiMjIOygnCA47KGw4oCKLS0t4oCK6rOE7KCVIOyDneyEseydmCDsnpDsnKAKCu2YhOyerCwg65iQ64qUIOuvuOuemOydmCDsgqzsmqnsnpDripQg64uk66W4IOyCrOyaqeyekOydmCDtl4jqsIAg7JeG7J20IEVPUyDqs4TsoJXsnYQg66eM65OkIOyImCDsnojsirXri4jri6QuIGVvc2lvLnByb2Rz64qUIEVPUyDqs4TsoJXsl5Ag7J2Y7ZW0IOqzteycoOuQnCDsnKDtmqjtlZwg7ZeI6rCAIOyXhuydtOuKlCBFT1Mg7IKs7Jqp7J6QIOqzhOygleyXkCDsmIHtlqXsnYQg7KSEIOyImCDsl4bsirXri4jri6QuIGVvc2lvLnByb2Rz64qUIOq2jO2VnOydtCDqs7XsnKDrkJjripQgRU9TIOqzhOygleqzvCDqtIDroKjtlZjsl6wg64uk66W4IOyCrOyaqeyekOqwgCDsmpTssq3tlZwg66qo65OgIOyekeyXheyXkCDrjIDtlbQg7JqU6riI7J2EIOu2gOqzvO2VoCDsiJgg7J6I7Iq164uI64ukLgoKIyMg7KCcIDnsobDigIotLS3igIrsi6Dtg4Eg67aI6rCACgrsgqzsmqnsnpDripQgRU9TIO2GoO2BsOydmCDqsIDsuZjrpbwg65K367Cb7Lmo7ZWgIOyImCDsnojripQg7Iug7YOBIOuqqeyggeydhCDqsIDsoLjshJzripQg7JWI65Cp64uI64ukLiDsgqzsmqnsnpDripQgRU9TIOyCrOyaqeyekCDrmJDripQgRU9TIOu4lOuhneyytOyduCBjaGFpbl9pZOulvCDrjIDtkZztlZjsl6wg64iE6rWs7JeQ6rKM64+EIOyekOyCsOydhCDrs7TsnKDtlZjqsbDrgpgsIOuMgOyXrO2VmOqxsOuCmCwg7J6Q7IKw7JeQIOuMgO2VtCDslpjquLDtlZjqsbDrgpgsIOqzhOyVveydhCDrp7rsnYQg6raM7ZWc7J2EIOu2gOyXrO2VoCDsiJgg7JeG7Iq164uI64ukLiBFT1Mg67iU66Gd7LK07J247JeQ64qUIOyGjOycoOyekCwg6rSA66as7J6QLCDqt7jrpqzqs6Ag7IiY7YOB7J6Q6rCAIOyXhuyWtOyVvCDtlanri4jri6QuCgojIyDsoJwgMTDsobDigIotLS3igIrsgqzsmqnsnpAg67O07JWICgrruYTqs7XqsJwg7YKk7J2YIOuztOq0gOydhCDtj6ztlajtlZjrkJgsIOydtOyXkCDqta3tlZzrkJjsp4Ag7JWK64qUIOqwnOyduCDqs4Tsoowg67O07JWI6rO8IOq0gOugqOuQnCDrqqjrk6Ag7ZWt66qp65OkIOuYkO2VnCDsoITsoIHsnLzroZwg7IKs7Jqp7J6Q6rCAIOyViOyghO2VmOqyjCDrs7TqtIDtlbTslbwg7ZWp64uI64ukLgoKIyMg7KCcIDEx7KGw4oCKLS0t4oCKZW9zaW8ucHJvZHMg7Jyg7ZWc7LGF7J6ECgrsgqzsmqnsnpDripQg67KV66Wg7J20IO2XiOyaqe2VmOuKlCDtlZzrj4Qg64K07JeQ7IScIEVPUyDthqDtgbDsnZgg7JyE7ZeYLCDsgqzsmqksIOuYkOuKlCDsgqzsmqkg67aI6rCA66GcIOyduO2VtCDrsJzsg53tlZjripQg66qo65OgIOyGkO2VtOyXkCDrjIDtlbQg7LGF7J6E7J2YIOuptOyxhSDsobDtla3snbQg7KCB7Jqp65Cc64uk64qUIOqyg+ydhCDsnbjsoJXtlZjqs6AsIOuPmeydmO2VqeuLiOuLpC4g6rOE7JW9IOychOuwmCwg67aI67KVIO2WieychCwg6re466as6rOgIOychOuwmCDtlonsnIQgKOq0gOumrCDtg5zrp4wg7Y+s7ZWoKeyZgCBlb3Npby5wcm9kcyDrmJDripQg7J2066W8IOyatOyYge2VmOuKlCDqsJzrs4Qg7IKs7JqpIOq2jO2VnOydhCDtj6ztlajtlZjrkJgsIOydtOyXkCDqta3tlZztlZjsp4Ag7JWK6rOgIOuqqOuToCDqtIDtlaAg7KeA7Jet7JeQ7ISc7J2YIOuqqOuToCDsooXrpZjsnZgg7IKs7Jyg66GcIOyduO2VnCBFT1Mg67iU66Gd7LK07J24IGNoYWluX2lkIOydtOydtSwg7JiB7JeF6raMLCDrmJDripQg642w7J207YSw7J2YIOyGkOyLpOydhCDtj6ztlajtlZjsl6wg6rCE7KCR7KCBLCDsmrDrsJzsoIEsIO2KueyImO2VnCwg64yA7ZGc7KCBLCDqt7jrpqzqs6Ag7YyM7IOd7KCB7J24IOyGkO2VtOyXkCDrjIDtlZwg7LGF7J6E7J2EIOyngOyngCDslYrsirXri4jri6QuCgojIEVPU+eUqOaIt+WNj+iurgoKIyMgKirlrprkuYkqKgoKRU9T55So5oi35Y2P6K6u5Lit55qE5omA5pyJ5aSn5YaZ77yM5pac5L2T5oiW5YaF6IGU5Luj56CB5pyv6K+t5bCG5YW35pyJ5LiO5Lul5LiL5a6a5LmJ55u45ZCM55qE5pWI5p6c5ZKM5ZCr5LmJ44CCCgotIEVPU+eUqOaIt+WNj+iuru+8muWNs+acrOaWh+aho++8iEVVQe+8iQoKLSDpk77kuIpJRDogY2hhaW5faWQgLSBhY2EzNzZmMjA2YjhmYzI1YTZlZDQ0ZGJkYzY2NTQ3YzM2YzZjMzNlM2ExMTlmZmJlYWVmOTQzNjQyZjBlOTA2CgotIOeUqOaIt++8muS7u+aEj+a7oei2s+S4i+WIl+imgeaxgueahOS4quS6uuaIlue7hOe7h++8muebtOaOpeaIluiAhemXtOaOpeaLpeaciUVPU+i0puaIt+aIluS4jkVPU+i0puaIt+WFs+iBlOeahOWfuuS6jkVPU+WPkeihjOeahOi0ouS6p+OAggoKLSDmiYDmnInmnYPvvJrnm7TmjqXmiJbogIXpl7TmjqXpgJrov4fkuIDkuKrmiJblpJrkuKrmnInmlYjnmoTmnYPpmZDmo4Dmn6Xorr/pl67kuIDkuKpFT1PotKbmiLfjgILmiYDmnInmnYPlj6/ku6XpgJrov4flpJrnrb7mnYPpmZDorrjlj6/lnKjnlKjmiLfpl7TlhbHkuqvjgIIKCi0g5omn6KGM5LqGcmVncHJvZHVjZe+8jOW5tuS4lOS7jmVvc2lvLnZwYXnpooblj5bmlLblhaXnmoTnlKjmiLfjgIIKCi0gZW9zaW8ucHJvZHM65YW35pyJ5Yqo5oCB5p2D6ZmQ57uT5p6E55qERU9T5biQ5oi377yM5b2TMTUvMjEgQmxvY2sgUHJvZHVjZXJz5ZCM5oSP5pe277yM6K+l5biQ5oi35Y+v5Lul5om/5ouFZW9zaW/luJDmiLfnmoTmnYPpmZDjgIIKCi0g572R57uc6LWE5Lqn77ya5YyF5ZCr5Zyo5Lul5LiL6LSm5oi35Lit55qE5Luj5biB77yaZW9zaW8ubmFtZXPjgIFlb3Npby5yYW1mZWXjgIEgIGVvc2lvLnNhdmluZ+OAggoKLSDmsrvnkIbmlofmoaPvvJpyZWdwcm9kdWNlcuaYr+ayu+eQhuaWh+aho+OAggoKLSDku7vkvZXkuqTmmJPjgIHmmbrog73lkIjnuqbmiJbogIXmnY7lmInlm77lkIjnuqbvvIzlroPku6zlt7Lnu4/kvY3kuo7kuIDkuKrljLrlnZfkuK3vvIzlubbkuJTov5nkuKrljLrlnZfmmK/kuI3lj6/pgIbovaznmoTjgIHlt7LpmYTliqDliLDlkI3kuLpjaGFpbl9pZOeahEVPU+WMuuWdl+mTvuS4reOAggoKLSDln7rkuo5FT1PotYTkuqfvvJrku7vkvZXpnIDopoHmnInmlYjorrjlj6/mnaXmk43kvZzjgIHmlLnlj5jjgIHovaznp7vjgIHlvbHlk43miJbogIXov5vooYzlhbbku5bmk43kvZznmoTkuJzopb/jgIIKCi0g5omn6KGM77ya5Zyo5ZCN5Li6Y2hhaW5faWTnmoRFT1PljLrlnZfpk77kuK3mj5DkuqTkuIDkuKrooYzliqjjgIIKCi0g5o6I5p2D5ZKM5p2D6ZmQ77ya5p2D6ZmQ77yIUGVybWlzc2lvbnPvvInmmK/nlKjmnaXlrprkuYnku6Pooajor6XmnYPpmZDlj5HpgIHnmoTkuqTmmJPnmoTopoHmsYLnmoTku7vmhI/lkI3lrZfjgILlj6/ku6Xnu5nnibnlrprnmoTlkIjnuqbmk43kvZznmoTmjojmnYPvvIhBdXRob3JpemF0aW9uc++8ieWIhumFjeadg+mZkO+8iFBlcm1pc3Npb25z77yJ44CCCgotIOadjuWYieWbvuWQiOe6pu+8muWwhuazleW+i+WNj+iuruS4reeahOWumuS5ieimgee0oOS7peiDveWcqOi9r+S7tuS4reihqOi+vuWSjOaJp+ihjOeahOagvOW8j+ihqOi+vueahOWQiOe6puOAggoKIyMgKirmnaHmrL7kuIAqKioq55SoKioqKuaIt+mjjumZqeehruiupCoqCgrlpoLmnpznlKjmiLfkuKLlpLHotKbmiLforr/pl67mnYPpmZDmiJbogIXmsqHmnInph4flj5blkIjpgILnmoTmlrnlvI/kv53miqTotKbmiLforr/pl67mnYPpmZDvvIznlKjmiLflupTnn6XmgonlubblkIzmhI/vvIxFT1PotKbmiLflsIbml6Dms5Xorr/pl67jgILnlKjmiLflupTnoa7orqTnlKjmiLflr7nliqDlr4bku6PluIHlkozljLrlnZfpk77ova/ku7bnmoTpo47pmanjgIHnlKjms5XlkozlpI3mnYLmgKfmnInlhYXliIbkuobop6PjgILnlKjmiLfmib/orqTlubblkIzmhI/nlKjmiLfoh6rooYzmib/mi4Xkvb/nlKhFT1PljLrlnZfpk77nmoTpo47pmanjgIIKCiMjICoq5p2h5qy+5LqMKioqKueJueauiueUqCoqKirmiLfnsbvlnosqKgoK5omn6KGMcmVncHJvZHVjZe+8jOWQjOaEj+W5tuS4lOWPl3JlZ3Byb2R1Y2Vy5p2O5ZiJ5Zu+5ZCI57qm57qm5p2f55qE55So5oi344CCCgojIyAqKuadoeasvuS4iSoqKirlkIzmhI8qKioqRU9TKioqKueUqCoqKirmiLfljY/orq4qKgoKRU9T55So5oi35Y2P6K6u55qE5a6e6LSo5piv5a+55b2T5YmNRU9T5Li7572R5rK755CG5Yqf6IO955qE5o+P6L+w44CC55Sx5Luj56CB5by65Yi25omn6KGM55qE5Yqf6IO95LiN6ZyA6KaB55So5oi355qE5ZCM5oSP77yM5Zug5Li66L+Z5Lqb5Yqf6IO95pivRU9T5Li7572R57O757uf6Ieq5bim55qE44CCCgojIyAqKuadoeasvuWbmyoqIC0gKirmsrvnkIbmlofmoaMqKgoKZW9zaW8ucHJvZHPlj6/ku6Xlr7lFT1PnlKjmiLfljY/orq7lkozmsrvnkIbmlofmoaPov5vooYzku7vkvZXkv67mlLnjgILkuKXmraPmj5DphpLvvIzmj5DliY3nlKhlb3Npby5mb3J1beWFrOaKleWQiOe6pu+8jOmAmui/h2Vvc2lvLnByb2Rz57yW5YaZ44CB5Y+R5biD5LiA5Liq5aOw5piO5p2l5o+P6L+w6YKj5Liq5L+u5pS544CCCgojIyAqKuadoeasvuS6lCoqKirljp/nlJ/ku7cqKioq5YC85Y2V5L2NKioKCkVPU+WFrOmTvuS4iueahOWOn+eUn+S7t+WAvOWNleS9jeW6lOS4umVvc2lvLnRva2Vu5pm66IO95ZCI57qm5a6a5LmJ5ZKM5Yib5bu655qERU9T6YCa6K+B44CCCgojIyAqKuadoeasvuWFrSoqKirnu7TmiqQqKioqRU9TKioqKuWMuioqKirlnZfpk74qKgoK5peg6K66546w5Zyo5oiW5bCG5p2l5bCG5p2l77yMZW9zaW8ucHJvZHPlsIbnu7TmiqTmtLvot4PnmoTljLrlnZfpk77ku6PnoIHlupPvvIzljIXmi6zkvYbkuI3pmZDkuo7miYDmnInlip/og73jgIHkvJjljJbjgIHljYfnuqfnmoTmiYDmnInkv67mlLnjgIHlrp7njrDjgIIKCiMjIOadoeasvuS4gyAtICoqKirlrpoqKioq5LmJKioqKkVPUyoqKirnvZHnu5zotYTkuqcKCuabtOaUuee9kee7nOi1hOS6p+i0puaIt+S4reeahOS7u+S9leS7o+W4geeahOeKtuaAge+8jOabtOaUueS7u+S9leeOsOWtmOeahOebtOaOpeaIlumXtOaOpeeuoeeQhuS7u+S9lee9kee7nOi1hOS6p+eahOWIhumFjeOAgeWunueOsOaIluWIhuWPkeeahOS7o+egge+8jOmcgOimgeS6i+WFiOeUqGVvc2lvLnByb2Rz5ZyoZW9zaW8uZm9ydW3lhazmipXlkIjnuqbkuIrnvJblhpnlkozlj5HluIPmlYjmnpzmj4/ov7DnmoTlo7DmmI7jgIIKCiMjICoq5p2h5qy+5YWrLeWIm+W7uui0puaIt+iHqueUsSoqCgrku7vkvZXnjrDlnKjmiJblsIbmnaXnmoTnlKjmiLfpg73lj6/ku6XlnKjmnKrnu4/ku7vkvZXlhbbku5bnlKjmiLforrjlj6/nmoTmg4XlhrXkuIvliJvlu7pFT1PluJDmiLfjgIIgIOWmguS9leayoeacieaUtuWIsEVPU+W4kOaIt+eahOacieaViOiuuOWPr++8iHBlcm1pc3Npb27vvInvvIxlb3Npby5wcm9kc+awuOi/nOS4jeS8muW9seWTjUVPU+eUqOaIt+W4kOaIt+OAgiAg5a+55LqO5YWx5Lqr5p2D6ZmQ55qERU9T5biQ5oi355qE5YW25LuW55So5oi36K+35rGC55qE5Lu75L2V5pON5L2c77yMZW9zaW8ucHJvZHPlj6/og73kvJrmlLblj5botLnnlKjjgIIKCiMjICoq5p2h5qy+5Lmd5rKh5pyJ5Y+X5omY5Lq6KioKCuayoeacieeUqOaIt+aJv+aLheS/oeaJmOi0o+S7u+adpee7tOaMgUVPU+S7o+W4geeahOS7t+WAvOOAguayoeacieeUqOaIt+WPr+S7peS7o+ihqEVPU+eUqOaIt+aIluiAheS7o+ihqOWQjeS4umNoYWluX0lE55qERU9T5Yy65Z2X6ZO+5o6I5p2D5Lu75L2V5Lq65YWx5ZCM5oyB5pyJ6LWE5Lqn44CB5YCf5qy+44CB5Y+R6KiA5oiW5a6a5ZCI5ZCM44CC5q2k5Yy65Z2X6ZO+5LiN5a2Y5Zyo5oul5pyJ6ICF44CB566h55CG6ICF5oiW6ICF5Y+X5omY5Lq644CCCgojIyAqKuadoeasvuWNgeS4quS6uuWuieWFqCoqCgrmiYDmnInmnInlhbPkuKrkurrotKbmiLflronlhajnmoTkuovpobnvvIzljIXmi6zkvYbkuI3pmZDkuo7np4HpkqXnmoTlronlhajkv53lrZjvvIzpg73nlLHnlKjmiLfoh6rlt7HotJ/otKPjgIIKCiMjICoq5p2h5qy+5Y2B5LiAIGVvc2lvLnByb2Rz55qE5pyJ6ZmQ6LSj5Lu7KioKCueUqOaIt+W6lOefpeaCieWSjOWQjOaEj++8jOWcqOS7u+S9lemAgueUqOazleW+i+WFgeiuuOeahOacgOWkp+iMg+WbtOWGhe+8jOacrOWFjei0o+WjsOaYjumAgueUqOS6juS4jkVPU+S7o+W4gemjjumZqe+8jOS9v+eUqOaIluaXoOazleS9v+eUqEVPU+S7o+W4geacieWFs+aIluWvvOiHtOeahOS7u+S9leaIluaJgOacieaNn+Wus+aIluS8pOWus++8jOS5n+mAgueUqOS6juS7u+S9leWPuOazleeuoei+luWMuuWGheeahOS7u+S9leS7u+S9leihjOS4uuS4i+eahEVPU+WMuuWdl+mTvmNoYWluX2lk77yM5YyF5ous5L2G5LiN6ZmQ5LqO6L+d5Y+N5ouF5L+d44CB6L+d5Y+N5ZCI5ZCM5oiW5L615p2D6KGM5Li677yI5YyF5ous55aP5b+977yJ44CCZW9zaW8ucHJvZHPku6Xlj4rmk43kvZzlroPnmoTkuKrkurrmnYPpmZDlr7nkuo7ku7vkvZXpl7TmjqXnmoTvvIzlgbbnhLbnmoTvvIznibnmrornmoTvvIznpLrkvovmgKfnmoTmiJblkI7mnpzmgKfnmoTmjZ/lrrPvvIzljIXmi6zliKnmtqbmjZ/lpLHvvIzllYboqonmiJbmlbDmja7vvIzkuI3mib/mi4Xku7vkvZXotKPku7vjgIIWQmxvY2tQcm9kdWNlckFncmVlbWVudMZsIyMjIDEuIFRoZSBpbnRlbnQgb2YgcmVncHJvZHVjZXIKClRoZSBpbnRlbnQgb2YgdGhlIGByZWdwcm9kdWNlcmAgYWN0aW9uIGlzIHRvIHJlZ2lzdGVyIGEgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYWN5LiBUaGlzIGNvbnRyYWN0IGlzIGNvbnNpZGVyZWQgYSBnb3Zlcm5pbmcgZG9jdW1lbnQgYXMgZGVmaW5lZCBieSB0aGUgRU9TIFVzZXIgQWdyZWVtZW50IChFVUEpLgoKcmVncHJvZHVjZXLsnZgg66qp7KCBCgpgcmVncHJvZHVjZXJgIOyekeyXheydmCDrqqnsoIHsnYAg67iU66Gd7IOd7IKw7J6QIOyehe2bhOuztCDrk7HroZ3snYQg7ZWY64qUIOqyg+yeheuLiOuLpC4g7J20IOqzhOyVveydgCBFT1Mg7IKs7Jqp7J6QIOqzhOyVveyEnCAoRVVBKeyXkCDsoJXsnZjrkJwg67CU7JmAIOqwmeydtCDqtIDrpqwg66y47ISc66GcIOqwhOyjvOuQqeuLiOuLpC4KCnJlZ3Byb2R1Y2VyIOeahOebrueahAoKYHJlZ3Byb2R1Y2VyYOaTjeS9nOeahOebrueahOaYr+azqOWGjOaIkOS4uuWHuuWdl+iKgueCueWAmemAieiAheOAguagueaNriBFT1Mg55So5oi35Y2P6K6uKEVVQSnnmoTlrprkuYnvvIzmnKzlkIjnuqblsZ7kuo7msrvnkIbmlofmnKwoZ292ZXJuaW5nIGRvY3VtZW50KQoKIyMjIDIuIE5vbWluYXRpb24KCkksIHt7IHByb2R1Y2VyIH19LCBoZXJlYnkgbm9taW5hdGUgbXlzZWxmIGZvciBjb25zaWRlcmF0aW9uIGFzIGEgYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRlLiBUaGlzIG5vbWluYXRpb24gaW5jbHVkZXMgYWdyZWVtZW50IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGNvbnRyYWN0IGJ5IG15IGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZSBlbnRpdHksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHNoYXJlaG9sZGVycywgb3duZXJzLCBlbXBsb3llZXMsIHN0YWZmLCBtZW1iZXJzLCBhbmQgYW55IGluZGl2aWR1YWwgd29ya2luZyBpbiBvZmZpY2lhbCwgZGlyZWN0LCBvciBhZmZpbGlhdGVkIGNhcGFjaXR5IGZvciBteSBCbG9jayBQcm9kdWNlciBlbnRpdHkuCgrsp4DrqoUKCuuCmCwge3sgcHJvZHVjZXIgfX3ripQg67iU66Gd7ZSE66Gc65OA7IScIO2bhOuztOuhnCDqs6DroKTrkJjrj4TroZ0g7J6Q7Iug7J2EIOyngOuqhe2VqeuLiOuLpC4g7J20IOyngOuqheyXkOuKlCDruJTroZ3tlITroZzrk4DshJztmozsgqzsnZgg66qo65OgIOyjvOyjvCwg7IaM7Jyg7J6QLCDsp4Hsm5AsIOuppOuyhCwg7ZqM7JuQIOuwjyDqs7Xsi53snbjsm5AsIOyngeygkSDrmJDripQg6rOE7Je07IKs7JeQ7IScIOydvO2VmOuKlCDrqqjrk6Ag6rCc7J247J2EIO2PrO2VqO2VnCDruJTroZ3tlITroZzrk4DshJwg7ZqM7IKs6rCAIOqzhOyVvSDsobDqsbTsl5Ag64yA7ZW0IOuPmeydmO2VqOydhCDsnbjsoJXtlanri4jri6QuCgrmj5DlkI0KCuacrOS6uu+8jHt7IHByb2R1Y2VyIH1977yM54m55q2k5o+Q5ZCN5pys5Lq65Li65Ye65Z2X6IqC54K55YCZ6YCJ5Lq644CC5pys5o+Q5ZCN5YyF5ous5LqG5pys5Ye65Z2X6IqC54K55YCZ6YCJ5Lq65a6e5L2T5a+55pys5ZCI57qm5Lit5omA5pyJ5p2h5qy+55qE5piO56Gu5ZCM5oSP77yM5YyF5ZCr5YW25omA5pyJ6ICF44CB6ZuH5ZGY44CB5ZGY5bel44CB5oiQ5ZGY77yM5Lul5Y+K5Lu75L2V5Lul5q2j5byP5pa55byP44CB55u05o6l5oiW6ZmE5bGe5pa55byP5Li65pys5Ye65Z2X6IqC54K55a6e5L2T5bel5L2c55qE5Liq5Lq644CCCgojIyMgMy4gUmVzaWduYXRpb24gYW5kIFJlbW92YWwgZm9yIEluYWJpbGl0eSB0byBQZXJmb3JtIE9ibGlnYXRpb25zLgoKSWYgSSwge3sgcHJvZHVjZXIgfX0sIGFtIHVuYWJsZSB0byBwZXJmb3JtIGFueSBvZiB0aGUgb2JsaWdhdGlvbnMgc3RpcHVsYXRlZCBpbiB0aGlzIGNvbnRyYWN0LCBJIHdpbGwgcmVzaWduIG15IHBvc2l0aW9uIGJ5IGNhbGxpbmcgdGhlIGB1bnJlZ3Byb2RgIGFjdGlvbi4KCklmIEksIHt7IHByb2R1Y2VyIH19LCBmYWlsIHRvIHJlc2lnbiB3aGVuIHVuYWJsZSB0byBwZXJmb3JtIHNhaWQgb2JsaWdhdGlvbnMsIEkgdW5kZXJzdGFuZCB0aGF0IHByb2NlZHVyZXMgZW51bWVyYXRlZCBpbiB0aGlzIGNvbnRyYWN0IHNoYWxsIGJlIGVuYWN0ZWQuCgrsnZjrrLTsnZgg67aI7J207ZaJ7JeQIOuMgO2VnCDsgqzsnoQg67CPIOyyoO2ajAoKe3sgcHJvZHVjZXIgfX3qsIAg67O4IOqzhOyVveyEnOyXkCDrqoXsi5zrkJwg7J2Y66y066W8IOyImO2WiSDtlaAg7IiYIOyXhuuKlCDqsr3smrAsIOyDneyCsOyekCDtgqTrpbwgbnVsbCDroZwg7ZWo7Jy866Gc7I2oIOuzuOyduOydmCDsp4DsnITrpbwg7IKs7J6E7ZWp64uI64ukLgoK66eM7JW9IOuCtOqwgCB7e3Byb2R1Y2VyfX3snZgg7J2Y66y066W8IOydtO2WiSDtlaAg7IiYIOyXhuydhCDrlYwg7IKs7J6E7ZWY7KeAIOyViuuKlOuLpOuptCwg64KY64qUIOuzuCDqs4Tslb3sl5Ag7Je06rGw65CcIOygiOywqOqwgCDsp5HtlonrkKjsnYQg64+Z7J2Y7ZWp64uI64ukLgoK5Zug5LiN6IO95bGl6KGM5LmJ5Yqh6ICM6YCA5Ye65oiW6KKr5Y+W5raI5Ye65Z2X6LWE5qC8CgrlpoLmnpzmiJHvvIx7eyBwcm9kdWNlciB9fe+8jOS4jeiDveWxpeihjOacrOWQiOe6puS4reaJgOinhOWumueahOaJgOacieS5ieWKoe+8jOaIkeWwhuS9v+eUqCBgdW5yZWdwcm9kYCDmk43kvZzmnaXoh6rmiJHpgIDlh7rvvIhyZXNpZ27vvInjgIIKCuWmguaenOaIkSB7eyBwcm9kdWNlciB9fSwg5Zyo5peg5rOV5bGl6KGM5LiK6L+w5LmJ5Yqh5pe25pyq6IO96YCA5Ye6KHJlc2lnbinvvIzmiJHnn6XmmZPmnKzlkIjnuqblsIbkvJrmjInnhafmiYDmnInliJfkuL7nmoTnqIvluo/lr7nmiJHlrp7ooYzliLboo4HmiJblpITnvZrnqIvluo/jgIIKCiMjIyA0LiBFT1MgQWNjb3VudHMKCkJsb2NrIFByb2R1Y2VycyBtYXkgbmV2ZXIgYWZmZWN0IGFuIGFjY291bnQgb24gdGhlIEVPUyBibG9ja2NoYWluLCBleGNlcHQgZm9yIHRoZSByZWFzb25zIHNwZWNpZmljYWxseSBjaXRlZCBpbiB0aGlzIGNvbnRyYWN0IHRoYXQgcGVydGFpbiB0byBCbG9jayBQcm9kdWNlciBhY2NvdW50cy4gVXNlciBhY2NvdW50cyBjYW4gb25seSBiZSBhZmZlY3RlZCBvbiB0aGUgYmFzaXMgb2YgQXJ0aWNsZSBWSUlJIGluIHRoZSBFT1MgVXNlciBBZ3JlZW1lbnQuCgpFT1Mg6rOE7KCVCgrruJTroZ3tlITroZzrk4DshJzripQg67O4IOqzhOyVveyXkOyEnCDtlbTri7ntlZjripQg67iU66Gd7ZSE66Gc65OA7ISc7J2YIOqzhOyglSDssKjri6jsl5Ag6rSA66Co7ZWY7JesIO2KueuzhO2eiCDslrjquIntlZwg7J207Jyg66W8IOygnOyZuO2VmOqzoOuKlCBFT1Mg67iU66Gd7LK07J247J2YIOqzhOygleyXkCDqsrDsvZQg7JiB7Zal7J2EIOuvuOy5mOyngCDslYrsirXri4jri6QuIOyCrOyaqeyekCDqs4TsoJXsnYAgRU9TIOyCrOyaqeyekCDqs4Tslb3shJzsnZggOOyhsOyXkCDqt7zqsbDtlaAg65WM66eMIOyYge2WpeydhCDrsJvsnYQg7IiYIOyeiOyKteuLiOuLpC4KCkVPUyDotKblj7cKCuWHuuWdl+iKgueCueawuOi/nOS4jeS8muWvuSBFT1Mg5Yy65Z2X6ZO+5LiK55qE5biQ5oi36YCg5oiQ5b2x5ZON77yM6Zmk6Z2e5piv5pys5ZCI57qm5Lit54m55Yir5o+Q5Yiw5LiO5Ye65Z2X6IqC54K55biQ5oi35pyJ5YWz55qE5Y6f5Zug44CC5Y+q5pyJ5Z+65LqOIEVPU+eUqOaIt+WNj+iuruS4reeahOesrOWFq+adoeeahOaDheW9ouS4i++8jOeUqOaIt+eahOi0puWPt+aJjeS8muWPl+WIsOW9seWTjS4KCiMjIyA1LiBQcm9kdWNlciBLZXkKCkksIHt7IHByb2R1Y2VyIH19LCB3aWxsIHNpZ24gYmxvY2tzIHdpdGgge3sgcHJvZHVjZXJfa2V5IH19CgpJZiBJLCB7eyBwcm9kdWNlciB9fSBzdXNwZWN0IG15IGtleSBoYXMgYmVlbiBjb21wcm9taXNlZCBJIHdpbGwgYWxlcnQgdGhlIG90aGVyIEJsb2NrIFByb2R1Y2VycyBpbW1lZGlhdGVseS4KCkksIHt7IHByb2R1Y2VyIH19LCBhY2tub3dsZWRnZSB0aGF0IGFueSBhbmQgYWxsIGFjdGlvbnMgZXhlY3V0ZWQgd2l0aCBteSB7eyBwcm9kdWNlcl9rZXkgfX0gaXMgbXkgcmVzcG9uc2liaWxpdHksIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjY291bnQgYmVpbmcgY29tcHJvbWlzZWQuCgrtlITroZzrk4DshJwg7YKkCgrrgpgsIHt7IHByb2R1Y2VyIH1964qUIHt7IHByb2R1Y2VyIF8ga2V5IH19IOuhnCDruJTroZ3sl5Ag7ISc66qFIO2VoCDqsoPsnoXri4jri6QuCuunjOyVvSDrgrQsIHt7cHJvZHVjZXJ9fSDqsIAg67O47J247J2YIO2CpOqwgCDshpDsg4HrkJjsl4jri6Tqs6Ag7J2Y7Ius65CY66m0IOymieyLnCDri6Trpbgg67iU66Gd7ZSE66Gc65OA7ISc7JeQ6rKMIOyVjOugpOykhCDqsoPsnoXri4jri6QuCuuCmCwge3twcm9kdWNlcn1964qUIEVPUyDruJTroZ3ssrTsnbjsl5DshJwg67O47J247J2YIOu4lOuhne2UhOuhnOuTgOyEnCDqs4TsoJXsnbQg7Iuk7ZaJ7ZWY64qUIOuqqOuToCDsnpHsl4Xsl5Ag64yA7ZW0LCDqs4TsoJUg7J207IOBIOycoOustOyZgCDqtIDroKgg7JeG7J20LCDssYXsnoTsnbQg7J6I7J2M7J2EIOyduOygle2VqeuLiOuLpC4KCuWHuuWdl+iKgueCueWFrOmSpQoKIOaIkSwge3sgcHJvZHVjZXIgfX0sIOWwhuS9v+eUqCB7eyBwcm9kdWNlcl9rZXkgfX0g5a+55Yy65Z2X562+5ZCN44CCCuWmguaenOaIkSwge3sgcHJvZHVjZXIgfX0sIOaAgOeWkeaIkeeahOWvhumSpeW3suiiq+azhOmcsu+8jOaIkeWwhueri+WNs+mAmuefpeWFtuS7luiKgueCueOAggrmiJHvvIx7eyBwcm9kdWNlciB9fe+8jOaJv+iupOaIkeeahOWHuuWdl+iKgueCueW4kOaIt+WcqEVPU+WMuuWdl+mTvuS4iuaJgOaJp+ihjOeahOS7u+S9leaTjeS9nOmDveaYr+aIkeeahOi0o+S7u++8jOaXoOiuuuivpeW4kOaIt+aYr+WQpuiiq+ebl+OAggoKIyMjIDYuIEFQSSBFbmRwb2ludHMKCklmIEksIHt7IHByb2R1Y2VyIH19LCBxdWFsaWZ5IGZvciwgYW5kIGNob29zZSB0byBjbGFpbSByZXdhcmRzIGR1ZSB0byB2b3RlcyByZWNlaXZlZCwgYW5kL29yIGJsb2NrcyBwcm9kdWNlZCwgSSwge3sgcHJvZHVjZXIgfX0sIHdpbGwgcHJvdmlkZSBmdW5jdGlvbmluZyBhbmQgcXVlcnlhYmxlIHB1YmxpYyBQMlAgYW5kIEFQSSBlbmRwb2ludHMgdG8gbWFpbnRhaW4gc3luY2hyb25pemF0aW9uIHdpdGggdGhlIGJsb2NrY2hhaW4gYW5kIHN1Ym1pdCB0cmFuc2FjdGlvbnMgdG8gYmUgaW5jbHVkZWQuIEFQSSBlbmRwb2ludHMgbXVzdCBiZSB1cGRhdGVkIHRvIGEgcmVjZW50IGZ1bmN0aW9uYWwgdmVyc2lvbiB0aGF0IGRvZXMgbm90IGhhdmUga25vd24gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKSSwge3sgcHJvZHVjZXIgfX0sIGhlcmVieSBhY2tub3dsZWRnZSB0aGF0IGlmIEkgYW0gdW5hYmxlIHRvIGRvIHNvIHdpdGhpbiAzMCBtaW51dGVzIG9mIGJlaW5nIGFsZXJ0ZWQgYnkgYW5vdGhlciBibG9jayBwcm9kdWNlciBjYW5kaWRhdGUsIEkgY2FuIGJlIHJlbW92ZWQgYnkgdXNlIG9mIHRoZSBgcm12cHJvZHVjZXJgIGFjdGlvbi4KCkFQSSDsl5Trk5ztj6zsnbjtirgKCuunjOyVvSDrgrQsIHt7IHByb2R1Y2VyIH19IOqwgCDtiKztkZzrpbwg67Cb7JWEIOu4lOuhnSDrs7Tsg4HsnYQg7LKt6rWs7ZWgIOyImCDsnojripQg7J6Q6rKp7J2EIOyWu+ycvOuptCwg64KYIHt7IHByb2R1Y2VyIH1964qUIOyekeuPmSDrsI8g7L+866asIOqwgOuKpe2VnCDqs7XqsJwgUDJQIOuwjyBBUEkg7JeU65Oc7Y+s7J247Yq466W8IOu4lOuhneyytOyduOqzvOydmCDrj5nquLDtmZQg67CPIO2KuOuenOyereyFmOydhCDsoJzstpztlaAg7IiYIOyeiOqyjCDsnKDsp4DqtIDrpqztlanri4jri6QuIEFQSSDsl5Trk5ztj6zsnbjtirjripQg7JWM66Ck7KeEIOuztOyViCDst6jslb3shLHsnbQg7JeG64qUIOy1nOyLoOuyhOyghOycvOuhnCDsl4XrjbDsnbTtirjtlbTslbwg7ZWp64uI64ukLgoK64KYLCB7eyBwcm9kdWNlciB9fSDripQg64uk66W4IGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZSDqsIAg6rK96rOgIOKAi+KAi+2VnCDtm4QsIDMw67aEIOydtOuCtOyXkCDrsJTroZzsnqHsnYQg7IiYIOyXhuuLpOuptCBgcm12cHJvZHVjZXJgIOyhsOy5mOulvCDthrXtlbQg7J6Q6rKp7J20IOygnOqxsCDrkKAg7IiYIOyeiOydjOydhCDsnbjsoJXtlanri4jri6QuCgpBUEkg56uv54K5CgrlpoLmnpzmiJHvvIx7eyBwcm9kdWNlciB9fSDnlLHkuo7lvpfliLDmipXnpajlkowv5oiW5Ye65Z2X55qE5Y6f5Zug77yM56ym5ZCI6aKG5Y+W5aWW5Yqx55qE5p2h5Lu25bm26YCJ5oup5o6l5Y+X5aWW5Yqx77yM6YKj5LmI5oiR77yMIHt7IHByb2R1Y2VyIH1977yM5bCG5o+Q5L6b5Yqf6IO95q2j5bi455qE5YWs5YWxIFAyUCDlkowgQVBJIOerr+eCueadpee7tOaKpOS4juWMuuWdl+mTvueahOWQjOatpe+8jOW5tuaPkOS6pOimgeaJk+WMheWFpeWdl+eahOS6i+WKoeOAgkFQSSDnq6/ngrnlv4Xpobvmm7TmlrDliLDmnIDmlrDnmoTlj6/nlKjniYjmnKzvvIzlubbkuJTor6XniYjmnKzmsqHmnInlt7Lnn6XnmoTlronlhajmvI/mtJ4KCuaIke+8jHt7cHJvZHVjZXJ9fe+8jOWcqOatpOehruiupO+8jOWmguaenOaIkeWcqOaUtuWIsOWPpuS4gOS4qiBibG9jayBwcm9kdWNlciBjYW5kaWRhdGXnmoTorablkYrlkI4zMOWIhumSn+WGheS7jeS4jeiDveespuWQiOS4iui/sOimgeaxgu+8jOWPr+S7peS9v+eUqGBybXZwcm9kdWNlcmDmk43kvZznp7vpmaTmiJHnmoTotKbmiLfjgIIKCiMjIyA3LiBFeGVjdXRpb24gdGltZQoKSSwge3sgcHJvZHVjZXIgfX0sIHdpbGwgZGVwbG95IGFuZCBydW4gbmV0d29yayBpbmZyYXN0cnVjdHVyZSBjYXBhYmxlIG9mIG1haW50YWluaW5nIDJtcyBvciBsZXNzIENQVSBleGVjdXRpb24gdGltZXMuCgpJLCB7eyBwcm9kdWNlciB9fSwgaGVyZWJ5IGFja25vd2xlZGdlIHRoYXQgaWYgSSBhbSB1bmFibGUgdG8gZG8gc28gd2l0aGluIDMwIG1pbnV0ZXMgb2YgYmVpbmcgYWxlcnRlZCBieSBhbm90aGVyIGJsb2NrIHByb2R1Y2VyIGNhbmRpZGF0ZSwgSSBjYW4gYmUgcmVtb3ZlZCBieSB1c2Ugb2YgdGhlIGBybXZwcm9kdWNlcmAgYWN0aW9uLgoK7Iuk7ZaJIOyLnOqwhAoK64KYLCB7eyBwcm9kdWNlciB9feuKlCAybXMg65iQ64qUIOq3uCDsnbTtlZjsnZggQ1BVIOyLpO2WiSDsi5zqsITsnYQg7Jyg7KeA7ZWgIOyImCDsnojripQg64Sk7Yq47JuM7YGsIOyduO2UhOudvOulvCDrsLDtj6ztlZjqs6Ag7Iuk7ZaJ7ZWp64uI64ukLgoKIOuCmCwge3sgcHJvZHVjZXIgfX0g64qUIOuLpOuluCBibG9jayBwcm9kdWNlciBjYW5kaWRhdGXqsIAg6rK96rOgIOKAi+KAi+2VnCDtm4QsIDMw67aEIOydtOuCtOyXkCDrsJTroZzsnqHsnYQg7IiYIOyXhuuLpOuptCBgcm12cHJvZHVjZXJgIOyhsOy5mOulvCDthrXtlbQg7J6Q6rKp7J20IOygnOqxsCDrkKAg7IiYIOyeiOydjOydhCDsnbjsoJXtlanri4jri6QuCgrmiafooYzml7bpl7QKCuaIke+8jCB7eyBwcm9kdWNlciB9fe+8jOWwhumDqOe9suWSjOi/kOihjOe9kee7nOWfuuehgOiuvuaWve+8jOiDveWkn+WwhiBDUFUg5omn6KGM5pe26Ze057u05oyB5ZyoIDJtcyDmiJbmm7TlsJHnmoTmsLTlubPjgIIKCuaIke+8jHt7IHByb2R1Y2VyIH1977yM5Zyo5q2k56Gu6K6k77yM5aaC5p6c5oiR5Zyo5pS25Yiw5Y+m5LiA5LiqYmxvY2sgcHJvZHVjZXIgY2FuZGlkYXRl55qE6K2m5ZGK5ZCOMzDliIbpkp/lhoXkuI3og73nrKblkIjkuIrov7DmnaHku7bvvIzlj6/ku6Xkvb/nlKggYHJtdnByb2R1Y2VyYCDmk43kvZzlsIbmiJHnp7vpmaTjgIIKCiMjIyA4LiBPcmRlcmluZwoKSSB7eyBwcm9kdWNlciB9fSBhZ3JlZSB0byBwcm9jZXNzIHRyYW5zYWN0aW9ucyBvbiBhIGZpcnN0LWluLWZpcnN0LW91dCAoRklGTykgYmFzaXMsIGFuZCBub3QgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgYmxvY2tzIGluIG9yZGVyIHRvIGRlcml2ZSBwcm9maXQgZnJvbSB0aGUgb3JkZXIgaW4gd2hpY2ggdHJhbnNhY3Rpb25zIGFyZSBpbmNsdWRlZDogdGhlIGhhc2ggb2YgdGhlIGJsb2NrIHRoYXQgaXMgcHJvZHVjZWQuCgrsg53sgrAK64KYLCB7eyBwcm9kdWNlciB9feuKlCDshKDsnoUg7ISg7Lac67KVIChGSUZPKSDrsKnsi53snLzroZwg6rGw656Y66W8IOyymOumrO2VmOqzoCDqsbDrnpjqsIAg67iU66Gd7J2YIO2VtOyLnOyXkCDtj6ztlajrkJjripQg7Iic7ISc7JeQ7IScIOydtOydteydhCDslrvsnLzroKTripQg66qp7KCB7Jy866GcIOyDneyCsO2VmOuKlCDruJTroZ3snZgg64K07Jqp7J2EIOyhsOyeke2VmOyngCDslYrquLDroZwg64+Z7J2Y7ZWp64uI64ukLgoK6aG65bqPCgrmiJHvvIwge3sgcHJvZHVjZXIgfX0g77yM5ZCM5oSP5qC55o2u5YWI6L+b5YWI5Ye6KEZJRk8p55qE5pa55byP5aSE55CG5LqL5Yqh77yM5bm25LiU57ud5LiN5Lya5Li65LqG54mf5Yip6ICM5Yip55So5Yy65Z2X5YaF5a6544CB5pON57q15Yy65Z2X5Lit5Lqk5piT5aSE55CG55qE6aG65bqP44CCCgojIyMgOS4gUmFuZG9tIFJvdGF0aW9uIG9mIFN0YW5kYnlzCgpJLCB7eyBwcm9kdWNlciB9fSwgYWdyZWUgdGhhdCBpZiBJIGFtIGluIGEgcGFpZCBzdGFuZGJ5IHBvc2l0aW9uLCBJIGNhbiBiZSByYW5kb21seSBjYWxsZWQgaW50byBhIHByb2R1Y2luZyBwb3NpdGlvbi4gVXBvbiBmYWlsdXJlIHRvIHByb2R1Y2UgYmxvY2tzLCBjb2RlIG1heSBzZWxmLWV4ZWN1dGUgcGVuYWx0aWVzIHJlZ2FyZGluZyBmdXR1cmUgdnBheSByZXdhcmRzLgoK7Jyg6riJIOuMgOq4sCDruJTroZ3tlITroZzrk4DshJzsnZgg66y07J6R7JyEIOuhnO2FjOydtOyFmAoK64KYLCB7eyBwcm9kdWNlciB9feuKlCDrs7jsnbjsnbQg7Jyg6riJIOuMgOq4sOyngeyXkCDsnojsnYQg65WMLCDrrLTsnpHsnITroZwg7IOd7IKw7KeB7Jy866GcIOu2gOumhCDrsJvsnYQg7IiYIOyeiOuLpOuKlCDqsoPsl5Ag64+Z7J2Y7ZWp64uI64ukLiDsnbTrlYwg67iU66Gd7J2EIOyDneyEse2VmOyngCDrqrvtlZjrqbQg7L2U65Oc64qUIO2Wpe2bhCB2cGF5IOuztOyDgeyXkCDrjIDtlZwg7LKY67KM7J2EIOynke2Wie2VoCDsiJgg7J6I7Iq164uI64ukLgoK5aSH6YCJ6IqC54K56ZqP5py66L2u5o2iCgrmiJHvvIx7eyBwcm9kdWNlciB9fe+8jOWQjOaEj+iLpeacrOiKgueCueWkhOS6juacieWBv+Wkh+mAieeKtuaAge+8jOWPr+iiq+maj+acuuiwg+WFpeWHuuWdl+eKtuaAgeOAguWmguaenOaIkeaXoOazleWHuuWdl++8jOWQiOe6puS7o+eggeWPr+iDveS8muiHquWKqOaJp+ihjOWwseacquadpeeahCB2cGF5IOaKpemFrOi/m+ihjOWkhOe9muOAggoKIyMjIDEwLiBNaXNzaW5nIFR3byBvciBNb3JlIFJvdW5kcyBvZiBCbG9ja3MKCkksIHt7IHByb2R1Y2VyIH19LCBhY2tub3dsZWRnZSB0aGF0IGlmIGFmdGVyIG1pc3NpbmcgMiBvciBtb3JlIHJvdW5kcyBvZiBibG9ja3MgaW4gc3VjY2Vzc2lvbiBJIGFtIHVuYWJsZSB0byBiZSBjb250YWN0ZWQgd2l0aGluIDIwIG1pbnV0ZXMsIEksIHt7IHByb2R1Y2VyIH19LCBhY2tub3dsZWRnZSB0aGF0IEkgbWF5IGJlIHJlbW92ZWQgZnJvbSBhIHByb2R1Y2luZyBwb3NpdGlvbiBieSB1c2Ugb2YgdGhlIGBybXZwcm9kdWNlcmAgYWN0aW9uLgoKSSwge3sgcHJvZHVjZXIgfX0sIGFja25vd2xlZGdlIHRoYXQgYWZ0ZXIgbWlzc2luZyB0d28gb3IgbW9yZSByb3VuZHMgb2YgYmxvY2tzIGluIHN1Y2Nlc3Npb24sIHN0YW5kYXJkIHByYWN0aWNlIHN0aXB1bGF0ZXMgcmVtb3ZpbmcgbXkgcHJvZHVjZXIgYnkgdXNpbmcgdGhlIGB1bnJlZ3Byb2RgIGFjdGlvbiB1bnRpbCB0aGUgZ2l2ZW4gaXNzdWUgaXMgcmVzb2x2ZWQuCgrrkZAg65287Jq065OcIOydtOyDgeydmCDruJTroZ0g64iE6529CgrrgpgsIHt7IHByb2R1Y2VyIH1964qUIOuRkCDrnbzsmrTrk5wg7J207IOBIOyXsOyGje2VmOyXrCDruJTroZ3snYQg64iE6529IO2VnCDtm4QsIDIw67aEIOydtOuCtOyXkCDsl7Drnb0g7ZWgIOyImCDsl4bri6TrqbQge3sgcHJvZHVjZXIgfX0g6rCAIGBybXZwcm9kdWNlcmAg7JWh7IWY7J2YIOyCrOyaqeuQmOyWtCDsg53sgrAg7JyE7LmY7JeQ7IScIOygnOqxsCDrkKAg7IiYIOyeiOydjOydhCDsnbjsoJXtlanri4jri6QuCgp7eyBwcm9kdWNlciB9feuKlCDrkZAg65287Jq065OcIOydtOyDgeycvOuhnCDruJTroZ3snYQg7Jew7IaN7KCB7Jy866GcIOuIhOudve2VnOuLpOuptCwg7KO87Ja07KeEIOusuOygnOqwgCDtlbTqsrAg65CgIOuVjOq5jOyngCBgdW5yZWdwcm9kYCDsnpHsl4XsnYQg7IKs7Jqp7ZWY7JesIOuzuOyduOydtCDsg53sgrAg7JyE7LmY7JeQ7IScIOygnOqxsOuQqOydtCDtkZzspIAg6rSA7ZaJ7Jy866GcIOq3nOygleuQmOyWtCDsnojsnYzsnYQg7J247KCV7ZWp64uI64ukLgoK5Lik6L2u5oiW5pu05aSa6L2u5Lii5Z2X55qE5oOF5b2iCgrmiJHvvIx7eyBwcm9kdWNlciB9fSwg56Gu6K6k5aaC5p6c6L+e57ut5Lik6L2u5oiW5pu05aSa6L2u5Lii5Z2X5LiU5peg5rOV5ZyoMjDliIbpkp/lhoXogZTns7vliLDmiJHvvIzmiJHvvIx7eyBwcm9kdWNlciB9fSwg5ZCM5oSP5Y+v6IO95Lya55SoIGBybXZwcm9kdWNlcmAg5pON5L2c5bCG5oiR56e76Zmk44CCCuaIke+8jHt7IHByb2R1Y2VyIH19LCDlpoLmnpzov57nu63kuKTova7miJbmm7TlpJrova7kuKLlnZfvvIzmoLnmja7moIflh4blrp7ot7XkvJrlj5HotbcgYHVucmVncHJvZGAg5pON5L2c5bCG5oiR56e76Zmk5Ye65Z2X6LWE5qC877yM55u05Yiw6Zeu6aKY6Kej5Yaz44CCCgojIyMgMTEuIFVyZ2VudCBTZWN1cml0eSBQYXRjaGVzCgpJLCB7eyBwcm9kdWNlciB9fSwgYWNrbm93bGVkZ2UgdGhhdCBpZiBJIGFtIG5vdCBhYmxlIHRvIGJlIGNvbnRhY3RlZCBpbiBhbnkgZm9ybSBhZnRlciBhbiB1cmdlbnQgc2VjdXJpdHkgcGF0Y2ggaXMgYW5ub3VuY2VkLCBJIG1heSBiZSByZW1vdmVkIGJ5IHVzZSBvZiB0aGUgYHJtdnByb2R1Y2VyYCBhY3Rpb24uCgrquLTquIkg67O07JWIIO2MqOy5mArquLTquIkg67O07JWIIO2MqOy5mOqwgCDrsJztkZwg65CcIO2bhCwg7Ja065akIO2Yle2DnOuhnOuToCDsl7Drnb0g7ZWgIOyImCDsl4bripQg6rK97JqwIGBybXZwcm9kdWNlcmAg7J6R7JeF7J2EIOyCrOyaqe2VmOyXrCDsoJzqsbAg65CgIOyImCDsnojsnYzsnYQg64KYLCB7eyBwcm9kdWNlciB9feuKlCDsnbjsoJXtlanri4jri6QuCgrntKfmgKXlronlhajooaXkuIEKCuaIke+8jHt7IHByb2R1Y2VyIH1977yM56Gu6K6k5aaC5p6c5Zyo57Sn5oCl5a6J5YWo6KGl5LiB5Y+R5biD5ZCO55So5Lu75L2V5pa55byP6YO95peg5rOV6IGU57O75Yiw5oiR77yM5Y+v6IO95Lya55SoIGBybXZwcm9kdWNlcmAg5oyH5Luk5bCG5oiR56e76Zmk44CCCgojIyMgMTIuIERpc2Nsb3N1cmUgb2YgRW50aXR5IGFuZCBTZXJ2ZXIgSW5mb3JtYXRpb24KCkksIHt7IHByb2R1Y2VyIH19LCBhdHRlc3QgdGhhdCBJIGhhdmUgZGlzY2xvc2VkIHRoZSBhcHByb3hpbWF0ZSBnZW9sb2NhdGlvbiBmb3IgbXkgbWFpbiBwcm9kdWN0aW9uIG5vZGUgYXMgYmVpbmcge3sgbG9jYXRpb24gfX0uCgrrspXsnbgg67CPIOyEnOuyhCDsoJXrs7TsnZgg6rO16rCcCgrrgpgsIHt7IHByb2R1Y2VyIH19IOuKlCDso7wg7IOd7IKwIOuFuOuTnOyXkCDrjIDtlZwg7JyE7LmYIOygleuztOulvCDqs7XqsJztlojsnYzsnYQg7Kad66qF7ZWp64uI64ukLgoK5a6e5L2T5ZKM5pyN5Yqh5Zmo55qE5L+h5oGv5oqr6ZyyCgrmiJHvvIx7eyBwcm9kdWNlciB9fe+8jOehruiupOaIkeW3sue7j+aKq+mcsuS6huS4u+WHuuWdl+iKgueCueacjeWKoeWZqOWcsOeQhuS9jee9rueahOWHhuehruS/oeaBr+OAguWFtuWcsOWdgOS4uiB7eyBsb2NhdGlvbiB9feOAggoKIyMjIDEzLiBFc3RhYmxpc2hlcyB0aGUgcGVuYWx0eSBhbmQgcHJvY2VkdXJlIGZvciB1bndpbGxpbmduZXNzIHRvIGNvbXBseSB3aXRoIHBlbmFsdGllcyBvciBwcm9jZWR1cmVzCgpJLCB7eyBwcm9kdWNlciB9fSwgYWNrbm93bGVkZ2UgdGhhdCBmYWlsaW5nIHRvIGNvbXBseSB3aXRoIHBlbmFsdGllcyBvciBwcm9jZWR1cmVzIGVuYWN0ZWQgYWdhaW5zdCBtZSB3aWxsIHJlc3VsdCBpbiBCbG9jayBQcm9kdWNlcnMgZXhlY3V0aW5nIHRoZSBgcm12cHJvZHVjZXJgIGNvbnRyYWN0IHRvIHJlbW92ZSBtZS4KCkksIHt7IHByb2R1Y2VyIH19LCB3aWxsIG5vdCBleGVjdXRlIHRoZSBgcmVncHJvZHVjZXJgIGNvbnRyYWN0IHVudGlsIHNlcnZpbmcgb3IgZnVsZmlsbGluZyB0aGUgcmVxdWlyZW1lbnRzIGZyb20gYSBwZW5hbHR5IG9yIHByb2NlZHVyZSB0aGF0IHJlc3VsdHMgaW4gaGF2aW5nIHRoZSBgcm12cHJvZHVjZXJgIGNvbnRyYWN0IGV4ZWN1dGVkIHRvIHJlbW92ZSBtZS4KCkksIHt7IHByb2R1Y2VyIH19LCBhY2tub3dsZWRnZSB0aGF0IGlmIEkgY29udGludWUgdG8gY2FsbCB0aGUgYHJlZ3Byb2R1Y2VyYCBhY3Rpb24gd2l0aG91dCBzZXJ2aW5nIG9yIGZ1bGZpbGxpbmcgdGhlIHJlcXVpcmVtZW50cyBmcm9tIGJyZWFjaCBvZiBgcmVncHJvZHVjZXJgLCBteSBhY2NvdW50IGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RlcmVkIEJsb2NrIFByb2R1Y2VyIGluIHF1ZXN0aW9uIG1heSBiZSBudWxsZWQgYnkgQmxvY2sgUHJvZHVjZXJzIGJ5IHVzaW5nIGBlb3Npby53cmFwYC4KCu2OmOuEkO2LsOulvCDspIDsiJjtlZjsp4Ag7JWK7J2EIOqyveyasCDrsozsuZkKCuuCmCwge3sgcHJvZHVjZXIgfX0g64qUIOuCmOyXkOqyjCDsoJzsnqzrkJwg7LKY67KM7J2EIOykgOyImO2VmOyngCDslYrsnLzrqbQg67iU66Gd7ZSE66Gc65OA7ISc65Ok7J20IGBybXZwcm9kdWNlcmAg6rOE7JW97J2EIOynke2Wie2VmOqyjCDrkKAg6rKD7J2065286rOgIOyduOygle2VqeuLiOuLpC4g64KYLCB7eyBwcm9kdWNlciB9fSDripQgYHJtdnByb2R1Y2VyYCDqs4Tslb3snbQg7KeR7ZaJ65Cc64uk66m0IOyalOq1rCDsgqztla3snYQg7Lap7KGx65CgIOuVjOq5jOyngCBgcmVncHJvZHVjZXJgIOqzhOyVveydhCDsnbTtlontlZjsp4Ag7JWK7J2EIOqyg+yeheuLiOuLpC4KYHJlZ3Byb2R1Y2VyYCDqs4Tslb0g7JyE67CY7Jy866GcIOyduO2VnCDsmpTqtawg7IKs7ZWt7J2EIOy2qeyhseyLnO2CpOyngCDslYrqs6AgYHJlZ3Byb2R1Y2VyYCDqs4Tslb3snYQg6rOE7IaNIO2YuOy2nO2VmOuptCDtlbTri7kg67iU66Gd7ZSE66Gc65OA7ISc7JmAIOq0gOugqOuQnCDqs4TsoJUg7YKk6rCAIGBlb3Npby53cmFwYCDsnYQg7IKs7Jqp7ZWY7JesIOu4lOuhne2UhOuhnOuTgOyEnOuTpOyXkCDsnZjtlbQg66y07Zqo7ZmUIOuQoCDsiJgg7J6I7J2M7J2EIOyduOygle2VqeuLiOuLpC4KCuWvueS4jeaEv+mBteWuiOWkhOe9mueahOihjOS4uuS6iOS7peWkhOe9mgoK5oiR77yMe3sgcHJvZHVjZXIgfX3vvIzmib/orqToi6XkuI3pgbXlrojlr7nmnKzkurrliLboo4HnmoTlpITnvZrvvIxCUCDlj6/ku6Xlrp7mlr0gYHJtdnByb2R1Y2VyYCDlkIjnuqbvvIzmiJHmjqXlj5fmipXnpajnmoTotYTmoLzlsIbooqvlj5bmtojjgILoi6XmnInpkojlr7nmiJHlrp7mlr0gYHJtdnByb2R1Y2VyYCDlkIjnuqbnmoTmg4XlhrXlj5HnlJ/vvIzmiJEsIHt7IHByb2R1Y2VyIH19IOWcqOmBteWuiC/lsaXooYzmiYDmlLbliLDnmoTlpITnvZrkuYvliY3vvIzkuI3kvJrlho3mrKHmiafooYwgYHJlZ3Byb2R1Y2VyYCDlkIjnuqbjgIIKCuaIke+8jHt7IHByb2R1Y2VyIH1977yM5Zyo5bGl6KGM5oOp572a56iL5bqP55qE6KaB5rGC5LmL5YmN77yM5LiN5Lya5omn6KGMIGByZWdwcm9kdWNlcmAg5ZCI5ZCM44CC5oiR55+l5pmT5aaC5LiN5bGl6KGM5q2k56iL5bqP77yMIGBybXZwcm9kdWNlcmAg5ZCI5ZCM5bCG5Lya5YaN5qyh5bCG5oiR56e76Zmk44CCCgrmiJEse3sgcHJvZHVjZXIgfX0sIOaJv+iupOWmguaenOayoeaciemBteWuiOaIluWxpeihjOWboOi/neWPjSBgcmVncHJvZHVjZXJgIOiAjOWPl+WIsOeahOaDqee9muimgeaxguWNtOe7p+e7reiwg+eUqGByZWdwcm9kdWNlcmDmk43kvZzvvIxCUCDlj6/ku6XosIPnlKggYGVvc2lvLndyYXBgIOWQiOe6puWwhuaIkeeUqOadpeazqOWGjOWHuuWdl+iKgueCueeahOi0puWPt+WvhumSpeiuvue9ruS4uuaXoOaViOWAvOOAggAAAiJ2YXJpYW50X2Jsb2NrX3NpZ25pbmdfYXV0aG9yaXR5X3YwARpibG9ja19zaWduaW5nX2F1dGhvcml0eV92MA92YXJpYW50X3YwX2RhdGEBB3YwX2RhdGELAAAAAEhzvT4UYWN0aW9uX3JldHVybl9idXlyYW0AwLz6SHO9PhRhY3Rpb25fcmV0dXJuX2J1eXJhbQCwyv5Ic70+FGFjdGlvbl9yZXR1cm5fYnV5cmFtAMCKCktzvT4UYWN0aW9uX3JldHVybl9idXlyYW2AokENm+anSgtjaGVja3N1bTI1NgAAAECam5djGWFjdGlvbl9yZXR1cm5fcmFtdHJhbnNmZXIAAABgXn2kuRlhY3Rpb25fcmV0dXJuX3JhbXRyYW5zZmVyAK5aeJqbpbkZYWN0aW9uX3JldHVybl9yYW10cmFuc2ZlcgAAAECaG6PCFWFjdGlvbl9yZXR1cm5fc2VsbHJhbQAAkObm5djUGWFjdGlvbl9yZXR1cm5fcmFtdHJhbnNmZXIAsFfwKlWzYhFnZXRwZWVya2V5c19yZXNfdA==' +) +export const abi = ABI.from(abiBlob) +export namespace Types { + @Struct.type('key_weight') + export class key_weight extends Struct { + @Struct.field(PublicKey) + declare key: PublicKey + @Struct.field(UInt16) + declare weight: UInt16 + } + @Struct.type('block_signing_authority_v0') + export class block_signing_authority_v0 extends Struct { + @Struct.field(UInt32) + declare threshold: UInt32 + @Struct.field(key_weight, {array: true}) + declare keys: key_weight[] + } + @Variant.type('variant_block_signing_authority_v0', [block_signing_authority_v0]) + export class variant_block_signing_authority_v0 extends Variant { + declare value: block_signing_authority_v0 + } + @Struct.type('v0_data') + export class v0_data extends Struct { + @Struct.field(PublicKey, {optional: true}) + declare pubkey?: PublicKey + } + @Variant.type('variant_v0_data', [v0_data]) + export class variant_v0_data extends Variant { + declare value: v0_data + } + @Struct.type('abi_hash') + export class abi_hash extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Checksum256) + declare hash: Checksum256 + } + @Struct.type('account_name_blacklist') + export class account_name_blacklist extends Struct { + @Struct.field(Name, {array: true}) + declare disallowed: Name[] + } + @Struct.type('actfinkey') + export class actfinkey extends Struct { + @Struct.field(Name) + declare finalizer_name: Name + @Struct.field('string') + declare finalizer_key: string + } + @Struct.type('action_return_buyram') + export class action_return_buyram extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field(Int64) + declare bytes_purchased: Int64 + @Struct.field(Int64) + declare ram_bytes: Int64 + @Struct.field(Asset) + declare fee: Asset + } + @Struct.type('action_return_ramtransfer') + export class action_return_ramtransfer extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare to: Name + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field(Int64) + declare from_ram_bytes: Int64 + @Struct.field(Int64) + declare to_ram_bytes: Int64 + } + @Struct.type('action_return_sellram') + export class action_return_sellram extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field(Int64) + declare bytes_sold: Int64 + @Struct.field(Int64) + declare ram_bytes: Int64 + @Struct.field(Asset) + declare fee: Asset + } + @Struct.type('activate') + export class activate extends Struct { + @Struct.field(Checksum256) + declare feature_digest: Checksum256 + } + @Struct.type('permission_level') + export class permission_level extends Struct { + @Struct.field(Name) + declare actor: Name + @Struct.field(Name) + declare permission: Name + } + @Struct.type('permission_level_weight') + export class permission_level_weight extends Struct { + @Struct.field(permission_level) + declare permission: permission_level + @Struct.field(UInt16) + declare weight: UInt16 + } + @Struct.type('wait_weight') + export class wait_weight extends Struct { + @Struct.field(UInt32) + declare wait_sec: UInt32 + @Struct.field(UInt16) + declare weight: UInt16 + } + @Struct.type('authority') + export class authority extends Struct { + @Struct.field(UInt32) + declare threshold: UInt32 + @Struct.field(key_weight, {array: true}) + declare keys: key_weight[] + @Struct.field(permission_level_weight, {array: true}) + declare accounts: permission_level_weight[] + @Struct.field(wait_weight, {array: true}) + declare waits: wait_weight[] + } + @Struct.type('bid_refund') + export class bid_refund extends Struct { + @Struct.field(Name) + declare bidder: Name + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('bidname') + export class bidname extends Struct { + @Struct.field(Name) + declare bidder: Name + @Struct.field(Name) + declare newname: Name + @Struct.field(Asset) + declare bid: Asset + } + @Struct.type('bidrefund') + export class bidrefund extends Struct { + @Struct.field(Name) + declare bidder: Name + @Struct.field(Name) + declare newname: Name + } + @Struct.type('producer_key') + export class producer_key extends Struct { + @Struct.field(Name) + declare producer_name: Name + @Struct.field(PublicKey) + declare block_signing_key: PublicKey + } + @Struct.type('producer_schedule') + export class producer_schedule extends Struct { + @Struct.field(UInt32) + declare version: UInt32 + @Struct.field(producer_key, {array: true}) + declare producers: producer_key[] + } + @Struct.type('block_header') + export class block_header extends Struct { + @Struct.field(UInt32) + declare timestamp: UInt32 + @Struct.field(Name) + declare producer: Name + @Struct.field(UInt16) + declare confirmed: UInt16 + @Struct.field(Checksum256) + declare previous: Checksum256 + @Struct.field(Checksum256) + declare transaction_mroot: Checksum256 + @Struct.field(Checksum256) + declare action_mroot: Checksum256 + @Struct.field(UInt32) + declare schedule_version: UInt32 + @Struct.field(producer_schedule, {optional: true}) + declare new_producers?: producer_schedule + } + @Struct.type('block_info_record') + export class block_info_record extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(UInt32) + declare block_height: UInt32 + @Struct.field(TimePoint) + declare block_timestamp: TimePoint + } + @Struct.type('blockchain_parameters') + export class blockchain_parameters extends Struct { + @Struct.field(UInt64) + declare max_block_net_usage: UInt64 + @Struct.field(UInt32) + declare target_block_net_usage_pct: UInt32 + @Struct.field(UInt32) + declare max_transaction_net_usage: UInt32 + @Struct.field(UInt32) + declare base_per_transaction_net_usage: UInt32 + @Struct.field(UInt32) + declare net_usage_leeway: UInt32 + @Struct.field(UInt32) + declare context_free_discount_net_usage_num: UInt32 + @Struct.field(UInt32) + declare context_free_discount_net_usage_den: UInt32 + @Struct.field(UInt32) + declare max_block_cpu_usage: UInt32 + @Struct.field(UInt32) + declare target_block_cpu_usage_pct: UInt32 + @Struct.field(UInt32) + declare max_transaction_cpu_usage: UInt32 + @Struct.field(UInt32) + declare min_transaction_cpu_usage: UInt32 + @Struct.field(UInt32) + declare max_transaction_lifetime: UInt32 + @Struct.field(UInt32) + declare deferred_trx_expiration_window: UInt32 + @Struct.field(UInt32) + declare max_transaction_delay: UInt32 + @Struct.field(UInt32) + declare max_inline_action_size: UInt32 + @Struct.field(UInt16) + declare max_inline_action_depth: UInt16 + @Struct.field(UInt16) + declare max_authority_depth: UInt16 + } + @Struct.type('blockchain_parameters_v1') + export class blockchain_parameters_v1 extends blockchain_parameters { + @Struct.field(UInt32, {extension: true, optional: true}) + declare max_action_return_value_size?: UInt32 + } + @Struct.type('buyram') + export class buyram extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare quant: Asset + } + @Struct.type('buyramburn') + export class buyramburn extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field('string') + declare memo: string + } + @Struct.type('buyrambytes') + export class buyrambytes extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(UInt32) + declare bytes: UInt32 + } + @Struct.type('buyramself') + export class buyramself extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Asset) + declare quant: Asset + } + @Struct.type('buyrex') + export class buyrex extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('canceldelay') + export class canceldelay extends Struct { + @Struct.field(permission_level) + declare canceling_auth: permission_level + @Struct.field(Checksum256) + declare trx_id: Checksum256 + } + @Struct.type('powerup_config_resource') + export class powerup_config_resource extends Struct { + @Struct.field(Int64, {optional: true}) + declare current_weight_ratio?: Int64 + @Struct.field(Int64, {optional: true}) + declare target_weight_ratio?: Int64 + @Struct.field(Int64, {optional: true}) + declare assumed_stake_weight?: Int64 + @Struct.field(TimePointSec, {optional: true}) + declare target_timestamp?: TimePointSec + @Struct.field(Float64, {optional: true}) + declare exponent?: Float64 + @Struct.field(UInt32, {optional: true}) + declare decay_secs?: UInt32 + @Struct.field(Asset, {optional: true}) + declare min_price?: Asset + @Struct.field(Asset, {optional: true}) + declare max_price?: Asset + } + @Struct.type('powerup_config') + export class powerup_config extends Struct { + @Struct.field(powerup_config_resource) + declare net: powerup_config_resource + @Struct.field(powerup_config_resource) + declare cpu: powerup_config_resource + @Struct.field(UInt32, {optional: true}) + declare powerup_days?: UInt32 + @Struct.field(Asset, {optional: true}) + declare min_powerup_fee?: Asset + } + @Struct.type('cfgpowerup') + export class cfgpowerup extends Struct { + @Struct.field(powerup_config) + declare args: powerup_config + } + @Struct.type('claimrewards') + export class claimrewards extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('closerex') + export class closerex extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('cnclrexorder') + export class cnclrexorder extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('connector') + export class connector extends Struct { + @Struct.field(Asset) + declare balance: Asset + @Struct.field(Float64) + declare weight: Float64 + } + @Struct.type('consolidate') + export class consolidate extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('defcpuloan') + export class defcpuloan extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(UInt64) + declare loan_num: UInt64 + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('defnetloan') + export class defnetloan extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(UInt64) + declare loan_num: UInt64 + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('delegatebw') + export class delegatebw extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare stake_net_quantity: Asset + @Struct.field(Asset) + declare stake_cpu_quantity: Asset + @Struct.field('bool') + declare transfer: boolean + } + @Struct.type('delegated_bandwidth') + export class delegated_bandwidth extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare to: Name + @Struct.field(Asset) + declare net_weight: Asset + @Struct.field(Asset) + declare cpu_weight: Asset + } + @Struct.type('deleteauth') + export class deleteauth extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Name) + declare permission: Name + @Struct.field(Name, {extension: true, optional: true}) + declare authorized_by?: Name + } + @Struct.type('delfinkey') + export class delfinkey extends Struct { + @Struct.field(Name) + declare finalizer_name: Name + @Struct.field('string') + declare finalizer_key: string + } + @Struct.type('delschedule') + export class delschedule extends Struct { + @Struct.field(TimePointSec) + declare start_time: TimePointSec + } + @Struct.type('deny_hash') + export class deny_hash extends Struct { + @Struct.field(UInt64) + declare id: UInt64 + @Struct.field(Checksum256) + declare hash: Checksum256 + } + @Struct.type('denyhashadd') + export class denyhashadd extends Struct { + @Struct.field(Checksum256) + declare hash: Checksum256 + } + @Struct.type('denyhashcalc') + export class denyhashcalc extends Struct { + @Struct.field(Name, {array: true}) + declare patterns: Name[] + } + @Struct.type('denyhashrm') + export class denyhashrm extends Struct { + @Struct.field(Checksum256) + declare hash: Checksum256 + } + @Struct.type('denynames') + export class denynames extends Struct { + @Struct.field(Name, {array: true}) + declare patterns: Name[] + } + @Struct.type('deposit') + export class deposit extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('donatetorex') + export class donatetorex extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field('string') + declare memo: string + } + @Struct.type('eosio_global_state') + export class eosio_global_state extends blockchain_parameters { + @Struct.field(UInt64) + declare max_ram_size: UInt64 + @Struct.field(UInt64) + declare total_ram_bytes_reserved: UInt64 + @Struct.field(Int64) + declare total_ram_stake: Int64 + @Struct.field(BlockTimestamp) + declare last_producer_schedule_update: BlockTimestamp + @Struct.field(TimePoint) + declare last_pervote_bucket_fill: TimePoint + @Struct.field(Int64) + declare pervote_bucket: Int64 + @Struct.field(Int64) + declare perblock_bucket: Int64 + @Struct.field(UInt32) + declare total_unpaid_blocks: UInt32 + @Struct.field(Int64) + declare total_activated_stake: Int64 + @Struct.field(TimePoint) + declare thresh_activated_stake_time: TimePoint + @Struct.field(UInt16) + declare last_producer_schedule_size: UInt16 + @Struct.field(Float64) + declare total_producer_vote_weight: Float64 + @Struct.field(BlockTimestamp) + declare last_name_close: BlockTimestamp + } + @Struct.type('eosio_global_state2') + export class eosio_global_state2 extends Struct { + @Struct.field(UInt16) + declare new_ram_per_block: UInt16 + @Struct.field(BlockTimestamp) + declare last_ram_increase: BlockTimestamp + @Struct.field(BlockTimestamp) + declare last_block_num: BlockTimestamp + @Struct.field(Float64) + declare total_producer_votepay_share: Float64 + @Struct.field(UInt8) + declare revision: UInt8 + } + @Struct.type('eosio_global_state3') + export class eosio_global_state3 extends Struct { + @Struct.field(TimePoint) + declare last_vpay_state_update: TimePoint + @Struct.field(Float64) + declare total_vpay_share_change_rate: Float64 + } + @Struct.type('eosio_global_state4') + export class eosio_global_state4 extends Struct { + @Struct.field(Float64) + declare continuous_rate: Float64 + @Struct.field(Int64) + declare inflation_pay_factor: Int64 + @Struct.field(Int64) + declare votepay_factor: Int64 + } + @Struct.type('exchange_state') + export class exchange_state extends Struct { + @Struct.field(Asset) + declare supply: Asset + @Struct.field(connector) + declare base: connector + @Struct.field(connector) + declare quote: connector + } + @Struct.type('execschedule') + export class execschedule extends Struct {} + @Struct.type('fin_key_id_generator_info') + export class fin_key_id_generator_info extends Struct { + @Struct.field(UInt64) + declare next_finalizer_key_id: UInt64 + } + @Struct.type('finalizer_authority') + export class finalizer_authority extends Struct { + @Struct.field('string') + declare description: string + @Struct.field(UInt64) + declare weight: UInt64 + @Struct.field(Bytes) + declare public_key: Bytes + } + @Struct.type('finalizer_auth_info') + export class finalizer_auth_info extends Struct { + @Struct.field(UInt64) + declare key_id: UInt64 + @Struct.field(finalizer_authority) + declare fin_authority: finalizer_authority + } + @Struct.type('finalizer_info') + export class finalizer_info extends Struct { + @Struct.field(Name) + declare finalizer_name: Name + @Struct.field(UInt64) + declare active_key_id: UInt64 + @Struct.field(Bytes) + declare active_key_binary: Bytes + @Struct.field(UInt32) + declare finalizer_key_count: UInt32 + } + @Struct.type('finalizer_key_info') + export class finalizer_key_info extends Struct { + @Struct.field(UInt64) + declare id: UInt64 + @Struct.field(Name) + declare finalizer_name: Name + @Struct.field('string') + declare finalizer_key: string + @Struct.field(Bytes) + declare finalizer_key_binary: Bytes + } + @Struct.type('fundcpuloan') + export class fundcpuloan extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(UInt64) + declare loan_num: UInt64 + @Struct.field(Asset) + declare payment: Asset + } + @Struct.type('fundnetloan') + export class fundnetloan extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(UInt64) + declare loan_num: UInt64 + @Struct.field(Asset) + declare payment: Asset + } + @Struct.type('gifted_ram') + export class gifted_ram extends Struct { + @Struct.field(Name) + declare giftee: Name + @Struct.field(Name) + declare gifter: Name + @Struct.field(Int64) + declare ram_bytes: Int64 + } + @Struct.type('giftram') + export class giftram extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare to: Name + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field('string') + declare memo: string + } + @Struct.type('init') + export class init extends Struct { + @Struct.field(VarUInt) + declare version: VarUInt + @Struct.field(Asset.Symbol) + declare core: Asset.Symbol + } + @Struct.type('last_prop_finalizers_info') + export class last_prop_finalizers_info extends Struct { + @Struct.field(finalizer_auth_info, {array: true}) + declare last_proposed_finalizers: finalizer_auth_info[] + } + @Struct.type('limitauthchg') + export class limitauthchg extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Name, {array: true}) + declare allow_perms: Name[] + @Struct.field(Name, {array: true}) + declare disallow_perms: Name[] + } + @Struct.type('linkauth') + export class linkauth extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Name) + declare code: Name + @Struct.field(Name) + declare type: Name + @Struct.field(Name) + declare requirement: Name + @Struct.field(Name, {extension: true, optional: true}) + declare authorized_by?: Name + } + @Struct.type('logbuyram') + export class logbuyram extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field(Int64) + declare ram_bytes: Int64 + @Struct.field(Asset) + declare fee: Asset + } + @Struct.type('logramchange') + export class logramchange extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field(Int64) + declare ram_bytes: Int64 + } + @Struct.type('logsellram') + export class logsellram extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Asset) + declare quantity: Asset + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field(Int64) + declare ram_bytes: Int64 + @Struct.field(Asset) + declare fee: Asset + } + @Struct.type('logsystemfee') + export class logsystemfee extends Struct { + @Struct.field(Name) + declare protocol: Name + @Struct.field(Asset) + declare fee: Asset + @Struct.field('string') + declare memo: string + } + @Struct.type('mvfrsavings') + export class mvfrsavings extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare rex: Asset + } + @Struct.type('mvtosavings') + export class mvtosavings extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare rex: Asset + } + @Struct.type('name_bid') + export class name_bid extends Struct { + @Struct.field(Name) + declare newname: Name + @Struct.field(Name) + declare high_bidder: Name + @Struct.field(Int64) + declare high_bid: Int64 + @Struct.field(TimePoint) + declare last_bid_time: TimePoint + } + @Struct.type('newaccount') + export class newaccount extends Struct { + @Struct.field(Name) + declare creator: Name + @Struct.field(Name) + declare name: Name + @Struct.field(authority) + declare owner: authority + @Struct.field(authority) + declare active: authority + } + @Struct.type('onblock') + export class onblock extends Struct { + @Struct.field(block_header) + declare header: block_header + } + @Struct.type('onerror') + export class onerror extends Struct { + @Struct.field(UInt128) + declare sender_id: UInt128 + @Struct.field(Bytes) + declare sent_trx: Bytes + } + @Struct.type('pair_time_point_sec_int64') + export class pair_time_point_sec_int64 extends Struct { + @Struct.field(TimePointSec) + declare first: TimePointSec + @Struct.field(Int64) + declare second: Int64 + } + @Struct.type('powerup') + export class powerup extends Struct { + @Struct.field(Name) + declare payer: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(UInt32) + declare days: UInt32 + @Struct.field(Int64) + declare net_frac: Int64 + @Struct.field(Int64) + declare cpu_frac: Int64 + @Struct.field(Asset) + declare max_payment: Asset + } + @Struct.type('powerup_order') + export class powerup_order extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(UInt64) + declare id: UInt64 + @Struct.field(Name) + declare owner: Name + @Struct.field(Int64) + declare net_weight: Int64 + @Struct.field(Int64) + declare cpu_weight: Int64 + @Struct.field(TimePointSec) + declare expires: TimePointSec + } + @Struct.type('powerup_state_resource') + export class powerup_state_resource extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Int64) + declare weight: Int64 + @Struct.field(Int64) + declare weight_ratio: Int64 + @Struct.field(Int64) + declare assumed_stake_weight: Int64 + @Struct.field(Int64) + declare initial_weight_ratio: Int64 + @Struct.field(Int64) + declare target_weight_ratio: Int64 + @Struct.field(TimePointSec) + declare initial_timestamp: TimePointSec + @Struct.field(TimePointSec) + declare target_timestamp: TimePointSec + @Struct.field(Float64) + declare exponent: Float64 + @Struct.field(UInt32) + declare decay_secs: UInt32 + @Struct.field(Asset) + declare min_price: Asset + @Struct.field(Asset) + declare max_price: Asset + @Struct.field(Int64) + declare utilization: Int64 + @Struct.field(Int64) + declare adjusted_utilization: Int64 + @Struct.field(TimePointSec) + declare utilization_timestamp: TimePointSec + } + @Struct.type('powerup_state') + export class powerup_state extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(powerup_state_resource) + declare net: powerup_state_resource + @Struct.field(powerup_state_resource) + declare cpu: powerup_state_resource + @Struct.field(UInt32) + declare powerup_days: UInt32 + @Struct.field(Asset) + declare min_powerup_fee: Asset + } + @Struct.type('powerupexec') + export class powerupexec extends Struct { + @Struct.field(Name) + declare user: Name + @Struct.field(UInt16) + declare max: UInt16 + } + @Struct.type('producer_info') + export class producer_info extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Float64) + declare total_votes: Float64 + @Struct.field(PublicKey) + declare producer_key: PublicKey + @Struct.field('bool') + declare is_active: boolean + @Struct.field('string') + declare url: string + @Struct.field(UInt32) + declare unpaid_blocks: UInt32 + @Struct.field(TimePoint) + declare last_claim_time: TimePoint + @Struct.field(UInt16) + declare location: UInt16 + @Struct.field(variant_block_signing_authority_v0, {extension: true, optional: true}) + declare producer_authority?: variant_block_signing_authority_v0 + } + @Struct.type('producer_info2') + export class producer_info2 extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Float64) + declare votepay_share: Float64 + @Struct.field(TimePoint) + declare last_votepay_share_update: TimePoint + } + @Struct.type('ramburn') + export class ramburn extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field('string') + declare memo: string + } + @Struct.type('ramtransfer') + export class ramtransfer extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare to: Name + @Struct.field(Int64) + declare bytes: Int64 + @Struct.field('string') + declare memo: string + } + @Struct.type('refund') + export class refund extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('refund_request') + export class refund_request extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(TimePointSec) + declare request_time: TimePointSec + @Struct.field(Asset) + declare net_amount: Asset + @Struct.field(Asset) + declare cpu_amount: Asset + } + @Struct.type('regfinkey') + export class regfinkey extends Struct { + @Struct.field(Name) + declare finalizer_name: Name + @Struct.field('string') + declare finalizer_key: string + @Struct.field('string') + declare proof_of_possession: string + } + @Struct.type('regproducer') + export class regproducer extends Struct { + @Struct.field(Name) + declare producer: Name + @Struct.field(PublicKey) + declare producer_key: PublicKey + @Struct.field('string') + declare url: string + @Struct.field(UInt16) + declare location: UInt16 + } + @Struct.type('regproducer2') + export class regproducer2 extends Struct { + @Struct.field(Name) + declare producer: Name + @Struct.field(variant_block_signing_authority_v0) + declare producer_authority: variant_block_signing_authority_v0 + @Struct.field('string') + declare url: string + @Struct.field(UInt16) + declare location: UInt16 + } + @Struct.type('regproxy') + export class regproxy extends Struct { + @Struct.field(Name) + declare proxy: Name + @Struct.field('bool') + declare isproxy: boolean + } + @Struct.type('rentcpu') + export class rentcpu extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare loan_payment: Asset + @Struct.field(Asset) + declare loan_fund: Asset + } + @Struct.type('rentnet') + export class rentnet extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare loan_payment: Asset + @Struct.field(Asset) + declare loan_fund: Asset + } + @Struct.type('rex_balance') + export class rex_balance extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare vote_stake: Asset + @Struct.field(Asset) + declare rex_balance: Asset + @Struct.field(Int64) + declare matured_rex: Int64 + @Struct.field(pair_time_point_sec_int64, {array: true}) + declare rex_maturities: pair_time_point_sec_int64[] + } + @Struct.type('rex_fund') + export class rex_fund extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare balance: Asset + } + @Struct.type('rex_loan') + export class rex_loan extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare payment: Asset + @Struct.field(Asset) + declare balance: Asset + @Struct.field(Asset) + declare total_staked: Asset + @Struct.field(UInt64) + declare loan_num: UInt64 + @Struct.field(TimePoint) + declare expiration: TimePoint + } + @Struct.type('rex_maturity') + export class rex_maturity extends Struct { + @Struct.field(UInt32) + declare num_of_maturity_buckets: UInt32 + @Struct.field('bool') + declare sell_matured_rex: boolean + @Struct.field('bool') + declare buy_rex_to_savings: boolean + } + @Struct.type('rex_order') + export class rex_order extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare rex_requested: Asset + @Struct.field(Asset) + declare proceeds: Asset + @Struct.field(Asset) + declare stake_change: Asset + @Struct.field(TimePoint) + declare order_time: TimePoint + @Struct.field('bool') + declare is_open: boolean + } + @Struct.type('rex_pool') + export class rex_pool extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Asset) + declare total_lent: Asset + @Struct.field(Asset) + declare total_unlent: Asset + @Struct.field(Asset) + declare total_rent: Asset + @Struct.field(Asset) + declare total_lendable: Asset + @Struct.field(Asset) + declare total_rex: Asset + @Struct.field(Asset) + declare namebid_proceeds: Asset + @Struct.field(UInt64) + declare loan_num: UInt64 + } + @Struct.type('rex_return_buckets') + export class rex_return_buckets extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(pair_time_point_sec_int64, {array: true}) + declare return_buckets: pair_time_point_sec_int64[] + } + @Struct.type('rex_return_pool') + export class rex_return_pool extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(TimePointSec) + declare last_dist_time: TimePointSec + @Struct.field(TimePointSec) + declare pending_bucket_time: TimePointSec + @Struct.field(TimePointSec) + declare oldest_bucket_time: TimePointSec + @Struct.field(Int64) + declare pending_bucket_proceeds: Int64 + @Struct.field(Int64) + declare current_rate_of_increase: Int64 + @Struct.field(Int64) + declare proceeds: Int64 + } + @Struct.type('rexexec') + export class rexexec extends Struct { + @Struct.field(Name) + declare user: Name + @Struct.field(UInt16) + declare max: UInt16 + } + @Struct.type('rmvproducer') + export class rmvproducer extends Struct { + @Struct.field(Name) + declare producer: Name + } + @Struct.type('schedules_info') + export class schedules_info extends Struct { + @Struct.field(TimePointSec) + declare start_time: TimePointSec + @Struct.field(Float64) + declare continuous_rate: Float64 + } + @Struct.type('sellram') + export class sellram extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Int64) + declare bytes: Int64 + } + @Struct.type('sellrex') + export class sellrex extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Asset) + declare rex: Asset + } + @Struct.type('setabi') + export class setabi extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Bytes) + declare abi: Bytes + @Struct.field('string', {extension: true, optional: true}) + declare memo?: string + } + @Struct.type('setacctcpu') + export class setacctcpu extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Int64, {optional: true}) + declare cpu_weight?: Int64 + } + @Struct.type('setacctnet') + export class setacctnet extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Int64, {optional: true}) + declare net_weight?: Int64 + } + @Struct.type('setacctram') + export class setacctram extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Int64, {optional: true}) + declare ram_bytes?: Int64 + } + @Struct.type('setalimits') + export class setalimits extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Int64) + declare ram_bytes: Int64 + @Struct.field(Int64) + declare net_weight: Int64 + @Struct.field(Int64) + declare cpu_weight: Int64 + } + @Struct.type('setcode') + export class setcode extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(UInt8) + declare vmtype: UInt8 + @Struct.field(UInt8) + declare vmversion: UInt8 + @Struct.field(Bytes) + declare code: Bytes + @Struct.field('string', {extension: true, optional: true}) + declare memo?: string + } + @Struct.type('setinflation') + export class setinflation extends Struct { + @Struct.field(Int64) + declare annual_rate: Int64 + @Struct.field(Int64) + declare inflation_pay_factor: Int64 + @Struct.field(Int64) + declare votepay_factor: Int64 + } + @Struct.type('setparams') + export class setparams extends Struct { + @Struct.field(blockchain_parameters_v1) + declare params: blockchain_parameters_v1 + } + @Struct.type('setpayfactor') + export class setpayfactor extends Struct { + @Struct.field(Int64) + declare inflation_pay_factor: Int64 + @Struct.field(Int64) + declare votepay_factor: Int64 + } + @Struct.type('setpriv') + export class setpriv extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(UInt8) + declare is_priv: UInt8 + } + @Struct.type('setram') + export class setram extends Struct { + @Struct.field(UInt64) + declare max_ram_size: UInt64 + } + @Struct.type('setramrate') + export class setramrate extends Struct { + @Struct.field(UInt16) + declare bytes_per_block: UInt16 + } + @Struct.type('setrex') + export class setrex extends Struct { + @Struct.field(Asset) + declare balance: Asset + } + @Struct.type('setrexmature') + export class setrexmature extends Struct { + @Struct.field(UInt32, {optional: true}) + declare num_of_maturity_buckets?: UInt32 + @Struct.field('bool', {optional: true}) + declare sell_matured_rex?: boolean + @Struct.field('bool', {optional: true}) + declare buy_rex_to_savings?: boolean + } + @Struct.type('setschedule') + export class setschedule extends Struct { + @Struct.field(TimePointSec) + declare start_time: TimePointSec + @Struct.field(Float64) + declare continuous_rate: Float64 + } + @Struct.type('switchtosvnn') + export class switchtosvnn extends Struct {} + @Struct.type('undelegatebw') + export class undelegatebw extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare unstake_net_quantity: Asset + @Struct.field(Asset) + declare unstake_cpu_quantity: Asset + } + @Struct.type('undenynames') + export class undenynames extends Struct { + @Struct.field(Name, {array: true}) + declare patterns: Name[] + } + @Struct.type('ungiftram') + export class ungiftram extends Struct { + @Struct.field(Name) + declare from: Name + @Struct.field(Name) + declare to: Name + @Struct.field('string') + declare memo: string + } + @Struct.type('unlinkauth') + export class unlinkauth extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Name) + declare code: Name + @Struct.field(Name) + declare type: Name + @Struct.field(Name, {extension: true, optional: true}) + declare authorized_by?: Name + } + @Struct.type('unregprod') + export class unregprod extends Struct { + @Struct.field(Name) + declare producer: Name + } + @Struct.type('unstaketorex') + export class unstaketorex extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Name) + declare receiver: Name + @Struct.field(Asset) + declare from_net: Asset + @Struct.field(Asset) + declare from_cpu: Asset + } + @Struct.type('unvest') + export class unvest extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Asset) + declare unvest_net_quantity: Asset + @Struct.field(Asset) + declare unvest_cpu_quantity: Asset + } + @Struct.type('updateauth') + export class updateauth extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(Name) + declare permission: Name + @Struct.field(Name) + declare parent: Name + @Struct.field(authority) + declare auth: authority + @Struct.field(Name, {extension: true, optional: true}) + declare authorized_by?: Name + } + @Struct.type('updaterex') + export class updaterex extends Struct { + @Struct.field(Name) + declare owner: Name + } + @Struct.type('updtrevision') + export class updtrevision extends Struct { + @Struct.field(UInt8) + declare revision: UInt8 + } + @Struct.type('user_resources') + export class user_resources extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare net_weight: Asset + @Struct.field(Asset) + declare cpu_weight: Asset + @Struct.field(Int64) + declare ram_bytes: Int64 + } + @Struct.type('voteproducer') + export class voteproducer extends Struct { + @Struct.field(Name) + declare voter: Name + @Struct.field(Name) + declare proxy: Name + @Struct.field(Name, {array: true}) + declare producers: Name[] + } + @Struct.type('voter_info') + export class voter_info extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Name) + declare proxy: Name + @Struct.field(Name, {array: true}) + declare producers: Name[] + @Struct.field(Int64) + declare staked: Int64 + @Struct.field(Float64) + declare last_vote_weight: Float64 + @Struct.field(Float64) + declare proxied_vote_weight: Float64 + @Struct.field('bool') + declare is_proxy: boolean + @Struct.field(UInt32) + declare flags1: UInt32 + @Struct.field(UInt32) + declare reserved2: UInt32 + @Struct.field(Asset) + declare reserved3: Asset + } + @Struct.type('voteupdate') + export class voteupdate extends Struct { + @Struct.field(Name) + declare voter_name: Name + } + @Struct.type('wasmcfg') + export class wasmcfg extends Struct { + @Struct.field(Name) + declare settings: Name + } + @Struct.type('withdraw') + export class withdraw extends Struct { + @Struct.field(Name) + declare owner: Name + @Struct.field(Asset) + declare amount: Asset + } + @Struct.type('delpeerkey') + export class delpeerkey extends Struct { + @Struct.field(Name) + declare proposer_finalizer_name: Name + @Struct.field(PublicKey) + declare key: PublicKey + } + @Struct.type('getpeerkeys') + export class getpeerkeys extends Struct {} + @Struct.type('peer_key') + export class peer_key extends Struct { + @Struct.field(Name) + declare account: Name + @Struct.field(variant_v0_data) + declare data: variant_v0_data + } + @Struct.type('peerkeys_t') + export class peerkeys_t extends Struct { + @Struct.field(Name) + declare producer_name: Name + @Struct.field(PublicKey, {optional: true}) + declare peer_key?: PublicKey + } + @Struct.type('regpeerkey') + export class regpeerkey extends Struct { + @Struct.field(Name) + declare proposer_finalizer_name: Name + @Struct.field(PublicKey) + declare key: PublicKey + } + @Struct.type('limit_auth_change') + export class limit_auth_change extends Struct { + @Struct.field(UInt8) + declare version: UInt8 + @Struct.field(Name) + declare account: Name + @Struct.field(Name, {array: true}) + declare allow_perms: Name[] + @Struct.field(Name, {array: true}) + declare disallow_perms: Name[] + } +} +export const TableMap = { + abihash: Types.abi_hash, + acctdenylist: Types.account_name_blacklist, + bidrefunds: Types.bid_refund, + blockinfo: Types.block_info_record, + cpuloan: Types.rex_loan, + delband: Types.delegated_bandwidth, + denyhashlist: Types.deny_hash, + finalizers: Types.finalizer_info, + finkeyidgen: Types.fin_key_id_generator_info, + finkeys: Types.finalizer_key_info, + giftedram: Types.gifted_ram, + global: Types.eosio_global_state, + global2: Types.eosio_global_state2, + global3: Types.eosio_global_state3, + global4: Types.eosio_global_state4, + lastpropfins: Types.last_prop_finalizers_info, + namebids: Types.name_bid, + netloan: Types.rex_loan, + 'powup.order': Types.powerup_order, + 'powup.state': Types.powerup_state, + producers: Types.producer_info, + producers2: Types.producer_info2, + rammarket: Types.exchange_state, + refunds: Types.refund_request, + retbuckets: Types.rex_return_buckets, + rexbal: Types.rex_balance, + rexfund: Types.rex_fund, + rexmaturity: Types.rex_maturity, + rexpool: Types.rex_pool, + rexqueue: Types.rex_order, + rexretpool: Types.rex_return_pool, + schedules: Types.schedules_info, + userres: Types.user_resources, + voters: Types.voter_info, + peerkeys: Types.peer_key, + limitauthchg: Types.limit_auth_change, +} +export interface TableTypes { + abihash: Types.abi_hash + acctdenylist: Types.account_name_blacklist + bidrefunds: Types.bid_refund + blockinfo: Types.block_info_record + cpuloan: Types.rex_loan + delband: Types.delegated_bandwidth + denyhashlist: Types.deny_hash + finalizers: Types.finalizer_info + finkeyidgen: Types.fin_key_id_generator_info + finkeys: Types.finalizer_key_info + giftedram: Types.gifted_ram + global: Types.eosio_global_state + global2: Types.eosio_global_state2 + global3: Types.eosio_global_state3 + global4: Types.eosio_global_state4 + lastpropfins: Types.last_prop_finalizers_info + namebids: Types.name_bid + netloan: Types.rex_loan + 'powup.order': Types.powerup_order + 'powup.state': Types.powerup_state + producers: Types.producer_info + producers2: Types.producer_info2 + rammarket: Types.exchange_state + refunds: Types.refund_request + retbuckets: Types.rex_return_buckets + rexbal: Types.rex_balance + rexfund: Types.rex_fund + rexmaturity: Types.rex_maturity + rexpool: Types.rex_pool + rexqueue: Types.rex_order + rexretpool: Types.rex_return_pool + schedules: Types.schedules_info + userres: Types.user_resources + voters: Types.voter_info + peerkeys: Types.peer_key + limitauthchg: Types.limit_auth_change +} +export type RowType = T extends keyof TableTypes ? TableTypes[T] : any +export type TableNames = keyof TableTypes +export namespace ActionParams { + export namespace Type { + export interface permission_level { + actor: NameType + permission: NameType + } + export interface powerup_config { + net: Type.powerup_config_resource + cpu: Type.powerup_config_resource + powerup_days?: UInt32Type + min_powerup_fee?: AssetType + } + export interface powerup_config_resource { + current_weight_ratio?: Int64Type + target_weight_ratio?: Int64Type + assumed_stake_weight?: Int64Type + target_timestamp?: TimePointSec + exponent?: Float64Type + decay_secs?: UInt32Type + min_price?: AssetType + max_price?: AssetType + } + export interface authority { + threshold: UInt32Type + keys: Type.key_weight[] + accounts: Type.permission_level_weight[] + waits: Type.wait_weight[] + } + export interface key_weight { + key: PublicKeyType + weight: UInt16Type + } + export interface permission_level_weight { + permission: Type.permission_level + weight: UInt16Type + } + export interface wait_weight { + wait_sec: UInt32Type + weight: UInt16Type + } + export interface block_header { + timestamp: UInt32Type + producer: NameType + confirmed: UInt16Type + previous: Checksum256Type + transaction_mroot: Checksum256Type + action_mroot: Checksum256Type + schedule_version: UInt32Type + new_producers?: Type.producer_schedule + } + export interface producer_schedule { + version: UInt32Type + producers: Type.producer_key[] + } + export interface producer_key { + producer_name: NameType + block_signing_key: PublicKeyType + } + export type variant_block_signing_authority_v0 = + | Type.block_signing_authority_v0 + | Types.variant_block_signing_authority_v0 + export interface block_signing_authority_v0 { + threshold: UInt32Type + keys: Type.key_weight[] + } + export interface blockchain_parameters_v1 { + max_action_return_value_size?: UInt32Type + } + } + export interface actfinkey { + finalizer_name: NameType + finalizer_key: string + } + export interface activate { + feature_digest: Checksum256Type + } + export interface bidname { + bidder: NameType + newname: NameType + bid: AssetType + } + export interface bidrefund { + bidder: NameType + newname: NameType + } + export interface buyram { + payer: NameType + receiver: NameType + quant: AssetType + } + export interface buyramburn { + payer: NameType + quantity: AssetType + memo: string + } + export interface buyrambytes { + payer: NameType + receiver: NameType + bytes: UInt32Type + } + export interface buyramself { + account: NameType + quant: AssetType + } + export interface buyrex { + from: NameType + amount: AssetType + } + export interface canceldelay { + canceling_auth: Type.permission_level + trx_id: Checksum256Type + } + export interface cfgpowerup { + args: Type.powerup_config + } + export interface claimrewards { + owner: NameType + } + export interface closerex { + owner: NameType + } + export interface cnclrexorder { + owner: NameType + } + export interface consolidate { + owner: NameType + } + export interface defcpuloan { + from: NameType + loan_num: UInt64Type + amount: AssetType + } + export interface defnetloan { + from: NameType + loan_num: UInt64Type + amount: AssetType + } + export interface delegatebw { + from: NameType + receiver: NameType + stake_net_quantity: AssetType + stake_cpu_quantity: AssetType + transfer: boolean + } + export interface deleteauth { + account: NameType + permission: NameType + authorized_by?: NameType + } + export interface delfinkey { + finalizer_name: NameType + finalizer_key: string + } + export interface delschedule { + start_time: TimePointSec + } + export interface denyhashadd { + hash: Checksum256Type + } + export interface denyhashcalc { + patterns: NameType[] + } + export interface denyhashrm { + hash: Checksum256Type + } + export interface denynames { + patterns: NameType[] + } + export interface deposit { + owner: NameType + amount: AssetType + } + export interface donatetorex { + payer: NameType + quantity: AssetType + memo: string + } + export interface execschedule {} + export interface fundcpuloan { + from: NameType + loan_num: UInt64Type + payment: AssetType + } + export interface fundnetloan { + from: NameType + loan_num: UInt64Type + payment: AssetType + } + export interface giftram { + from: NameType + to: NameType + bytes: Int64Type + memo: string + } + export interface init { + version: VarUIntType + core: Asset.SymbolType + } + export interface limitauthchg { + account: NameType + allow_perms: NameType[] + disallow_perms: NameType[] + } + export interface linkauth { + account: NameType + code: NameType + type: NameType + requirement: NameType + authorized_by?: NameType + } + export interface logbuyram { + payer: NameType + receiver: NameType + quantity: AssetType + bytes: Int64Type + ram_bytes: Int64Type + fee: AssetType + } + export interface logramchange { + owner: NameType + bytes: Int64Type + ram_bytes: Int64Type + } + export interface logsellram { + account: NameType + quantity: AssetType + bytes: Int64Type + ram_bytes: Int64Type + fee: AssetType + } + export interface logsystemfee { + protocol: NameType + fee: AssetType + memo: string + } + export interface mvfrsavings { + owner: NameType + rex: AssetType + } + export interface mvtosavings { + owner: NameType + rex: AssetType + } + export interface newaccount { + creator: NameType + name: NameType + owner: Type.authority + active: Type.authority + } + export interface onblock { + header: Type.block_header + } + export interface onerror { + sender_id: UInt128Type + sent_trx: BytesType + } + export interface powerup { + payer: NameType + receiver: NameType + days: UInt32Type + net_frac: Int64Type + cpu_frac: Int64Type + max_payment: AssetType + } + export interface powerupexec { + user: NameType + max: UInt16Type + } + export interface ramburn { + owner: NameType + bytes: Int64Type + memo: string + } + export interface ramtransfer { + from: NameType + to: NameType + bytes: Int64Type + memo: string + } + export interface refund { + owner: NameType + } + export interface regfinkey { + finalizer_name: NameType + finalizer_key: string + proof_of_possession: string + } + export interface regproducer { + producer: NameType + producer_key: PublicKeyType + url: string + location: UInt16Type + } + export interface regproducer2 { + producer: NameType + producer_authority: Type.variant_block_signing_authority_v0 + url: string + location: UInt16Type + } + export interface regproxy { + proxy: NameType + isproxy: boolean + } + export interface rentcpu { + from: NameType + receiver: NameType + loan_payment: AssetType + loan_fund: AssetType + } + export interface rentnet { + from: NameType + receiver: NameType + loan_payment: AssetType + loan_fund: AssetType + } + export interface rexexec { + user: NameType + max: UInt16Type + } + export interface rmvproducer { + producer: NameType + } + export interface sellram { + account: NameType + bytes: Int64Type + } + export interface sellrex { + from: NameType + rex: AssetType + } + export interface setabi { + account: NameType + abi: BytesType + memo?: string + } + export interface setacctcpu { + account: NameType + cpu_weight?: Int64Type + } + export interface setacctnet { + account: NameType + net_weight?: Int64Type + } + export interface setacctram { + account: NameType + ram_bytes?: Int64Type + } + export interface setalimits { + account: NameType + ram_bytes: Int64Type + net_weight: Int64Type + cpu_weight: Int64Type + } + export interface setcode { + account: NameType + vmtype: UInt8Type + vmversion: UInt8Type + code: BytesType + memo?: string + } + export interface setinflation { + annual_rate: Int64Type + inflation_pay_factor: Int64Type + votepay_factor: Int64Type + } + export interface setparams { + params: Type.blockchain_parameters_v1 + } + export interface setpayfactor { + inflation_pay_factor: Int64Type + votepay_factor: Int64Type + } + export interface setpriv { + account: NameType + is_priv: UInt8Type + } + export interface setram { + max_ram_size: UInt64Type + } + export interface setramrate { + bytes_per_block: UInt16Type + } + export interface setrex { + balance: AssetType + } + export interface setrexmature { + num_of_maturity_buckets?: UInt32Type + sell_matured_rex?: boolean + buy_rex_to_savings?: boolean + } + export interface setschedule { + start_time: TimePointSec + continuous_rate: Float64Type + } + export interface switchtosvnn {} + export interface undelegatebw { + from: NameType + receiver: NameType + unstake_net_quantity: AssetType + unstake_cpu_quantity: AssetType + } + export interface undenynames { + patterns: NameType[] + } + export interface ungiftram { + from: NameType + to: NameType + memo: string + } + export interface unlinkauth { + account: NameType + code: NameType + type: NameType + authorized_by?: NameType + } + export interface unregprod { + producer: NameType + } + export interface unstaketorex { + owner: NameType + receiver: NameType + from_net: AssetType + from_cpu: AssetType + } + export interface unvest { + account: NameType + unvest_net_quantity: AssetType + unvest_cpu_quantity: AssetType + } + export interface updateauth { + account: NameType + permission: NameType + parent: NameType + auth: Type.authority + authorized_by?: NameType + } + export interface updaterex { + owner: NameType + } + export interface updtrevision { + revision: UInt8Type + } + export interface voteproducer { + voter: NameType + proxy: NameType + producers: NameType[] + } + export interface voteupdate { + voter_name: NameType + } + export interface wasmcfg { + settings: NameType + } + export interface withdraw { + owner: NameType + amount: AssetType + } + export interface delpeerkey { + proposer_finalizer_name: NameType + key: PublicKeyType + } + export interface getpeerkeys {} + export interface regpeerkey { + proposer_finalizer_name: NameType + key: PublicKeyType + } +} +export interface ActionNameParams { + actfinkey: ActionParams.actfinkey + activate: ActionParams.activate + bidname: ActionParams.bidname + bidrefund: ActionParams.bidrefund + buyram: ActionParams.buyram + buyramburn: ActionParams.buyramburn + buyrambytes: ActionParams.buyrambytes + buyramself: ActionParams.buyramself + buyrex: ActionParams.buyrex + canceldelay: ActionParams.canceldelay + cfgpowerup: ActionParams.cfgpowerup + claimrewards: ActionParams.claimrewards + closerex: ActionParams.closerex + cnclrexorder: ActionParams.cnclrexorder + consolidate: ActionParams.consolidate + defcpuloan: ActionParams.defcpuloan + defnetloan: ActionParams.defnetloan + delegatebw: ActionParams.delegatebw + deleteauth: ActionParams.deleteauth + delfinkey: ActionParams.delfinkey + delschedule: ActionParams.delschedule + denyhashadd: ActionParams.denyhashadd + denyhashcalc: ActionParams.denyhashcalc + denyhashrm: ActionParams.denyhashrm + denynames: ActionParams.denynames + deposit: ActionParams.deposit + donatetorex: ActionParams.donatetorex + execschedule: ActionParams.execschedule + fundcpuloan: ActionParams.fundcpuloan + fundnetloan: ActionParams.fundnetloan + giftram: ActionParams.giftram + init: ActionParams.init + limitauthchg: ActionParams.limitauthchg + linkauth: ActionParams.linkauth + logbuyram: ActionParams.logbuyram + logramchange: ActionParams.logramchange + logsellram: ActionParams.logsellram + logsystemfee: ActionParams.logsystemfee + mvfrsavings: ActionParams.mvfrsavings + mvtosavings: ActionParams.mvtosavings + newaccount: ActionParams.newaccount + onblock: ActionParams.onblock + onerror: ActionParams.onerror + powerup: ActionParams.powerup + powerupexec: ActionParams.powerupexec + ramburn: ActionParams.ramburn + ramtransfer: ActionParams.ramtransfer + refund: ActionParams.refund + regfinkey: ActionParams.regfinkey + regproducer: ActionParams.regproducer + regproducer2: ActionParams.regproducer2 + regproxy: ActionParams.regproxy + rentcpu: ActionParams.rentcpu + rentnet: ActionParams.rentnet + rexexec: ActionParams.rexexec + rmvproducer: ActionParams.rmvproducer + sellram: ActionParams.sellram + sellrex: ActionParams.sellrex + setabi: ActionParams.setabi + setacctcpu: ActionParams.setacctcpu + setacctnet: ActionParams.setacctnet + setacctram: ActionParams.setacctram + setalimits: ActionParams.setalimits + setcode: ActionParams.setcode + setinflation: ActionParams.setinflation + setparams: ActionParams.setparams + setpayfactor: ActionParams.setpayfactor + setpriv: ActionParams.setpriv + setram: ActionParams.setram + setramrate: ActionParams.setramrate + setrex: ActionParams.setrex + setrexmature: ActionParams.setrexmature + setschedule: ActionParams.setschedule + switchtosvnn: ActionParams.switchtosvnn + undelegatebw: ActionParams.undelegatebw + undenynames: ActionParams.undenynames + ungiftram: ActionParams.ungiftram + unlinkauth: ActionParams.unlinkauth + unregprod: ActionParams.unregprod + unstaketorex: ActionParams.unstaketorex + unvest: ActionParams.unvest + updateauth: ActionParams.updateauth + updaterex: ActionParams.updaterex + updtrevision: ActionParams.updtrevision + voteproducer: ActionParams.voteproducer + voteupdate: ActionParams.voteupdate + wasmcfg: ActionParams.wasmcfg + withdraw: ActionParams.withdraw + delpeerkey: ActionParams.delpeerkey + getpeerkeys: ActionParams.getpeerkeys + regpeerkey: ActionParams.regpeerkey +} +export type ActionNames = keyof ActionNameParams +export interface ActionReturnValues { + buyram: Types.action_return_buyram + buyramburn: Types.action_return_buyram + buyrambytes: Types.action_return_buyram + buyramself: Types.action_return_buyram + denyhashcalc: Checksum256 + giftram: Types.action_return_ramtransfer + ramburn: Types.action_return_ramtransfer + ramtransfer: Types.action_return_ramtransfer + sellram: Types.action_return_sellram + ungiftram: Types.action_return_ramtransfer + getpeerkeys: Types.peerkeys_t[] +} +export type ActionReturnNames = keyof ActionReturnValues +export class Contract extends BaseContract { + constructor(args: PartialBy) { + super({ + client: args.client, + abi: abi, + account: args.account || Name.from('eosio'), + }) + } + action( + name: T, + data: ActionNameParams[T], + options?: ActionOptions + ): Action { + return super.action(name, data, options) + } + readonly( + name: T, + data?: ActionNameParams[T] + ): ActionReturnValues[T] { + return super.readonly(name, data) as unknown as ActionReturnValues[T] + } + table(name: T, scope?: NameType): Table> { + return super.table(name, scope, TableMap[name]) + } +} diff --git a/src/sessionkey/types.ts b/src/sessionkey/types.ts new file mode 100644 index 00000000..21599ad6 --- /dev/null +++ b/src/sessionkey/types.ts @@ -0,0 +1,110 @@ +import {AnyAction, API, APIClient, Name, NameType, PublicKey} from '@wharfkit/antelope' +import {WalletPlugin} from '../wallet' + +/** + * Internal whitelist entry with resolved Name types. + */ +export interface SessionKeyWhitelistEntry { + contract: Name + actions?: Name[] +} + +/** + * User-facing whitelist entry that accepts string or Name types. + */ +export interface SessionKeyWhitelistInput { + contract: NameType + actions?: NameType[] +} + +/** + * Configuration options for session key functionality. + */ +export interface SessionKeyConfig { + /** Optional custom permission name. If not provided, will be auto-generated from app name. */ + permission?: NameType + /** List of contracts and actions that the session key is authorized to sign. */ + whitelist: SessionKeyWhitelistInput[] + /** Optional custom function to fetch permission data from the blockchain. Defaults to v1.chain.get_account. */ + fetchPermission?: ( + client: APIClient, + account: Name, + permission: Name + ) => Promise + /** Skip showing consent UI to user during setup. Default is false. */ + skipConsent?: boolean +} + +/** + * The result returned after successfully setting up a session key. + */ +export interface SessionKeySetupResult { + /** The public key of the created session key. */ + publicKey: PublicKey + /** The permission name the session key was created under. */ + permission: Name +} + +/** + * User's choice when a session key permission already exists on-chain. + */ +export type SessionKeyConflictChoice = 'add' | 'replace' | 'cancel' + +/** + * User's choice when local whitelist differs from on-chain linked actions. + */ +export type SessionKeyMismatchChoice = 'update' | 'dismiss' + +/** + * Details about whitelist/linkauth mismatches between local config and on-chain state. + */ +export interface SessionKeyMismatch { + /** Actions in local whitelist but not linked on-chain. */ + added: SessionKeyWhitelistEntry[] + /** Actions linked on-chain but not in local whitelist. */ + removed: SessionKeyWhitelistEntry[] +} + +/** + * Current state of a session key. + */ +export type SessionKeyState = 'active' | 'inactive' | 'mismatch' | 'not-setup' + +/** + * Complete status information about a session key. + */ +export interface SessionKeyStatus { + /** Whether the session key is currently active and ready to sign. */ + active: boolean + /** Whether a session key permission exists on-chain. */ + exists: boolean + /** Current state of the session key. */ + state: SessionKeyState + /** The permission name if one exists. */ + permission?: Name + /** The public key string if one exists. */ + publicKey?: string + /** Mismatch details if whitelist differs from on-chain state. */ + mismatch?: SessionKeyMismatch +} + +/** + * Interface for wallet plugins that support session keys. + * Implemented by SessionKeyWalletPlugin. + */ +export interface SessionKeyWalletInterface extends WalletPlugin { + allActionsWhitelisted(actions: AnyAction[]): boolean + getPermission(): Name + getPublicKey(): string + getPrimaryWallet(): WalletPlugin +} + +/** + * Type guard to check if a wallet plugin is a session key wallet. + * + * @param plugin The wallet plugin to check + * @returns True if the plugin is a session key wallet + */ +export function isSessionKeyWallet(plugin: WalletPlugin): plugin is SessionKeyWalletInterface { + return plugin.id === 'session-key-wallet' +} diff --git a/src/sessionkey/wallet.ts b/src/sessionkey/wallet.ts new file mode 100644 index 00000000..67b37459 --- /dev/null +++ b/src/sessionkey/wallet.ts @@ -0,0 +1,363 @@ +import { + AnyAction, + Checksum256, + Name, + NameType, + PrivateKey, + PublicKey, + Transaction, +} from '@wharfkit/antelope' + +import {LogoutContext} from '../kit' +import {LoginContext} from '../login' +import {Session} from '../session' +import {TransactContext} from '../transact' +import { + AbstractWalletPlugin, + SerializedWalletPlugin, + WalletPlugin, + WalletPluginConfig, + WalletPluginData, + WalletPluginLoginResponse, + WalletPluginMetadata, + WalletPluginSignResponse, +} from '../wallet' +import {Contract as SystemContract} from './systemcontract' +import {SessionKeyWalletInterface, SessionKeyWhitelistEntry} from './types' + +/** + * Options for creating a new [[SessionKeyWalletPlugin]] instance. + */ +export interface SessionKeyWalletPluginOptions { + /** The user's primary wallet that will be used for non-whitelisted actions. */ + primaryWallet: WalletPlugin + /** The private key for the session key. */ + privateKey: PrivateKey + /** The permission name the session key operates under. */ + permission: NameType + /** The whitelist of contracts and actions this session key can sign. */ + whitelist: SessionKeyWhitelistEntry[] +} + +/** + * Options for restoring a [[SessionKeyWalletPlugin]] from serialized data. + */ +export interface SessionKeyWalletPluginRestoreOptions { + /** Available wallet plugins for restoring the primary wallet. */ + walletPlugins: WalletPlugin[] +} + +/** + * Serialized form of a whitelist entry. + */ +export interface SerializedSessionKeyWalletEntry { + /** Contract account name. */ + contract: string + /** Optional array of action names. If omitted, all actions on the contract are allowed. */ + actions?: string[] +} + +/** + * The serialized form of a [[SessionKeyWalletPlugin]]. + */ +export interface SerializedSessionKeyWallet { + /** Serialized primary wallet plugin. */ + primaryWallet: SerializedWalletPlugin + /** Private key as a string. */ + privateKey: string + /** Permission name as a string. */ + permission: string + /** Serialized whitelist entries. */ + whitelist: SerializedSessionKeyWalletEntry[] +} + +let sessionKeyLogoutInProgress = false + +/** + * Wallet plugin that wraps a primary wallet and routes transactions based on whitelist. + * Whitelisted actions are signed with the session key, others fall back to primary wallet. + */ +export class SessionKeyWalletPlugin + extends AbstractWalletPlugin + implements SessionKeyWalletInterface +{ + public readonly id = 'session-key-wallet' + readonly config: WalletPluginConfig = { + requiresChainSelect: false, + requiresPermissionSelect: false, + } + readonly metadata: WalletPluginMetadata = WalletPluginMetadata.from({ + name: 'Session Key Wallet', + description: 'A wrapper wallet that routes transactions based on whitelist', + }) + + private primaryWallet!: WalletPlugin + private privateKey!: PrivateKey + private permission!: Name + private whitelist!: SessionKeyWhitelistEntry[] + private walletPlugins: WalletPlugin[] = [] + + constructor(options?: SessionKeyWalletPluginOptions | SessionKeyWalletPluginRestoreOptions) { + super() + + if (options && 'primaryWallet' in options) { + this.primaryWallet = options.primaryWallet + this.privateKey = PrivateKey.from(options.privateKey) + this.permission = Name.from(options.permission) + this.whitelist = options.whitelist + this.metadata.publicKey = String(this.privateKey.toPublic()) + } else if (options && 'walletPlugins' in options) { + this.walletPlugins = options.walletPlugins + } + } + + get data(): WalletPluginData { + return { + primaryWallet: this.primaryWallet.serialize(), + privateKey: String(this.privateKey), + permission: String(this.permission), + whitelist: this.whitelist.map((entry) => ({ + contract: String(entry.contract), + actions: entry.actions?.map((a) => String(a)), + })), + } + } + + set data(data: WalletPluginData) { + const serialized = data as SerializedSessionKeyWallet + this.privateKey = PrivateKey.from(serialized.privateKey) + this.permission = Name.from(serialized.permission) + this.whitelist = serialized.whitelist.map((entry) => ({ + contract: Name.from(entry.contract), + actions: entry.actions?.map((a) => Name.from(a)), + })) + this.metadata.publicKey = String(this.privateKey.toPublic()) + + if (serialized.primaryWallet) { + const primaryPlugin = this.walletPlugins.find( + (p) => p.id === serialized.primaryWallet.id + ) + if (primaryPlugin) { + if (serialized.primaryWallet.data) { + primaryPlugin.data = serialized.primaryWallet.data + } + this.primaryWallet = primaryPlugin + } else { + throw new Error( + `Cannot restore session key: primary wallet plugin '${serialized.primaryWallet.id}' not found` + ) + } + } + } + + /** + * Get the primary wallet that this session key wallet wraps. + * + * @returns The primary wallet plugin + */ + getPrimaryWallet(): WalletPlugin { + return this.primaryWallet + } + + /** + * Get the permission name the session key operates under. + * + * @returns The permission name + */ + getPermission(): Name { + return this.permission + } + + /** + * Get the public key of the session key. + * + * @returns The public key as a string + */ + getPublicKey(): string { + return String(this.privateKey.toPublic()) + } + + /** + * Get the whitelist of contracts and actions this session key can sign. + * + * @returns Array of whitelist entries + */ + getWhitelist(): SessionKeyWhitelistEntry[] { + return this.whitelist + } + + /** + * Check if an action is whitelisted for signing with the session key. + * + * @param action The action to check + * @returns True if the action is whitelisted + */ + isWhitelisted(action: AnyAction): boolean { + const actionContract = Name.from(action.account) + const actionName = Name.from(action.name) + + for (const entry of this.whitelist) { + if (Name.from(entry.contract).equals(actionContract)) { + if (!entry.actions || entry.actions.length === 0) { + return true + } + for (const allowedAction of entry.actions) { + if (actionName.equals(allowedAction)) { + return true + } + } + } + } + return false + } + + /** + * Check if all actions in a transaction are whitelisted. + * + * @param actions Array of actions to check + * @returns True if all actions are whitelisted + */ + allActionsWhitelisted(actions: AnyAction[]): boolean { + return actions.every((action) => this.isWhitelisted(action)) + } + + login(context: LoginContext): Promise { + return this.primaryWallet.login(context) + } + + async logout(context: LogoutContext): Promise { + if (!this.privateKey || !context.ui?.onSessionKeyRemove || sessionKeyLogoutInProgress) { + return + } + + sessionKeyLogoutInProgress = true + try { + const shouldRemove = await context.ui.onSessionKeyRemove({appName: context.appName}) + if (!shouldRemove) { + return + } + + const session = context.session + const actor = session.actor + const client = session.client + const publicKey = this.privateKey.toPublic() + + const accountData = await client.v1.chain.get_account(actor) + const permData = accountData.permissions.find((p) => + this.permission.equals(p.perm_name) + ) + + if (!permData) { + return + } + + const ourKeyIndex = permData.required_auth.keys.findIndex((k) => + PublicKey.from(k.key).equals(publicKey) + ) + + if (ourKeyIndex === -1) { + return + } + + const remainingKeys = permData.required_auth.keys.filter((_, i) => i !== ourKeyIndex) + const systemContract = new SystemContract({client}) + const actions: AnyAction[] = [] + + const primarySession = new Session( + { + chain: session.chain, + permissionLevel: session.permissionLevel, + walletPlugin: this.primaryWallet, + }, + { + fetch: session.fetch, + ui: context.ui, + } + ) + + if (remainingKeys.length > 0) { + actions.push( + systemContract.action( + 'updateauth', + { + account: actor, + permission: this.permission, + parent: 'active', + auth: { + ...permData.required_auth, + keys: remainingKeys, + }, + }, + {authorization: [session.permissionLevel]} + ) + ) + } else { + const linkedActions = permData.linked_actions || [] + for (const link of linkedActions) { + actions.push( + systemContract.action( + 'unlinkauth', + { + account: actor, + code: link.account, + type: link.action || '', + }, + {authorization: [session.permissionLevel]} + ) + ) + } + + actions.push( + systemContract.action( + 'deleteauth', + { + account: actor, + permission: this.permission, + }, + {authorization: [session.permissionLevel]} + ) + ) + } + + await primarySession.transact({actions}) + + if (this.primaryWallet?.logout) { + await this.primaryWallet.logout(context) + } + } catch (error) { + sessionKeyLogoutInProgress = false + throw error + } finally { + sessionKeyLogoutInProgress = false + } + } + + async sign(resolved: any, context: TransactContext): Promise { + const transaction = resolved.transaction + const actions = transaction.actions || [] + + const hasSessionKeyAuth = actions.some((action: any) => + action.authorization.some((auth: any) => + this.permission.equals(auth.permission || auth.permission_name) + ) + ) + + if (hasSessionKeyAuth) { + const txn = Transaction.from(transaction) + const digest = txn.signingDigest(Checksum256.from(context.chain.id)) + const signature = this.privateKey.signDigest(digest) + return { + signatures: [signature], + } + } + + return this.primaryWallet.sign(resolved, context) + } + + serialize(): SerializedWalletPlugin { + return { + id: this.id, + data: this.data, + } + } +} diff --git a/src/ui.ts b/src/ui.ts index ea1abbbb..9db1b055 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -46,6 +46,64 @@ export type UserInterfaceAccountCreationResponse = { pluginId?: string // The id of the plugin that was selected (if more than one plugin was available). } +/** + * A single whitelist entry for UI display purposes. + */ +export interface SessionKeyWhitelistItem { + /** Contract account name. */ + contract: string + /** Optional array of action names. If omitted, all actions are whitelisted. */ + actions?: string[] +} + +/** + * Arguments passed to the session key consent UI callback. + */ +export interface SessionKeyConsentArgs { + /** The name of the application requesting session key creation. */ + appName: string + /** The list of contracts and actions that will be whitelisted. */ + whitelist: SessionKeyWhitelistItem[] +} + +/** + * The arguments for a session key conflict call. + */ +export interface SessionKeyConflictArgs { + appName: string + existingKeyCount: number +} + +/** + * The response for a session key conflict call. + */ +export type SessionKeyConflictResponse = 'add' | 'replace' | 'cancel' + +/** + * Arguments passed to the session key mismatch UI callback. + */ +export interface SessionKeyMismatchArgs { + /** The name of the application. */ + appName: string + /** Actions in local whitelist but not linked on-chain. */ + added: SessionKeyWhitelistItem[] + /** Actions linked on-chain but not in local whitelist. */ + removed: SessionKeyWhitelistItem[] +} + +/** + * The response for a session key mismatch call. + */ +export type SessionKeyMismatchResponse = 'update' | 'dismiss' + +/** + * Arguments passed to the session key removal UI callback. + */ +export interface SessionKeyRemoveArgs { + /** The name of the application. */ + appName: string +} + /** * The options to pass to [[UserInterface.translate]]. */ @@ -103,6 +161,18 @@ export interface UserInterface { getTranslate: (namespace?: string) => UserInterfaceTranslateFunction /** Programmatically add new localization strings to the user interface */ addTranslations: (translations: LocaleDefinitions) => void + /** Optional: Show session key consent UI */ + onSessionKeyConsent?: (args: SessionKeyConsentArgs) => Promise + /** Optional: Show session key conflict resolution UI */ + onSessionKeyConflict?: (args: SessionKeyConflictArgs) => Promise + /** Optional: Show session key whitelist mismatch UI */ + onSessionKeyMismatch?: (args: SessionKeyMismatchArgs) => Promise + /** Optional: Show session key removal confirmation UI */ + onSessionKeyRemove?: (args: SessionKeyRemoveArgs) => Promise + /** Optional: Get current minimal mode state */ + getMinimal?: () => boolean + /** Optional: Enable/disable minimal mode temporarily for session key transactions */ + setMinimal?: (minimal: boolean) => void } /** diff --git a/src/utils.ts b/src/utils.ts index 01021edd..a0c07730 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,15 @@ -import {Action, AnyAction, FetchProviderOptions, Transaction} from '@wharfkit/antelope' +import { + Action, + AnyAction, + FetchProviderOptions, + Name, + PermissionLevel, + PermissionLevelType, + Transaction, +} from '@wharfkit/antelope' import type {Fetch, LocaleDefinitions} from '@wharfkit/common' import {SigningRequest} from '@wharfkit/signing-request' -import {TransactPlugin} from './transact' +import {TransactArgs, TransactPlugin} from './transact' import {WalletPlugin} from './wallet' /** @@ -109,3 +117,99 @@ export function getPluginTranslations( }) return prefixed } + +/** + * Extract actions from TransactArgs. + * + * @param args TransactArgs + * @returns Array of actions, or empty array if not determinable + */ +export function extractActions(args: TransactArgs): AnyAction[] { + if (args.action) { + return [args.action] + } + if (args.actions) { + return args.actions + } + if (args.transaction && args.transaction.actions) { + return args.transaction.actions + } + return [] +} + +/** + * Check if an action has an authorization matching a given permission level. + * + * @param action AnyAction + * @param permissionLevel PermissionLevel + * @returns boolean + */ +export function actionMatchesPermission( + action: AnyAction, + permissionLevel: PermissionLevel +): boolean { + return action.authorization.some((auth: PermissionLevelType) => permissionLevel.equals(auth)) +} + +function rewriteAuthIfMatches( + auth: PermissionLevelType, + permissionLevel: PermissionLevel, + newPermission: Name +): PermissionLevelType { + if (permissionLevel.equals(auth)) { + return PermissionLevel.from({ + actor: auth.actor, + permission: newPermission, + }) + } + return auth +} + +function rewriteActionAuthorizations( + action: AnyAction, + permissionLevel: PermissionLevel, + newPermission: Name +): AnyAction { + return { + ...action, + authorization: action.authorization.map((auth) => + rewriteAuthIfMatches(auth, permissionLevel, newPermission) + ), + } +} + +export function rewriteAuthorizations( + args: TransactArgs, + permissionLevel: PermissionLevel, + newPermission: Name +): TransactArgs { + if (args.action) { + return { + ...args, + action: rewriteActionAuthorizations(args.action, permissionLevel, newPermission), + } + } + + if (args.actions) { + return { + ...args, + actions: args.actions.map((action) => + rewriteActionAuthorizations(action, permissionLevel, newPermission) + ), + } + } + + if (args.transaction && args.transaction.actions) { + return { + ...args, + transaction: { + ...args.transaction, + actions: args.transaction.actions.map((action) => + rewriteActionAuthorizations(action, permissionLevel, newPermission) + ), + }, + } + } + + return args +} diff --git a/yarn.lock b/yarn.lock index 3fcc9d7a..e14b2c48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,19 +12,19 @@ "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": version "7.20.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz" integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== "@babel/core@^7.7.5": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.1.tgz#c8fa615c5e88e272564ace3d42fbc8b17bfeb22b" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz" integrity sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw== dependencies: "@ampproject/remapping" "^2.1.0" @@ -45,7 +45,7 @@ "@babel/generator@^7.19.0", "@babel/generator@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz" integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== dependencies: "@babel/types" "^7.20.7" @@ -54,14 +54,14 @@ "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: "@babel/helper-explode-assignable-expression" "^7.18.6" @@ -69,7 +69,7 @@ "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.1", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz" integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: "@babel/compat-data" "^7.20.5" @@ -80,7 +80,7 @@ "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": version "7.20.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz" integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -94,7 +94,7 @@ "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz" integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -102,7 +102,7 @@ "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" @@ -114,19 +114,19 @@ "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: "@babel/types" "^7.18.6" "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: "@babel/template" "^7.18.10" @@ -134,28 +134,28 @@ "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" "@babel/helper-member-expression-to-functions@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz" integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== dependencies: "@babel/types" "^7.20.7" "@babel/helper-module-imports@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0", "@babel/helper-module-transforms@^7.20.11": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz" integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -169,19 +169,19 @@ "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -191,7 +191,7 @@ "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz" integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -203,43 +203,43 @@ "@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz" integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helper-wrap-function@^7.18.9": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz" integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" @@ -249,7 +249,7 @@ "@babel/helpers@^7.19.0": version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== dependencies: "@babel/template" "^7.18.10" @@ -258,7 +258,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -267,19 +267,19 @@ "@babel/parser@^7.19.1", "@babel/parser@^7.20.13", "@babel/parser@^7.20.7": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.13.tgz#ddf1eb5a813588d2fb1692b70c6fce75b945c088" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz" integrity sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -288,7 +288,7 @@ "@babel/plugin-proposal-async-generator-functions@^7.20.1": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" @@ -298,7 +298,7 @@ "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" @@ -306,7 +306,7 @@ "@babel/plugin-proposal-class-static-block@^7.18.6": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz" integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.20.7" @@ -315,7 +315,7 @@ "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -323,7 +323,7 @@ "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" @@ -331,7 +331,7 @@ "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -339,7 +339,7 @@ "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -347,7 +347,7 @@ "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -355,7 +355,7 @@ "@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -363,7 +363,7 @@ "@babel/plugin-proposal-object-rest-spread@^7.20.2": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: "@babel/compat-data" "^7.20.5" @@ -374,7 +374,7 @@ "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -382,7 +382,7 @@ "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz" integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -391,7 +391,7 @@ "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" @@ -399,7 +399,7 @@ "@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz" integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -409,7 +409,7 @@ "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -417,119 +417,119 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-assertions@^7.20.0": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-arrow-functions@^7.18.6": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz" integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-async-to-generator@^7.18.6": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== dependencies: "@babel/helper-module-imports" "^7.18.6" @@ -538,21 +538,21 @@ "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.20.2": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz" integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-classes@^7.20.2": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz" integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -567,7 +567,7 @@ "@babel/plugin-transform-computed-properties@^7.18.9": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz" integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -575,14 +575,14 @@ "@babel/plugin-transform-destructuring@^7.20.2": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz" integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -590,14 +590,14 @@ "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" @@ -605,14 +605,14 @@ "@babel/plugin-transform-for-of@^7.18.8": version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: "@babel/helper-compilation-targets" "^7.18.9" @@ -621,21 +621,21 @@ "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-modules-amd@^7.19.6": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: "@babel/helper-module-transforms" "^7.20.11" @@ -643,7 +643,7 @@ "@babel/plugin-transform-modules-commonjs@^7.19.6": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz" integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== dependencies: "@babel/helper-module-transforms" "^7.20.11" @@ -652,7 +652,7 @@ "@babel/plugin-transform-modules-systemjs@^7.19.6": version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" @@ -662,7 +662,7 @@ "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: "@babel/helper-module-transforms" "^7.18.6" @@ -670,7 +670,7 @@ "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.20.5" @@ -678,14 +678,14 @@ "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -693,21 +693,21 @@ "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz" integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.18.6": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -715,21 +715,21 @@ "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-spread@^7.19.0": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -737,35 +737,35 @@ "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -773,7 +773,7 @@ "@babel/preset-env@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== dependencies: "@babel/compat-data" "^7.20.1" @@ -854,7 +854,7 @@ "@babel/preset-modules@^0.1.5": version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -865,14 +865,14 @@ "@babel/runtime@^7.8.4": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== dependencies: regenerator-runtime "^0.13.11" "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" @@ -881,7 +881,7 @@ "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7": version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz" integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== dependencies: "@babel/code-frame" "^7.18.6" @@ -897,7 +897,7 @@ "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.4.4": version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz" integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: "@babel/helper-string-parser" "^7.19.4" @@ -906,14 +906,14 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@eslint/eslintrc@^1.3.3": version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz" integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" @@ -928,7 +928,7 @@ "@humanwhocodes/config-array@^0.11.6": version "0.11.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz" integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -937,17 +937,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -958,12 +958,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" @@ -971,7 +971,7 @@ "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -980,17 +980,17 @@ "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.2": version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== dependencies: "@jridgewell/gen-mapping" "^0.3.0" @@ -998,12 +998,12 @@ "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9", "@jridgewell/trace-mapping@^0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -1011,7 +1011,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1019,12 +1019,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1032,14 +1032,14 @@ "@rollup/plugin-alias@^3.1.4": version "3.1.9" - resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz#a5d267548fe48441f34be8323fb64d1d4a1b3fdf" + resolved "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz" integrity sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw== dependencies: slash "^3.0.0" "@rollup/plugin-babel@^6.0.3": version "6.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz#07ccde15de278c581673034ad6accdb4a153dfeb" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz" integrity sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg== dependencies: "@babel/helper-module-imports" "^7.18.6" @@ -1047,7 +1047,7 @@ "@rollup/plugin-commonjs@^22.0.0": version "22.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz#ee8ca8415cda30d383b4096aad5222435b4b69b6" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz" integrity sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -1060,14 +1060,14 @@ "@rollup/plugin-json@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz" integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: "@rollup/pluginutils" "^3.0.8" "@rollup/plugin-node-resolve@^14.1.0": version "14.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz#f2fa475405cd7fed6420bf438fe393f988a9bc96" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz" integrity sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -1079,7 +1079,7 @@ "@rollup/plugin-replace@^5.0.1": version "5.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.1.tgz#49a57af3e6df111a9e75dea3f3572741f4c5c83e" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.1.tgz" integrity sha512-Z3MfsJ4CK17BfGrZgvrcp/l6WXoKb0kokULO+zt/7bmcyayokDaQ2K3eDJcRLCTAlp5FPI4/gz9MHAsosz4Rag== dependencies: "@rollup/pluginutils" "^5.0.1" @@ -1087,7 +1087,7 @@ "@rollup/plugin-typescript@^10.0.1": version "10.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-10.0.1.tgz#270b515b116ea28320e6bb62451c4767d49072d6" + resolved "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-10.0.1.tgz" integrity sha512-wBykxRLlX7EzL8BmUqMqk5zpx2onnmRMSw/l9M1sVfkJvdwfxogZQVNUM9gVMJbjRLDR5H6U0OMOrlDGmIV45A== dependencies: "@rollup/pluginutils" "^5.0.1" @@ -1095,12 +1095,12 @@ "@rollup/plugin-virtual@^2.0.3": version "2.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-2.1.0.tgz#a77bfd0dff74f0203401c75287ff4d1a1cfbc816" + resolved "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.1.0.tgz" integrity sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA== "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: "@types/estree" "0.0.39" @@ -1109,7 +1109,7 @@ "@rollup/pluginutils@^5.0.1": version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz" integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== dependencies: "@types/estree" "^1.0.0" @@ -1118,69 +1118,69 @@ "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/chai@^4.3.1": version "4.3.4" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz" integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== "@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/mocha@^9.0.0": version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*", "@types/node@^18.7.18": version "18.11.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz" integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== "@types/resolve@1.17.1": version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@typescript-eslint/eslint-plugin@^5.20.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz#ffa505cf961d4844d38cfa19dcec4973a6039e41" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz" integrity sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA== dependencies: "@typescript-eslint/scope-manager" "5.45.0" @@ -1195,7 +1195,7 @@ "@typescript-eslint/parser@^5.20.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz" integrity sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ== dependencies: "@typescript-eslint/scope-manager" "5.45.0" @@ -1205,7 +1205,7 @@ "@typescript-eslint/scope-manager@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz#7a4ac1bfa9544bff3f620ab85947945938319a96" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz" integrity sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw== dependencies: "@typescript-eslint/types" "5.45.0" @@ -1213,7 +1213,7 @@ "@typescript-eslint/type-utils@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz#aefbc954c40878fcebeabfb77d20d84a3da3a8b2" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz" integrity sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q== dependencies: "@typescript-eslint/typescript-estree" "5.45.0" @@ -1223,12 +1223,12 @@ "@typescript-eslint/types@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz" integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA== "@typescript-eslint/typescript-estree@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz" integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ== dependencies: "@typescript-eslint/types" "5.45.0" @@ -1241,7 +1241,7 @@ "@typescript-eslint/utils@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.0.tgz#9cca2996eee1b8615485a6918a5c763629c7acf5" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.45.0.tgz" integrity sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA== dependencies: "@types/json-schema" "^7.0.9" @@ -1255,7 +1255,7 @@ "@typescript-eslint/visitor-keys@5.45.0": version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz" integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg== dependencies: "@typescript-eslint/types" "5.45.0" @@ -1263,7 +1263,7 @@ "@wharfkit/abicache@^1.2.0", "@wharfkit/abicache@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@wharfkit/abicache/-/abicache-1.2.1.tgz#f2ce1f0d01a105b633a68b7a8eacaaff12218c05" + resolved "https://registry.npmjs.org/@wharfkit/abicache/-/abicache-1.2.1.tgz" integrity sha512-LPlD8U/+QUkXDqYrr2DRUa+VFUCR+muNOLUN1Uh3+TU2pbr4uKSt9EOBf3VkEAVov5BA96exysWCD1sp+K7orw== dependencies: "@wharfkit/antelope" "^1.0.2" @@ -1271,9 +1271,9 @@ pako "^2.0.4" tslib "^2.1.0" -"@wharfkit/antelope@^1.0.0", "@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2": +"@wharfkit/antelope@^1.0.0", "@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2", "@wharfkit/antelope@^1.0.4": version "1.0.11" - resolved "https://registry.yarnpkg.com/@wharfkit/antelope/-/antelope-1.0.11.tgz#a830b3726b33d4faf4867add244013bf5e51fea3" + resolved "https://registry.npmjs.org/@wharfkit/antelope/-/antelope-1.0.11.tgz" integrity sha512-4oSM5b9IzQxP6hC5H6QGBCylTYKs+cZ8fg6piM8qjj/g4Ok3YmYwx6sbIQwwQmdCUK9sBweKXrOHjNwpyafPBQ== dependencies: bn.js "^4.11.9" @@ -1285,24 +1285,24 @@ "@wharfkit/common@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@wharfkit/common/-/common-1.2.0.tgz#147f783f2ba5cc6fa7dd75863ba98dd05880a9aa" + resolved "https://registry.npmjs.org/@wharfkit/common/-/common-1.2.0.tgz" integrity sha512-me/BN8D/4UPkY7yt+4v+E/z62PVj4VKY5+iRb7zoWv0epbW4o4nC6Oer8kBVL7xWC6Guucaol3hkxkTMgrnwlQ== dependencies: tslib "^2.1.0" -"@wharfkit/contract@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@wharfkit/contract/-/contract-1.1.1.tgz#2e96476fac45d06684f90b2a54b3cac39e71c760" - integrity sha512-WN6tzVuuacpzD8yo4uZZPdniXk9Q+ZGkBtUQ+mbeOQaEzrsnncOrHJlck20nmSb/EC8ij1EG0xlhnyhKjnvSYQ== +"@wharfkit/contract@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@wharfkit/contract/-/contract-1.2.1.tgz" + integrity sha512-3UhCtDYCyapfM2nRTrslcbvko864d4MOpxRAz7TR/ZUbRAgZsxhYLFLEv1v23/SU+vsFzAHNBmvzkLEG0OLaHQ== dependencies: "@wharfkit/abicache" "^1.2.0" - "@wharfkit/antelope" "^1.0.0" + "@wharfkit/antelope" "^1.0.4" "@wharfkit/signing-request" "^3.1.0" tslib "^2.1.0" "@wharfkit/mock-data@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@wharfkit/mock-data/-/mock-data-1.2.1.tgz#f9e74887edf0927d1580589fc64310e398fccf42" + resolved "https://registry.npmjs.org/@wharfkit/mock-data/-/mock-data-1.2.1.tgz" integrity sha512-foQDXyzK80woORqmV2OUBqy9Yy2trkyPmdURRaix2X3Hr9H9cEQBet63ipkTaEIUdeR+uPyx0kaoy0dlFECTqw== dependencies: "@wharfkit/antelope" "^1.0.0" @@ -1312,12 +1312,12 @@ tslib "^2.1.0" "@wharfkit/session@^1.1.0-rcfinal": - version "1.1.0-rcfinal" - resolved "https://registry.yarnpkg.com/@wharfkit/session/-/session-1.1.0-rcfinal.tgz#29a9f40dca8557e96d5e44c1498b09eb641f47e1" - integrity sha512-UijDlP2yE8WoprAXz8EpAyz1GyxWv9OloRGApTUKM/lMuSk1U2d7vefQzyXTn14f1npd7bfBzeTQ5piTerBHww== + version "1.6.1" + resolved "https://registry.npmjs.org/@wharfkit/session/-/session-1.6.1.tgz" + integrity sha512-k6ntDGOe8bvD/Ps0erTPTFMdYVFrw5cRvPcEwxytlmRRcNV/M8xWcpCYWdmGDxa8QYqynf/hAkbVh1PSwRGl5A== dependencies: - "@wharfkit/abicache" "^1.2.0" - "@wharfkit/antelope" "^1.0.0" + "@wharfkit/abicache" "^1.2.1" + "@wharfkit/antelope" "^1.0.11" "@wharfkit/common" "^1.2.0" "@wharfkit/signing-request" "^3.1.0" pako "^2.0.4" @@ -1325,7 +1325,7 @@ "@wharfkit/signing-request@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@wharfkit/signing-request/-/signing-request-3.1.0.tgz#7883f0b2350c6fe3446d2b8733dd7d0004f01911" + resolved "https://registry.npmjs.org/@wharfkit/signing-request/-/signing-request-3.1.0.tgz" integrity sha512-aVWV9Z3o77uDrFSR3wC78c1e/QNkfi3IxZbGzMizvoYTYPKHgHs1F6Go/1oe0Dlo/kEB9tgckFviccUqrK987w== dependencies: "@wharfkit/antelope" "^1.0.0" @@ -1333,41 +1333,41 @@ "@wharfkit/transact-plugin-resource-provider@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@wharfkit/transact-plugin-resource-provider/-/transact-plugin-resource-provider-1.1.0.tgz#4fc60da5b73ce3405e6ed2916b957562a7416929" + resolved "https://registry.npmjs.org/@wharfkit/transact-plugin-resource-provider/-/transact-plugin-resource-provider-1.1.0.tgz" integrity sha512-N+ZcrTy8EUcIw48Uf7nYzMz3xS5EJvVPq/TS4Nz8dwGJrZyTGGPF4pqjF5u8qKIGebyAYMCyAiStZBKQX4QlNw== dependencies: tslib "^2.1.0" "@wharfkit/wallet-plugin-privatekey@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@wharfkit/wallet-plugin-privatekey/-/wallet-plugin-privatekey-1.1.0.tgz#5985bff61895c54d2afbef359cd42da4f3871c7d" + resolved "https://registry.npmjs.org/@wharfkit/wallet-plugin-privatekey/-/wallet-plugin-privatekey-1.1.0.tgz" integrity sha512-45LPj7AOVDm4RugDEhy0fnQX/BcMffeJPjGUCUrLazJ2S0Sti8nNk4nqiJqyme84c/0gq7d65vvwlmVfGtPVEg== dependencies: tslib "^2.1.0" "@yarnpkg/lockfile@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.0: version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1375,7 +1375,7 @@ aggregate-error@^3.0.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1385,31 +1385,31 @@ ajv@^6.10.0, ajv@^6.12.4: ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1417,65 +1417,65 @@ anymatch@~3.1.2: append-transform@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== dependencies: default-require-extensions "^3.0.0" archy@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== async@^2.6.1: version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" @@ -1484,7 +1484,7 @@ babel-plugin-polyfill-corejs2@^0.3.3: babel-plugin-polyfill-corejs3@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" @@ -1492,29 +1492,29 @@ babel-plugin-polyfill-corejs3@^0.6.0: babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bn.js@^4.11.9: version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1522,31 +1522,31 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-stdout@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: caniuse-lite "^1.0.30001400" @@ -1556,17 +1556,17 @@ browserslist@^4.21.3, browserslist@^4.21.4: buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== builtin-modules@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== caching-transform@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz" integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== dependencies: hasha "^5.0.0" @@ -1576,27 +1576,27 @@ caching-transform@^4.0.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001400: version "1.0.30001402" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001402.tgz#aa29e1f47f5055b0d0c07696a67b8b08023d14c8" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001402.tgz" integrity sha512-Mx4MlhXO5NwuvXGgVb+hg65HZ+bhUYsz8QtDGDo2QmaJS2GBX47Xfi2koL86lc8K+l+htXeTEB/Aeqvezoo6Ew== chai@^4.3.4: version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" @@ -1609,7 +1609,7 @@ chai@^4.3.4: chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1618,7 +1618,7 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1626,12 +1626,12 @@ chalk@^4.0.0, chalk@^4.1.0: check-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== chokidar@3.5.3: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -1646,12 +1646,12 @@ chokidar@3.5.3: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cliui@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" @@ -1660,7 +1660,7 @@ cliui@^6.0.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -1669,70 +1669,70 @@ cliui@^7.0.2: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== commander@^10.0.1: version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.18.0, commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== convert-source-map@^1.7.0: version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" core-js-compat@^3.25.1: version "3.27.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.2.tgz#607c50ad6db8fd8326af0b2883ebb987be3786da" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz" integrity sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg== dependencies: browserslist "^4.21.4" create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1741,77 +1741,77 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== deep-eql@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.2.tgz#270ceb902f87724077e6f6449aed81463f42fc1c" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz" integrity sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w== dependencies: type-detect "^4.0.0" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== default-require-extensions@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz" integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== dependencies: strip-bom "^4.0.0" diff@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" electron-to-chromium@^1.4.251: version "1.4.253" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.253.tgz#3402fd2159530fc6d94237f1b9535fa7bebaf399" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.253.tgz" integrity sha512-1pezJ2E1UyBTGbA7fUlHdPSXQw1k+82VhTFLG5G0AUqLGvsZqFzleOblceqegZzxYX4kC7hGEEdzIQI9RZ1Cuw== elliptic@^6.5.4: version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -1824,49 +1824,49 @@ elliptic@^6.5.4: email-addresses@^3.0.1: version "3.1.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" + resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz" integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== es6-error@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== eslint-config-prettier@^8.1.0: version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-prettier@^4.0.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -1874,7 +1874,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -1882,24 +1882,24 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-visitor-keys@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.13.0: version "8.28.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz" integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== dependencies: "@eslint/eslintrc" "^1.3.3" @@ -1944,7 +1944,7 @@ eslint@^8.13.0: espree@^9.4.0: version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: acorn "^8.8.0" @@ -1953,66 +1953,66 @@ espree@^9.4.0: esprima@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== estree-walker@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2023,36 +2023,36 @@ fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" filename-reserved-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== filenamify@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz" integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== dependencies: filename-reserved-regex "^2.0.0" @@ -2061,14 +2061,14 @@ filenamify@^4.3.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -2077,7 +2077,7 @@ find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: find-up@5.0.0, find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2085,7 +2085,7 @@ find-up@5.0.0, find-up@^5.0.0: find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2093,7 +2093,7 @@ find-up@^4.0.0, find-up@^4.1.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -2101,17 +2101,17 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== foreground-child@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== dependencies: cross-spawn "^7.0.0" @@ -2119,12 +2119,12 @@ foreground-child@^2.0.0: fromentries@^1.2.0: version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -2133,42 +2133,42 @@ fs-extra@^8.1.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== gh-pages@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-4.0.0.tgz#bd7447bab7eef008f677ac8cc4f6049ab978f4a6" + resolved "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz" integrity sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ== dependencies: async "^2.6.1" @@ -2181,21 +2181,21 @@ gh-pages@^4.0.0: glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@7.2.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -2207,19 +2207,19 @@ glob@7.2.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.15.0: version "13.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + resolved "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz" integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2231,7 +2231,7 @@ globby@^11.1.0: globby@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" @@ -2242,34 +2242,34 @@ globby@^6.1.0: graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" @@ -2277,7 +2277,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: hasha@^5.0.0: version "5.2.2" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + resolved "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz" integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== dependencies: is-stream "^2.0.0" @@ -2285,12 +2285,12 @@ hasha@^5.0.0: he@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -2299,22 +2299,22 @@ hmac-drbg@^1.0.1: html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-escaper@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-3.0.3.tgz#4d336674652beb1dcbc29ef6b6ba7f6be6fdfed6" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz" integrity sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ== ignore@^5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz" integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2322,17 +2322,17 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -2340,114 +2340,114 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-builtin-module@^3.1.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz" integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== dependencies: builtin-modules "^3.3.0" is-core-module@^2.9.0: version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== dependencies: has "^1.0.3" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-reference@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-hook@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz" integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== dependencies: append-transform "^2.0.0" istanbul-lib-instrument@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: "@babel/core" "^7.7.5" @@ -2457,7 +2457,7 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-processinfo@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" + resolved "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz" integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== dependencies: archy "^1.0.0" @@ -2469,7 +2469,7 @@ istanbul-lib-processinfo@^2.0.2: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -2478,7 +2478,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -2487,7 +2487,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.0.2: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" @@ -2495,7 +2495,7 @@ istanbul-reports@^3.0.2: jest-worker@^26.2.1: version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" @@ -2504,7 +2504,7 @@ jest-worker@^26.2.1: js-cleanup@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/js-cleanup/-/js-cleanup-1.2.0.tgz#8dbc65954b1d38b255f1e8cf02cd17b3f7a053f9" + resolved "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz" integrity sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ== dependencies: magic-string "^0.25.7" @@ -2513,24 +2513,24 @@ js-cleanup@^1.2.0: js-sdsl@^4.1.4: version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -2538,44 +2538,44 @@ js-yaml@^3.13.1: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^2.2.1: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2583,41 +2583,41 @@ levn@^0.4.1: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@^4.17.14: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -2625,74 +2625,74 @@ log-symbols@4.1.0: loupe@^2.3.1: version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lunr@^2.3.9: version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== magic-string@^0.25.7: version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== dependencies: sourcemap-codec "^1.4.8" magic-string@^0.26.4, magic-string@^0.26.6: version "0.26.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz" integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== dependencies: sourcemap-codec "^1.4.8" make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== marked@^4.0.19: version "4.2.3" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.3.tgz#bd76a5eb510ff1d8421bc6c3b2f0b93488c15bea" + resolved "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz" integrity sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -2700,43 +2700,43 @@ micromatch@^4.0.4: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: brace-expansion "^2.0.1" minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.1.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz" integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== dependencies: brace-expansion "^2.0.1" minimist@^1.2.6: version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== mocha@^10.0.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz" integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== dependencies: ansi-colors "4.1.1" @@ -2763,56 +2763,56 @@ mocha@^10.0.0: ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanoid@3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-fetch@^2.6.1: version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-preload@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz" integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== dependencies: process-on-spawn "^1.0.0" node-releases@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== nyc@^15.1.0: version "15.1.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + resolved "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz" integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== dependencies: "@istanbuljs/load-nyc-config" "^1.0.0" @@ -2845,19 +2845,19 @@ nyc@^15.1.0: object-assign@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -2869,47 +2869,47 @@ optionator@^0.9.1: p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-hash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + resolved "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz" integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== dependencies: graceful-fs "^4.1.15" @@ -2919,165 +2919,165 @@ package-hash@^4.0.0: pako@^2.0.4, pako@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pathval@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== perf-regexes@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/perf-regexes/-/perf-regexes-1.0.1.tgz#6da1d62f5a94bf9353a0451bccacf69068b75d0b" + resolved "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz" integrity sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pkg-dir@^4.1.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^2.2.1: version "2.8.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz" integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== process-on-spawn@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + resolved "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz" integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== dependencies: fromentries "^1.2.0" punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerate-unicode-properties@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.11: version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-transform@^0.15.1: version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^5.2.1: version "5.2.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz" integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== dependencies: regenerate "^1.4.2" @@ -3089,46 +3089,46 @@ regexpu-core@^5.2.1: regjsgen@^0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== regjsparser@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" release-zalgo@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz" integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== dependencies: es6-error "^4.0.1" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -3137,19 +3137,19 @@ resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.1: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup-plugin-cleanup@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz#8cbc92ecf58babd7c210051929797f137bbf777c" + resolved "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz" integrity sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ== dependencies: js-cleanup "^1.2.0" @@ -3157,7 +3157,7 @@ rollup-plugin-cleanup@^3.2.1: rollup-plugin-dts@^4.2.1: version "4.2.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-4.2.3.tgz#04c3615df1ffab4228aa9d540697eaca61e01f47" + resolved "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-4.2.3.tgz" integrity sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ== dependencies: magic-string "^0.26.6" @@ -3166,7 +3166,7 @@ rollup-plugin-dts@^4.2.1: rollup-plugin-terser@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== dependencies: "@babel/code-frame" "^7.10.4" @@ -3176,76 +3176,76 @@ rollup-plugin-terser@^7.0.2: rollup-pluginutils@^2.8.2: version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" rollup@^2.70.2: version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== optionalDependencies: fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@^5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.7, semver@^7.5.0: version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" serialize-javascript@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: randombytes "^2.1.0" set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shiki@^0.11.1: version "0.11.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.11.1.tgz#df0f719e7ab592c484d8b73ec10e215a503ab8cc" + resolved "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz" integrity sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA== dependencies: jsonc-parser "^3.0.0" @@ -3254,22 +3254,22 @@ shiki@^0.11.1: signal-exit@^3.0.2: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== skip-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/skip-regex/-/skip-regex-1.0.2.tgz#ac655d77e7c771ac2b9f37585fea37bff56ad65b" + resolved "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz" integrity sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -3277,17 +3277,17 @@ source-map-support@~0.5.20: source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spawn-wrap@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== dependencies: foreground-child "^2.0.0" @@ -3299,12 +3299,12 @@ spawn-wrap@^2.0.0: sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -3313,62 +3313,62 @@ string-width@^4.1.0, string-width@^4.2.0: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-outer@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" supports-color@8.1.1: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== terser@^5.0.0: version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" + resolved "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz" integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== dependencies: "@jridgewell/source-map" "^0.3.2" @@ -3378,7 +3378,7 @@ terser@^5.0.0: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -3387,36 +3387,36 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-repeated@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== dependencies: escape-string-regexp "^1.0.2" ts-node@^10.9.1: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -3435,7 +3435,7 @@ ts-node@^10.9.1: tsconfig-paths@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.1.1.tgz#7f23094ce897fcf4a93f67c4776e813003e48b75" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.1.tgz" integrity sha512-VgPrtLKpRgEAJsMj5Q/I/mXouC6A/7eJ/X4Nuk6o0cRPwBtznYxTCU4FodbexbzH9somBPEXYi0ZkUViUpJ21Q== dependencies: json5 "^2.2.1" @@ -3444,60 +3444,60 @@ tsconfig-paths@^4.1.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.8.0: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typedoc-plugin-mermaid@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/typedoc-plugin-mermaid/-/typedoc-plugin-mermaid-1.10.0.tgz#ef3d62b74a36ead6679f59f0b1315156b334a38e" + resolved "https://registry.npmjs.org/typedoc-plugin-mermaid/-/typedoc-plugin-mermaid-1.10.0.tgz" integrity sha512-NMo+m5FY5SuNR2dgDYwLO/Bu8O1927xPm1B5S5QcqBD9JiNaWP6jbyuPUltJtq9KEZOme3QwLVe1ZPSDr3tsmw== dependencies: html-escaper "^3.0.0" typedoc@^0.23.14: version "0.23.21" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.21.tgz#2a6b0e155f91ffa9689086706ad7e3e4bc11d241" + resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz" integrity sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg== dependencies: lunr "^2.3.9" @@ -3507,17 +3507,17 @@ typedoc@^0.23.14: typescript@^4.1.2: version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz" integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -3525,22 +3525,22 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== update-browserslist-db@^1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz" integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== dependencies: escalade "^3.1.1" @@ -3548,39 +3548,39 @@ update-browserslist-db@^1.0.9: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== vscode-oniguruma@^1.6.1: version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== vscode-textmate@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210" + resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz" integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -3588,29 +3588,29 @@ whatwg-url@^5.0.0: which-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== workerpool@6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -3619,7 +3619,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3628,12 +3628,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -3643,32 +3643,32 @@ write-file-atomic@^3.0.0: y18n@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@20.2.4, yargs-parser@^20.2.2: version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" @@ -3676,7 +3676,7 @@ yargs-parser@^18.1.2: yargs-unparser@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -3686,7 +3686,7 @@ yargs-unparser@2.0.0: yargs@16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -3699,7 +3699,7 @@ yargs@16.2.0: yargs@^15.0.2: version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" @@ -3716,7 +3716,7 @@ yargs@^15.0.2: yarn-deduplicate@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-6.0.2.tgz#63498d2d4c3a8567e992a994ce0ab51aa5681f2e" + resolved "https://registry.npmjs.org/yarn-deduplicate/-/yarn-deduplicate-6.0.2.tgz" integrity sha512-Efx4XEj82BgbRJe5gvQbZmEO7pU5DgHgxohYZp98/+GwPqdU90RXtzvHirb7hGlde0sQqk5G3J3Woyjai8hVqA== dependencies: "@yarnpkg/lockfile" "^1.1.0" @@ -3726,10 +3726,10 @@ yarn-deduplicate@^6.0.2: yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From afa60910dd67deb05a45a54e98b1ab70def137f1 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 16:49:45 -0800 Subject: [PATCH 2/8] Updating dependencies --- package.json | 9 ++++--- yarn.lock | 75 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 7239b04c..7a1f94da 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/session", "description": "Create account-based sessions, perform transactions, and allow users to login using Antelope-based blockchains.", - "version": "2.0.0-rc1", + "version": "2.0.0-rc2", "homepage": "https://github.com/wharfkit/session", "license": "BSD-3-Clause", "main": "lib/session.js", @@ -16,12 +16,15 @@ "scripts": { "prepare": "make" }, + "resolutions": { + "@wharfkit/antelope": "^1.1.1" + }, "dependencies": { "@wharfkit/abicache": "^1.2.1", - "@wharfkit/antelope": "^1.0.11", + "@wharfkit/antelope": "^1.1.1", "@wharfkit/common": "^1.2.0", "@wharfkit/contract": "^1.2.1", - "@wharfkit/signing-request": "^3.1.0", + "@wharfkit/signing-request": "^3.3.0", "pako": "^2.0.4", "tslib": "^2.1.0" }, diff --git a/yarn.lock b/yarn.lock index e14b2c48..329ae94f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1261,7 +1261,7 @@ "@typescript-eslint/types" "5.45.0" eslint-visitor-keys "^3.3.0" -"@wharfkit/abicache@^1.2.0", "@wharfkit/abicache@^1.2.1": +"@wharfkit/abicache@^1.2.0": version "1.2.1" resolved "https://registry.npmjs.org/@wharfkit/abicache/-/abicache-1.2.1.tgz" integrity sha512-LPlD8U/+QUkXDqYrr2DRUa+VFUCR+muNOLUN1Uh3+TU2pbr4uKSt9EOBf3VkEAVov5BA96exysWCD1sp+K7orw== @@ -1271,10 +1271,20 @@ pako "^2.0.4" tslib "^2.1.0" -"@wharfkit/antelope@^1.0.0", "@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2", "@wharfkit/antelope@^1.0.4": - version "1.0.11" - resolved "https://registry.npmjs.org/@wharfkit/antelope/-/antelope-1.0.11.tgz" - integrity sha512-4oSM5b9IzQxP6hC5H6QGBCylTYKs+cZ8fg6piM8qjj/g4Ok3YmYwx6sbIQwwQmdCUK9sBweKXrOHjNwpyafPBQ== +"@wharfkit/abicache@^1.2.1": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@wharfkit/abicache/-/abicache-1.2.2.tgz#c3d83485e3e3782ac94ced460915bad1ceee0be9" + integrity sha512-yOsYz2qQpQy7Nb8XZj62pZqp8YnmWDqFlrenYksBb9jl+1aWIpFhWd+14VEez4tUAezRH4UWW+w1SX5vhmUY9A== + dependencies: + "@wharfkit/antelope" "^1.0.2" + "@wharfkit/signing-request" "^3.1.0" + pako "^2.0.4" + tslib "^2.1.0" + +"@wharfkit/antelope@^1.0.0", "@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2", "@wharfkit/antelope@^1.0.4", "@wharfkit/antelope@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@wharfkit/antelope/-/antelope-1.1.1.tgz#f54c4ed7ddd758f4a8aa643a81dc3e4575058d45" + integrity sha512-zOetZJG0T4/WRCIC8Ui2DGv+RxrSkdXOq/q8sUqUcuKei+aJo4/9Xk37VULPt2qe0NpTm93ajYV9cYdD9m5Fgg== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -1284,15 +1294,15 @@ tslib "^2.0.3" "@wharfkit/common@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@wharfkit/common/-/common-1.2.0.tgz" - integrity sha512-me/BN8D/4UPkY7yt+4v+E/z62PVj4VKY5+iRb7zoWv0epbW4o4nC6Oer8kBVL7xWC6Guucaol3hkxkTMgrnwlQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@wharfkit/common/-/common-1.5.0.tgz#66023ade5acc7e768ec2cd1c040c3043ec5cc59d" + integrity sha512-eqXkOy+vshcEzK8kED+EsoTPJjlBKHYglgV9CBnZQgIlGrWIRXWH4YaXH3W7EbI/nCRJCaNqxm5fC+pgpFcp8g== dependencies: tslib "^2.1.0" "@wharfkit/contract@^1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@wharfkit/contract/-/contract-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/@wharfkit/contract/-/contract-1.2.1.tgz#b917db9c156344ae7f5340ff9a388108963763e8" integrity sha512-3UhCtDYCyapfM2nRTrslcbvko864d4MOpxRAz7TR/ZUbRAgZsxhYLFLEv1v23/SU+vsFzAHNBmvzkLEG0OLaHQ== dependencies: "@wharfkit/abicache" "^1.2.0" @@ -1323,18 +1333,18 @@ pako "^2.0.4" tslib "^2.1.0" -"@wharfkit/signing-request@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@wharfkit/signing-request/-/signing-request-3.1.0.tgz" - integrity sha512-aVWV9Z3o77uDrFSR3wC78c1e/QNkfi3IxZbGzMizvoYTYPKHgHs1F6Go/1oe0Dlo/kEB9tgckFviccUqrK987w== +"@wharfkit/signing-request@^3.1.0", "@wharfkit/signing-request@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@wharfkit/signing-request/-/signing-request-3.3.0.tgz#2fda2093c0d0396f5a741d1f7c92606680f9ce21" + integrity sha512-8RYnXjF14LRXB8Ajd1SL/pNFFVkYU1sm+cWTDkJnNr0p8dBiILGBcZuXOuVFWCN6+xngwioSHt02LEEWyELLvw== dependencies: - "@wharfkit/antelope" "^1.0.0" + "@wharfkit/antelope" "^1.1.1" tslib "^2.0.3" "@wharfkit/transact-plugin-resource-provider@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@wharfkit/transact-plugin-resource-provider/-/transact-plugin-resource-provider-1.1.0.tgz" - integrity sha512-N+ZcrTy8EUcIw48Uf7nYzMz3xS5EJvVPq/TS4Nz8dwGJrZyTGGPF4pqjF5u8qKIGebyAYMCyAiStZBKQX4QlNw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@wharfkit/transact-plugin-resource-provider/-/transact-plugin-resource-provider-1.1.3.tgz#d476ac1af3ea34fd4558b2d09a7125983b3b6f41" + integrity sha512-g2J6TO/+uwWL96rnIHL76+7R4xwVyLGjSJYCPbIXFdHZhridYSd7ZWpzrLfeil0o1utnnHqnjsNTxlVbad0XWw== dependencies: tslib "^2.1.0" @@ -1508,9 +1518,9 @@ binary-extensions@^2.0.0: integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + version "4.12.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== brace-expansion@^1.1.7: version "1.1.11" @@ -1536,7 +1546,7 @@ braces@^3.0.2, braces@~3.0.2: brorand@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-stdout@1.3.1: @@ -1810,9 +1820,9 @@ electron-to-chromium@^1.4.251: integrity sha512-1pezJ2E1UyBTGbA7fUlHdPSXQw1k+82VhTFLG5G0AUqLGvsZqFzleOblceqegZzxYX4kC7hGEEdzIQI9RZ1Cuw== elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== dependencies: bn.js "^4.11.9" brorand "^1.1.0" @@ -2269,7 +2279,7 @@ has@^1.0.3: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" @@ -2290,7 +2300,7 @@ he@1.2.0: hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -2340,7 +2350,7 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-binary-path@~2.1.0: @@ -2700,12 +2710,12 @@ micromatch@^4.0.4: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@5.0.1: @@ -3447,7 +3457,12 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0: +tslib@^2.0.3: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tslib@^2.1.0, tslib@^2.5.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== From a925a74695797be7059aea2845f465562c643eca Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 16:55:29 -0800 Subject: [PATCH 3/8] mock data --- ...2555e54e5f8adde3a189f52eed3ae86b4d3e5.json | 19 +++++++++++++++++++ ...4566036d0cf934c312d5957f6e3cc4c819875.json | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 test/data/0672555e54e5f8adde3a189f52eed3ae86b4d3e5.json create mode 100644 test/data/a9f4566036d0cf934c312d5957f6e3cc4c819875.json diff --git a/test/data/0672555e54e5f8adde3a189f52eed3ae86b4d3e5.json b/test/data/0672555e54e5f8adde3a189f52eed3ae86b4d3e5.json new file mode 100644 index 00000000..b0bb68b6 --- /dev/null +++ b/test/data/0672555e54e5f8adde3a189f52eed3ae86b4d3e5.json @@ -0,0 +1,19 @@ +{ + "request": { + "path": "https://jungle4.greymass.com/v1/resource_provider/request_transaction", + "params": { + "method": "POST", + "body": "{\"request\":\"esr://gmNgZlJdtDtt7prJE76aMgABI4hgeGUQ2nDZNCb2pY8LY4ALx82Dpb6PwRITNp7iaNg4MS5WrfcUSC0A\",\"signer\":{\"actor\":\"wharfkit1125\",\"permission\":\"test\"}}" + } + }, + "status": 400, + "json": { + "code": 400, + "message": "Unexpected error while processing request.", + "data": { + "error": "FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80", + "url": "/v1/resource_provider/request_transaction" + } + }, + "text": "{\"code\":400,\"message\":\"Unexpected error while processing request.\",\"data\":{\"error\":\"FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80\",\"url\":\"/v1/resource_provider/request_transaction\"}}" +} \ No newline at end of file diff --git a/test/data/a9f4566036d0cf934c312d5957f6e3cc4c819875.json b/test/data/a9f4566036d0cf934c312d5957f6e3cc4c819875.json new file mode 100644 index 00000000..4c12f19d --- /dev/null +++ b/test/data/a9f4566036d0cf934c312d5957f6e3cc4c819875.json @@ -0,0 +1,19 @@ +{ + "request": { + "path": "https://jungle4.greymass.com/v1/resource_provider/request_transaction", + "params": { + "method": "POST", + "body": "{\"request\":\"esr://gmNgZFJdtDtt7prJE76aMgABI4hgeGUQ2nDZNCb2pY8LY4ALx82Dpb6PwRITNp7iaNg4MS5WrfcUSC0A\",\"signer\":{\"actor\":\"wharfkit1125\",\"permission\":\"test\"}}" + } + }, + "status": 400, + "json": { + "code": 400, + "message": "Unexpected error while processing request.", + "data": { + "error": "FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80", + "url": "/v1/resource_provider/request_transaction" + } + }, + "text": "{\"code\":400,\"message\":\"Unexpected error while processing request.\",\"data\":{\"error\":\"FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80\",\"url\":\"/v1/resource_provider/request_transaction\"}}" +} \ No newline at end of file From ac6558c6f02c5d08529050ec43a91f231ccf21a7 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 17:20:24 -0800 Subject: [PATCH 4/8] Updating wharfkit/signing-request --- package.json | 4 ++-- yarn.lock | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 7a1f94da..d9c4850b 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@wharfkit/antelope": "^1.1.1", "@wharfkit/common": "^1.2.0", "@wharfkit/contract": "^1.2.1", - "@wharfkit/signing-request": "^3.3.0", + "@wharfkit/signing-request": "^3.4.0", "pako": "^2.0.4", "tslib": "^2.1.0" }, @@ -43,7 +43,7 @@ "@types/node": "^18.7.18", "@typescript-eslint/eslint-plugin": "^5.20.0", "@typescript-eslint/parser": "^5.20.0", - "@wharfkit/mock-data": "^1.2.1", + "@wharfkit/mock-data": "^1.3.1", "@wharfkit/transact-plugin-resource-provider": "^1.1.0", "@wharfkit/wallet-plugin-privatekey": "^1.1.0", "chai": "^4.3.4", diff --git a/yarn.lock b/yarn.lock index 329ae94f..c661fc3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1281,7 +1281,7 @@ pako "^2.0.4" tslib "^2.1.0" -"@wharfkit/antelope@^1.0.0", "@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2", "@wharfkit/antelope@^1.0.4", "@wharfkit/antelope@^1.1.1": +"@wharfkit/antelope@^1.0.11", "@wharfkit/antelope@^1.0.2", "@wharfkit/antelope@^1.0.4", "@wharfkit/antelope@^1.0.5", "@wharfkit/antelope@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@wharfkit/antelope/-/antelope-1.1.1.tgz#f54c4ed7ddd758f4a8aa643a81dc3e4575058d45" integrity sha512-zOetZJG0T4/WRCIC8Ui2DGv+RxrSkdXOq/q8sUqUcuKei+aJo4/9Xk37VULPt2qe0NpTm93ajYV9cYdD9m5Fgg== @@ -1310,20 +1310,20 @@ "@wharfkit/signing-request" "^3.1.0" tslib "^2.1.0" -"@wharfkit/mock-data@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@wharfkit/mock-data/-/mock-data-1.2.1.tgz" - integrity sha512-foQDXyzK80woORqmV2OUBqy9Yy2trkyPmdURRaix2X3Hr9H9cEQBet63ipkTaEIUdeR+uPyx0kaoy0dlFECTqw== +"@wharfkit/mock-data@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@wharfkit/mock-data/-/mock-data-1.3.1.tgz#f031bff8037e21d815679971de88d28f6f47661a" + integrity sha512-V+VRu07wCGLmxc6bPXKCavcHaEsFvMDlK4Q0sFJglwo4fsHr7dww6XsCoOGltY/XC1c0XpzeQ6v6eM352v95sA== dependencies: - "@wharfkit/antelope" "^1.0.0" - "@wharfkit/session" "^1.1.0-rcfinal" + "@wharfkit/antelope" "^1.0.5" + "@wharfkit/session" "^1.2.7" "@wharfkit/wallet-plugin-privatekey" "^1.1.0" node-fetch "^2.6.1" tslib "^2.1.0" -"@wharfkit/session@^1.1.0-rcfinal": +"@wharfkit/session@^1.2.7": version "1.6.1" - resolved "https://registry.npmjs.org/@wharfkit/session/-/session-1.6.1.tgz" + resolved "https://registry.yarnpkg.com/@wharfkit/session/-/session-1.6.1.tgz#087856dc547fea7b5aff547ca9c984a772da9239" integrity sha512-k6ntDGOe8bvD/Ps0erTPTFMdYVFrw5cRvPcEwxytlmRRcNV/M8xWcpCYWdmGDxa8QYqynf/hAkbVh1PSwRGl5A== dependencies: "@wharfkit/abicache" "^1.2.1" @@ -1333,10 +1333,10 @@ pako "^2.0.4" tslib "^2.1.0" -"@wharfkit/signing-request@^3.1.0", "@wharfkit/signing-request@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@wharfkit/signing-request/-/signing-request-3.3.0.tgz#2fda2093c0d0396f5a741d1f7c92606680f9ce21" - integrity sha512-8RYnXjF14LRXB8Ajd1SL/pNFFVkYU1sm+cWTDkJnNr0p8dBiILGBcZuXOuVFWCN6+xngwioSHt02LEEWyELLvw== +"@wharfkit/signing-request@^3.1.0", "@wharfkit/signing-request@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@wharfkit/signing-request/-/signing-request-3.4.0.tgz#ac433e5c3af3a084643e6c8a32c5b9b15a6978dc" + integrity sha512-WstXfmR9i5pKaYXDUwNFNCgBIvN6u5IRGWSfj5O3XzthbtJUmRoJNtjGMaNnUqZ1MMx5YY4/JpY3b2e6LbpXLw== dependencies: "@wharfkit/antelope" "^1.1.1" tslib "^2.0.3" From a8bb8bb681efc024201e3a009262fa991ac45b40 Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 17:20:48 -0800 Subject: [PATCH 5/8] v2.0.0-rc3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d9c4850b..4f83f622 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/session", "description": "Create account-based sessions, perform transactions, and allow users to login using Antelope-based blockchains.", - "version": "2.0.0-rc2", + "version": "2.0.0-rc3", "homepage": "https://github.com/wharfkit/session", "license": "BSD-3-Clause", "main": "lib/session.js", From 3c3843f64180f0930ae3210cbfd351a8b0f8e2ba Mon Sep 17 00:00:00 2001 From: aaroncox Date: Wed, 10 Dec 2025 17:47:56 -0800 Subject: [PATCH 6/8] Missing mock data --- ...7842e606d3b1cfcbe54cc187320c15c740c14.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 test/data/a187842e606d3b1cfcbe54cc187320c15c740c14.json diff --git a/test/data/a187842e606d3b1cfcbe54cc187320c15c740c14.json b/test/data/a187842e606d3b1cfcbe54cc187320c15c740c14.json new file mode 100644 index 00000000..b739cdf7 --- /dev/null +++ b/test/data/a187842e606d3b1cfcbe54cc187320c15c740c14.json @@ -0,0 +1,19 @@ +{ + "request": { + "path": "https://jungle4.greymass.com/v1/resource_provider/request_transaction", + "params": { + "method": "POST", + "body": "{\"request\":\"esr://gmMsfmIRpc7x7DpLh8nvg-zz9VdvrLYRihbJ-mIxXW5CYY4vk-qi3Wlz10ye8NWUAQgYQQTDK4PQhsumMbEvfVwYA1w4bh4s9X0Mlpiw8RRHw8aJcbFqvadAagE\",\"signer\":{\"actor\":\"wharfkit1125\",\"permission\":\"test\"}}" + } + }, + "status": 400, + "json": { + "code": 400, + "message": "Unexpected error while processing request.", + "data": { + "error": "FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80", + "url": "/v1/resource_provider/request_transaction" + } + }, + "text": "{\"code\":400,\"message\":\"Unexpected error while processing request.\",\"data\":{\"error\":\"FetchError: request to http://jungle4.greymass.com/v1/chain/get_abi failed, reason: connect ETIMEDOUT 144.217.253.32:80\",\"url\":\"/v1/resource_provider/request_transaction\"}}" +} \ No newline at end of file From 84ca7d89314950a2096243e416913fd958a5eba1 Mon Sep 17 00:00:00 2001 From: Daniel Fugere Date: Sat, 20 Dec 2025 10:10:15 -0800 Subject: [PATCH 7/8] Session Key Fixes (#101) * fix: making sessionkey wallet optional fix: handling case where login is called primaryWallet is defined * fix: making placeholder authorizations work with session keys * fix: applying same fix to rewriteAuthIfMatches * fix: making session persist even when wallet is disabled * cleanup: code cleanup * enhancement: logging session key setup error * refactor: light refactoring * style: linted * fix: proper way to hide session key from list of wallet plugin options * cleanup: removing automatic session key setup and using login plugin instead * debug: added some logs * revert: putting actionMatchesPermission changes back in * style: linted * Always hide session key wallet * Update utils.ts --------- Co-authored-by: aaroncox --- src/kit.ts | 12 ++++++++---- src/utils.ts | 10 ++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/kit.ts b/src/kit.ts index 5ad97096..35612dc0 100644 --- a/src/kit.ts +++ b/src/kit.ts @@ -357,6 +357,10 @@ export class SessionKit { */ async login(options?: LoginOptions): Promise { try { + const selectableWalletPlugins = this.walletPlugins.filter( + (plugin) => plugin.id !== 'session-key-wallet' + ) + // Create LoginContext for this login request. const context = new LoginContext({ appName: this.appName, @@ -369,7 +373,7 @@ export class SessionKit { fetch: this.fetch, loginPlugins: this.loginPlugins, ui: this.ui, - walletPlugins: this.walletPlugins.map((plugin): UserInterfaceWalletPlugin => { + walletPlugins: selectableWalletPlugins.map((plugin): UserInterfaceWalletPlugin => { return { config: plugin.config, metadata: WalletPluginMetadata.from(plugin.metadata), @@ -384,9 +388,9 @@ export class SessionKit { // Predetermine WalletPlugin (if possible) to prevent uneeded UI interactions. let walletPlugin: WalletPlugin | undefined = undefined - if (this.walletPlugins.length === 1) { - walletPlugin = this.walletPlugins[0] // Default to first when only one. - context.walletPluginIndex = 0 + if (selectableWalletPlugins.length === 1) { + walletPlugin = selectableWalletPlugins[0] // Default to first when only one. + context.walletPluginIndex = this.walletPlugins.indexOf(walletPlugin) context.uiRequirements.requiresWalletSelect = false } else if (options?.walletPlugin) { walletPlugin = this.getWalletPlugin(options.walletPlugin) diff --git a/src/utils.ts b/src/utils.ts index a0c07730..eb0814c0 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -8,7 +8,7 @@ import { Transaction, } from '@wharfkit/antelope' import type {Fetch, LocaleDefinitions} from '@wharfkit/common' -import {SigningRequest} from '@wharfkit/signing-request' +import {PlaceholderAuth, SigningRequest} from '@wharfkit/signing-request' import {TransactArgs, TransactPlugin} from './transact' import {WalletPlugin} from './wallet' @@ -148,7 +148,9 @@ export function actionMatchesPermission( action: AnyAction, permissionLevel: PermissionLevel ): boolean { - return action.authorization.some((auth: PermissionLevelType) => permissionLevel.equals(auth)) + return action.authorization.some( + (auth: PermissionLevelType) => permissionLevel.equals(auth) || PlaceholderAuth.equals(auth) + ) } function rewriteAuthIfMatches( @@ -156,9 +158,9 @@ function rewriteAuthIfMatches( permissionLevel: PermissionLevel, newPermission: Name ): PermissionLevelType { - if (permissionLevel.equals(auth)) { + if (permissionLevel.equals(auth) || PlaceholderAuth.equals(auth)) { return PermissionLevel.from({ - actor: auth.actor, + actor: permissionLevel.actor, permission: newPermission, }) } From 7ebd222abda94e80c224e1161f96e34f21ec304e Mon Sep 17 00:00:00 2001 From: aaroncox Date: Sat, 20 Dec 2025 10:11:06 -0800 Subject: [PATCH 8/8] v2.0.0-rc4 --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4f83f622..bee50f5d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@wharfkit/session", "description": "Create account-based sessions, perform transactions, and allow users to login using Antelope-based blockchains.", - "version": "2.0.0-rc3", + "version": "2.0.0-rc4", "homepage": "https://github.com/wharfkit/session", "license": "BSD-3-Clause", "main": "lib/session.js", @@ -65,5 +65,6 @@ "typedoc-plugin-mermaid": "^1.10.0", "typescript": "^4.1.2", "yarn-deduplicate": "^6.0.2" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" }